2021.3.10| A Universal Grid Map Library: Implementation and Use Case for Rough Terrain Navigation
今天看的文献题目是 A Universal Grid Map Library: Implementation and Use Case for Rough Terrain Navigation (一种通用的格栅地图:实现和用于复杂地形导航的用例)。
关键词:ROS · Grid map · Elevation mapping
移动地面机器人传统上被设计成在平坦的地形上移动,它们的地图定位、规划和控制算法通常是为环境的二维抽象而开发的。当涉及到崎岖地形的导航时(例如使用履带车辆或有腿机器人),算法必须扩展到考虑周围所有的三个维度。最流行的方法是构建环境的高程地图,其中水平面上的每个坐标都与高程/高度值相关联。为简单起见,高程图通常被存储和处理为网格图,可以认为是2.5维的表示,网格中的每个单元格都有一个高度值。
作者团队开发了一个通用网格地图库作为移动机器人操作系统(ROS)的通用映射框架。应用程序是通用的,程序的实现不局限于任何特殊类型的输入数据或处理步骤。该库支持多个数据层,例如适用于高程、方差、颜色、表面法线、占用率等。底层数据存储实现为二维循环缓冲区。循环缓冲区实现允许对地图位置进行非破坏性和计算效率高的移动。例如,当机器人在环境中移动时,地图会不断重新定位(例如,以机器人为中心的地图),这在应用中非常重要。软件通过提供几个辅助功能来简化地图数据的处理。例如,矩形、圆形和多边形区域的迭代器函数可以方便地对地图的子区域进行内存安全访问。所有网格地图数据都以Eigen的数据类型存储,Eigen是一个流行的c++线性代数库。用户可以将现有的特征算法直接应用于地图数据,为数据操作提供了通用而高效的工具。
ROS的costmap_2d包也可以使用基于网格的映射表示。它是二维导航堆栈[的一部分,用于二维机器人导航,其功能是处理距离测量和建立环境占用网格。占用率通常表示为一种状态,如已占用、空闲和未知。在内部,costmap被存储为unsigned char数组,其整数值范围为0-255。虽然这种数据格式足以处理成本映射,但在更一般的应用程序中可能会受到限制。为了克服这些缺陷,该文章中提出的网格地图库将地图存储为float类型的矩阵。这允许在处理物理类型(如高度、方差、表面法向量等)时更加精确和灵活。为了确保与现有ROS生态系统的兼容性,Grid Map Library提供了转换器,将网格映射转换为OccupancyGrid(由2D导航堆栈使用)、GridCells和PointCloud2等消息类型。转换和发布地图数据作为不同的消息类型也可以使用现有的RViz可视化插件。另一个相关的包是OctoMap库及其相关的ROS接口。OctoMap将地图表示为具有被占用和自由体素的三维结构。以八叉树为结构,八叉树地图可以动态扩展,可以包含不同分辨率的区域。与2.5维网格表示相比,octomap的数据结构非常适合表示完整的三维结构。这通常是有用的工作与扩展地图与多层和悬垂结构或机器人手臂运动规划任务。然而,访问八叉树中的数据需要额外的计算成本,因为搜索树的节点必须执行。相反,2.5D的Grid Map的表示方法允许直接的访问,并在后处理和数据解释步骤中简化数据管理。

图(a)表示以四足机器人为中心绘制高程地图,具体演示视频在 https://www.bilibili.com/video/BV1RV411v7MJ
图(b)表示基于机载的单目视觉高程估计的全自主四旋翼机着陆,演示视频在 https://www.bilibili.com/video/BV1LK4y1U7m3
Grid Map Library已经成为几个应用程序的底层框架。在上图中,建立了高程图来规划腿式机器人通过崎岖地形的运动(见图a)。从机载Kinect深度传感器获取的距离测量和机器人姿态估计融合在环境的概率表示中。绘图是以机器人为中心,以明确说明机器人移动时的姿态漂移。另外,Grid Map Library已用于微型飞行器(MAV)自主着陆的工作(图b)。由机载惯性测量单元(IMU)和单目相机估计的深度数据生成高程图。然后,该地图会为飞行器找到一个安全着陆点。

浙公网安备 33010602011771号