自动驾驶系统(1)A-Loam安装和编译

LOAM:Lidar Odometry and Mapping in Real-time

LOAM为清华自动化本科毕业的Zhang Ji博士在CMU读博期间,于2014年在RSS期刊发表的关于三维激光传感器的SLAM算法。
缺点:

  • 没有回环检测;
  • 计算时间复杂度较高,基于三维空间中的位姿进行优化;
  • 户外可能受到各种噪声影响,例如树上摇晃的树叶,地上的杂草。而这些点未必会重复出现在前后两帧激光中。而错误的特征点将会影响位姿精度。
  • LOAM需要提取平面点和边缘点,由于车体上下颠簸,竖直维度提取的平面点很容易造成误差。

一、LOAM安装和编译

1.下载A-LOAM源码(版本:ubuntu18.04 ros melodic )

    cd ~/catkin_ws/src
    git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git

2.编译

    cd ~/catkin_ws/src
    cd ../
    catkin_make
    #可添加到 ~/.bashrc 文件中:
    source ~/catkin_ws/devel/setup.bash

3.运行

     #终端一
    roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
      #终端二
    rosbag play YOUR_DATASET_FOLDER/nsh_indoor_outdoor.bag

在这里插入图片描述

4.运行Kitti数据集
A-LOAM运行KITTI数据集需要运行kittiHelper节点,首先要将KITTI数据转换成ROS 的 Topic 或者 rosbag,读取KITTI数据集的 图像\雷达\时间戳 并发布topic和保存bag,跑之前修改launch文件:

<launch>
    <node name="kittiHelper" pkg="aloam_velodyne" type="kittiHelper" output="screen"> 
        <param name="dataset_folder" type="string" value="/data/KITTI/odometry/" />
        <param name="sequence_number" type="string" value="00" />
        <param name="to_bag" type="bool" value="false" />
        <param name="output_bag_file" type="string" value="/tmp/kitti.bag" /> <!-- replace with your output folder -->
        <param name="publish_delay" type="int" value="1" />
    </node>
</launch>

其中/data/KITTI/odometry/修改为kitti数据集的路径,to_bag的值可以为false或者true,选择是否将kitti数据集计算轨迹的同时打包成bag输出,输出路径为out_bag_file的值。
运行:

roslaunch aloam_velodyne kitti_helper.launch
roslaunch aloam_velodyne aloam_velodyne_HDL_64.launch

在这里插入图片描述

二、LOAM解析

1.整体框架
在这里插入图片描述
主要思路就以两个并行算法LidarOdometry(高频低精度)、LidarMapping(低频高精度)实现低漂移和低计算复杂度。
2.主要流程
主要包括三个节点:点云提取(scan registration)、雷达里程计(lidar odometry)、雷达建图(lidar mapping)

2.1点云提取(scan registration)
LOAM中选用特征点来进行运动估计,特征点选取(edge point角点)和平面点(planar point),如下黄点为edge point,红点为planar point。试验数据表明,大部分点云都是平面点。边线点起到的约束作用较小。
在这里插入图片描述
2.2雷达里程计
主要根据scanRegistration发布的点云信息,寻找角点与平面点的匹配点,并构建点到线及点到面的约束方程,使用ceres进行求解。点云使用pcl下的kdtree存储。

  • 先将点云都变换到起始坐标系,
  • 然后在存放上一帧点云的kdtree中查找点云的最邻近点,
  • 在找到的最邻近点的相邻帧找到邻近点的最邻近的点。并构造距离方程。
  • 通过迭代得到两个SCAN之间的坐标系变换。
  • 累积便可的odom的输出。
    2.3雷达建图
    地图创建
    雷达地图创建采用点云地图,通过迭代得到的每一次sweep对应的雷达的世界坐标系下的位姿变换矩阵,得到点云的世界坐标坐标。
    位姿精优化(mapping odometry)
    选取点最近邻5个点,进行协方差矩阵特征值、特征向量计算,若其中一个特征值远大于其他特征值,则说明该点是边线点,其中最大的特征值对应的特征向量就是该线的方向向量。同理得到点面的约束
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值