专栏文章:
深蓝学院-多传感器融合定位课程-第1章-概述_goldqiu的博客-CSDN博客
深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I_goldqiu的博客-CSDN博客
github保存了相关代码和学习笔记:
第3章:3D激光里程计II
课程内容
代码、PPT、视频见文件夹
课程笔记
本质:拿特征做里程计的推算。
参考github:
https://github.com/AlexGeControl/Sensor-Fusion-for-Localization-Courseware
https://github.com/kahowang/sensor-fusion-for-localization-and-mapping
点线面几何基础:
点云线面特征提取:
参考文献:LOAM: Lidar Odometry and Mapping in Real-time Ji Zhang and Sanjiv Singh
推荐博客:https://blog.csdn.net/robinvista/article/details/104379087
在第k+1帧中找到一个线特征点(曲率最大),转换到k帧坐标系下(根据运动模型或者其他传感器猜测得到),然后在第k帧中找与k+1帧中特征点最近的一个点,然后再找相邻的一个点,组成一条线,那么第k+1帧的点到第k帧的线就有了,可以构建优化问题了。
面特征也一样,先在第k帧搜索离第k+1帧面点(曲率最小)最近的一个点,然后在第k帧是找同根线的一个点和相邻线的一个点,三点构建平面,然后构建点面残差方差,进行优化求解。
整个优化问题的核心是求得残差关于待求变量的雅可比矩阵。
基于线面特征的位姿优化
位姿优化代码实现
ceres 基础知识
自动求导与解析求导的对比
• 自动求导实现方便,但效率会比解析求导低 (比较 A-LOAM 和 F-LOAM );
• 实际使用中,能够自动求导且效率没有形成障碍的,优先使用自动求导;
• 除这两种方法外,还有数值求导(SLAM问题中不常见,不过多介绍)
自动求导实现位姿优化(A-LOAM)
解析求导实现位姿优化(F-LOAM)
相关开源里程计
基于特征的里程计实现流程
只做帧间匹配的后果:
- 雷达角分辨率不够、频率低,导致下一帧没有特征关联。
- 精度也不够,两帧之间的关联特征很少,优化的精度不够。
A-LOAM主要特点 1) 去掉了和IMU相关的部分 2) 使用Eigen(四元数)做位姿转换,简化了代码 3) 使用ceres做迭代优化,简化了代码,但降低了效率 代码:https://github.com/HKUST-Aerial-Robotics/A-LOAM
F-LOAM主要特点 1) 整体和ALOAM类似,只是使用残差函数的雅可比使用的是解析式求导 代码:https://github.com/wh200720041/floam
原始loam是没有帧的概念的,帧和地图做匹配,地图已经是无序的点云了,是做线和平面拟合来构建残差。没有保存每个关键帧的位姿和点云,进行后端优化后的调整,这是比较不足的。
作业
代码和文档见文件夹。
注:
由于 make_unique 是c++ 14的新特性,需要在CMakelists.txt 中添加c++14 的编译指向:
在CMakelists.txt 添加
set(CMAKE_CXX_STANDARD 14)
参考博客:
Ceres(二)LocalParameterization参数化
优化库——ceres(二)深入探索ceres::Problem
[ceres-solver] From QuaternionParameterization to LocalParameterization
实验室实车实现
代码和文档见文件夹。