一: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, 可跳过)
修改CMakeLists.txt
(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工作空间,在工作空间编译。
GitHub下载rs雷达话题转velodyne雷达话题
https://github.com/HViktorTsoi/rs_to_velodyne.git
并编译,可放在同个工作空间编译。
编译LIO-SAM,前面有讲,可放在同个工作空间编译。
SBG AHRS传感器驱动安装:
SBG传感器具体如何通过上位机或者yaml文件更改配置,这个部分之前有讲过。
这里主要就是SBG的ROS驱动如何安装,IMU话题如何给到LIO-SAM中。
下载并编译最新的源码:
cd catkin_ws/src
git clone https://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文件中增加:
把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 xxx.pcd (这里是查看一帧的数据)
录制点云包:
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框架数据。