运动规划与轨迹优化
路径规划
路径规划(Path Planning)是在给定环境中找到从起点到终点的无碰撞路径,是机器人导航和自动驾驶的核心问题。
基于图搜索的方法
A* 算法
A*是路径规划中最经典的算法,结合了Dijkstra的最优性和贪心搜索的效率:
- \(g(n)\):从起点到节点 \(n\) 的实际代价
- \(h(n)\):从节点 \(n\) 到目标的启发式估计
- 当 \(h\) 是可容的(admissible)时,A*保证找到最优路径
常见启发式:欧几里得距离、曼哈顿距离、对角距离。
D 与 D Lite
适用于动态环境的增量搜索算法:
- D*:在环境变化时高效重规划(从目标向起点搜索)
- D* Lite:简化版本,基于LPA(Lifelong Planning A)
- 广泛应用于火星探测器和移动机器人导航
跳点搜索 (JPS)
在均匀网格上大幅加速A*:
- 利用网格的对称性跳过不必要的节点扩展
- 保持A*的最优性保证
- 在大规模网格地图中速度提升一个数量级
基于采样的方法
RRT(快速探索随机树)
适用于高维连续空间的路径规划:
- 在空间中随机采样点 \(q_{\text{rand}}\)
- 找到树中最近节点 \(q_{\text{near}}\)
- 沿方向延伸固定步长得到 \(q_{\text{new}}\)
- 若路径无碰撞则加入树中
RRT*:RRT的渐近最优变体,通过重连接(rewiring)保证随采样数增加收敛到最优路径。
PRM(概率路线图)
适用于多查询场景:
- 构建阶段:在自由空间中随机采样节点,连接可行边
- 查询阶段:将起点和终点连入路线图,用图搜索找路径
PRM更适合环境不变但需要规划多条路径的场景。
导航网格 (NavMesh)
游戏AI和室内导航中常用的表示方法:
- 将可行区域分解为凸多边形网格
- 在多边形之间建立邻接关系
- 路径搜索在多边形图上进行(粗搜索 + 漏斗算法细化)
优点:搜索空间小、路径自然、支持不同尺寸的智能体。
势场法
将目标建模为引力源、障碍物建模为斥力源:
- 优点:计算简单、实时性好
- 缺点:局部最小值问题——智能体可能陷入非目标的平衡点
- 解决方案:随机扰动、虚拟障碍、与全局规划器结合
轨迹规划
轨迹规划(Trajectory Planning)在路径规划的基础上加入时间维度,生成满足运动学和时间约束的平滑轨迹。
路径与轨迹的区别
| 路径 (Path) | 轨迹 (Trajectory) | |
|---|---|---|
| 时间 | 无时间信息 | 包含时间参数 \(\mathbf{q}(t)\) |
| 输出 | 空间中的几何曲线 | 位置-速度-加速度随时间的函数 |
| 约束 | 几何约束(避障) | 运动学/动力学约束(速度、加速度限制) |
样条插值方法
三次样条 (Cubic Spline)
在路径点之间用三次多项式插值,保证 \(C^2\) 连续性:
B样条 (B-Spline)
提供更好的局部控制——修改一个控制点只影响局部曲线段。
贝塞尔曲线 (Bézier Curve)
\(n\) 阶贝塞尔曲线由 \(n+1\) 个控制点定义:
轨迹优化
将轨迹生成表述为优化问题:
常见优化目标:
- 最小snap(四阶导数):\(\min \int \|\dddot{\mathbf{q}}(t)\|^2 dt\),生成平滑轨迹(无人机常用)
- 最小加加速度(jerk):\(\min \int \|\ddot{\mathbf{q}}(t)\|^2 dt\),适用于机械臂
- 最短时间:在满足运动约束下最小化到达时间
基于QP的多项式轨迹优化
将轨迹参数化为分段多项式,目标函数和约束化为二次规划(QP)问题:
其中 \(\mathbf{c}\) 是多项式系数向量。这是无人机轨迹规划中的标准方法。
时间分配
给定路径点后,需要决定每段的通过时间:
- 均匀分配:简单但不够好
- 梯形速度规划:加速-匀速-减速
- S型速度规划:加加速度有限,更平滑
- 时间最优分配:考虑速度/加速度约束的最优时间
Dubins路径与Reeds-Shepp路径
受运动学约束的最短路径:
- Dubins路径:只能前进、有最小转弯半径的车辆——最短路径由直线(S)和圆弧(L/R)组成,共6种类型
- Reeds-Shepp路径:允许前进和后退——46种可能的路径类型
这些是自动驾驶中底层轨迹生成的基础。
运动规划与动力学
运动规划(Motion Planning)在构型空间中寻找满足动力学约束的可行轨迹,是机器人学中的核心问题。
构型空间 (Configuration Space)
将机器人的所有可能姿态用一个高维空间表示:
- 构型 \(\mathbf{q}\):完整描述机器人姿态的最小参数集
- 平面移动机器人:\(\mathbf{q} = (x, y, \theta)\),3维
- 6轴机械臂:\(\mathbf{q} = (\theta_1, \ldots, \theta_6)\),6维
- 人形机器人:可达30维以上
- C-free:无碰撞的构型集合
- C-obstacle:与障碍物碰撞的构型集合
运动规划的本质就是在 C-free 中寻找连续路径。
运动学约束
完整约束 (Holonomic)
约束只涉及构型(位置),不涉及速度:
例:机械臂关节角度限制。具有完整约束的系统可以在任意方向瞬时移动。
非完整约束 (Nonholonomic)
约束涉及速度,无法积分为纯位置约束:
例:车辆不能横向移动(\(\dot{y} = v \sin\theta\))。非完整约束使得规划问题显著更难——系统的可达空间比构型空间维度更高。
动力学约束
考虑力和质量的影响:
- \(\mathbf{M}\):惯性矩阵
- \(\mathbf{C}\):科里奥利力和向心力
- \(\mathbf{g}\):重力项
- \(\boldsymbol{\tau}\):驱动力矩
动力学约束使规划空间从构型空间扩展到状态空间 \((\mathbf{q}, \dot{\mathbf{q}})\)。
基于采样的运动规划
Kinodynamic RRT
将动力学约束融入RRT:
- 采样状态为 \((\mathbf{q}, \dot{\mathbf{q}})\)
- 扩展时通过前向模拟(forward simulation)应用控制输入
- 使用局部控制器连接近邻节点
SST(Stable Sparse RRT)
- 渐近近最优的kinodynamic规划算法
- 通过稀疏化和修剪保持树的效率
CHOMP与TrajOpt
CHOMP(Covariant Hamiltonian Optimization for Motion Planning):
- 将轨迹建模为函数,优化平滑性 + 碰撞代价
- 使用协变梯度下降
TrajOpt(Trajectory Optimization):
- 使用序列凸优化(Sequential Convex Programming)
- 将碰撞约束线性化,迭代求解
多机器人运动规划
多机器人联合运动规划的维度是单机器人的倍数:
- 耦合方法:在联合构型空间规划(维度爆炸)
- 解耦方法:分别规划后协调(可能无解)
- 基于优先级的方法:按优先级依次规划,后续机器人避让前序
- CBS(Conflict-Based Search):先独立规划,发现冲突后分支求解
规划与控制衔接
规划与控制的衔接是将高层决策转化为可执行动作的关键环节。现实系统中,规划和控制并非割裂的,而是需要紧密协作。
规划-控制的层次架构
典型的自主系统采用分层架构:
| 层次 | 功能 | 频率 | 示例 |
|---|---|---|---|
| 任务规划 | 高层目标分解 | ~0.1 Hz | "从A到B取包裹" |
| 行为决策 | 选择行为模式 | ~1 Hz | 换道、跟车、超车 |
| 运动规划 | 生成参考轨迹 | ~10 Hz | 局部轨迹优化 |
| 控制执行 | 跟踪参考轨迹 | ~100 Hz | PID、MPC |
每层以不同的时间尺度运行,高层提供参考,底层保证执行。
模型预测控制 (MPC)
MPC是连接规划与控制最重要的方法之一,本质上是一个滚动规划器:
核心思想:
- 在每个时间步求解有限时域的优化问题
- 只执行第一步控制输入
- 获取新的状态反馈后重新求解
优点:
- 自然地处理约束(状态约束、输入约束)
- 结合了规划(前瞻性)和控制(反馈性)
- 对模型误差和扰动有一定鲁棒性
计算挑战:需要在控制周期内求解优化问题,实时性要求高。
线性MPC vs 非线性MPC
| 线性MPC | 非线性MPC | |
|---|---|---|
| 模型 | 线性:\(\mathbf{x}_{k+1} = A\mathbf{x}_k + B\mathbf{u}_k\) | 非线性:\(\mathbf{x}_{k+1} = f(\mathbf{x}_k, \mathbf{u}_k)\) |
| 优化 | QP(高效求解) | NLP(计算量大) |
| 应用 | 局部线性化场景 | 大范围非线性运动 |
实时重规划
真实环境是动态的,规划必须能够快速重做:
触发重规划的条件:
- 障碍物状态变化(检测到新障碍物)
- 当前轨迹不可行(偏差过大)
- 目标变更
- 环境预测更新
实时性策略:
- 任意时间算法(Anytime):随时可返回当前最优解,计算时间越长解越好(如ARA*)
- 增量式方法:复用上次规划结果,只更新变化的部分(如D* Lite)
- 并行规划:在执行当前轨迹的同时,后台规划新轨迹
规划与学习的融合
现代系统越来越多地将学习方法引入规划-控制框架:
- 学习型MPC:用神经网络学习MPC的代价函数或约束
- 学习型路径规划:用深度学习预测启发式函数或直接输出路径
- 扩散模型规划:将规划问题建模为从噪声中去噪生成轨迹(Diffuser)
- 端到端方法:从感知直接到控制,跳过显式规划(但可解释性差)
关键挑战:如何在学习的灵活性和规划的安全保证之间取得平衡。