3D激光点云数据处理入门(一)—— 使用LOAM进行点云地图创建

  • LOAM 原理简述
    • topic关系
    • 算法分析
      • 算法伪代码
  • LOAM 建图实践
    • 创建你的 ROS Workspace
    • 下载LOAM Package
    • 下载数据包
    • 运行 LOAM
    • 运行结果

LOAM 原理简述

论文地址 : LOAM: Lidar Odometry and Mapping in Real-time
作者主页: Ji Zhang, Ph.D 其中有作者所有的相关论文,并且都附有 Video, 感兴趣的可以去查看。
Google Scholar

作者想解决的问题: 构建低漂移的里程计。论文完成的工作是使用3D激光雷达构建出的里程计构来建三维点云地图。 但是作者的目标是缩小激光里程计的漂移和计算量,重点并不是构建出三维地图,所以作者没有考虑回环问题(loop closure)。

作者实现的方法 : 作者的思路同SLAM(simulanteous localization and mapping)的思路一致,算法思路如下图

主要经过以下几个步骤

  1. Point Cloud Registration - 接收激光数据,完成点云的注册和特征点云(边和面)提取。
  2. Lidar Odometry - 通过特征点云的匹配以10hz频率发布一个里程计。此时的里程计精度并不高。
  3. Lidar Mapping - 接收里程计信息和当前点云数据,基于粗匹配的里程计位姿进行精匹配,根据估计出的位姿将点云注册到地图中,并按照1hz发布更新后的位姿。
  4. Transform Integration - 接收 lidar odometry 和 lidar mapping 发布的位姿信息,以10hz 的频率发布里程计信息。

topic关系

运行 'rosrun rqt_graph rqt_graph, 我们可以查看各个 topic 和节点的关系。

算法分析

  • 如何选取特征点 边点(edge point)和平面点 (planar point)
    作者首先定义了一个衡量点平滑度的公式 , 通过测量点两边的距离差异,来衡量该点的平滑程度。c值最大的点将作为边点而cz值最小的点为平面点。 将360度分为四个区域,每个区域最多产生两个边点和四个平面点。这些边点和平面点如下图所示。
    这些提取出来的点作为特征点来完成前后帧的匹配,来估计自身的位姿。
  • 构建损失函数 特征点选取后, 根据 tf 关系转换到 map 坐标系下,在map 中寻找最近的 边点和平面点, 将两个最近的边点和平面点当成对应点构建一个转换矩阵,(t_x, t_y, t_z, theta), 对该转换举证求雅克比,使用高斯牛顿法缩小损失函数直至收敛。

算法伪代码

===========
未完待续!!!

  • 矩阵的转换和实现
  • 算法结果

LOAM 建图实践

创建你的 ROS Workspace

$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/
$ catkin_make
$ source devel/setup.bash

下载LOAM Package

$ cd ~/catkin_ws/src
$ git clone https://github.com/laboshinl/loam_velodyne.git
$ cd ..
$ catkin_make -DCMAKE_BUILD_TYPE=Release
$ source ~/catkin_ws/devel/setup.bash

下载数据包

$ wget http://www.aisl.cs.tut.ac.jp/databases/hdl_graph_slam/hdl_400.bag.tar.gz
$ tar -axvf hdl_400.bag.tar.gz

运行 LOAM

$ roslaunch loam_velodyne loam_velodyne.launch
$ rosbap play hdl_400.bag

运行结果

