基于Lego-loam 算法的三维激光SLAM建图

8 篇文章 0 订阅
3 篇文章 0 订阅

运行环境

=====================安装 Lego-Loam 及 gtsam ==============================

step1.安装 gtsam

wget wget -O ~/software/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/software && unzip gtsam.zip -d ~/software/
cd ~/software/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install

 step2.安装下载编译源码

cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make -j1

====================== 运行数据集 lego-loam 39/39 ===========================

终端一:进入catkin_ws工作空间

1) source ./devel/setup.bash
2) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
3) roslaunch lego_loam run.launch   或  roslaunch lego_loam run_test.launch

终端二:进入catkin_ws工作空间

1)source ./devel/setup.bash
2) rosbag play 38.bag --clock  或  rosbag play 39.bag --clock
注意:
//(播放数据包的时候,使用的use_sim_time是仿真时间戳,所以要使用 --clock 进行数据播放。这边下载的数据包都要使用rosbag play *.bag --clock 这样的形式播放,不然,Lego-LOAM那边没法进行建图。自己录制的数据包也是要以这样的形式播放。)

//在rviz中把Fixed Frame : velodyne
//在Add中添加PointCloud2,topic:/velodyne_points 

运行结果如下:

================== 数据集 mick1.bag (mick_2021-01-27-21-34-13.bag) ===============

终端1:进入catkin_ws工作空间

1) source ./devel/setup.bash
2) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
3) roslaunch lego_loam mickx4.launch

 终端2:进入catkin_ws工作空间

1)source ./devel/setup.bash
2) rosbag play mick1.bag --clock --topic /rslidar_points /imu/data

 

 

基于Lego-loam算法的三维激光SLAM建图

 =========================数据集lego-loagm-demo =============================

终端1:进入catkin_ws工作空间

1) source ./devel/setup.bash
2) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
3) roslaunch lego_loam run.launch   或  roslaunch lego_loam run_test.launch

终端2:进入catkin_ws工作空间

1)source ./devel/setup.bash
2) rosbag play 39.bag --clock --topic /velodyne_points /imu/data

39-bag-velodyne

 ========================= 全流程 案例 ===================================

终端1:
进入catkin_ws工作空间
1) source ./devel/setup.bash
2) export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
3)roslaunch lego_loam mickx4.launch   //把mickx4.launch文件换成run.launch   
// roslaunch lego_loam run.launch 

// 注意:mick4.launch 对应终端2中的 mick1.bag 
//       run.launch 对应终端2中的38.bag或39.bag
终端2:
进入catkin_ws工作空间
1)source ./devel/setup.bash           //把mick1.bag 文件 换成 38.bag/39.bag  
2) rosbag play mick1.bag --clock --topic /rslidar_points /imu/data      
// rosbag play 38.bag --clock --topic /velodyne_points /imu/data

// 注意:mick1.bag 对应 /rslidar_points    
//      38/39.bag 对应 /velodyne_points 

 如图所示 38.bag :

如图所示 mick1.bag 

/*********地图保存**********/

//LeGO-LOAM 的点云地图是发布在 /laser_cloud_surround 这个话题上的,在这篇博客[7]中提供了一种方法就是记录这个topic上的数据,然后利用 pcl_ros 包进行转换。

终端3:进入catkin_ws工作空间 source ./devel/setup.bash
//step1: 记录话题 /laser_cloud_surround 数据,这个可以在快结束的时候录制
1) rosbag record -o lego-loam-out /laser_cloud_surround
//然后录制完成后, ctrl+c 退出 ,发现 catkin_ws 目录下 .bag.active文件,变成 .bag 文件 



终端4:进入catkin_ws工作空间 source ./devel/setup.bash
//step2: 把 lego-loam-out* 这个bag的话题上的数据存为pcd文件
2) // rosrun pcl_ros bag_to_pcd lego-loam-out_2023-05-10-14-22-31.bag /laser_cloud_surround test
      rosrun pcl_ros bag_to_pcd  lego-loam-out_2024-03-07-14-48-36.bag /laser_cloud_surround test4

//这时候会在你的目录下生成一个test目录,里面会有很多个pcd文件,选最后一个就是最新的点云地图了



终端5:cd catkin_ws/test    
//pcl_viewer xxxxxx.pcd    此命令既可打开pcd文件 
3) pcl_viewer 1611754659.194505930.pcd

pcl_viewer 1611754659.082526922.pcd

run.launch

<launch>
    
    <!--- Sim Time -->
    <param name="/use_sim_time" value="true" />

    <!--- Run Rviz-->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find lego_loam)/launch/test.rviz" />

    <!--- TF -->
    <node pkg="tf" type="static_transform_publisher" name="camera_init_to_map"  args="0 0 0 1.570795   0        1.570795 /map    /camera_init 10" />
    <node pkg="tf" type="static_transform_publisher" name="base_link_to_camera" args="0 0 0 -1.570795 -1.570795 0        /camera /base_link   10" />

    <!--- LeGO-LOAM -->    
    <node pkg="lego_loam" type="imageProjection"    name="imageProjection"    output="screen"/>
    <node pkg="lego_loam" type="featureAssociation" name="featureAssociation" output="screen"/>
    <node pkg="lego_loam" type="mapOptmization"     name="mapOptmization"     output="screen"/>
    <node pkg="lego_loam" type="transformFusion"    name="transformFusion"    output="screen"/>

