Lidar与imu外参标定
目录网上资料方案1方案2Lidar与IMU的相对旋转实现最近由于工作需要,花了几天时间了解激光与imu的标定方法;因为项目需要,且这里是个人认识的一个整理,所以并不会很深入很细致的进行公式或原理推导。由于个人水平有限,所以可能会存在一些认知的错误,可以留言交流学习一下。网上资料方案1首推浙大开源的Lidar_IMU_calib,标定精度很高。从粗到细的,实现高精度的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
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)