论文阅读:Correcting Motion Distortion for LIDAR HD-Map Localization
目录
概要
Motivation
整体架构流程
技术细节
小结
论文地址:http://arxiv.org/pdf/2308.13694.pdf
代码地址:https://github.com/mcdermatt/VICET
概要
激光雷达的畸变矫正是一个非常重要的工作。由于扫描式激光雷达传感器需要有限的时间来创建点云,所以一次扫描过程中传感器的运动会导致点云发生畸变,这种现象被称为运动畸变或者卷帘快门。运动畸变校正方法已经存在,但是它们依赖于外部测量或者多次激光雷达扫描上的贝叶斯滤波。本文提出了一种新型算法,其执行快照处理以实现运动畸变校正。
Motivation
- 传统的运动畸变校正方法存在一些局限性,比如依赖于外部测量设备或者贝叶斯滤波器,这些方法可能不够实时或者成本较高。而本文提出的VICET算法通过快照处理技术,直接从当前LIDAR扫描中提取信息,校正运动畸变,不需要额外的设备,因此更具实用性和经济性。
- 提出了一种能够对测量不确定性进行有意义预测的新方法,鲁棒误差边界的计算是自动驾驶乘用车等安全关键导航系统的一个重要方面。
- 通过加入运动畸变补偿来改进NDT算法,以提高配准精度。
整体架构流程
该算法的整体架构流程包括快照处理、初始配准、扩展NDT匹配和优化、校正等关键步骤。首先,通过快照处理技术将当前LIDAR扫描与参考图像进行配准,得到初始的刚性变换估计。然后,利用扩展的NDT算法,同时优化刚性变换和运动失真参数。最后,根据优化后的参数对LIDAR扫描进行校正,以获得准确的校正结果。
考虑放置在矩形房间内的 机械旋转 LIDAR 单元,如图 所示。每次 LIDAR 绕 LIDAR 垂直 (z) 轴旋转 360 ° 时,都会生成 ALIDAR 图像(或扫描)。定义当旋转光束与连接 到 LIDAR 定子的坐标系统中的正 x 方向对齐时开始 LIDAR 扫描,我们将其标记为车身框架。在图中, 激光雷达的起始和结束位置由向量基表示,其中旋转 轴以蓝色显示,扫描起始轴以红色显示。现在考虑三 种情况,一种情况是传感器在扫描期间保持静止(以 标记为 a 的姿势开始和结束),第二种情况其中传感器进行纯平移(从 a 开始并在 b 结束), 第三种情况是传感器同时进行平移和旋转(从 a 开 始并在 c 结束)。这三种情况中的每一种都会创建 一个不同的 LIDAR 点云,如下所示:鸟瞰图,位于 标有"原始点云"(红色)的列中。在所有情况 下,点云中间都会出现一个圆圈,反映高程截止 点,模拟 LIDAR 单元无法生成地平线以下 30 ° 以 下的样本。点云是假设起点和终点之间的运动速率 一致而生成的。重要的是,原始图像是扭曲的(静 止情况除外),因此房间的墙壁不会形成完美的正 方形。然而,考虑到平台运动,点可以从主体坐标 系坐标转移到世界坐标系坐标。未扭曲的点云如图 2 所示。 1 作为标记为"失真校正"的一列图像 (蓝色)。重要的是,这些畸变校正图像都恢复了 正确的房间形状,以方形墙为界。在最后一种情况 (a → c)中,出现了缺失数据的楔形,因为 LIDAR 定子顺时针旋转,与 LIDAR 转子逆时针旋 转相反,这样在单次扫描期间无法看到整个房间。对于地图匹配应用,姿态是相对于参考图像进行估 计的。例如,可以通过记录移动激光雷达的一系列 顺序扫描来构建参考图像,以创建马赛克图像或高 清 (HD) 地图。如果在配准到地图之前可以对当前 扫描(在激光雷达的框架中捕获)进行反扭曲(转 换为世界框架),则该配准操作的性能将大大提 高。在图(1)的矩形房间的情况下,地图看起来非 常像静态情况下的扫描 (a → a)。如果在平移 (a → b) 或组合平移和旋转 (a → c) 过程中生成新的 LIDAR 图像,则生成的原始图像(红色)将与相应 的失真校正图像(蓝色)相比,更难与房间地图对 齐。本文的主要焦点是仅使用当前的激光雷达扫描和地 图就可以进行畸变校正。如果 LIDAR 运动未知,那 么我们可以通过将当前图像配准到地图来推断运 动,同时还测试各种反扭曲变换,以确定导致最佳 对准的配准和反扭曲的组合。

