专栏系列文章如下:
一:Tixiao Shan最新力作LVI-SAM(Lio-SAM Vins-Mono),基于视觉激光惯导里程计SLAM框架、环境建设和运行过程_goldqiu的博客-CSDN博客
二.激光SLAM框架学习之A-LOAM框架介绍_goldqiu的博客-CSDN博客
三.激光SLAM框架学习之A-LOAM框架-项目代码介绍-1.项目文件介绍(主源代码除外)_goldqiu的博客-CSDN博客
四.激光SLAM框架学习之A-LOAM框架-项目代码介绍-2.scanRegistration.cpp--前端雷达处理和特征提取_goldqiu的博客-CSDN博客
五.激光SLAM框架学习之A-LOAM框架-项目代码介绍-3.laserOdometry.cpp--前端雷达里程计和位置粗估计_goldqiu的博客-CSDN博客
六.激光SLAM框架学习之A-LOAM框架-项目代码介绍-4.laserMapping.cpp--估计(优化)后端建图和帧位姿势_goldqiu的博客-CSDN博客
七.激光SLAM框架学习之A-LOAM框架---速腾Robosense-室内建图16线雷达_goldqiu的博客-CSDN博客
八.激光SLAM框架学习之LeGO-LOAM框架-框架介绍和操作演示_goldqiu的博客-CSDN博客
九.激光SLAM框架学习之LeGO-LOAM框架---速腾Robosense-与其他框架相比,16线雷达的室外图纸被记录和保存_goldqiu的博客-CSDN博客
十.激光SLAM框架学习之LeGO-LOAM框架-算法原理和改进_goldqiu的博客-CSDN博客
十一.激光惯导LIO-SLAM框架学习之LIO-SAM框架-框架介绍和操作演示
十二.激光SLAM框架学习之livox-loam框架安装和运行数据集_goldqiu的博客-CSDN博客_livox 数据集
十三.激光SLAM框架学习之livox-Mid-70雷达和实时室外运行框架_goldqiu的博客-CSDN博客
十四.激光和惯导LIO-SLAM框架学习习惯导内参标定_goldqiu的博客-CSDN博客
十五.激光和惯导LIO-SLAM框架学习惯导与雷达外参标定(1)_goldqiu的博客-CSDN博客
首先在平台上安装雷达,准备好供电,雷达网口连接终端,雷达本机ip是192.168.1.200,终端ip要配置成192.168.1.102,子网掩码255.255.255.0即可。
终端ping 192.168.1.200可以ping通则表明雷达通信没有问题。
GitHub下载最新源码
https://github.com/RoboSense-LiDAR/rslidar_sdk.git
安装pcap:sudo apt-get install -y libpcap-dev
安装Yaml:sudo apt-get install -y libyaml-cpp-dev (若已安装ROS desktop-full, 可跳过)
(1)文件顶部set(COMPILE_METHOD ORIGINAL)改为set(COMPILE_METHOD CATKIN)
(2) 将set(POINT_TYPE XYZI) 改为set(POINT_TYPE XYZIRT)
将rslidar_sdk在工程目录下package_ros1.xml重命名文件package.xml。
建立ros在工作空间编译工作空间。
https://github.com/HViktorTsoi/rs_to_velodyne.git
并编译,可放置在同一工作空间进行编译。
编译LIO-SAM,可以在同一个工作空间编译。
传感器驱动安装:
SBG传感器如何通过上位机或传感器yaml此部分之前已经讨论过文件更改配置。
这里主要是SBG的ROS如何安装驱动,IMU如何给题目?LIO-SAM中。
下载并编译最新的源代码:
cd catkin_ws/src
git clonehttps://github.com/SBG-Systems/sbg_ros_driver.git
cd ../
catkin_make
惯导ROS驱动包yaml文件可以修改传感器参数,但不推荐。建议修改上位机,修改后yaml同步修改文件。
1) 需要找到传感器的串口号,然后更改portName: "/dev/ttyUSB0"
2) 改变波特率: baudRate: 921600
3) 改变运动模型: motionProfile: 2 (注:车载模型)
4) 输出变更:变更ros时间:time_reference: "ros"
5) 输出变更:变更ROS的IMU消息格式 : ros_standard: true
6) 输出变更:变更ENU坐标系, use_enu: true
7) 更改输出:更改frame_id : frame_id: "imu_link"
8) 更改输出:更改系统状态刷新频率:log_status: 200
9) 输出变更:变更IMU数据刷新频率: log_imu_data: 1
10) 输出变更:变更UTC时间刷新频率: log_utc_time: 200
11) 更改输出:更改磁计数据刷新频率: log_mag: 4
sbg_ellipseN.launch文件中增加: <remap from="/imu/data" to="imu_raw" />
把IMU话题改成LIO-SAM需要的话题
在LIO-SAM中config文件夹中的配置yaml修改雷达话题名称
pointCloudTopic: "points_raw" (改为雷达话题velodyne _points)
前面已经解释了如何标定IMU内部参数,这里不解释,就是更换前四个参数。第五个参数需要连续采样Z轴重力加速度作为平均值。
即确认惯导和雷达的旋转转换矩阵
查看LIO-SAM中config文件夹中的配置yaml文件:
其中extrinsicRot表示imu->lidar的坐标变换, 用于旋转imu坐标系下的加速度和角速度lidar坐标系下, extrinsicRPY则用于旋转imu欧拉角到坐标系下lidar坐标下, 由于lio-sam作者使用的imu欧拉角旋转方向与lidar坐标系不一致(即按旋转顺序旋转), 因此,个旋转是不同的, 但大多数设备的两个旋转应该设置为相同,我们也可以设置为相同。
前面的校准有解释,这里就不说怎么校准了,校准了替换这两个矩阵。
平移向量影响不大,直接从结构图中得到,即惯导原点到雷达原点的向量。
惯导串口在运行前给予权限:sudo chmod 777 dev/ttyUSB0
永久权限:以后再加
然后运行:
source devel/setup.bash
roslaunch sbg_driver sbg_ellipseN.launch
source devel/setup.bash
roslaunch rslidar_sdk start.launch
source devel/setup.bash
rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIRT
source devel/setup.bash
roslaunch lio_sam run.launch
录制地图包:
rosbag record -o mybag.bag out /laser_cloud_surround
查看:rosrun pcl_ros bag_to_pcd mybag.bag /laser_cloud_surround mypcd
pcl_viewer xxxpcd (这里是查看一帧的数据)
录制点云包:
rosbag record -o mybag.bag out /velodyne_points /imu_raw
如果想要保存地图,需要对config/params.yaml文件进行如下修改
# 保存地图设置为true
savePCD: true
# 设置地图保存路径
savePCDDirectory: "自己设置的路径"
注意:这里的路径是home folder, starts and ends with "/",即在home folder下建立一个文件夹即可。
更改了配置文件后,还需更改一下_TIMEOUT_SIGINT参数,否则可能造成地图保存失败(这是由于ros会在_TIMEOUT_SIGINT秒后关闭ros节点,但是地图过大时,保存地图会花费一些时间,如果_TIMEOUT_SIGINT太小,很可能造成地图还未保存,节点就已经关闭了,所以需要适当调高_TIMEOUT_SIGINT值),具体方法如下:
sudo gedit /opt/ros/kinetic/lib/python2.7/dist-packages/roslaunch/nodeprocess.py
找到_TIMEOUT_SIGINT并调整数值(默认15s,参考值60s)
还有一个方法是直接终端敲:
rosservice call /lio_sam/save_map 0.2 "/data/"
保存下来的pcd文件:
CC打开:
IMU内参和IMU与雷达外参在低速运行的情况下建图效果差距不大,也就是我们可以不用标定,直接用理论值就行。只要保证IMU使用正常即可,即是保证IMU运动方向与车前进方向相同,不然点云会错乱。后面再对比几个基于雷达的SLAM框架数据。