系统环境 Ubuntu20.04+ros noetic
选用苏黎世理工大学lidar_align工具。
数据来源:速腾聚创airy中的激光雷达和imu
其中速腾聚创airy 的sdk输出的激光雷达输出话题 /rslidar_points,类型为sensor_msgs.PointCloud2
imu输出话题为/rslidar_imu_data 类型为/sensor_msgs/Imu
参考
https://blog.csdn.net/gmf0327/article/details/129948565
1.下载编译lidar_align
原始的lidar_align
https://github.com/ethz-asl/lidar_align
使用修改后的用于标定的lidar_align
https://github.com/wwtx/lidar_align_wwtx
mkdir -p ~/catkin_lidar_align/src
cd ~/catkin_lidar_align/src
catkin_init_workspace
git clone https://github.com/wwtx/lidar_align_wwtx
下载依赖
sudo apt-get install ros-noetic-nlopt
sudo apt-get install libnlopt-dev
还是会报错
将 ~/catkin_lidar_align/src/lidar_align_wwtx-main/NLOPTConfig.cmake 文件移动到 ~/catkin_lidar_align/src下,并进行第二次编译。报pcl和c++错误
1)src/lidar_align_wwtx 中的CMakeLists.txt
将 add_definitions(-std=c++11 -ofast)
改为add_definitions(-std=c++14 -ofast)
启动采集数据工程 catkin_rslidar_sdk
cd catkin_rslidar_sdk
roslaunch rslidar_sdk start.launch
(2)录制数据
rosbag record -O calib.bag /rslidar_imu_data /rslidar_points
注意:在采集数据时,缓慢,多角度,多方向移动,最好不要有太多移动的物体,时间90秒左右。录制完成后Ctrl+C 结束录制。保存在当前目录。
3.开始使用 lidar_align 标定
使用录制的数据集跑标定算法,打开 lidar_align.launch 文件,修改 bag 包的地址 修改bag_file这一行,加入required=“true” 使标定完成后就退出
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<arg name="bag_file" default="/home/qian/calib.bag"/>
<arg name="transforms_from_csv" default="false"/>
<arg name="csv_file" default="/home/qian/calib.csv"/>
<node pkg="lidar_align" name="lidar_align" type="lidar_align_node" output="screen" required="true">
<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>
roslaunch lidar_align lidar_align.launch
注意,如果不限制迭代次数实测90s的包笔记本电脑标定时间大概需要1个多小时都没有结束(200多次迭代)。
在 lidar_align.launch 加入参数限制不结束的情况
<param name="max_evals" value="10"/>
标定过程中Iteration会一直变化。
标定结果如下:
Active Transformation Vector (x,y,z,rx,ry,rz) from the Pose Sensor Frame to the Lidar Frame:
[0, 0, 0, 0, 0, 0]
Active Transformation Matrix from the Pose Sensor Frame to the Lidar Frame:
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Active Translation Vector (x,y,z) from the Pose Sensor Frame to the Lidar Frame:
[0, 0, 0]
Active Hamiltonen Quaternion (w,x,y,z) the Pose Sensor Frame to the Lidar Frame:
[1, 0, 0, 0]
Time offset that must be added to lidar timestamps in seconds:
0.05
ROS Static TF Publisher: <node pkg="tf" type="static_transform_publisher" name="pose_lidar_broadcaster" args="0 0 0 0 0 0 1 POSE_FRAME LIDAR_FRAME 100" />
实验结果:限制标定次数会标出来位移结果为0