3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图

3D-SLAM自搭平台 主动阿克曼 + RS16 + LPMS_IMU LEGO_LOAM 建图

效果展示:

详细建图(室内+室外)视频链接

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

car

自搭 3D SLAM 数据采集轮式移动平台

lego_loam_indoor

LEGO-LOAM 室内建图

lego-loam_outdoor

LEGO-LOAM 室外建图 base:深圳云之园

前言:

本次实验为,使用自己搭建的移动底盘以及传感器,进行lego_loam 3D-SLAM建图,主要分为三大部分

a. LEGO_LOAM 论文概述摘要。(致敬作者Tixiao Shan  and Brendan Englot,及网上一系列的开源解释博主)
b.自搭平台,进行数据集采集,幷构建地图流程。(供参考)   
    现有设备:Robosense16 激光雷达,LPMS IMU,  自搭主动差速阿克曼底盘
c.数据集下载使用,搭建的平台,采集了室内、室外两个数据集,供大家尝试使用。(包含 雷达点云话题、IMU话题、相机话题)

1.LEGO_LOAM 概述

1.1 论文摘要

我们提出了LeGO-LOAM,它是一种轻量级和地面优化的激光雷达里程计和建图方法,用于实时估计地面车辆的六自由度姿态。LeGO-LOAM是轻量级的,因为它可以在低功耗嵌入式系统上实现实时姿态估计。LeGO-LOAM经过地面优化,因为它在分割和优化步骤中利用了地面的约束。我们首先应用点云分割来滤除噪声,并进行特征提取,以获得独特的平面和边缘特征。然后,采用两步Levenberg-Marquardt优化方法,使用平面和边缘特征来解决连续扫描中六个自由度变换的不同分量。我们使用地面车辆从可变地形环境中收集的数据集,比较LeGO-LOAM与最先进的LOAM方法的性能,结果表明LeGO-LOAM在减少计算开销的情况下实现了相似或更好的精度。为了消除由漂移引起的姿态估计误差,我们还将LeGO-LOAM集成到SLAM框架中,并用KITTI数据集进行了测试。

论文里面主要是和LOAM对比,其相比LOAM具有以下五个特点

1.2 系统性能

论文里面主要是和LOAM对比,其相比LOAM具有以下五个特点

a.轻量级,能在嵌入式设备上实时运行

b.地面优化,在点云处理部分加入了分割模块,这样做能够去除地面点的干扰,只在聚类的目标中提取特征。其中主要包括一个地面的提取(并没有假设地面是平面),和一个点云的分割,使用筛选过后的点云再来提取特征点,这样会大大提高效率。(如下图所示: 为在特征提取之前执行地面分割操作)

20210526113505907

c. 在提取特征点时,将点云分成小块,分别提取特征点,以保证特征点的均匀分布。在特征点匹配的时候,使用预处理得到的segmenation标签筛选(点云分割为边缘点类和平面点类两类),再次提高效率。

d.两步L-M优化法估计6个维度的里程计位姿。先使用平面点优化高度,同时利用地面的方向优化两个角度信息。地面提取的平面特征用于在第一步中获得t_z,theta_roll,theta_pitch;再使用边角点优化剩下的三个变量,通过匹配从分段点云提取的边缘特征来获得其余部分变换t_x,t_y,theta_yaw。匹配方式还是scan2scan,以这种方式分别优化,效率提升40%,但是并没有造成精度的损失。

e.集成了回环检测以校正运动估计漂移的能力(即使用gtsam作回环检测并作图优化,但是本质上仍然是基于欧式距离的回环检测,不存在全局描述子)。

20210526113342924

2.自搭平台复现LEGO_LOAM建图

2.1 环境配置

2.1.1 硬件配置
2.1.1.1 速腾16线激光雷达

激光雷达通过网口进行配置,需要配置主从机网络。本机(机器人上的电脑或嵌入式设备)需要和雷达在同一个网段下。

雷达默认的出厂IP为 master_address :  192.168.1.200
本机设置IP为 slaver_address  : 192.168.1.102

如下图所示为速腾16线激光雷达的硬件驱动,将网线一头插在雷达硬件驱动,另一头插在电脑网口处。

随后点击ubuntu右上角的有线连接,点击有线设置

2022-01-01 13-26-28 的屏幕截图

点击有线连接右上角上的"+"

2022-01-01 13-35-56 的屏幕截图

修改名称为自己的任意名称(这里修改为"Robosense16")

2022-01-01 13-36-16 的屏幕截图

点击IPv4 ,填入地址 192.168.1.102 , 子网掩码为 : 255.255.255.0

2022-01-01 13-36-34 的屏幕截图

点击右上角的添加后,即可看到和雷达的有线连接成功

2022-01-01 13-36-40 的屏幕截图

#打开一个新的 terminal, 尝试是否能ping同雷达数据,如果接受到如下所示的数据,即配置雷达网口成功

ping 192.168.1.200   

