第17章 路径规划中的坐标系

码枢沄社 · 嵌入式体系化教程平台
高级 👤 已掌握机器人基础坐标变换,需要理解规划算法底层逻辑的开发者 🔧 为机器人设计全局路径、局部避障或轨迹优化算法
本章你将学到
  • 全局规划与局部规划各自依赖的坐标系
  • 代价地图在不同坐标系下的构建与查询方式
  • 如何将规划出的路径转换为机器人可执行的命令
核心概念规划空间代价地图

当机器人接收到“去客厅”的指令时,它的大脑——路径规划模块——就开始高速运转。这个模块并非在一个统一的“地图”上工作,而是在多个相互关联的坐标系中穿梭,计算出一条安全、高效的行走路线。我在一个仓储机器人项目中就曾因为混淆了规划坐标系,导致机器人规划的路径在转弯处总是撞上货架边缘。

规划空间:算法的工作台

你可以把规划空间想象成木匠的工作台。木匠根据图纸(地图)在工作台(规划空间)上标记、测量和切割材料(规划路径)。在机器人学中,规划空间是路径规划算法进行搜索和计算的抽象数学空间,它定义了机器人“可到达”和“不可到达”的区域。最常用的两种规划空间是位形空间工作空间

全局规划与局部规划的坐标系舞台

路径规划通常分为全局和局部两个层次,它们像战略与战术的关系,各自在不同的坐标系舞台上演绎。

全局规划器
世界/地图坐标系
粗粒度路径
局部规划器
机器人坐标系
细粒度速度命令

全局规划:在地图坐标系中勾勒蓝图

全局规划器(如A*、Dijkstra算法)的舞台是世界坐标系或地图坐标系。它接收一个静态的、预先构建好的地图,地图上的每个像素或栅格都对应着世界中的一个固定位置。规划器在这个坐标系中,从机器人的目标点(同样是地图坐标)回溯到起点,找出一条连接两点的、避开所有已知障碍物的通道。这条路径是一系列世界坐标系下的位置点序列。

局部规划:在机器人坐标系下闪转腾挪

局部规划器(如DWA、TEB算法)的舞台则是机器人坐标系。它的任务更精细:根据全局路径的指引,结合实时传感器(如激光雷达)感知到的、在机器人坐标系下表达的局部障碍物信息,计算出机器人下一时刻应有的线速度和角速度。因为传感器数据天然在机器人坐标系下,在此坐标系下做避障计算最直接。

这两个阶段通过坐标变换紧密耦合。全局路径点需要被实时转换到机器人坐标系下,成为局部规划器追求的“临时目标点”;而局部规划器输出的速度命令,在发送给底层控制器前,可能需要根据机器人的朝向进行转换。

代价地图:规划器的“地形图”

无论是全局还是局部规划,都需要一份“地形图”来评估每个位置的通过成本,这就是代价地图。它本质上是一个二维网格,但关键问题在于:这个网格锚定在哪个坐标系?

代价地图层常用坐标系描述与用途更新频率
静态层地图坐标系基于先验地图(如SLAM建图所得),标识墙壁、固定家具等永久障碍物。全局规划主要依据此层。一次加载,基本不变
障碍层机器人坐标系 → 地图坐标系融合实时传感器数据(如激光雷达点云)。传感器数据先在机器人坐标系下生成局部障碍信息,再通过机器人位姿变换到地图坐标系中,更新此层。高频(如10Hz)
膨胀层地图坐标系在障碍物周围生成一个成本渐增的区域,相当于为机器人建立一个“安全缓冲区”,防止擦碰。计算依赖于地图坐标系下的障碍物位置。中频(障碍更新后触发)

实际开发中,大部分导航框架(如ROS的Navigation2)维护的核心代价地图是基于地图坐标系的。传感器数据需要经过“机器人位姿”这个变换,才能正确“绘制”到这张全局地形图上。

⚠️ 常见误区

  • 混淆代价地图的参考系: 错误地将激光雷达在机器人坐标系下的原始扫描数据直接当作地图坐标系的障碍物,导致障碍物位置随机器人移动而“漂移”,规划彻底混乱。
  • 忽略坐标系转换延迟: 机器人位姿(用于坐标变换)的获取、代价地图的更新、规划器的计算都存在延迟。如果使用过时的位姿进行变换,会导致局部规划器基于一个“错位”的代价地图做决策,在高速移动时尤其危险。
  • 膨胀半径设置不当: 膨胀层的半径设置需要考虑到机器人轮廓在不同坐标系下的表示。如果机器人轮廓是在本体坐标系下定义的,在应用到地图坐标系进行膨胀计算时,需要确保其尺寸被正确理解,否则安全缓冲区可能过小或过大。

