第二章:空间与环境建模——构型空间、栅格、拓扑与几何地图
大家好,欢迎来到第二章。这一章我们聊聊机器人怎么“看懂”周围的世界。
你想想看,一个机器人要动起来,它首先得知道自己在哪里,周围有什么。这就像你走进一个陌生的房间,得先扫一眼,看清桌椅板凳的位置,才能决定怎么走。对机器人来说,这个过程就叫“空间与环境建模”。
我个人习惯把这一章看作是整个路径规划的基石。地基没打好,后面盖什么楼都得塌。咱们今天就把这四种最主流的建模方法掰开揉碎了讲清楚。
2.1 构型空间(C-Space)—— 机器人的“自由度”世界
先说一个最核心的概念:构型空间,英文叫 Configuration Space,圈内人简称 C-Space。
说白了,C-Space 就是把机器人的所有可能姿态,映射到一个高维空间里。每一个点,代表机器人一个特定的姿势。
举个例子:一个在平面上平移的机器人,它的位置可以用 (x, y) 表示。那它的 C-Space 就是一个二维平面。如果它还能旋转,那就得加上一个角度 θ,变成 (x, y, θ),C-Space 就成了三维空间。
核心思想:在 C-Space 里,机器人被“压缩”成一个点。障碍物则被“膨胀”成 C-Space 中的禁区。这样一来,路径规划问题就变成了:在 C-Space 中找一条从起点到终点、不碰触禁区的路径。
我在项目中遇到过一个问题:当时做机械臂避障,一开始直接在笛卡尔空间里算,结果碰撞检测算到崩溃。后来换成 C-Space 的思路,把机械臂的每个关节角当成一个维度,问题瞬间简化了。嗯,这里要注意,C-Space 的维度等于机器人的自由度数量。自由度一多,维度灾难就来了,这是后话。
我的习惯:拿到一个新机器人,第一件事就是数它的自由度。然后问自己:这个 C-Space 我能显式构建吗?还是只能用采样方法隐式探索?
2.2 栅格地图(Grid Map)—— 最直观的“像素化”世界
栅格地图,大家应该不陌生。就是把环境切成一个个小格子,每个格子要么是“空闲”,要么是“占用”。
这玩意儿在扫地机器人里用得最多。你想想看,扫地机把房间画成一张网格图,每个格子代表 5cm × 5cm 的区域。干净的地方是白色,有障碍物的地方是黑色。
表示方法:
- 占用栅格地图(Occupancy Grid Map):每个格子存一个概率值,0 表示绝对空闲,1 表示绝对占用。中间值表示不确定。
- 代价地图(Costmap):在占用栅格基础上,给每个格子加一个“通行代价”。靠近障碍物的格子代价高,机器人会尽量绕开。
我曾经在一个仓库项目里吃过亏。当时栅格分辨率设得太细(1cm),结果地图大得离谱,路径规划慢得像蜗牛。后来我学乖了:室内场景用 5cm 分辨率,室外用 20cm,动态障碍物附近再局部细化。
避坑指南:我曾经把栅格地图的更新频率设得太高,结果 CPU 全耗在地图更新上,规划器反而没资源跑了。记住:地图更新和路径规划是两个线程,优先级要分开。
2.3 拓扑地图(Topological Map)—— 用“图”简化世界
拓扑地图,说白了就是只保留“连通关系”,丢掉精确的几何信息。
你想想看,地铁线路图就是典型的拓扑地图。它不关心站台的实际形状,也不关心轨道到底有多长,只告诉你:哪两个站是相邻的,换乘需要走哪条线。
表示方法:
- 节点(Node):代表关键位置,比如房间门口、走廊拐角、电梯口。
- 边(Edge):代表两个节点之间的连通路径,可以附带距离或时间代价。
我个人习惯在大型建筑里用拓扑地图。比如一个商场,你不需要知道每个店铺的精确轮廓,只需要知道“从 A 区到 B 区,经过 C 走廊”就够了。这样规划速度极快,适合做全局导航。
但拓扑地图有个缺点:它太“粗”了。如果两个节点之间有一条窄缝,拓扑地图不会告诉你。所以它通常和栅格地图配合使用——拓扑地图做全局规划,栅格地图做局部避障。
2.4 几何地图(Geometric Map)—— 用数学描述世界
几何地图,就是用点、线、面、多边形这些几何元素来精确描述环境。
常见形式:
- 点云地图:用一堆三维点来描述环境。激光雷达扫出来的就是点云。
- 多边形地图:用多边形表示障碍物轮廓。比如用矩形表示桌子,用圆形表示柱子。
- 特征地图:提取环境中的关键特征,比如墙角、门框、路标。
我记得有一次做自动驾驶的泊车项目,用的就是几何地图。我们把停车位用四个角点表示,把旁边的车用矩形框表示。然后规划算法就在这些几何形状之间找空隙。精度很高,但计算量也大。
对比一下:
| 地图类型 | 精度 | 存储量 | 规划速度 | 适用场景 |
|---|---|---|---|---|
| 栅格地图 | 中 | 大 | 中 | 室内、扫地机 |
| 拓扑地图 | 低 | 小 | 快 | 大型建筑、导航 |
| 几何地图 | 高 | 中 | 慢 | 自动驾驶、精密操作 |
2.5 四种地图的融合使用
实际项目中,没人只用一种地图。我通常的做法是:
- 全局层:用拓扑地图做粗粒度规划,快速给出一个“大方向”。
- 局部层:用栅格地图做精细规划,处理动态障碍物。
- 碰撞检测层:用几何地图做精确碰撞检测,确保机器人不会擦到障碍物。
举个例子:一个送餐机器人从厨房到包间。拓扑地图告诉它“先出厨房,左转进走廊,第三个门右转”。栅格地图告诉它“走廊中间有个人,绕一下”。几何地图告诉它“门框宽度 80cm,机器人宽度 60cm,能过”。三层配合,稳得很。
我的建议:初学者别一上来就搞复杂的地图融合。先吃透一种地图,比如栅格地图,把 A* 算法跑通。然后再慢慢加拓扑层、几何层。贪多嚼不烂。
2.6 本章知识体系图
下面这张图,是我自己梳理的本章核心逻辑。你可以把它当成一张“地图”,帮你理清思路。
好了,这一章的内容就到这里。四种地图各有千秋,没有绝对的好坏。关键看你手头的机器人是什么类型,环境有多大,实时性要求有多高。多试几次,你自然就找到感觉了。
可可精品资料库