</launch>

 mickx4.launch

1.在使用速腾16线类雷达的时候注意修改 launch 文件 和 utility.h 配置文件。 LeGO-LOAM 不需要里程计 且 IMU 也不是必须的。

<launch>
    
    <!--- Sim Time -->
    <param name="/use_sim_time" value="true" />
 
    <node pkg="nodelet" type="nodelet" name="pcl_manager" args="manager" output="screen" />
    
    <!-- Run a passthrough filter to clean NaNs -->
    <node pkg="nodelet" type="nodelet" name="passthrough" args="load pcl/PassThrough pcl_manager" output="screen">
        <remap from="~input" to="/rslidar_points" />
        <remap from="/passthrough/output" to="/velodyne_points" />
        
        <rosparam>
        filter_field_name: z
        filter_limit_negative: True
        </rosparam>

    <rosparam>
        filter_field_name: x
        filter_limit_negative: True
        </rosparam>

    <rosparam>
        filter_field_name: y
        filter_limit_negative: True
       
        </rosparam>
    </node>

    <!--- Run Rviz-->
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find lego_loam)/launch/test.rviz" />

    <!--- TF -->
    <node pkg="tf" type="static_transform_publisher" name="camera_init_to_map"  args="0 0 0 1.570795   0        1.570795 /map    /camera_init 10" />
    <node pkg="tf" type="static_transform_publisher" name="base_link_to_camera" args="0 0 0 -1.570795 -1.570795 0        /camera /base_link   10" />

 
    <!--- LeGO-LOAM -->    
    <node pkg="lego_loam" type="imageProjection"    name="imageProjection"    output="screen"/>
    <node pkg="lego_loam" type="featureAssociation" name="featureAssociation" output="screen"/>
    <node pkg="lego_loam" type="mapOptmization"     name="mapOptmization"     output="screen"/>
    <node pkg="lego_loam" type="transformFusion"    name="transformFusion"    output="screen"/>

</launch>

 中间的 “ Run a passthrough filter to clean NaNs ”段是为了去除 速腾16线的激光雷达的 NaN 点

 2.修改 utility.h 文件

在LeGO-LOAM/LeGO-LOAM/include文件夹的 utility.h 文件中, useCloudRing false

因为Velodyne的雷达单独有一个ring通道 [3],而robosense的雷达好像并没有,在代码中可以将这一功能关闭。如不修改启动的时候会报错 测试时报错:Failed to find match for field ‘ring’

extern const bool useCloudRing = false;

 

 

demo

lego-loam demo

参考文献
https://blog.csdn.net/weixin_42141088/article/details/115747989

https://blog.csdn.net/crp997576280/article/details/111657554?spm=1001.2014.3001.5506

https://blog.csdn.net/weixin_44444810/article/details/121659270?spm=1001.2014.3001.5506
 

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeGO-LOAM是一种基于激光雷达的SLAM算法,可以实现机器人的定位和建图。相比于传统的LOAM算法LeGO-LOAM算法采用了更加高效的点云分割和匹配算法,从而可以获得更快的运行速度和更高的精度。 LeGO-LOAM算法的主要流程如下: 1. 点云分割:将激光雷达采集到的点云数据分割成多个小分段,每个小分段包含连续的点云数据,这样可以降低算法的计算复杂度。 2. 特征提取:对每个小分段进行特征提取,提取的特征包括边缘特征、平面特征和角点特征,这些特征能够有效地描述环境的几何结构。 3. 局部匹配:对相邻两帧之间的点云数据进行局部匹配,即匹配两帧之间的相邻点云数据,从而得到机器人的运动轨迹。 4. 全局匹配:对采集到的所有点云数据进行全局匹配,从而得到机器人所在环境的三维地图。 5. 优化:通过优化算法对机器人的轨迹和地图进行优化,提高定位和建图的精度。 相比于传统的LOAM算法LeGO-LOAM算法具有以下优点: 1. 高效性:LeGO-LOAM采用了分段扫描和分段匹配的策略,能够显著降低计算量,提高算法的运行效率。 2. 鲁棒性:LeGO-LOAM采用了多传感器融合的策略,能够在复杂的环境中保持较高的鲁棒性。 3. 精度高:LeGO-LOAM采用了基于特征点的配准和优化,能够获得较高的定位精度。 但是,LeGO-LOAM算法也存在一些缺点,例如对硬件的要求较高,需要使用高精度的激光雷达和较强的计算能力。此外,在一些特殊环境下,如光照弱或者反射率较低的环境中,LeGO-LOAM算法的性能可能会受到影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值