lego-loam是由Tixiao Shan and Brendan Englot在论文:
LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain
中提出,该方法是基于loam,其主要内容在论文摘要中已经说明,内容如下:
我们提出了LeGO-LOAM,它是一种轻量级和地面优化的激光雷达里程计和建图方法,用于实时估计地面车辆的六自由度姿态。LeGO-LOAM是轻量级的,因为它可以在低功耗嵌入式系统上实现实时姿态估计。LeGO-LOAM经过地面优化,因为它在分割和优化步骤中利用了地面的约束。我们首先应用点云分割来滤除噪声,并进行特征提取,以获得独特的平面和边缘特征。然后,采用两步Levenberg-Marquardt优化方法,使用平面和边缘特征来解决连续扫描中六个自由度变换的不同分量。我们使用地面车辆从可变地形环境中收集的数据集,比较LeGO-LOAM与最先进的LOAM方法的性能,结果表明LeGO-LOAM在减少计算开销的情况下实现了相似或更好的精度。为了消除由漂移引起的姿态估计误差,我们还将LeGO-LOAM集成到SLAM框架中,并用KITTI数据集进行了测试。
本博客主要是安装该方法,并进行数据包测试,最后利用手头的velodyne16线激光雷达进行实时建图。
博主的安装环境为Ubuntu16.04+ROS(kinetic)+ pcl1.9
1.1 安装依赖
1)gtsam (Georgia Tech Smoothing and Mapping library, 4.0.0-alpha2)
wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2.zip
cd ~/Downloads/ && unzip gtsam.zip -d ~/Downloads/
cd ~/Downloads/gtsam-4.0.0-alpha2/
mkdir build && cd build
cmake ..
sudo make install
1.2 安装lego-loam
cd ~/catkin_ws/src
git clone https://github.com/RobustFieldAutonomyLab/LeGO-LOAM.git
cd ..
catkin_make -j1
注:catkin_make后面的-j1是首次编译时生成相关消息类型的,后续编译可以不加。
1)启动lego-loam
roslaunch lego_loam run.launch
注:要cd到安装包下面并添加环境如:
cd catkin_ws
source devel/setup.bash
最后使用以下命令启动lego-loam
roslaunch lego_loam run.launch
2)播放数据包
rosbag play yourbag.bag --clock --topic /velodyne_points /imu/data
注:yourbag.bag为自己录制的数据包。/imu/data是可选的,没有也没关系。我就没有这劳什子,跑的效果还行。
3 lego-loam实时建图
1)首先要修改run.launch,修改后为:
<launch>
<!--- Sim Time -->
<param name="/use_sim_time" value="false" />
<!--- Run Rviz-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find lego_loam_bor)/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="camera_to_base_link" args="0 0 0 -1.570795 -1.570795 0 /camera /base_link 10" />
<!--- 根据雷达和小车相对位置确定 -->
<node pkg="tf" type="static_transform_publisher" name="base_link_to_velodyne" args="0 0 0 0 0 0 /base_link /velodyne 10" />
<!--- LeGO-LOAM
<arg name="rosbag" default=""/>
<arg name="imu_topic" default="/imu/data"/>
<arg name="lidar_topic" default="/velodyne_points"/>
-->
<rosparam file="$(find lego_loam_bor)/config/loam_config.yaml" command="load"/>
<node pkg="lego_loam_bor" type="lego_loam_bor" name="lego_loam_bor" output="screen" >
<!--
<remap from="/lidar_points" to="$(arg lidar_topic)"/>
<remap from="/imu/data" to="$(arg imu_topic)"/>
<param name="rosbag" value="$(arg rosbag)" type="string" />
<param name="imu_topic" value="$(arg imu_topic)" type="string" />
<param name="lidar_topic" value="$(arg lidar_topic)" type="string" />
<remap from="/imu/data" to="/imu"/>
-->
<remap from="/lidar_points" to="/velodyne_points"/>
</node>
</launch>
2)启动velodyne16激光雷达
roslaunch velodyne_pointcloud VLP16_points.launch calibration:=/home/tl/VLP16.yaml
注:velodyn激光雷达使用请参考如下博客:
https://blog.csdn.net/zbr794866300/article/details/99305864
3)启动lego-loam
roslaunch lego_loam run.launch