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


    参考与前言

    本文主要介绍 建图 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_6AXISFSAT-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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    需要注意的是,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_mappingleggedrobotics/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/openvdbPRBonn/vdbfusion

    碎碎念

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

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


    赠人点赞 手有余香 😆;正向回馈 才能更好开放记录 hhh

  • 相关阅读:
    【物联网安全知多少?】
    点云从入门到精通技术详解100篇-基于点云数据的奶牛体型评定指标自动测量关键技术研究
    手机连接电脑后资源管理器无法识别(识别设备但无法访问文件)
    HTTP 新增的 103 状态码,这次终于派上用场了!
    零距离揭秘绝地求生:玩家最关心的吃鸡要领和细节全攻略!
    【TypeScript】深入学习TypeScript对象类型
    软件测试工程师必会的银行存款业务,你了解多少?
    我把 CPU 三级缓存的秘密,藏在这 8 张图里
    TiDB 社区智慧合集丨TiDB 相关 SQL 脚本大全
    Java Timer使用介绍
  • 原文地址:https://blog.csdn.net/qq_39537898/article/details/126672540