参考与前言

本文主要介绍 建图 Mapping 方面的一些 基础知识介绍与相关下游任务使用

涉及知识较为基础,SLAM大佬们可以提前退出了 主要针对应用为移动机器人与物流无人驾驶车;提前申明:大部分文字/图片,翻译/截图于 来自 Introduction to Mobile Robotics, Techniques for 3D Mapping, Wolfram Burgard 的PPT内容 阿里云盘下载链接

部分图片/文字 参考如下,同时会在文中进行再次标注:

  1. PPT from Introduction to Mobile Robotics, Techniques for 3D Mapping, Wolfram Burgard,原链接,阿里云盘链接
  2. 相关 mapping, voxel 总结 github readme: meshula/awesome-voxel
  3. 其他相关代码举例 见原文提及处
  • 大部分移动机器人, 比如两轮差速、机器狗平面运动等 大多使用的是2D occupancy map
  • 自动驾驶定位中,我们常用传感器的点云信息进行建点云地图,这一点主要用于定位,注意点云并不能直接的被规划使用
  • 自动驾驶运动规划避障中,简单来操作,会生成以自车为中心的局部栅格地图;正经操作则是有分模块,对障碍物进行检测,然后再根据检测结果进行运动规划;更正经的操作则是有检测、跟踪、预测 三模块进行,但这一部分并不在本文的讨论内容中

本文主要是介绍相关的mapping 表达方式,常用的数据结构形式 打开目录看更佳

Motivation

为什么我们需要一种3维的表达来做maps:WHY 3D representation?

  1. 机器人 在我们所生活的三维的世界中 => 需要一种机器使用的地图方式
  2. 当然2D maps也能被导航比如定位任务所使用
  3. 给下游任务使用,比如collision avoidance 和运动规划

Representations

常用表达方式 Representations

  • Point clouds 通常由激光雷达传感器所直接获得
  • Voxel grids 接收传感器数据后进行一些操作
  • TSDF 投影到最近平面的距离,多帧点云加权平均, SDF/ESDF
  • Surface maps
  • Meshes

Point Clouds 点云

由PPT截图可知,点云不需要在对收集到的数据进行离散化等,而且点云的范围可以很大;当然这一类数据类型 很难直接被下游任务所使用,主要原因是 没有直接的 free/unknown 区域的表示

通常使用的传感器有16,32,64,128线的 各种激光雷达,相关建图算法也很多:最为简单的是由Autoware直接开源出的ndt_mapping模块,此处为抽取模块下的代码链接:gitee 抽取 mapping_ws

其他的也有配合GPS, IMU等进行的融合,也有加入了回环 loop detection、动态障碍物剔除、配合相机上色等,比如 LIO_SAM_6AXIS,FSAT-LIO 等等等

Truncated Signed Distance Field (TSDF)

一种3d voxel array的表达方式,常用于3d voxel的建立步骤之中,比如voxblox,vdbmapping等,更多可见3d voxel grids部分

A Truncated Signed Distance Field (TSDF) is a 3D voxel array representing objects within a volume of space in which each voxel is labeled with the distance to the nearest surface
参考于:https://rosindustrial.org/news/tag/TSDF

相关算法:ros-industrial/yak which is a library for integrating depth images into Truncated Signed Distance Fields (TSDFs)

3D Voxel Grids

这个就是由点云地图进行后续操作而生成的,有了volumetric的表示,同时可以根据 收集数据时间等概率更新地图,相关的算法为 ethz-asl/voxblox 更多请参考2 链接:awesome-voxel。此地图 通常在 无人机 行业使用更多一点,也可以走到下游进行使用,当然pcl库里也有直接的voxelgrid函数进行使用,但一般是用来降采样点云中的点的,比如如下代码:

pcl::VoxelGrid<pcl::PointXYZI> voxel_grid_filter;
voxel_grid_filter.setLeafSize(filter_res, filter_res, filter_res);
voxel_grid_filter.setInputCloud(map_ptr);
voxel_grid_filter.filter(*map_filtered);
std::cout << "Original: " << map_ptr->points.size() << " points." << std::endl;
std::cout << "Filtered: " << map_filtered->points.size() << " points." << std::endl;
pcl::toROSMsg(*map_filtered, *map_msg_ptr);

需要注意的是,voxel的分辨率选择 很大程度会影响整体建图的效率和好坏,如下截图:

更多相关建图:octoMap/octomap,

2.5D Maps/Elevation maps

也就是说elevation maps 对比3D是一种2.5D的表达,然后可以根据概率进行高度的根据,这个grid_map有直接集成到ros的插件,由ETH Marco 组提出的,后续转到了ANYbotics下面repo,如参考三链接 ANYbotics/grid_map,正常full-ros会自动下载这个包,也可以pull下来进行源码安装

可以通过point clouds直接进行转换,也可以通过其他传感器 自己定义更新方式即可,较为常用于 机器狗领域

相关算法推荐:ANYbotics/elevation_mapping,leggedrobotics/elevation_mapping_cupy

但是因为一个格子只能出一个高度值,所以遇到桌子、桥等 就无法进行比较好的表达,比如这样:

然后就有了extended elevation maps

Others

比如MLP,multi-layer surface等,见原文ppt 见开头参考链接

还有ESDF,Euclidean signed distance field,通常用于planning模块中,相关可参考:【基础计算】ESDF栅格距离图计算并行加速版 (附源码)

Structure

