移动机器人中常用地图

参考链接:https://zhuanlan.zhihu.com/p/346665590

1、尺度地图
具有真实的物理尺度,eg.栅格地图、点云地图,常用于SLAM、小场景路径规划
栅格地图时结构化且有序的,能够直接使用位置索引查询该位置状态,查询时间复杂度为O(1)。但栅格地图对场景进行密集的切分,内存占用较大。一种常用的栅格地图格式是PGM,PGM是Portable Gray Map的缩写。它是灰度图像格式中一种最简单的格式标准,在ROS中使用2D激光雷达和Gmapping功能包生成的栅格地图就是PGM地图,如下图:
在这里插入图片描述
Octo-map(八叉树地图)
对于三维地图,通过观察可以发现障碍物只是其中一小部分,我们可以使用一些特殊的数据结构来存储,比如八叉树(octree)。octree就是有八个子节点的树,是一种递归、轴对齐且空间间隔的数据结构,常用于3D数据的表达。

在这里插入图片描述

假设某个空间是一个立方体,这个立方体中有一个小障碍物,我们可以直接将这个立方体标记为占用状态,很显然这种方式太粗糙了,我们需要一种更精细的方法。当然可以使用三维栅格地图,将立方体分成很多个符合精度要求的小立方体,然后对障碍物所在的小立方体进行标记,但是占用内存太大,障碍物只是占据空间中很小一部分,很多空闲状态的立方体并不需要专门分配内存进行标记。

那么如何兼顾精度和内存呢?这时候就该祭出八叉树结构了。

可以将这个立方体分成八个小立方体,对包含障碍物的立方体继续进行分割,直到达到我们想要的精度为止。当某个节点的所有子节点都是占据、空闲或者未知状态时,我们可以将它和它的子节点全部剪掉,这样可以极大的减少占用的内存空间
在这里插入图片描述

但是Octomap不能直接使用索引进行查询,要按照树的结构进行递归查询,这也是一种牺牲时间换空间的方法吧。

能够减少内存的占用的地图形式还有Voxel Hashing。

Point cloud map(点云地图)
点云是一系列点的集合,使用不用方法得到的点云有不同的数据结构,根据激光测量原理得到的点云包含三维坐标和激光反射强度数据;根据视觉测量得到的点云数据包含三维坐标和颜色数据。根据点的稀疏程度不同,可以分为稀疏点云地图和稠密点云地图,稀疏地图主要用于机器人定位,稠密地图经过转换后可以导航,比较常用的转换方法是八叉树地图。

2、拓扑地图
不具备真实的物理尺度,只包含不同位置的连通关系和距离,常用于大规模的机器人路径规划
3、语义地图
在尺度地图上添加标签,常用于人机交互。高德地图

高精度地图可以为无人车提供的先验信息包括:道路曲率、航向、坡度和横坡角······
在这里插入图片描述
在开始引入之前,先提一下两个地图格式:

  1. OpenDrive

一种逻辑描述道路网的开源格式,主要在仿真器领域使用。其中OpenCRG是路面特性描述格式。OpenDRIVE Manager (OdrManager) 管理如何读取数据。
在这里插入图片描述
2. NDS:Navigation Data Standard

汽车业导航数据库标准化的格式。二者之间的转换如下图:
在这里插入图片描述

### 移动机器人 SLAM 地图构建与定位技术 移动机器人在未知环境中运行时,需要解决两个关键问题:一是如何构建环境地图;二是如何确定自身在该地图中的位置。这一过程被称为同时定位与地图构建(Simultaneous Localization and Mapping, SLAM)。SLAM 技术是移动机器人实现自主导航的核心技术之一。 #### 1. SLAM 的基本原理 SLAM 的核心目标是通过传感器数据估计机器人的运动轨迹,并同时生成环境的几何模型或拓扑地图。通常,SLAM 系统依赖于两类主要的传感器数据:一类是用于测量机器人运动的里程计、惯性测量单元(IMU)等内部传感器数据;另一类是用于感知环境特征的激光雷达、摄像头或超声波传感器等外部传感器数据[^1]。 #### 2. 常见的 SLAM 方法 根据使用的传感器类型,SLAM 方法可以分为以下几类: - **激光 SLAM** 激光 SLAM 使用激光雷达作为主要传感器,通过扫描环境并提取特征点或线段来构建地图。激光 SLAM 的经典算法包括 Hector SLAM GMapping[^2]。Hector SLAM 主要适用于平面环境,利用高频率的激光数据进行快速地图构建。GMapping 则基于粒子滤波器,适合处理非结构化环境下的机器人定位问题。 - **视觉 SLAM** 视觉 SLAM 依赖于摄像头获取的图像信息,结合计算机视觉技术提取环境特征点(如角点、边缘等),并通过三角化方法计算这些特征点的空间位置。常见的视觉 SLAM 算法包括 ORB-SLAM LSD-SLAM[^3]。ORB-SLAM 是一种基于关键点匹配的实时 SLAM 系统,支持单目、双目 RGB-D 相机。LSD-SLAM 则专注于直接处理图像强度信息,适用于低纹理环境。 - **多传感器融合 SLAM** 多传感器融合 SLAM 结合了多种传感器的优势,例如将激光雷达摄像头的数据进行融合,以提高地图构建的精度鲁棒性。这类方法通常使用扩展卡尔曼滤波器(EKF)或粒子滤波器进行状态估计[^4]。 #### 3. SLAM 的关键技术 - **前端:特征提取与匹配** 在 SLAM 系统中,前端负责从传感器数据中提取环境特征,并进行特征匹配以建立关联。对于激光 SLAM,前端通常提取几何特征(如直线、圆弧等);而对于视觉 SLAM,则提取图像中的关键点或边缘信息[^5]。 - **后端:优化与地图更新** 后端的主要任务是对前端生成的观测数据进行优化,以减少累积误差并生成一致的地图常用的优化方法包括图优化(Graph Optimization) Bundle Adjustment。图优化通过最小化节点之间的误差来优化机器人的位姿地图特征点的位置[^6]。 #### 4. 实现 SLAM 的软件工具 为了简化 SLAM 算法的开发与部署,许多开源框架提供了强大的支持: - **ROS(Robot Operating System)** ROS 提供了丰富的 SLAM 库工具包,例如 gmapping、cartographer rtabmap。这些工具包支持多种传感器输入,并能在不同硬件平台上运行。 - **OpenCV** OpenCV 是一个广泛应用于计算机视觉领域的库,提供了许多与视觉 SLAM 相关的功能,如特征检测、描述符匹配等[^7]。 ```python # 示例代码:使用 ROS GMapping 实现 SLAM import rospy from nav_msgs.msg import OccupancyGrid def slam_callback(data): # 处理地图数据 map_data = data.data rospy.loginfo("SLAM Map Updated") def main(): rospy.init_node('slam_node', anonymous=True) rospy.Subscriber("/map", OccupancyGrid, slam_callback) rospy.spin() if __name__ == '__main__': main() ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值