用于研究运动畸变校正的简单测试场景。等距房间视图显示了三个可能的激光雷达位置,标记为a、b和c。
在每个位置上,激光雷达单元的方向由一组正交基向量描述。对于每种配置,假设激光雷达束从红色箭头开始与垂直(蓝色)轴逆时针旋转。在扫描过程中,激光雷达单元可以保持静止(a → a),前向线性运动(a → b),或进行复合平移和旋转(a → c)。在每种情况下,激光雷达束在激光雷达定子的参考系中旋转360度,而定子本身也在移动,导致畸变的原始点云(从上方视角看,用红色表示)。通过补偿定子运动,可以将原始图像转换为固定于房间的坐标系(用蓝色表示),从而恢复出房间的正方形形状。
技术细节

LIDAR 定子(或主体)B 的框架相对于地图框架 M 移 动。出于说明目的,底座以 2D 形式显示(从上方观察)。时 间的进展由灰色阴影箭头表示,激光雷达光束在时间 t = 0 和时 间 t = T 之间扫过一整圈时记录测量结果(红点)。

200 次扫描中每一次的地面实况,叠加在高清地图上
时间戳:可以通过使用光束角度𝜓来近似激光雷达点的时间戳。重要的是不要将记录在不同时间(例如在扫描开始和结束时)的点分组在一起。通过在0°(扫描开始)处定义一个体素边界,然后移除𝜓<0°或𝜓≥360°的偶发异常点来解决混叠问题。
初始化:VICET假设对初始姿态有一个合理的估计。通过首先运行标准的扫描匹配算法(具体为NDT)来获得初始姿态,然后VICET通过补偿运动畸变来改进这个估计。
扩展表面:NDT无法识别墙壁(以及跨越体素边界的其他平面表面)仅在表面法线方向上提供有用信息;为了增强收敛可靠性和准确性,采用ICET 的扩展表面抑制方法。
小结

