一、github

二、安装依赖

1. ROS

Ubuntu 64-bit 16.04  ROS Kinetic

比较常规,就不赘述了

2. gtsam

(Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)

cd ~/projects  # 切换到下载目录,可以任意配置
# wget 不行,尝试直接浏览器下载
wget -O ./gtsam-4.0.0-alpha2.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip 
unzip gtsam-4.0.0-alpha2.zip
cd gtsam-4.0.0-alpha2
mkdir build && cd build
cmake ..
make -j4
sudo make install   # 安装至系统目录, /usr/local/include, /usr/local/lib/

3. pcl

sudo apt install libpcl-dev

三、编译

1. 下载代码至 catkin_ws

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

2. 编译

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

 

3. 可能遇到的问题

3.1 没有找到 eigen3

 原因:

Eigen的安装位置是 /usr/local/include/eigen, 而ROS系统中 Eigen 的默认安装位置是 /usr/include/eigen

在ROS使用自己安装的eigen时的cmake错误_bluewhalerobot的博客-CSDN博客

解决:创建软链接

sudo ln -s /usr/local/include/eigen3 /usr/include/eigen3

3.2 找不到 cloud_msgs/cloud_info.h

 原因:并行编译导致依赖的 cloud_msgs 没有完成编译

解决:

catkin_make -j1

四、运行 example

1. 数据集下载

官方链接:https://drive.google.com/drive/folders/1_t5fX5yIqY-y6sAifY8pVWX4O9LCK5R2?usp=sharing

网友链接:(LeGO-LOAM运行数据集_Wanqing_W的博客-CSDN博客

链接:https://pan.baidu.com/s/1UswMElc81AKY8hnpmkjnrA
提取码:l5rl

2. 运行 ros

roscore

3. 启动 lego-loam

roslaunch lego_loam run.launch

4. 播放 bag

cd $DATASET_DIR # 切换至存放 bag 目录
rosbag play nsh_indoor_outdoor.bag --clock --topic /velodyne_points /imu/data

5. 效果

五、ros 节点组织

1. 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 -->
    // 运行 4 个 bin 
    <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>

(1). 可执行文件

lego_loam: imageProjection

lego_loam: featureAssociation

lego_loam: mapOptmization

lego_loam: transformFusion

(2). 可视化

rviz

2. topic 订阅

 

可以看到,运行的三个可执行文件是串行方式:

imageProjection——> featureAssociation——> mapOptmization——> transformFusion

六、算法流程

 预处理(imageProjection):分割,特征提取

Lidar Odometry: scan-to-scan,10Hz

Lidar Mapping:scan-to-map,2Hz

最终,两种算法输出的位姿融合,输出 10HZ 的运动轨迹

和原始 LOAM 算法区别

1. 侧重于:轻量级,地面优化

2. 引入语义分割

3. 引入了回环检测和位姿图优化,是一个完整的 SLAM 框架

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