系统环境:Ubuntu 20.04
激光雷达:velodyne 16线
IMU :WHEELTEC N100
一、使用 lidar_align 雷达和IMU联合标定
GitHub - wwtx/lidar_align_wwtx
1. 安装依赖
sudo apt-get install libnlopt-dev
2. 下载源码编译
cd ~/lidar_align_ws/src
git clone https://github.com/wwtx/lidar_align_wwtx.git
cd ..
catkin_make
报错:
解决:
将 lidar_align 文件夹下的 NLOPTConfig.cmake 复制到 ROS工作空间lidar_align_ws/src路径下面,再次编译
报错:
解决:
CMakeLists.txt 文件夹里面的 " c++11 " 改为 " c++14 "再次编译
报错:
解决: https://github.com/stevengj/nlopt
git clone https://github.com/stevengj/nlopt.git
cd nlopt
mkdir build
cd build
cmake ..
make
sudo make install
再次编译 即可完成!!!!
3. 改写IMU接口
打开 src 文件夹下面的 loader.cpp 文件, 找到里程计部分注释掉,然后用下面的替换。。提供的代码中已经改写了,可能旧的版本里面没有改写,如果没有改写,按照参考博客连接里面的代码改写。。
修改完成之后再次 编译即可!
4. 录制数据,录制话题
联合标定需要录制bag 数据包,里面包括 激光数据 和 IMU 数据,需要先将激光雷达和 imu 固定好位置,然后再进行录制。。
验证imu 和 雷达安装的方向是否符合要求,(一般IMU坐标系和雷达坐标系方向一致就问题不大),参考视频:https://www.youtube.com/watch?v=BOUK8LYQhHs
首先参考这个视频验证imu和雷达安装的方向是否符合要求,一般IMU坐标系和雷达坐标系方向一致就没多大问题
录制话题数据,旋转三个轴,XY轴不要大幅度旋转,录制时间大概2分钟,注意环境中避免出现移动物体,玻璃等反光物体。有条件的话可以放在小车等地面移动平台控制移动。
(1) lidar 和 IMU 安装
(2) 分别启动雷达和IMU
启动雷达参考: lidar 启动
启动IMU参考: IMU 启动
// 在进行下面的操作前 设备连接好
// 激光雷达
// 打开一个终端
cd ~/catkin_ws
catkin_make
source devel/setup.bash
roslaunch rubber_navigation lslidar_c16.launch
// 再打开一个终端,查看雷达的话题
rostopic list
// IMU
// 再打开一个终端
cd ~/catkin_ws
source devel/setup.bash
roslaunch rubber_navigation imu_spec_msg.launch
// 再打开一个终端, 查看 imu 话题 和 imu 数据
rostopic list
rostopic echo /IMU_data /lslidar_point_cloud
启动之后 看一下数据雷达和 imu 是否安装好
(3) 录制数据包
之后打开终端 录制数据
rosbag record -o lidar_imu.bag out /IMU_data /lslidar_point_cloud
(4) 修改 launch 文件
录制完成之后 修改 launch 文件的 bag 包路径。
5. 进行标定
cd ~/lidar_align_ws
catkin_make
source devel/setup.bash
roslaunch lidar_align lidar_align.launch
执行完上面的过程,出现下面的开始标定的界面。
然后运行launch文件,等待大概半小时的迭代优化时间。
标定完之后:
结果会保存到lidar_align/result (result 是我自己改的文件名字) 文件下:
注意看迭代的实时误差,如果是在3000以内,则让他继续迭代。如果是一万以上的误差,则中止迭代,重新录制数据集或者再次运行迭代程序。
注意我们最终标定出来的外参数据不一定能用,也可以发现迭代同一组数据的结果其实是不一样的。
标定结束后会打印出标定结果:
下图4*4矩阵中前3*3为旋转矩阵
这一个为平移矩阵:
五、将标定结果填入config文件里
打开LIO-SAM/config/params.yaml
修改话题名:
将旋转矩阵和平移矩阵分别填入lio-sam的config (/home/rubber/rubber_tapping_robot/rubber_ws/src/mapping/FAST_LIO/FAST_LIO/config/velodyne.yaml)文件:
另外的,我用Fast-lio2程序验证,同样的也将标定结果填入该SLAM代码的config文件里,Lio-sam和Fast-lio2运行效果分别如下:
至此,联合标定就结束了!!!!