编者提示: 在调试路径规划问题时,一个非常有效的手段是可视化代价地图的各个层。你可以同时查看地图坐标系下的静态层、实时更新的障碍层和膨胀层。如果发现障碍物的可视化位置与它在实际世界中的位置对不上,那么几乎可以断定是坐标系转换环节(很可能是机器人当前位姿)出了问题。这比单纯看路径输出直观得多。

从路径到动作:坐标变换的最后一环

规划器输出的结果需要被转换成机器人底盘能理解的命令。这个过程也涉及关键的坐标系转换。

全局路径
(地图坐标系)
坐标变换
(使用当前位姿)
局部目标点
(机器人坐标系)
局部规划器
速度命令
(机器人坐标系)

局部规划器最终输出的通常是机器人坐标系下的线速度(vx, vy)和角速度(ω)。对于差分轮式机器人,vy通常为0。这些速度命令可以直接发送给底层电机控制器。但对于全向移动机器人(如麦克纳姆轮),可能需要将这些机器人坐标系下的速度,根据当前机器人的实际朝向,转换到世界坐标系下进行分解,再计算各轮转速。我在一个全向平台项目里就踩过这个坑,直接发送机器人坐标系下的速度导致斜向移动时控制异常。

规划算法的坐标系视角

不同的规划算法对坐标系的利用方式也不同。

采样型规划器
(如RRT*)

  • 工作空间: 直接在任务所需的世界/地图坐标系(如二维XY平面)中随机采样点。
  • 关键操作: 检查采样点与连线是否在自由空间(碰撞检测),这需要所有几何体在同一坐标系(地图坐标系)下。

基于优化的规划器
(如TEB)

  • 位形空间: 在包含位置和姿态的位形空间(如SE(2):x, y, θ)中进行优化。
  • 关键操作: 将优化变量(位姿)通过运动学模型与速度关联,并将位姿投影回地图坐标系以计算障碍物距离代价。

基于网格的规划器
(如A*, D*)

  • 离散化地图坐标系: 将连续的地图坐标系离散化为栅格网格。
  • 关键操作: 搜索在网格单元间进行,每个单元的成本来自对应地图坐标位置的代价地图值。

理解算法在哪个空间操作,是正确实现和调试的基础。例如,如果你为RRT*算法提供的障碍物信息是在机器人坐标系下的,而没有转换到全局地图坐标系,那么算法采样的“自由”路径点将毫无意义。

动手试一试

假设你有一个简单的圆形机器人,半径为0.3米。你收到一个位于机器人坐标系下 (x=2.0, y=1.0) 的障碍物点。机器人的当前位姿在世界坐标系下为 (x=5.0, y=3.0, θ=π/4)。

  1. 请将这个障碍物点转换到世界坐标系下。
  2. 在世界坐标系下,计算机器人轮廓(圆心在(5.0, 3.0),半径0.3米)与这个障碍物点的欧氏距离。
  3. 如果膨胀层设置的安全距离是0.5米,请问这个障碍物点是否会被计入膨胀代价?为什么?

这个练习能帮助你直观感受坐标变换如何影响碰撞检测和安全距离计算。

检验你的理解

  1. 判断题:局部规划器(如DWA)主要在机器人坐标系下进行运算,以处理局部避障和速度命令。
  2. 选择题:代价地图中的“障碍物层”数据主要来源于传感器,这些数据最初在哪个坐标系下?
    A) 世界坐标系
    B) 地图坐标系
    C) 机器人坐标系
    D) 传感器坐标系
  3. 判断题:规划器输出的速度命令(vx, vy, ω)通常是相对于机器人坐标系的。

本章小结

  • 路径规划在全局(地图坐标系)局部(机器人坐标系)两个层次展开,通过坐标变换协同工作。
  • 代价地图是规划的核心依据,其静态层基于地图坐标系,而障碍层需要将机器人坐标系下的传感器数据实时变换到地图坐标系进行更新。
  • 从全局路径到局部速度命令的生成,是一个贯穿多个坐标系的连续变换链,任何一环的误差都会导致规划失败。
  • 不同的规划算法(采样型、优化型、网格型)在其特定的规划空间(工作空间或位形空间)内操作,这些空间都与基础坐标系紧密关联。
  • 理解并正确管理这些坐标系及其变换关系,是实现鲁棒、高效机器人导航系统的关键。
← 上一章 返回目录 下一章 →