主要建图中使用存储数据结构,比如八叉树、kdtree,vdb,Hash

Octree

大多数时候都可以使用别人已经搭好的轮子,尽量不要重复造轮子,但是我看的几个好像都自己写了一遍 … octree相关头文件和cpp,可能是自定义一些其他的函数进整体类中

VDB

更多参考见论文:VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor Data,以下为论文中图片截图

相关提及代码:AcademySoftwareFoundation/openvdb,PRBonn/vdbfusion

碎碎念

Mapping 还有关于动态障碍物去除的一些工作,可见 这个repo:zhuhu00/Awesome_Dynamic_SLAM 很详细的列举了相关主流mapping的去除动态障碍物方法,包含学习、传统和概率更新类

当然上面的都是比较基础介绍,更多了解需要跳转相关的代码/论文。如若上述有什么不对的地方,请及时指正/补充,感谢~


赠人点赞 手有余香

【基础整理】Mapping representation 机器人所用地图种类及相关介绍相关推荐

  1. RPA学习天地:艺赛旗RPA机器人的4种类型和区别介绍

    RPA学习天地为大家整理了RPA培训视频,欢迎关注,同步获取最新完整资料请关注 目前艺赛旗的有人值守机器人(助手机器人)和无人值守机器人都是需要先在控制台进行创建和配置账号才能使用,用户必须登录机器人 ...

  2. 势力图技术:模型表现、算法和参数(The Mechanics of Influence Mapping: Representation, Algorithm Parameters)

    本文翻译自这篇文章The Mechanics of Influence Mapping:Representation, Algorithm & Parameters ,主要介绍了势力图的一些基 ...

  3. 机器人的地图——占据栅格地图

    1. 机器人地图的分类 地图有很多种表示方式,例如,用经纬度标识地方的世界地图,城市的地铁图,校园指引图. 第一种我们称为尺度地图(Metric Map),每一个地点都可以用坐标来表示,比如北京在东经 ...

  4. 【蓝桥杯】有一张 m×n 个小方格的地图,一个机器人位于地图的左上角,它每步只能向右或者向下移动一格。。。

    题目描述 有一张 m×n 个小方格的地图,一个机器人位于地图的左上角(如图标记为 Start 的地方),它每步只能向右或者向下移动一格,如果走到右下角的终点(如图标记为 Finish 的地方),有多少 ...

  5. 前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分)

    前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分) 经度:longitude(lng, 0 < lng < 180) 纬度:latitude(lat, 0 < lat ...

  6. CS中如何在没有机器人的地图里自己添加机器人

    [推荐]CS中如何在没有机器人的地图里自己添加机器人 首先安装要正确:对于新手来说我还是说清楚一点.1:在桌面或硬盘里面新建一个文件夹.2:把机器人程序剪切到新建文件夹里面.3:点击机器人程序安装.4 ...

  7. 服务机器人有哪些种类?

    近年来,服务机器人迎来了爆发式增长,据相关数据统计,预计到2020年服务机器人销量将有望超过300亿人民币.作为机器人产业的新兴领域,服务机器人高度融合了智能.传感.网络.云计算等创新技术,与移动互联 ...

  8. 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法...

    这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...

  9. 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法机器人栅格地图路径规划[含源码 116期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 量子计算基础整理(上)

    量子计算基础整理 目录 量子计算基础整理 写在前面 量子力学基础 量子的四个特性 量子态的描述 定义 状态演化 叠加态与测量 相态,纯态和混合态 混合态的表示 可观测量与量子观测 复合系统与联合测量 ...

最新文章

  1. vscode如何及时提示flutter代码
  2. 35岁之后程序员的认可度不是很高
  3. HttpServletRequest对象
  4. 第二阶段冲刺 第四天
  5. 杨辉三角python代码 不要括号_关于杨辉三角python代码的问题
  6. struts2上传 zip和rar文件类型
  7. win7忘记密码不用工具进入
  8. AOP底层实现原理、基于注解的AOP编程、AOP开发中的一个坑 打卡第八天
  9. 西门吹雪和他的剑——剑神和剑道
  10. NW.JS 客户端开发入坑指南
  11. matlab 非线性拟合残差,多元非线性拟合求参数及残差分析
  12. 【硬见小百科】SMT工艺,是什么影响锡膏印刷的质量
  13. setImageBitmap 图片太大部分机型不显示
  14. 第1章第2节:PowerPoint的选项卡 [PowerPoint精美幻灯片实战教程]
  15. 银河系中心黑洞的第一张照片,本文带你了解发现的过程
  16. 1131:Octal Fractions
  17. stc89c52rc单片机点亮LED------汇编
  18. 人工智能的动作来看这四家:百度、谷歌、微软、Facebook
  19. 常见的爬虫乱码的解决办法
  20. orangepi zero2部署网心云docker版

热门文章

  1. 小程序数据监测工具分析
  2. quot 成为通用计算机器 quot,汉语拼音:从读写工具到文化津梁
  3. C语言if语句的基本用法
  4. 需求调研第三篇--现场调研阶段容易犯哪些错误
  5. 音乐标签修改 android,音乐标签Android版
  6. NLP的巨人肩膀[转]
  7. Excel中实用的3个数据透视表操作技巧,简单高效!
  8. 计算机插入的u盘文件打不开,U盘插入电脑显示盘符却打不开的解决方法
  9. java实现pdf旋转_基于Java实现PDF文本旋转倾斜
  10. oracle 字段名中有空格 的查询