在静态高清地图上注册 200 个原始 LIDAR 扫描时的平移误差(顶部)和偏航误 差(底部)
在本文中,引入了VICET,这是一种求解单帧激光雷达点云的扫描到地图匹配问题的新型算法。VICET求解了12种状态,其中6种状态描述了将扫描与地图对齐的刚体变换,另外6种状态考虑了在创建点云过程中平台运动所造成的畸变。与其它运动畸变方法相比,本文方法仅需要单帧激光雷达扫描,并且不需要外部传感器数据。
通过在现实世界数据上进行实验,本文证明了VICET比传统的NDT和ICP提高了精度,降低了地图匹配的平移偏差(从6.9cm降低到0.27cm,降低了一个数量级),同时减少了一个sigma变化(从5.4cm到2.6cm)。VICET还降低了姿态估计的偏差和方差。这些改进与精密汽车和城市空中交通应用相关。
相关文章:
论文阅读:Correcting Motion Distortion for LIDAR HD-Map Localization
目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址:http://arxiv.org/pdf/2308.13694.pdf 代码地址:https://github.com/mcdermatt/VICET 概要 激光雷达的畸变矫正是一个非常重要的工作。由于扫描式激光雷达传感器需要有限的时间来创建…...
Git操作笔记
学git已经好多次了。但是还是会忘记很多的东西,一些常用的操作命令和遇到的bug以后在这边记录汇总下 一.github图片展示 图片挂载,我是创建了一个库专门存图片,然后在github的md中用专用命令展示图片,这样你的md就不会全是文字那…...
使用Python进行数据分析的基本步骤
简介: 在当今的数据驱动世界中,数据分析已成为各行各业不可或缺的一部分。Python作为一种强大的编程语言,提供了丰富的库和工具,使得数据分析变得简单易行。本文将带你了解使用Python进行数据分析的基本步骤。 一、数据获取 从外…...
NGINX优化
NGINX优化分为两个方面: 一. nginx应用配置文件的优化: 1.nginx的性能优化: 全局块: 设置工作进程数: work_processes #设置工作进程数 设置工作进程连接数:work_rilmit_nofile #设置每个worker进程最大可…...
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】Day 13 题目1:852.山脉数组的峰顶索引思路分析:思路1:暴力枚举O(N)思路2:二分查找O(logN) 题目2:162.寻找峰值思路分析:思路1:二分查找O(logN) 题目1:852.山脉数组的…...
《Python学习》-- 实操篇一
一、文件操作 1. 1 读取文本文件 # 文件操作模式 # r (默认) - 只读模式。文件必须存在,否则会抛出FileNotFoundError。在这种模式下,你只能读取文件内容,不能写入或追加。 # w - 写入模式。如果文件存在,内容会被清空ÿ…...
C# 集合(二) —— List/Queue类
总目录 C# 语法总目录 集合二 List/Queue 1. List2. Queue 1. List List有ArrayList和LinkedList ArrayList 类似数组,查找快,插入删除慢(相对)LinkedList 类似双向链表,查找慢(相对),插入删除快 //ArrayList //ArrayList Arr…...
【TB作品】MSP430 G2553 单片机口袋板,读取单片机P1.4电压显示,ADC
功能 读取P1.4电压,显示到口袋板显示屏,电压越高亮灯越多。 部分程序 while (1){ADC10CTL0 | ENC ADC10SC; // Sampling and conversion startLPM0;adcvalue ADC10MEM; //原始数据 0到1023adtest (float) adcvalue / 1024.…...
知乎x-zse-96、x-zse-81
声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…...
【Linux】Linux工具——yum,vim
1.Linux 软件包管理器——yum Linux安装软件: 源代码安装(不建议)rpm安装(类似Linux安装包,版本可能不兼容,不推荐,容易报错)yum安装(解决了安装源,安装版本&…...
ES 生命周期管理
一 .概念 ILM定义了四个生命周期阶段:Hot:正在积极地更新和查询索引。Warm:不再更新索引,但仍在查询。cold:不再更新索引,很少查询。信息仍然需要可搜索,但是如果这些查询速度较慢也可以。Dele…...
【JavaScript脚本宇宙】揭秘HTTP请求库:深入理解它们的特性与应用
深度揭秘:六大HTTP请求库的比较与应用 前言 在这篇文章中,我们将探讨六种主要的HTTP请求库。这些库为处理网络请求提供了不同的工具和功能,包括Axios、Fetch API、Request、SuperAgent、Got和Node-fetch。通过本文,你将对每个库…...
【强化学习】DPO(Direct Preference Optimization)算法学习笔记
【强化学习】DPO(Direct Preference Optimization)算法学习笔记 RLHF与DPO的关系KL散度Bradley-Terry模型DPO算法流程参考文献 RLHF与DPO的关系 DPO(Direct Preference Optimization)和RLHF(Reinforcement Learning f…...
vue3 todolist 简单例子
vue3 简单的TodList 地址: https://gitee.com/cheng_yong_xu/vue3-composition-api-todo-app-my 效果 step-1 初始化项项目 我们不采用vue cli 搭建项目 直接将上图文件夹,复制到vscode编辑器,清空App.vue的内容 安装包 # 安装包 npm…...
Linux项目编程必备武器!
本文目录 一、更换源服务器二、下载man开发手册(一般都自带,没有的话使用下面方法下载) 一、更换源服务器 我们使用apt-get等下载命令下载的软件都是从源服务器上获取的,有些软件包在某个服务器上存在,而另一个服务器不存在。所以我们可以添加…...
AndroidStudio编译很慢问题解决
如果gradle同步、编译下载很慢,可以换一下仓库阿里云镜像 repositories {maven { url https://maven.aliyun.com/repository/google } maven { url https://maven.aliyun.com/repository/jcenter } maven { url https://maven.aliyun.com/repository/public } goog…...
PHAR反序列化
PHAR PHAR(PHP Archive)文件是一种归档文件格式,phar文件本质上是一种压缩文件,会以序列化的形式存储用户自定义的meta-data。当受影响的文件操作函数调用phar文件时,会自动反序列化meta-data内的内容,这里就是我们反序…...
Rust安装
目录 一、安装1.1 在Windows上安装1.2 在Linux下安装 二、包管理工具三、Hello World3.1 安装IDE3.2 输出Hello World 一、安装 1.1 在Windows上安装 点击页面 安装 Rust - Rust 程序设计语言 (rust-lang.org),选择"下载RUSTUP-INIT.EXE(64位)&qu…...
513.找树左下角的值
给定一个二叉树,在树的最后一行找到最左边的值。 示例 1: 示例 2: 思路: 深度最大的叶子结点一定是最后一行。 优先左边搜索,记录深度最大的叶子节点,此时就是树的最后一行最左边的值 代码: class Solution:def fi…...
docker基础,docker安装mysql,docker安装Nginx,docker安装mq,docker基础命令
核心功能操作镜像 Docker安装mysql docker run -d --name mysql -p 3306:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORDlcl15604007179 mysql docker的基本操作 docker rm 容器名称即可 docker ps 查看当前运行的容器 docker rm 干掉当前容器 docker logs 查看容器命令日…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
