1. 机器人轨迹规划概述
在机器人运动控制领域,轨迹规划是连接高层任务指令与底层执行机构的关键桥梁。想象一下,当你给机械臂下达"抓取桌上的杯子"这样的指令时,机器人需要解决一系列复杂问题:如何避开障碍物?选择什么路径最省时省力?运动过程中如何保证平稳不抖动?这些正是轨迹规划要解决的核心问题。
轨迹规划(Trajectory Planning)与路径规划(Path Planning)常被混淆,但二者有本质区别。路径规划只关心"从A到B走哪条路",而轨迹规划还需要确定"以什么速度、加速度走这条路"。就像开车时,导航告诉你走哪条高速是路径规划,而决定何时加速、何时刹车则是轨迹规划的范畴。
现代机器人系统通常采用分层规划架构:
- 高层:任务规划(做什么)
- 中层:路径规划(走哪条路)
- 底层:轨迹规划(怎么走)
- 最底层:运动控制(执行轨迹)
这种分层设计使得系统可以模块化开发,每个层级专注于解决特定问题。本文将重点剖析中底层的关键技术——从数学基础到算法实现,再到前沿发展方向。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数学与运动学基础
2.1 坐标变换基础
2.1.1 旋转矩阵SO(3)
在三维空间中描述物体旋转,最直观的方式是使用3×3的旋转矩阵。所有合法的旋转矩阵构成特殊正交群SO(3),满足:
- RᵀR = I(正交性)
- det(R) = 1(右手系)
旋转矩阵的物理意义很直观:它的每一列代表旋转后坐标系各轴在原坐标系中的指向。例如绕z轴旋转θ角的矩阵为:
code复制R_z(θ) = [cosθ -sinθ 0
sinθ cosθ 0
0 0 1]
实际应用中需要注意:
- 连续旋转时矩阵乘法不满足交换律
- 浮点运算可能导致矩阵逐渐失去正交性,需要定期重新正交化
2.1.2 变换矩阵SE(3)
为了同时表示旋转和平移,我们使用齐次坐标下的4×4变换矩阵:
code复制T = [R t
0 1]
其中R∈SO(3),t∈ℝ³。所有这样的矩阵构成特殊欧氏群SE(3)。变换矩阵的逆可以高效计算:
code复制T⁻¹ = [Rᵀ -Rᵀt
0 1]
在机器人学中,SE(3)矩阵有两个主要用途:
- 描述连杆间的相对位姿(DH参数法)
- 表示工具坐标系相对于基坐标系的位置
2.1.3 四元数与双四元数
虽然矩阵表示直观,但在插值和优化时,四元数往往更高效。单位四元数q=[w,x,y,z]可以表示旋转,其中w=cos(θ/2),[x,y,z]=sin(θ/2)*n,n为旋转轴。
双四元数则进一步将平移和旋转统一在一个代数框架内,其形式为:
code复制dq = q_r + εq_t
其中q_r是旋转四元数,q_t是平移四元数,ε是双复数单位(ε²=0但ε≠0)。
实际工程建议:
- 日常开发用SE(3)+四元数组合足够
- 只有在需要极致性能的SLAM或动画系统中才考虑双四元数
2.2 关节空间与笛卡尔空间
2.2.1 空间对比
关节空间(Joint Space)直接控制各关节角度,特点是:
- 优点:计算简单,无奇异点
- 缺点:末端轨迹不可控,可能扫过危险区域
笛卡尔空间(Cartesian Space)控制末端执行器位姿,特点是:
- 优点:轨迹直观,易于避障
- 缺点:需要实时逆运动学解算
典型工业场景会混合使用两种空间:
- 长距离移动:关节空间规划
- 精细操作:笛卡尔空间规划
2.2.2 雅可比矩阵与速度映射
雅可比矩阵J建立了关节速度与末端速度的映射关系:
code复制ẋ = J(q)q̇
其中ẋ∈ℝ⁶是末端twist(线速度+角速度),q̇∈ℝⁿ是关节速度。雅可比矩阵可以通过微分运动学解析得到,也可以数值计算。
奇异点处理是实际应用中的关键问题。当det(JJᵀ)≈0时,系统进入奇异构型。常用解决方案:
- 阻尼最小二乘法(DLS):
code复制q̇ = Jᵀ(JJᵀ + λ²I)⁻¹ẋ
通过引入λ保证数值稳定性
- 任务优先级控制:
将任务分解为多个优先级,低优先级任务在奇异时被牺牲
3. 几何路径规划算法
3.1 基于搜索的算法
3.1.1 A*算法
A*是经典的启发式搜索算法,其代价函数为:
code复制f(n) = g(n) + h(n)
其中g(n)是起点到n的实际代价,h(n)是n到目标的估计代价(启发式)。
启发式设计直接影响算法性能:
- 可采纳性:h(n) ≤ 真实代价 → 保证最优性
- 一致性:h(n) ≤ c(n,n')+h(n') → 提高效率
在网格地图中,常用启发式:
- 曼哈顿距离(4连通)
- 对角距离(8连通)
- 欧氏距离(任意角度)
3.1.2 Hybrid A*
针对非完整约束系统(如汽车),Hybrid A*在连续状态空间进行搜索。关键技术包括:
- 黎曼度量(Reeds-Shepp曲线)
- 解析展开(Analytic Expansion)
- 启发式设计(考虑非完整约束)
3.2 基于采样的算法
3.2.1 RRT系列算法
快速探索随机树(RRT)基本流程:
- 随机采样一个点x_rand
- 在树中找到最近点x_near
- 朝x_rand方向扩展一步得到x_new
- 如果路径无碰撞,加入树中
RRT*通过重布线优化路径:
- 重选父节点:在x_new附近寻找更优父节点
- 重布线:优化附近节点的父节点选择
Informed RRT*进一步改进采样策略,在找到初始解后,将采样限制在椭圆区域内:
code复制{x | ∥x-start∥ + ∥x-goal∥ ≤ c_best}
3.2.2 PRM算法
概率路线图(PRM)分两阶段:
- 学习阶段:
- 随机采样构型空间
- 移除碰撞点
- 连接邻近点形成路线图
- 查询阶段:
- 在路线图上搜索路径
PRM适合静态环境预处理,典型应用于:
- 工业机器人工作站
- 游戏NPC导航
3.3 环境表示方法
3.3.1 占据网格图
将空间离散化为网格,每个网格存储占据概率:
code复制p(m_i|z_{1:t}) = [1 + (1-p)/p × (1-p_prior)/p_prior × (1-p(m_i|z_t))/p(m_i|z_t)]⁻¹
常用传感器模型:
- 激光雷达:波束模型
- 深度相机:点云投影
3.3.2 八叉树地图
层次化数据结构,递归地将空间八等分直到达到最小分辨率。优势:
- 内存效率高
- 支持多分辨率查询
- 动态更新高效
3.3.3 ESDF地图
欧几里得符号距离场(ESDF)存储每个点到最近障碍物的距离,符号表示内外。计算采用快速行进法(FMM):
code复制|∇ϕ(x)| = 1/S(x)
ϕ(x) = 0 on ∂Ω
ESDF在优化中特别有用,可以提供:
- 碰撞代价梯度
- 安全距离约束
4. 轨迹生成与优化
4.1 插值算法
4.1.1 三次样条插值
给定n个路径点,构造分段三次多项式,满足:
- 位置连续
- 一阶导数连续
- 自然边界条件(二阶导为0)
求解三对角方程组:
code复制h_i = t_{i+1} - t_i
a_i = (x_{i+1} - x_i)/h_i
4.1.2 五次多项式插值
保证位置、速度、加速度连续。解的形式为:
code复制q(t) = a₀ + a₁t + a₂t² + a₃t³ + a₄t⁴ + a₅t⁵
求解6个边界条件构成的线性方程组。
4.2 曲线拟合
4.2.1 贝塞尔曲线
n次贝塞尔曲线由n+1个控制点定义:
code复制B(t) = Σ C(n,i) t^i (1-t)^{n-i} P_i
特性:
- 端点插值
- 凸包性
- 德卡斯特里奥算法高效计算
4.2.2 B样条曲线
由控制点和节点向量定义,具有局部支撑性:
code复制C(u) = Σ N_{i,p}(u) P_i
其中N_{i,p}是p次B样条基函数,通过德布尔算法递归计算。
4.3 优化准则
4.3.1 Minimum-Snap
最小化加加速度的平方积分:
code复制min ∫(d³q/dt³)² dt
转化为二次规划问题:
code复制min pᵀQp
s.t. Ap = b
4.3.2 Minimum-Jerk
最小化加加速度更适合机械臂:
code复制min ∫(d²q/dt²)² dt
研究表明,人类手臂运动也遵循最小jerk准则。
4.4 数值优化实现
4.4.1 时间最优参数化
TOPP-RA算法步骤:
- 离散路径为N个点
- 计算每个点的速度上限
- 前向传播最大允许速度
- 后向传播最小必须速度
- 迭代直到收敛
4.4.2 轨迹优化框架
CHOMP使用梯度下降优化代价函数:
code复制U(ξ) = λ₁∫‖ξ̇(t)‖²dt + λ₂∫‖ξ̈(t)‖²dt + c(ξ(t))
STOMP则通过随机采样优化:
- 生成随机扰动轨迹
- 计算各轨迹代价
- 指数加权平均更新轨迹
5. 前沿发展与工程实践
5.1 反应式规划技术
5.1.1 人工势场法
构造势场函数:
code复制U(q) = U_att(q) + U_rep(q)
其中吸引势通常取二次型,排斥势采用指数形式。
5.1.2 控制屏障函数
确保安全性的形式化方法:
code复制h(x) ≥ 0 ⇒ L_f h(x) + L_g h(x)u + α(h(x)) ≥ 0
其中α是扩展类K函数。
5.2 数据驱动方法
5.2.1 扩散策略
通过逐步去噪生成轨迹:
code复制x_{t-1} = 1/√α_t (x_t - (1-α_t)/√(1-̄α_t) ε_θ(x_t,t)) + σ_t z
5.2.2 神经运动规划器
如MPNet的网络结构:
- 编码器:PointNet++处理点云
- 规划器:MLP输出路径
- 训练损失:路径长度+碰撞惩罚
5.3 Sim2Real迁移
5.3.1 域随机化
随机化以下参数:
- 动力学参数(质量、摩擦等)
- 视觉外观(纹理、光照等)
- 传感器噪声
5.3.2 残差强化学习
学习补偿模拟误差的策略:
code复制a = π_sim(s) + π_residual(s)
5.4 工程实践建议
- 实时性考虑:
- 分层规划:全局+局部组合
- 并行计算:CPU+GPU协同
- 算法选择:RRT*离线,APF在线
- 鲁棒性设计:
- 故障检测:奇异点、碰撞预警
- 恢复策略:回退、重规划
- 监控界面:可视化调试工具
- 性能优化技巧:
- 空间索引:KD树加速最近邻查询
- 内存池:预分配轨迹数据结构
- 热启动:复用上一周期解
在实际机器人系统中,轨迹规划模块需要与感知、控制模块紧密配合。建议采用ROS2的架构设计:
- 感知层:发布占用地图和物体检测
- 规划层:订阅感知话题,发布轨迹
- 控制层:执行轨迹并反馈状态
典型参数调优顺序:
- 确定安全约束(最大速度/加速度)
- 调整优化权重(平滑性vs时间)
- 微调启发式参数(A*的h权重)
- 优化采样策略(RRT的偏置采样)
最后需要强调的是,任何规划算法都需要在实际硬件上进行充分验证。建议建立完善的测试流程:
- 仿真测试(Gazebo等)
- 受限空间测试(安全约束下)
- 真实环境测试
- 长期运行测试
