一、地图基础概念:地图类型、坐标系与精度
大家好,我是你们的SLAM讲师。今天咱们聊聊地图基础概念。说实话,很多新手一上来就急着跑算法,结果地图建出来歪歪扭扭,定位也飘得厉害。根本原因是什么?就是地图基础没打牢。
我个人习惯,做任何项目前,先把地图类型、坐标系、分辨率这三件事搞清楚。磨刀不误砍柴工嘛。
1.1 地图类型:三种主流地图
SLAM里常用的地图,说白了就三种:栅格地图、拓扑地图、特征地图。每种地图都有自己的脾气,选错了,后面全是坑。
1.1.1 栅格地图(Occupancy Grid Map)
栅格地图是最直观的。把空间切成一个个小格子,每个格子存一个概率值——0表示空闲,1表示占据,0.5表示未知。
我遇到过一个项目,在仓库里做AGV导航。一开始用的栅格分辨率是5cm,结果小车老是撞到货架腿。后来改成2cm,问题就解决了。但代价是什么?内存暴涨了6倍多。
核心要点:
- 适合导航、避障、路径规划
- 存储量大,分辨率越高内存越大
- 更新简单,直接改格子概率值就行
1.1.2 拓扑地图(Topological Map)
拓扑地图不关心具体几何形状,只关心「节点」和「边」。节点代表关键位置,边代表连通关系。你想想看,地铁线路图就是典型的拓扑地图。
我曾经在一个大型商场做机器人导航,栅格地图建出来几百兆,根本跑不动。后来改用拓扑地图,只记录电梯口、店铺门口这些关键节点,内存直接降到几KB。但缺点也很明显——没法做精细避障。
我的建议:大场景用拓扑地图做全局规划,小场景用栅格地图做局部规划。两者结合,效果最好。
1.1.3 特征地图(Feature Map)
特征地图只存「特征点」,比如墙角、二维码、路标。每个特征点有坐标和描述子。这种地图最轻量,但依赖特征提取的质量。
嗯,这里要注意:特征地图对光照变化很敏感。我在一个地下车库做过测试,白天和晚上的特征点匹配率不到30%。后来加了反光条,才稳定下来。
| 地图类型 | 存储量 | 适用场景 | 典型分辨率 |
|---|---|---|---|
| 栅格地图 | 大(MB~GB) | 室内导航、避障 | 2cm~10cm |
| 拓扑地图 | 小(KB~MB) | 大场景、路径规划 | 节点间距1m~10m |
| 特征地图 | 极小(KB) | 视觉SLAM、AR | 特征点密度 |
1.2 坐标系与坐标变换
坐标系搞不清楚,地图建出来就是歪的。我见过太多人把机器人坐标系和世界坐标系搞混,结果定位数据全错了。
1.2.1 常用坐标系
SLAM里常用的坐标系有四个:
- 世界坐标系(World Frame):固定不动,所有地图数据都基于它
- 机器人坐标系(Robot Frame):跟着机器人走,原点在机器人中心
- 传感器坐标系(Sensor Frame):激光雷达或相机自己的坐标系
- 图像坐标系(Image Frame):像素坐标,只在视觉SLAM里用
我建议:所有传感器数据,第一步就转换到机器人坐标系。这样后面处理起来统一,不容易出错。
1.2.2 坐标变换矩阵
坐标变换说白了就是乘一个4x4的矩阵。平移加旋转,搞定。
// 一个典型的坐标变换矩阵
T = [R t]
[0 1]
// 其中R是3x3旋转矩阵,t是3x1平移向量
// 把点p从传感器坐标系转到机器人坐标系:
p_robot = T_sensor_to_robot * p_sensor
避坑指南:我曾经在项目里直接用欧拉角做变换,结果遇到万向锁,机器人原地打转。后来老老实实用四元数,再也没出过问题。
1.3 地图分辨率与精度
分辨率不是越高越好。你想想看,分辨率提高一倍,内存占用变成四倍。但精度不一定能提高四倍。
1.3.1 分辨率的选择
我一般按这个经验来选:
- 室内走廊:5cm分辨率就够了
- 仓库货架:2cm分辨率,不然货架腿识别不出来
- 室外大场景:10cm~20cm,再高内存扛不住
1.3.2 精度的影响因素
地图精度不只看分辨率,还看这些:
- 传感器噪声:激光雷达的精度直接决定地图质量
- 里程计漂移:跑久了地图会变形
- 回环检测:没有回环,地图就是散的
我记得有一次做工厂项目,激光雷达精度是±3cm,地图分辨率设了1cm。结果呢?每个格子都在抖动,根本没法用。后来把分辨率降到3cm,反而稳定了。
经验公式:地图分辨率 ≈ 传感器精度 × 2。这样既不会浪费内存,也不会丢失细节。
知识体系结构图
下面这张图,是我自己总结的地图基础概念框架。你看一遍,心里就有谱了。
好了,地图基础概念就讲到这里。记住一句话:地图类型决定你怎么存,坐标系决定你怎么算,分辨率决定你存多细。这三样搞明白了,后面建图定位就顺了。
本章小结:
- 三种地图各有优劣,根据场景选型
- 坐标系必须统一,推荐先转到机器人坐标系
- 分辨率不是越高越好,匹配传感器精度才是关键
可可精品资料库