2022-01-01 13-40-08 的屏幕截图

2.1.1.2 IMU

使用的IMU为LPMS_URS2 9-axis

lpms

2.1.1.3 主动差速阿克曼底盘

2.1.2 软件配置
2.1.2.1 速腾16线激光雷达软件ROS驱动下载
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)

2022-01-01 17-25-57 的屏幕截图

修改 rslidar_sdk package_ros1.xml 改名为 package.xml

2022-01-01 17-25-37 的屏幕截图

修改 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 
2.1.2.2 LPMS IMU 配置
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
2.1.2.3 lego_loam 配置

依赖:

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”
2.1.2.4 RS16 转 VLP16

由于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 

2.2 运行

2.2.1 离线建图
2.2.1.1 离线采集数据集
#运行小车底盘
ssh coo@10.42.0.1
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										#  记录所有话题
2.2.1.2 离线建图
roslaunch lego_loam run.launch										#   运行lego_loam
rosbag play *.bag --clock --topic /velodyne_points  /imu/data    # 选择使用 雷达点云话题和 IMU话题(若IMU配置一般,可只使用点云话题)
2.2.2 在线建图

修改 run.launch 文件中 /use_sim_time

<param name="/use_sim_time" value="false" />    # 在线建图设为"false",离线建图设为 "true"   
#运行小车底盘
ssh coo@10.42.0.1
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

2.3 最终效果

室内,室外数据集均已上传到网盘,供大家下载使用

链接: https://pan.baidu.com/s/1IIGquusHYk_UmGeClXG9tA  
密码: fwo3
2.3.1 室内离线建图
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    # 运行室内数据集

2022-01-10 13-24-59 的屏幕截图

LEGO-LOAM 3D 室内3D地图

2022-01-10 13-25-20 的屏幕截图

LEGO-LOAM 3D 室内3D地图

2d_gmapping

2D gmpping 建图

2.3.2 室外离线建图
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  # 运行室外数据集

lego-loam_outdoor2

2022-01-10 13-13-45 的屏幕截图

2.3.3 保存地图

运行 run.launch lego_loam 建图程序后,在rviz中点击勾选 Map Cloud,待程序结束后,CRTL + C 即可结束进程,会自动保存地图。

3. 数据及下载及使用

数据集下载地址 : 链接: https://pan.baidu.com/s/1IIGquusHYk_UmGeClXG9tA 密码: fwo3

场景: 室内 、 室外

设备:二轮雅克曼底盘 、Robosense16线激光雷达、LPMS IMU

3.1 环境配置

上述 “2.1.2.3 lego_loam 配置” 已说明

3.2 修改相关配置及保存地图

3.2.1 修改配置文件
sudo gedit  lego_loam_ws/src_Lego-LOAM-master/LeGo-LOAM/include/utility.h

imuTopic 修改为自己的imu_topic , 本次数据集的imu topic 为 “/imu/data”

fileDirectory 中填写自己要保存的地图的绝对路径

termianal

3.2.2 保存地图

运行 run.launch lego_loam 建图程序后,在rviz中点击勾选Map Cloud,待程序结束后,CRTL + C 即可结束进程,建图成功。

3.3 构建地图

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

  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
ORB-SLAM2是一种基于二维图像的实时单目视觉SLAM系统,可以在没有先验地图的情况下,从单个摄像头的输入中实时定位和建立环境模型。为了更好地理解ORB-SLAM2的原理和代码实现,我们需要逐行分析其核心算法。 ORB-SLAM2的主要原理是通过特征提取,特征匹配和位姿估计来实现定位和建图。在代码中,我们可以看到一些关键的数据结构和函数调用,这些都是实现这些原理的关键。 首先,ORB-SLAM2使用FAST特征检测器在图像中检测关键点。这些关键点代表图像中的有趣区域。然后,使用ORB描述符对关键点进行描述。ORB描述符使用二进制位串来表示关键点周围的特征。 然后,ORB-SLAM2使用词袋法(Bag-of-Words)模型来进行特征匹配。它首先通过建立一个词典来表示所有关键点的描述符。然后,使用词袋模型来计算图像之间的相似度,从而找到匹配的关键点。 接下来,ORB-SLAM2使用RANSAC算法来估计两个图像之间的相对位姿。RANSAC算法通过迭代随机采样的方式来筛选出最佳的匹配关系,从而得到相对位姿估计。 最后,ORB-SLAM2使用优化算法(如g2o)来进行位姿图优化,从而更精确地估计相机的位姿。通过优化,ORB-SLAM2能够减少位置漂移,并在动态环境下更好地跟踪相机的位置。 总的来说,ORB-SLAM2通过特征提取、特征匹配和位姿估计实现实时单目视觉SLAM。核心代码实现了特征检测、描述符提取、特征匹配、RANSAC算法和图优化等关键步骤。了解这些原理和代码实现,可以帮助我们更好地理解ORB-SLAM2系统背后的工作原理。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值