目录

网上资料

方案1

方案2

Lidar与IMU的相对旋转

实现

总结

附录:


最近由于工作需要,花了几天时间了解激光与imu的标定方法;因为项目需要,且这里是个人认识的一个整理,所以并不会很深入很细致的进行公式或原理推导。由于个人水平有限,所以可能会存在一些认知的错误,可以留言交流学习一下。

网上资料

方案1

瑞士苏黎世联邦理工大学------自动驾驶实验室开源的Lidar_align

在使用该方法时,纯IMU积分,无法得到准确的Odom数据,所以无法进行纯imu与lidar 的标定。

方案2

浙大开源的Lidar_IMU_calib ,标定精度很高。

从粗到细的,实现高精度的lidar-imu标定,具体可以看一下论文和代码哈!我这里也测试了一下,由于一些原因,一直没有标定成功。

在学习以上两种方法时,结合网上的一些资料,自己做了一版Lidar-imu的旋转矩阵的标定;由于我的使用需求,平移部分可以不予考虑。

Lidar与IMU的相对旋转

这种方式,属于Linear Rotation Calibration;精度还可以。

简单来说,如上图所示,为相邻两个时刻的Lidar与IMU之间的坐标关系 ,假设c为Lidar某一时刻的坐标系,b为对应的imu坐标系,这里下标k,k+1为对应时间。

这里bk与ck为同一时间,bk+1与ck+1为同一时间,假设imu到lidar的旋转矩阵为R_b_c,k时刻到k+1时刻的Lidar的旋转矩阵为R_ck_ck+1,而假设知道imu和lidar的旋转矩阵R_b_c,则k到k+1时刻的Lidar旋转可以由[R_ck_bk] * [R_bk_bk+1 ] * [R_bk+1_ck+1]计算得到,即

用四元数表示为:

这里由四元数的左乘,右乘可得:

假设有多组lidar和imu的对应关系,则联立可得超定方程:

w是每组转换方程的权重,可以由相邻两个Lidar之间的变换向量和结合imu推导的变换向量的角度差来确定,而Q为的缩写。

最后用SVD分解,然后取最小奇异值对应的特征向量,即为R_b_c的结果。

实现

写了一版线性旋转标定的代码,相邻Lidar的运动量,可以用ndt计算,而imu的位姿,可以直接使用imu输出的姿态,最后使用时间戳对齐即可。

代码仓库,有用的话给个小星星

没有考虑激光的畸变,以及时间戳对齐也很粗暴,所以精度不会很高;但是相对使用来说,已经比手动测量要准确很多了,一般场景也足够使用了。

update2021-09-06:增加使用gtsam优化的方式求解旋转。

我的一个测试结果如下:

NDT计算Lidar运动量拼接而成的点云数据。

总结

整体而言,简单的实现,也能满足一定的需要;并且还有比较大的提升空间。

后续可以考虑:

①提高激光里程计的精度,譬如参考点到线,点到面的方式;或者使用一些靶标,这样精度会高很多;

②结合lidar的畸变;

③考虑lidar与imu的时序对齐;

④考虑imu陀螺仪的噪声等。

最后,附上论文中对此种线性旋转矩阵标定的测试。

附录:

2017-Monocular Visual–Inertial State Estimation With Online Initialization and Camera–IMU Extrinsic Calibration

https://www.cnblogs.com/chenlinchong/p/14048969.html

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