lego-loam在Ubuntu16.04下安裝、跑包及實時建圖
標籤: 自動駕駛
0 前言
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線激光雷達進行實時建圖。
1 lego-loam安裝
博主的安裝環境爲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是首次編譯時生成相關消息類型的,後續編譯可以不加。
2 lego-loam跑包測試
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
4)啓動成功效果
至此,大功告成!
如果有問題,可以一起交流