通过调研lidar-imu外参的标定方法主要有三种:
- 哈工大(HIT_lidar_imu_calib_ws)
https://github.com/chennuo0125-HIT/lidar_imu_calib - ethz(lidar_align)
https://github.com/ethz-asl/lidar_align - 浙大(lidar_IMU_calib-master)
https://github.com/APRIL-ZJU/lidar_IMU_calib
哈工大的只能标定旋转矩阵(可能比较适合平移向量几乎为0的情况),浙大的捣鼓起来似乎很麻烦,而且网上有人用这个标定结果不好,所以我就选择了ethz。
不过作者认为该代码不适合lidar-imu的标定,因为imu会漂移,他认为最好是借助lidar-odom进行标定,比如另外加入视觉+imu算出位姿值。不过我调研发现,网上很多人采用了imu进行标定,并且运行结果也不错,因此采用了该方案。
参考:
https://blog.csdn.net/cyx610481953/article/details/115265585
https://blog.csdn.net/weixin_47552638/article/details/123364068
为了能够直接读取imu数据,需要对其中的接口,即loader.cpp
文件进行修改,已经有大佬修改完毕,可以直接用,项目链接。项目在实验室电脑路径为~/桌面/liweidong/wwtx_ethz_lidar_imu_calib_ws
1. 录制
固定镭射c16激光雷达和zed2i相机,开启c16和相机:
source ~/桌面/lidar/leishen_ws/devel/setup.bash
roslaunch lslidar_driver lslidar_c16.launch
source ~/桌面/zed/ros/catkin_ws/devel/setup.bash
roslaunch zed_wrapper zed2i.launch
开启录制:
rosbag record /zed2i/zed_node/imu/data /lslidar_point_cloud
lidar和相机应该6个自由度都动一下。
2. 标定
修改~/桌面/liweidong/wwtx_ethz_lidar_imu_calib_ws/src/lidar_align_ww tx-main/launch/lidar_align.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<arg name="bag_file" default="/home/scut512/imu_lidar_data.bag"/>
<arg name="transforms_from_csv" default="false"/>
<arg name="csv_file" default="/home/test/文档/a.csv"/>
<node pkg="lidar_align" name="lidar_align" type="lidar_align_node" output="screen">
<param name="input_bag_path" value="$(arg bag_file)" />
<param name="input_csv_path" value="$(arg csv_file)" />
<param name="output_pointcloud_path" value="$(find lidar_align)/results/$(anon lidar_points).ply" />
<param name="output_calibration_path" value="$(find lidar_align)/results/$(anon calibration).txt" />
<param name="transforms_from_csv" value="$(arg transforms_from_csv)"/>
</node>
</launch>
主要是修改bag的位置,然后执行:
source ~/桌面/liweidong/wwtx_ethz_lidar_imu_calib_ws/devel/setup.bash
roslaunch lidar_align lidar_align.launch
冲杯茶,得等好一会,最后在~/桌面/liweidong/wwtx_ethz_lidar_imu_calib_ws/src/lidar_align_ww tx-main/results
目录下可以获得外参。