LOAM进行点云地图创建相关推荐

  1. lego-LOAM跑自己的数据包无法显示全局点云地图解决(速腾聚创RS-LiDAR-16 雷达 )---SLAM不学无术小问题

    LeGo-LOAM跑自己的数据包无法显示全局地图问题 注意:本文笔者使用环境:Ubuntu18.04 ROS melodic 版本 背景      3D SLAM新手,在看到了各种狂拽炫酷的3D点云图 ...

  2. A-LOAM/LOAM/Lego-LOAM/SC_Lego_LOAM实时构建3d点云地图与2d栅格地图(octomap)

    本篇文章旨在快速让读者实现运行LOAM系列3D激光SLAM算法并实时构建3d点云地图与2d栅格地图.废话不多说,直接开始~ 首先说明我们要用到的3D点云地图转2D栅格地图的工具是octomap,附上高 ...

  3. 基于激光雷达的里程计及3D点云地图中的定位方法

    本文转载自公众号@点云PCL,基于激光雷达的里程计及3D点云地图中的定位方法 :https://mp.weixin.qq.com/s/laA1YAPBCpqlzdGi0yb2cQ 论文:LOL: Li ...

  4. ORB-SLAM2系统的实时点云地图构建

    ORB-SLAM2系统的实时点云地图构建 这篇博客 点云地图构建的流程 代码介绍 点云地图构建类对象 小调整 获取关键帧 点云地图构建与叠加 在地图中设置当前相机位置 点云地图到Octomap的转换 ...

  5. IROS2021|DLL直接点云定位:一种基于点云地图的航空机器人定位方法

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨泡泡机器人SLAM 标题:DLL: Direct LIDAR Localization. A m ...

  6. 基于Kinect深度图像和SLAM二维地图创建

    1.问题描述: 通过将kinect深度图像采集传感器安装在移动机器人上对未知室内环境进行三维探索和平面地图创建,通过装载kinect深度图采集传感器的移动机器人采集环境的彩色信息和深度信息,通过模拟激 ...

  7. 使用openlayers加载地图行政区域(结合百度云地图)

    在某一个项目中,需要在一张地图上叠加中国行政区域,提供省.市两级行政区域的范围,由于自己的数据源不全,不能保证数据的完整性,所以采用调用百度云地图的API来实现在地图上显示行政区划范围:项目中使用的技 ...

  8. 3D激光SLAM点云地图pcd转导航可用的2D栅格地图

    本文旨在帮助读者将激光点云地图转为2D栅格地图,以便完成路径规划与导航.本方法将pcd转为pgm的原理是将接收到的点云信息以"/map"话题的形式发布,用map_server来接收 ...

  9. PCL小工具二:使用kitti的GT(ground truth)建立激光点云地图

    此代码合并了每一帧的激光点云数据,构成了激光点云地图. ground truth,即真值,在本文简写成GT. 在kitti数据集中,GT代表了世界坐标系下相机的位姿真值,也就是Tcam2world 经 ...

最新文章

  1. JavaScript类——鼠标点击下笑脸变化
  2. [原创]windows server 2012 AD架构 试验 系列 – 3 创建备份DC2
  3. python创建文件夹用什么函数_Python——os.mkdir()在指定路径下创建文件夹 + 路径的连接理解...
  4. ASP.NET2.0的快速入门站点
  5. Flask第十八篇 Flask-Migrate
  6. 百度网盘资源转迅雷下载正确打开方式!
  7. 什么是 VXLAN 技术?
  8. Golang代码注释规范及goland代码注释模板配置
  9. android局域网 nas,华为手机通过群晖NAS备份时提示“本机和您的NAS设备需处于同一局域网”的解决方法...
  10. excel表格中怎样让某一行数据一直显示
  11. 【Cpp】C和C++混合编程
  12. 详解clickhouse分区目录的合并过程
  13. 腾讯PGC最大规模调整涉及5个VP:“王者荣耀之父”主管 QQ
  14. MySQL的事务总结(事务特性,隔离级别,脏读,不可重复读,幻读,常见问题)
  15. H264 demux后AVPacket送去decode时出错
  16. 华为应用市场推出独家年终游戏节活动,包括12款最热门手游
  17. 不破不立 WCA-IeSF全球电竞高峰论坛的五大革新
  18. CSS背景 background
  19. GIT国内下载,阿里镜像
  20. 群晖系统共享服务器,群晖共享服务器

热门文章

  1. 阿里云ddns,动态域名更新Python脚本,基于Python3,适用于linux
  2. UnityShader实现简单的体积光
  3. Python编程快速上手 让繁琐工作自动化 | 第三章 :实践项目
  4. 锁相环技术,单边带信号,信号的调制
  5. 一开机checkingmedia_电脑开机就出现Checking media 这个怎么弄啊
  6. Anaconda安装Tensorflow报错UnicodeDecodeError: 'utf-8' codec can't decode ## invalid start byte的问题之解决
  7. cocos2dx实现单机版三国杀(一)
  8. lisp 墙体 天正建筑_T20天正建筑软件 V7.0单机版
  9. Comsolnbsp;Multiphysicsnbsp;声场仿真模块…
  10. 基于UMDF2 获取DSDT硬件资源(Finding and Mapping Hardware Resources) Windows 驱动程序