本系列往期文章:

【3D激光SLAM(一)】Velodyne激光SLAM学习之Velodyne-16线雷达室内建图基本使用_Canminem的博客-CSDN博客_velodyne16线激光雷达

【3D激光SLAM(二)】Velodyne激光SLAM学习之Velodyne-16线激光雷达在Jetson Nano上的配置使用_Canminem的博客-CSDN博客_velodyne激光雷达驱动

【3D激光SLAM(三)】Velodyne激光SLAM学习之激光雷达+IMU内参标定_Canminem的博客-CSDN博客_imu 激光雷达 

一、标定所使用设备

激光雷达:velodyne16线激光雷达

IMU:来自Pixhawk2.4.8飞控

验证算法:请提前按照github要求安装lio-sam或Fast-lio2代码。

GitHub - TixiaoShan/LIO-SAM: LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping

https://github.com/hku-mars/FAST_LIO

二、安装lidar_align联合标定激光雷达和IMU外参程序

2.1 下载源码

建议下载修正过后的代码:lidar_align_wwtx

新建自己的ROS工作空间,将该源码放入,catkin_make即可。

如果编译时出现Could not find NLOPTConfig.cmake
解决办法:找到这个文件并将其放入到工程目录下,并在CMakeLists.txt里加上这样一句话:

list(APPEND CMAKE_FIND_ROOT_PATH ${PROJECT_SOURCE_DIR})
set (CMAKE_PREFIX_PATH "/usr/local/lib/cmake/nlopt")

一般到这一步能够编译成功。

三、录制话题

分别启动激光雷达ROS程序和PX4飞控的mavros,检测有没有/velodyne_points和/mavros/imu/data话题

这里注意我们要接收的飞控IMU数据为九轴IMU数据,因此得选择/mavros/imu/data。

首先参考这个视频验证imu和雷达安装的方向是否符合要求,一般IMU坐标系和雷达坐标系方向一致就没多大问题https://www.youtube.com/watch?v=BOUK8LYQhHs

录制话题数据,旋转三个轴,XY轴不要大幅度旋转,录制时间大概2分钟,注意环境中避免出现移动物体,玻璃等反光物体。有条件的话可以放在小车等地面移动平台控制移动。

rosbag record -o r1.bag out /velodyne_points /mavros/imu/data

四、标定

修改标定软件包launch文件中的数据包路径,

 然后运行launch文件,等待大概半小时的迭代优化时间。

注意看迭代的实时误差,如果是在3000以内,则让他继续迭代。如果是一万以上的误差,则中止迭代,重新录制数据集或者再次运行迭代程序。

注意我们最终标定出来的外参数据不一定能用,也可以发现迭代同一组数据的结果其实是不一样的。

标定结束后会打印出标定结果:

下图4*4矩阵中前3*3为旋转矩阵

 这一个为平移矩阵:

五、将标定结果填入config文件里 

打开LIO-SAM/config/params.yaml

修改话题名:

将旋转矩阵和平移矩阵分别填入lio-sam的config (在LIO-SAM/config/params.yaml)文件:

 另外的,我用Fast-lio2程序验证,同样的也将标定结果填入该SLAM代码的config文件里,Lio-sam和Fast-lio2运行效果分别如下:

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