一、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 框架