详细建图(室内+室外)视频链接:
3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 室内建图
3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 室外建图
实验的完整代码下载链接:https://github.com/kahowang/3D-SLAM-Multiple-robot-platforms/tree/main/Active-Ackerman-Slam/%E4%B8%BB%E5%8A%A8%E9%98%BF%E5%85%8B%E6%9B%BC%2BRS16%2BLPMS_IMU%20%20LEGO_LOAM%20%E5%BB%BA%E5%9B%BE
录制的数据集下载链接:https://pan.baidu.com/s/1IIGquusHYk_UmGeClXG9tA 密码: fwo3
自搭 3D SLAM 数据采集轮式移动平台
LEGO-LOAM 室内建图
LEGO-LOAM 室外建图 base:深圳云之园
本次实验为,使用自己搭建的移动底盘以及传感器,进行lego_loam 3D-SLAM建图,主要分为三大部分
a. LEGO_LOAM 论文概述摘要。(致敬作者Tixiao Shan and Brendan Englot,及网上一系列的开源解释博主)
b.自搭平台,进行数据集采集,幷构建地图流程。(供参考)
现有设备:Robosense16 激光雷达,LPMS IMU, 自搭主动差速阿克曼底盘
c.数据集下载使用,搭建的平台,采集了室内、室外两个数据集,供大家尝试使用。(包含 雷达点云话题、IMU话题、相机话题)
我们提出了LeGO-LOAM,它是一种轻量级和地面优化的激光雷达里程计和建图方法,用于实时估计地面车辆的六自由度姿态。LeGO-LOAM是轻量级的,因为它可以在低功耗嵌入式系统上实现实时姿态估计。LeGO-LOAM经过地面优化,因为它在分割和优化步骤中利用了地面的约束。我们首先应用点云分割来滤除噪声,并进行特征提取,以获得独特的平面和边缘特征。然后,采用两步Levenberg-Marquardt优化方法,使用平面和边缘特征来解决连续扫描中六个自由度变换的不同分量。我们使用地面车辆从可变地形环境中收集的数据集,比较LeGO-LOAM与最先进的LOAM方法的性能,结果表明LeGO-LOAM在减少计算开销的情况下实现了相似或更好的精度。为了消除由漂移引起的姿态估计误差,我们还将LeGO-LOAM集成到SLAM框架中,并用KITTI数据集进行了测试。
论文里面主要是和LOAM对比,其相比LOAM具有以下五个特点
论文里面主要是和LOAM对比,其相比LOAM具有以下五个特点
a.轻量级,能在嵌入式设备上实时运行
b.地面优化,在点云处理部分加入了分割模块,这样做能够去除地面点的干扰,只在聚类的目标中提取特征。其中主要包括一个地面的提取(并没有假设地面是平面),和一个点云的分割,使用筛选过后的点云再来提取特征点,这样会大大提高效率。(如下图所示: 为在特征提取之前执行地面分割操作)
c. 在提取特征点时,将点云分成小块,分别提取特征点,以保证特征点的均匀分布。在特征点匹配的时候,使用预处理得到的segmenation标签筛选(点云分割为边缘点类和平面点类两类),再次提高效率。
d.两步L-M优化法估计6个维度的里程计位姿。先使用平面点优化高度,同时利用地面的方向优化两个角度信息。地面提取的平面特征用于在第一步中获得t_z,theta_roll,theta_pitch;再使用边角点优化剩下的三个变量,通过匹配从分段点云提取的边缘特征来获得其余部分变换t_x,t_y,theta_yaw。匹配方式还是scan2scan,以这种方式分别优化,效率提升40%,但是并没有造成精度的损失。
e.集成了回环检测以校正运动估计漂移的能力(即使用gtsam作回环检测并作图优化,但是本质上仍然是基于欧式距离的回环检测,不存在全局描述子)。
激光雷达通过网口进行配置,需要配置主从机网络。本机(机器人上的电脑或嵌入式设备)需要和雷达在同一个网段下。
雷达默认的出厂IP为 master_address : 192.168.1.200
本机设置IP为 slaver_address : 192.168.1.102
如下图所示为速腾16线激光雷达的硬件驱动,将网线一头插在雷达硬件驱动,另一头插在电脑网口处。
随后点击ubuntu右上角的有线连接,点击有线设置
点击有线连接右上角上的"+"
修改名称为自己的任意名称(这里修改为"Robosense16")
点击IPv4 ,填入地址 192.168.1.102 , 子网掩码为 : 255.255.255.0
点击右上角的添加后,即可看到和雷达的有线连接成功
#打开一个新的 terminal, 尝试是否能ping同雷达数据,如果接受到如下所示的数据,即配置雷达网口成功
ping 192.168.1.200
使用的IMU为LPMS_URS2 9-axis
cd ~/catkin_ws/src
git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git
cd rslidar_sdk
git submodule init
git submodule update
修改 rslidar_sdk CMakeLists.txt中的 配置文件
cd rslidar_sdk
sudo gedit CMakeLists.txt
#将 set(POINT_TYPE XYZIRT) 修改为
set(COMPILE_METHOD CATKIN)
#将 set(POINT_TYPE XYZI) 修改为
set(POINT_TYPE XYZIRT)
修改 rslidar_sdk package_ros1.xml 改名为 package.xml
修改 rslidar_sdk/config/comfig.yaml 第16行的 lidar_type为 : RS16
lidar_type: RS16 #LiDAR type - RS16, RS32, RSBP, RS128, RS80, RSM1, RSHELIOS
编译
cd ~/catkin_ws
catkin_make
catkin_make -DCMAKE_C_COMPILER=gcc-7 -DCMAKE_CXX_COMPILER=g++-7 #升级cmake版本
apt install ros-melodic-openzen-sensor #下载 openzen-sensor
cd lego_loam_ws/src
git clone --recurse-submodules https://bitbucket.org/lpresearch/openzenros.git
cd ..
catkin_make
依赖:
a. ROS (tested with indigo, kinetic, and melodic)
b.gtsam (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)
安装 VTK
sudo apt install python-vtk
安装 gtsam:
wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip # 安装gtsam
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install
编译:
cd ~/catkin_ws/src # 进入所在的工作空间
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git # git clone lego-loam 源码
cd ..
catkin_make -j1 # 当第一次编译代码时,需要在“catkin_make”后面添加“-j1”以生成一些消息类型。将来的编译不需要“-j1”
由于lego_loam中默认接受的雷达话题为 /velodyne_points ,接收的雷达点云信息为XYZIR ,而速腾的激光雷达驱动中只支持 XYZI 、XYZIRT 数据类型,所以需要对数据进行转换,可使用rs_to_velodyne 这个节点进行雷达点云消息格式的转换。
cd ~/catkin_ws/src
git clone https://github.com/HViktorTsoi/rs_to_velodyne.git
catkin_make
#运行小车底盘
ssh [email protected]
password: cooneo_coo
cd catkin_ws
roslaunch turn_on_wheeltec_robot base_camera.launch
#采集数据
cd catkin_ws
source devel/setup.bash
roslaunch rslidar_sdk start.launch # 启动RS16 雷达
rosrun rs_to_velodyne rs_to_velodyne XYZIRT XYZIR # 启动雷达数据类型转换节点
rosrun openzen_sensor openzen_sensor_node # 运行 LPMS IMU
mkdir catkin_ws/rosbag
cd catkin_ws/rosbag
rosbag record -a -O lego_loam.bag # 记录所有话题
roslaunch lego_loam run.launch # 运行lego_loam
rosbag play *.bag --clock --topic /velodyne_points /imu/data # 选择使用 雷达点云话题和 IMU话题(若IMU配置一般,可只使用点云话题)
修改 run.launch 文件中 /use_sim_time
<param name="/use_sim_time" value="false" /> # 在线建图设为"false",离线建图设为 "true"
#运行小车底盘
ssh [email protected]
password: cooneo_coo
cd catkin_ws
roslaunch turn_on_wheeltec_robot base_camera.launch
#打开雷达
cd catkin_ws
source devel/setup.bash
roslaunch rslidar_sdk start.launch # 启动RS16 雷达
roslaunch lego_loam run.launch # 运行lego_loam
室内,室外数据集均已上传到网盘,供大家下载使用
链接: https://pan.baidu.com/s/1IIGquusHYk_UmGeClXG9tA
密码: fwo3
cd lego_loam_ws #进入到,下载lego_loam 的工作空间中
roslaunch lego_loam run.launch # 运行lego_loam 建图
cd rosbag #进入到存储数据集的目录下
rosbag play cooneo_indoor_urs2.bag --clock --topic /velodyne_points /imu/data /usb_cam/image_raw/compressed # 运行室内数据集
LEGO-LOAM 3D 室内3D地图
LEGO-LOAM 3D 室内3D地图
2D gmpping 建图
cd lego_loam_ws #进入到,下载lego_loam 的工作空间中
roslaunch lego_loam run.launch # 运行lego_loam 建图
cd rosbag #进入到存储数据集的目录下
rosbag play cooneo_outdoor_urs2.bag --clock --topic /velodyne_points /imu/data /usb_cam/image_raw/compressed # 运行室外数据集
运行 run.launch lego_loam 建图程序后,在rviz中点击勾选 Map Cloud,待程序结束后,CRTL + C 即可结束进程,会自动保存地图。
数据集下载地址 : 链接: https://pan.baidu.com/s/1IIGquusHYk_UmGeClXG9tA 密码: fwo3
场景: 室内 、 室外
设备:二轮雅克曼底盘 、Robosense16线激光雷达、LPMS IMU
上述 “2.1.2.3 lego_loam 配置” 已说明
sudo gedit lego_loam_ws/src_Lego-LOAM-master/LeGo-LOAM/include/utility.h
imuTopic 修改为自己的imu_topic , 本次数据集的imu topic 为 “/imu/data”
fileDirectory 中填写自己要保存的地图的绝对路径
运行 run.launch lego_loam 建图程序后,在rviz中点击勾选Map Cloud,待程序结束后,CRTL + C 即可结束进程,建图成功。
roslaunch lego_loam run.launch # 运行lego_loam
#室内数据集
rosbag play cooneo_indoor_urs2.bag --clock --topic /velodyne_points /imu/data # 选择使用 雷达点云话题和 IMU话题(若IMU配置一般,可只使用点云话题)
#室外数据集
rosbag play cooneo_outdoor_urs2.bag --clock --topic /velodyne_points /imu/data # 选择使用 雷达点云话题和 IMU话题(若IMU配置一般,可只使用点云话题)
[1] LeGO-LOAM初探:原理,安装和测试
[2]自动驾驶系列(三)速腾16线激光雷达驱动安装
[3]激光SLAM框架学习之LeGO-LOAM框架—速腾Robosense-16线雷达室外建图和其他框架对比、录包和保存数据
[4]SC-LEGO-LOAM 扩展以及深度解析(一)
[5]LIO-SAM运行自己数据包遇到的问题解决–SLAM不学无数术小问题
[6] SLAM学习笔记(二十)LIO-SAM流程及代码详解(最全)
[7]LeGO-LOAM和LOAM的区别与联系
edited by kaho 2022.1.10