一、github
GitHub - HKUST-Aerial-Robotics/A-LOAM: Advanced implementation of LOAM
二、安装依赖
1. ROS
Ubuntu 64-bit 16.04 ROS Kinetic
比较常规,就不赘述了
2. Ceres Solver
安装版本:
3. PCL
sudo apt install libpcl-dev
三、编译
1. 下载代码至 catkin_ws
cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git
2. 编译
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
四、运行 example
1. 启动 ros
roscore
2. 启动 loam
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
3. 播放 bag
cd $DATASET_DIR # 切换至存放 bag 目录
rosbag play nsh_indoor_outdoor.bag
4. 效果
五、ros 节点组织
1. launch 文件解析
<launch>
<param name="scan_line" type="int" value="16" />
<!-- if 1, do mapping 10 Hz, if 2, do mapping 5 Hz. Suggest to use 1, it will adjust frequence automaticlly -->
<param name="mapping_skip_frame" type="int" value="1" />
<!-- remove too closed points -->
<param name="minimum_range" type="double" value="0.3"/>
<param name="mapping_line_resolution" type="double" value="0.2"/>
<param name="mapping_plane_resolution" type="double" value="0.4"/>
// 运行三个bin
<node pkg="aloam_velodyne" type="ascanRegistration" name="ascanRegistration" output="screen" />
<node pkg="aloam_velodyne" type="alaserOdometry" name="alaserOdometry" output="screen" />
<node pkg="aloam_velodyne" type="alaserMapping" name="alaserMapping" output="screen" />
<arg name="rviz" default="true" />
<group if="$(arg rviz)">
<node launch-prefix="nice" pkg="rviz" type="rviz" name="rviz" args="-d $(find aloam_velodyne)/rviz_cfg/aloam_velodyne.rviz" />
</group>
</launch>
(1). 可执行文件
aloam_velodyne: ascanRegistration
aloam_velodyne: alaserOdometry
aloam_velodyne: alaserMapping
(2). 可视化
rviz
2. topic 订阅
可以看到,运行的三个可执行文件是串行方式:
ascanRegistration ——> alaserOdometry ——> alaserMapping
六、算法流程
ascanRegistration:特征提取
alaserOdometry:高频率的里程计(Odometry)实现粗定位
alaserMapping:低频率的里程计(Mapping)实现精定位
在第 次扫描周期中,lidar 获取到的所有点云集合记作 , 被两个算法处理
1. lidar odometry 算法计算相邻帧的变换,且运动估计结果用于对点云去畸变,10HZ
2. 去畸变后的点云通过 lidar mapping 算法,获取相对于地图的运动,1HZ
最终,两种算法输出的位姿融合,输出 10HZ 的运动轨迹