第206篇 运动规划概述——全局/局部/反应式规划的分类
控制理论系列讲完了,从今天开始进入运动规划领域。这个系列大概会写十几篇,把规划算法从头到尾讲一遍。
运动规划是机器人最"烧脑"的模块之一。说白了就是回答一个问题:机器人怎么从A点到达B点,同时不撞到任何东西?这个问题看似简单,但根据场景不同,解法天差地别。工业机械臂在固定工位搬东西,和自动驾驶汽车在城市里穿梭,用的规划算法完全不是一个路数。
今天先做一个全景式的概述,把运动规划的分类、核心概念和算法框架理清楚。后面十几篇会逐个展开。
一、运动规划的本质
运动规划的数学定义很简洁:给定一个构型空间C和障碍物空间C_obs,找到一条从起始构型q_start到目标构型q_goal的无碰撞路径。
构型空间(Configuration Space,C-space)是关键概念。一个n自由度机器人的构型空间是n维的——每个维度对应一个关节角度(或位移)。障碍物在构型空间里会变成"膨胀"后的障碍物区域C_obs。膨胀的量等于机器人的"半径"——这样机器人就可以被当作一个点来处理。
# 构型空间的基本概念
# 2D平面上的点机器人:C = R^2
# 2D平面上的移动机器人(含朝向):C = R^2 × S^1
# 6轴机械臂:C = R^6(每个维度是一个关节角度)
# 自由度越多,构型空间维度越高
# 障碍物膨胀示例
# 圆形机器人(半径r)在2D空间
# 原始障碍物 → 膨胀r → 机器人简化为点
为什么要在构型空间做规划而不是笛卡尔空间?因为构型空间把机器人"简化"成了一个点。碰撞检测变成了"这个点是否在障碍物区域内"的问题,比直接处理机器人的几何形状简单得多。代价是维度变高了——一个6轴机械臂的构型空间是6维的,但这比在3D工作空间里处理一个复杂形状的碰撞检测要方便。
二、规划算法的三大分类
运动规划算法按工作方式分三大类:
1. 全局规划(离线规划)
全局规划假设环境完全已知,在规划前就把整条路径算好。
特点:
- 环境信息完整(已知地图、已知障碍物位置)
- 规划一次,执行多次
- 追求最优性(最短路径、最少时间)
- 计算时间可以长一些(秒级甚至分钟级)
典型算法:Dijkstra、A、D Lite、PRM、RRT*
适用场景:仓储AGV(地图已知)、机械臂搬运(工件位置固定)、自动驾驶的全局路线规划。
2. 局部规划(在线规划)
局部规划只关注机器人周围一小片区域,实时生成局部路径。
特点:
- 环境信息不完整(只知道传感器能看到的范围)
- 每个控制周期都要重新规划
- 追求实时性(毫秒级响应)
- 不保证全局最优
典型算法:DWA、TEB、人工势场法、Lattice Planner
适用场景:移动机器人避障(动态行人)、无人机避障(未知环境)、机械臂在杂乱环境中运动。
3. 反应式规划
反应式规划不做"规划",而是根据当前传感器输入直接输出控制指令。相当于一个从传感器到执行器的映射函数。
特点:
- 极简计算(微秒级)
- 没有显式的路径概念
- 对突发情况响应最快
- 容易陷入局部极小值
典型算法:人工势场法(也可以归入局部规划)、向量场直方图(VFH)、Bug算法
适用场景:紧急避障、简单场景下的导航、和其他规划方法配合使用。
三、全局规划的两大流派
全局规划算法又分两大流派:图搜索和采样规划。
图搜索(Graph Search)
思路:把连续空间离散化成图(网格或节点),然后用图搜索算法找最短路径。
代表算法:Dijkstra、A、D Lite
优点:
- 能找到最优解(如果存在)
- 算法成熟,理论完备
- 实现相对简单
缺点:
- 维度灾难——空间维度越高,网格数量指数增长
- 离散化误差——路径只能沿网格方向走
- 不适合高维空间(比如7轴机械臂的构型空间)
采样规划(Sampling-based)
思路:在构型空间里随机采样点,用采样的点构建路线图(roadmap),在路线图上搜索路径。
代表算法:PRM、RRT、RRT、BIT
优点:
- 不受维度影响——高维空间也能用
- 不需要离散化——处理连续空间
- 概率完备——采样足够多一定能找到解(如果存在)
缺点:
- 路径质量不稳定——每次运行结果不同
- 狭窄通道难以通过——随机采样很难命中狭窄通道
- 最优性需要额外保证(RRT*等渐进最优算法)
所谓概率完备,是指"如果解存在,随着采样次数趋向无穷,找到解的概率趋向1"。这和A*那种"一定能找到最优解"的确定完备不同。工程上概率完备够用了——只要你给它足够的时间,它几乎一定能找到解。
四、规划系统的工程架构
实际工程中,运动规划通常是一个多层架构:
全局规划器(低频,1-10Hz) ↓ 全局路径 局部规划器(中频,10-50Hz) ↓ 局部轨迹 反应式层(高频,100-1000Hz) ↓ 控制指令 执行器
全局规划器在后台运行,每隔几秒更新一次全局路径。局部规划器根据全局路径和传感器数据,实时生成可执行的局部轨迹。反应式层处理紧急情况——比如突然出现的障碍物,直接输出避障指令。
这种分层架构的好处是:每一层关注不同时间尺度的问题,互不干扰。全局规划不用操心实时性,反应式层不用操心全局最优。
之前做AMR项目的团队就是这种架构。全局用A*在已知地图上规划,局部用DWA实时避障,最底层还有一个反应式急停——超声波检测到0.3m内有障碍物就直接停车。三层之间通过"路径-轨迹-指令"三级传递信息。全局路径是 waypoints 列表,局部规划器把 waypoints 转成速度指令,反应式层在紧急情况下覆盖速度指令。
还有一个细节:全局规划器通常跑在工控机上(算力充足),局部规划器跑在实时控制器上(保证时序),反应式层直接跑在安全PLC或MCU上(最高优先级)。
五、规划算法的评估指标
面试时经常被问到"你怎么评估一个规划算法好不好"。核心指标有这几个:
完备性:如果解存在,算法能保证找到吗?概率完备(RRT)还是确定完备(A*)?
最优性:找到的是最优解吗?最优(Dijkstra)、渐进最优(RRT*)、还是次优(DWA)?
计算效率:规划一次要多久?全局规划可以慢一些(秒级),局部规划必须快(毫秒级)。
路径质量:路径长度、平滑度、离障碍物距离。这些直接影响后续轨迹跟踪的效果。一条贴着障碍物走的最短路径,在实际执行时可能因为定位误差而碰撞。所以工程上通常偏好"离障碍物远一点"的路径,即使它更长。
可扩展性:维度增加时性能怎么变?高维空间用采样规划,低维空间用图搜索。
鲁棒性:环境有微小变化时,路径质量会不会剧烈下降?有些算法对环境变化很敏感,每次都要重新规划;有些算法能在环境变化后快速调整。
六、面试实战
Q:构型空间和工作空间有什么区别? A:工作空间是机器人末端运动的物理空间(通常是2D或3D)。构型空间是描述机器人所有关节状态的抽象空间(维度等于自由度数)。一个6轴机械臂的工作空间是3D的,但构型空间是6D的。
Q:为什么不在工作空间直接规划? A:因为机器人在工作空间不是"一个点"——它有体积、有形状。在构型空间里,机器人被简化成一个点,碰撞检测变成了点是否在障碍物区域内的问题。虽然构型空间维度高,但处理起来反而更统一。
Q:全局规划和局部规划怎么配合? A:全局规划给出粗略路径("走哪条路"),局部规划负责细节("怎么避眼前的障碍")。局部规划偏离全局路径太远时,触发全局重新规划。工程上还有一个常见做法:全局规划给出的路径作为局部规划的参考线,局部规划在参考线附近搜索最优轨迹。
小结
运动规划分三大类:全局规划(已知环境,求最优路径)、局部规划(实时避障,保证安全)、反应式规划(紧急响应,极速避障)。
全局规划分两大流派:图搜索(低维最优)和采样规划(高维可行)。工程上通常分层使用——全局+局部+反应式三层架构,各层各司其职。
下一篇开始深入图搜索,从最基础的Dijkstra算法讲起。
如果这篇文章对你有帮助,欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。
「机器人软件开发面试·从入门到精通」连载系列
上一篇:第205篇 控制理论面试高频题——面试官最爱问的15个控制问题
下一篇预告:第207篇 图搜索基础——状态空间离散化的思路
有任何问题欢迎评论区留言,我会尽量回复。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)