十六.激光和惯导LIO-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架

 专栏系列文章如下:

一: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-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架_第1张图片

标定外参:

即确认惯导与雷达的旋转变换矩阵

查看LIO-SAM中config文件夹中的配置yaml文件:

十六.激光和惯导LIO-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架_第2张图片

其中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

测试效果:

十六.激光和惯导LIO-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架_第3张图片

数据保存:

录制地图包:

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文件:

十六.激光和惯导LIO-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架_第4张图片

CC打开:

十六.激光和惯导LIO-SLAM框架学习之配置自用传感器实时室外跑LIO-SAM框架_第5张图片

总结:

IMU内参和IMU与雷达外参在低速运行的情况下建图效果差距不大,也就是我们可以不用标定,直接用理论值就行。只要保证IMU使用正常即可,即是保证IMU运动方向与车前进方向相同,不然点云会错乱。后面再对比几个基于雷达的SLAM框架数据。

你可能感兴趣的:(多传感器融合SLAM,导航研究和学习,传感器,slam,自动驾驶,人工智能)