【基础整理】Mapping representation 机器人所用地图种类及相关介绍
参考与前言
本文主要介绍 建图 Mapping 方面的一些 基础知识介绍与相关下游任务使用
涉及知识较为基础,SLAM大佬们可以提前退出了 主要针对应用为移动机器人与物流无人驾驶车;提前申明:大部分文字/图片,翻译/截图于 来自 Introduction to Mobile Robotics, Techniques for 3D Mapping, Wolfram Burgard 的PPT内容 阿里云盘下载链接
部分图片/文字 参考如下,同时会在文中进行再次标注:
- PPT from Introduction to Mobile Robotics, Techniques for 3D Mapping, Wolfram Burgard,原链接,阿里云盘链接
- 相关 mapping, voxel 总结 github readme: meshula/awesome-voxel
- 其他相关代码举例 见原文提及处
- 大部分移动机器人, 比如两轮差速、机器狗平面运动等 大多使用的是2D occupancy map
- 自动驾驶定位中,我们常用传感器的点云信息进行建点云地图,这一点主要用于定位,注意点云并不能直接的被规划使用
- 自动驾驶运动规划避障中,简单来操作,会生成以自车为中心的局部栅格地图;正经操作则是有分模块,对障碍物进行检测,然后再根据检测结果进行运动规划;更正经的操作则是有检测、跟踪、预测 三模块进行,但这一部分并不在本文的讨论内容中
本文主要是介绍相关的mapping 表达方式,常用的数据结构形式 打开目录看更佳
Motivation
为什么我们需要一种3维的表达来做maps:WHY 3D representation?
- 机器人 在我们所生活的三维的世界中 => 需要一种机器使用的地图方式
- 当然2D maps也能被导航比如定位任务所使用
- 给下游任务使用,比如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的去除动态障碍物方法,包含学习、传统和概率更新类
当然上面的都是比较基础介绍,更多了解需要跳转相关的代码/论文。如若上述有什么不对的地方,请及时指正/补充,感谢~
赠人点赞 手有余香 ;正向回馈 才能更好开放记录 hhh
【基础整理】Mapping representation 机器人所用地图种类及相关介绍的更多相关文章
- iOS中滤镜种类及相关介绍
- 机器学习 —— 基础整理(六)线性判别函数:感知器、松弛算法、Ho-Kashyap算法
这篇总结继续复习分类问题.本文简单整理了以下内容: (一)线性判别函数与广义线性判别函数 (二)感知器 (三)松弛算法 (四)Ho-Kashyap算法 闲话:本篇是本系列[机器学习基础整理]在time ...
- MySQL基础整理(一)之SQL基础(未完成)
大家好,我是浅墨竹染,以下是MySQL基础整理(一)之SQL基础 1.SQL简介 SQL(Structure Query Language)是一种结构化查询语言,是使用关系模型的数据库应用语言. 2. ...
- nutch的一些基础整理
nutch的一些基础整理 原创 2015年03月22日 18:18:01 标签: nutch / 240 编辑 删除 一.关于配置文件: nutch-default.xml:爬虫的默认配置.在${nu ...
- [转帖]nginx基础整理
nginx基础整理 https://www.cnblogs.com/guigujun/p/6588545.html 目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Ngin ...
- 必杀技———SQL基础整理系列(一)
SQL(Structured Query Language)——结构化查询语言 SQL语言的组成部分 数据定义语言 (DDL:Data Definition Language) 负责数据结构定义与数据 ...
- 【个人笔记】002-PHP基础-01-PHP快速入门-02-PHP语言相关介绍输
002-PHP基础-01-PHP快速入门 02-PHP语言相关介绍 1.PHP是什么 Hypertext Preprocessor超文本预处理器 是一种通用开源脚本语言 Personal Home P ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
- Java并发包中线程池的种类和特点介绍
Java并发包提供了包括原子量.并发集合.同步器.可重入锁.线程池等强大工具这里学习一下线程池的种类和特性介绍. 如果每项任务都分配一个线程,当任务特别多的时候,可能会超出系统承载能力.而且线程的创建 ...
- Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍
Xamarin.FormsShell基础教程(7)Shell项目关于页面的介绍 轻拍标签栏中的About标签,进入关于页面,如图1.8和图1.9所示.它是对应用程序介绍的页面. 该页面源自Views文 ...
随机推荐
- minicube安装
minicube安装 一.安装手册: https://minikube.sigs.k8s.io/docs/start/ 二.安装 打开官网,选择和自己对应的系统和要下载的版本.点击下面的release ...
- linux 系统tar文件压缩打包命令
打包成tar.gz格式压缩包 # tar -zcvf renwolesshel.tar.gz /renwolesshel 解压tar.gz格式压缩包 # tar zxvf renwolesshel.t ...
- 超级简单实用的CSS3动画,增添网页效果
有时候做网页,如果都写成静态的没有动态效果,犹如一张张图片,没有视觉感受,没有达到很好的视觉效果. 其实一些简单的CSS3动画,可以增添网页的动态感,使自己设计的网页更有视觉享受.1.图片有一定角度的 ...
- 计算机组成原理—中央处理器CPU
文章目录 CPU的功能与架构 CPU的组成 运算器 控制器 指令执行过程 指令流程 指令执行方案 数据通路 单总线结构 专用通路结构 硬布线控制器设计 硬布线执行流程 硬布线CU内部 怎么设计微操作的 ...
- Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验
前言 在现代应用开发中,确保API的安全性和可靠性至关重要. 面向切面编程(AOP)通过将横切关注点(如验证.日志记录.异常处理)与核心业务逻辑分离,极大地提升了代码的模块化和可维护性. 在ASP.N ...
- Python:当函数做为参数时的技巧
我们之前在<Python技法3: 匿名函数.回调函数.高阶函数>中提到,可以通过lambda表达式来为函数设置默认参数,从而修改函数的参数个数: import math def dista ...
- Vue cli之安装
1.安装node.js Node.js是一个新的后端(后台)语言,它的语法和JavaScript类似,所以可以说它是属于前端的后端语言,后端语言和前端语言的区别: 运行环境:后端语言一般运行在服务器端 ...
- 鸿蒙HarmonyOS实战-Stage模型(线程模型)
前言 线程是计算机中的一种执行单元,是操作系统进行调度的最小单位.它是进程中的实际运行单位,每个进程可以包含多个线程.线程可以理解为进程中的一个执行流,它独立运行,拥有独立的栈和寄存器,但共享进程的资 ...
- 使用EntityFramework Core和Enums作为字符串的ASP.NET Core Razor页面——第三部分
目录 介绍 使用代码 添加项目和项目状态处理 下载源文件 - 989.1 KB 介绍 这是一篇由多部分组成的文章的第三部分,演示了通过EntityFramework Core 2.1(EF)将C#en ...
- PaddleOCR在 Linux下的webAPI部署方案
很多小伙伴在使用OCR时都希望能过采用API的方式调用,这样就可以跨端跨平台了.本文将介绍一种基于python的PaddleOCR识方案.喜欢的可以关注公众号,获取更多内容. 一. Linux环境下部 ...