【移动机器人运动规划】4 运动动力学的路径发现
运动-动力学规划(Kinodynamic Planning)结合了运动学约束(避障)和动力学约束(速度/加速度限制),直接生成机器人可执行的控制指令序列。传统方法先找路径再优化的方式无法保证动力学可行性,特别是对于非完整系统。State Lattice Planning通过离散化控制空间或状态空间,构建包含可行运动原语的格点图,确保每条边都对应实际可执行轨迹。方法分为正向(控制输入仿真)和逆向(状
4 运动-动力学的路径发现
文章目录
4.1 Introduction
-
什么是 Kinodynamic
- 定义:kinodynamic = kinematic + dynamic
- 核心任务:生成一条既避障(运动学约束),又满足物理限制(如最大速度、加速度)的轨迹
- Bruce Donald:运动-动力学规划问题是综合生成一个机器人运动,使其同时满足运动学约束(如避开障碍物)和动力学约束(如对速度、加速度、力的模值限制)。
- 注意:kinodynamic 解决方案是一个从时间到广义力或加速度的映射
→ 即输出不是简单的路径,而是可执行的控制指令序列
-
为什么需要 Kinodynamic Planning
-
旧式流程

- Path Finding(路径搜索):找一条几何上可行的路径(如 RRT、A)
- Trajectory Optimization(轨迹优化):将路径平滑为可执行轨迹(如样条插值)
-
问题
- 直线连接两个状态通常是无效的!
- 因为系统有 微分约束 differential constraints
- 所以:先找路径再优化 ≠ 可行轨迹
-
粗到细过程 Coarse-to-fine process
- 先用简单模型(如点机器人)找路径,再用复杂模型优化,但最终可能无法实现(如汽车无法原地旋转)
-
Trajectory only optimizes locally
- 局部优化可能陷入局部最优,忽略全局可行性
-
Infeasible path means nothing to nonholonomic system
- 对于非完整系统(nonholonomic),即使路径在几何上连通,也可能无法执行
-
结论:必须从一开始就考虑运动-动力学约束
-
-
两个例子

-
经典运动-动力学模型示例
-
单轮车 Unicycle

- 微分方程: [ x ˙ y ˙ θ ˙ ] = [ cos θ 0 sin θ 0 0 1 ] ⋅ [ v ω ] \begin{bmatrix}\dot{x} \\ \dot{y} \\ \dot{\theta} \end{bmatrix} = \begin{bmatrix} \cos\theta & 0 \\ \sin\theta & 0 \\ 0 & 1 \end{bmatrix}\cdot \begin{bmatrix} v \\ \omega \end{bmatrix} x˙y˙θ˙ = cosθsinθ0001 ⋅[vω]
- 约束: ∣ v ∣ ≤ v max , ∣ ω ∣ ≤ ω max |v| \leq v_{\max},~|\omega| \leq \omega_{\max} ∣v∣≤vmax, ∣ω∣≤ωmax
-
差速驱动 Differential Drive

- 微分方程: [ x ˙ y ˙ θ ˙ ] = [ r 2 ( ω l + ω r ) cos θ r 2 ( ω l + ω r ) sin θ r L ( ω r − ω l ) ] \begin{bmatrix}\dot{x}\\\dot{y}\\\dot{\theta} \end{bmatrix} = \begin{bmatrix} \frac{r}{2}(\omega_l+\omega_r)\cos\theta \\ \frac{r}{2}(\omega_l+\omega_r)\sin\theta \\ \frac{r}{L}(\omega_r-\omega_l) \end{bmatrix} x˙y˙θ˙ = 2r(ωl+ωr)cosθ2r(ωl+ωr)sinθLr(ωr−ωl)
- 约束: ∣ ω l ∣ ≤ ω l , max |\omega_l| \leq \omega_{l,\max} ∣ωl∣≤ωl,max, ∣ ω r ∣ ≤ ω r , max |\omega_r|\leq\omega_{r,\max} ∣ωr∣≤ωr,max
- 速度合成: v = r 2 ( ω l + ω r ) v=\frac{r}{2}(\omega_l+\omega_r) v=2r(ωl+ωr), ω = r L ( ω r − ω l ) \omega=\frac{r}{L}(\omega_r-\omega_l) ω=Lr(ωr−ωl)
-
简化汽车模型

-
微分方程: [ x ˙ y ˙ θ ˙ ] = [ v cos θ v sin θ r L tan ϕ ] \begin{bmatrix}\dot{x}\\\dot{y}\\\dot{\theta} \end{bmatrix} = \begin{bmatrix}v\cos\theta\\ v\sin\theta \\ \frac{r}{L}\tan\phi \end{bmatrix} x˙y˙θ˙ = vcosθvsinθLrtanϕ
-
三种变体
{ ∣ v ∣ ≤ v max , ∣ ϕ ∣ ≤ ϕ max < π 2 , Simple car model v ∈ { − v max , v max } , ∣ ϕ ∣ ≤ ϕ max < π 2 , Reeds & Shepp’s car v = v max ∣ ϕ ∣ ≤ ϕ max < π 2 , Dubin’s car \begin{cases} |v| \leq v_{\max},~|\phi|\leq\phi_{\max}<\frac{\pi}{2}, &\text{Simple car model} \\ v\in\{-v_{\max}, v_{\max}\},~|\phi|\leq\phi_{\max}<\frac{\pi}{2}, &\text{Reeds \& Shepp's car} \\ v=v_{\max}~|\phi|\leq\phi_{\max}<\frac{\pi}{2}, &\text{Dubin's car} \end{cases} ⎩ ⎨ ⎧∣v∣≤vmax, ∣ϕ∣≤ϕmax<2π,v∈{−vmax,vmax}, ∣ϕ∣≤ϕmax<2π,v=vmax ∣ϕ∣≤ϕmax<2π,Simple car modelReeds & Shepp’s carDubin’s car
-
-
4.2 State Lattice Planning
4.2.1 Workflow
-
基本概念
- 标准的基于图搜索的方法对真实机器人有用吗?
- 答案是否定的
- 因为它假设机器人可以任意移动(如点质量)
- 忽略了动力学约束(速度、加速度、转向半径等)
- 新目标
- 我们不再假设机器人是一个质点(mass point)
- 而要求图中的每条边都代表一个机器人能实际执行的运动轨迹
- 动机
- 以前的图只是“几何可行”
- 现在要“动力学可行” → 所有边必须是机器人能完成的动作
- 方法
- 手动构建一个图,其中所有边都是可执行的运动原语(motion primitives)
- 两种思路
- Forward direction:在 控制空间(control space) 中离散采样
- Reverse direction:在 状态空间(state space) 中离散采样
- State lattice planning 就是最直接的一种方法
- 标准的基于图搜索的方法对真实机器人有用吗?
-
与第 2 章的联系

- 图解说明
- 第一步,将环境划分为格子(4/8 连接)
- 第二步,在每个格子中添加多个方向的连接(绿色线)
- 第三步,红色框内是关键:这其实是在 控制空间离散化
- 结论
- 这种“带方向的连接”其实是对控制空间的离散化
- 构建的是一个 Lattice Graph(格点图)
- 图解说明
-
与第 3 章的联系

- 图解说明
- 点状网络表示在 状态空间 R 2 \mathbb{R}^2 R2 中采样得到的节点
- 边表示两点之间的连接(但未明确说明是否可行)
- 问题:如何保证边是可执行的
- 图解说明
-
如何生成可行局部运动
-
核心问题:
- 如何让机器人从初始状态 s 0 s_0 s0 移动到目标状态 s f s_f sf
-
选择控制输入 u u u,前向仿真

- 给定 u u u 和时间 T T T,数值积分得到新状态 s 1 s_1 s1
- 优点:易实现,无需反解
- 缺点:规划效率低,无任务引导
-
选择目标状态 s f s_f sf,求逆向轨迹

- 给定 s 0 s_0 s0 和 s f s_f sf,求出控制序列使系统到达
- 优点:任务导向强,规划效率高
- 缺点:实现难(需解微分方程),计算复杂
-
-
在控制空间中采样
-
以四旋翼模型为例
State: s = [ x y z x ˙ y ˙ z ˙ ] Input: u = [ x ¨ y ¨ z ¨ ] System equation: s ˙ = A ⋅ s + B ⋅ u A = [ 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ] ⟶ 推广到高维 A = [ 0 I 3 0 ⋯ 0 0 0 I 3 ⋯ 0 ⋮ ⋱ ⋱ ⋱ ⋮ 0 ⋯ ⋯ 0 I 3 0 ⋯ ⋯ 0 0 ] B = [ 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 ] ⟶ 推广到高维 B = [ 0 0 ⋮ 0 I 3 ] \text{State: } s=\begin{bmatrix}x\\y\\z\\\dot x\\\dot y\\\dot z \end{bmatrix} \quad\text{Input: }u=\begin{bmatrix}\ddot{x}\\\ddot{y}\\\ddot{z} \end{bmatrix} \\ \text{System equation: } \dot{s}=A\cdot s + B\cdot u \\ A = \begin{bmatrix} 0&0&0&1&0&0\\0&0&0&0&1&0\\0&0&0&0&0&1\\0&0&0&0&0&0&\\0&0&0&0&0&0&\\0&0&0&0&0&0& \end{bmatrix} \overset{推广到高维}{\longrightarrow} A = \begin{bmatrix} 0&I_3&0&\cdots&0\\0&0&I_3&\cdots&0\\ \vdots & \ddots & \ddots & \ddots & \vdots \\0&\cdots&\cdots&0&I_3\\0&\cdots&\cdots&0&0 \end{bmatrix} \\ B = \begin{bmatrix}0&0&0\\0&0&0\\0&0&0\\1&0&0\\0&1&0\\0&0&1 \end{bmatrix} \overset{推广到高维}{\longrightarrow} B = \begin{bmatrix}0\\0\\\vdots\\0\\I_3 \end{bmatrix} State: s= xyzx˙y˙z˙ Input: u= x¨y¨z¨ System equation: s˙=A⋅s+B⋅uA= 000000000000000000100000010000001000 ⟶推广到高维A= 00⋮00I30⋱⋯⋯0I3⋱⋯⋯⋯⋯⋱0000⋮I30 B= 000100000010000001 ⟶推广到高维B= 00⋮0I3 -
从一个点出发的所有可能运动
-
只离散加速度值 Discretize acceleration

v 0 = [ 1 0 0 ] ⊤ v_0=\begin{bmatrix}1&0&0 \end{bmatrix}^\top v0=[100]⊤
-
离散加加速度值 Discretize jerk

v 0 = [ 1 0 0 ] ⊤ , a 0 = [ 0 1 0 ] ⊤ v_0=\begin{bmatrix}1&0&0 \end{bmatrix}^\top,~~a_0=\begin{bmatrix}0&1&0 \end{bmatrix}^\top v0=[100]⊤, a0=[010]⊤
-
说明:给定初始状态 s 0 s_0 s0,选择不同的控制输入 u u u,每条紫色曲线代表一条 前向仿真轨迹,所有轨迹都满足系统的动力学方程
-
-
状态转移与积分
s ( t ) = e A t s 0 + ∫ 0 t e A ( t − σ ) B d σ ⋅ u m s(t)=e^{At}s_0+\int_{0}^{t}e^{A(t-\sigma)}B\mathrm{d}\sigma\cdot u_m s(t)=eAts0+∫0teA(t−σ)Bdσ⋅um
其中- F ( t ) = e A t s 0 F(t)=e^{At}s_0 F(t)=eAts0:自由响应(零输入响应)
- G ( t ) = ∫ 0 t e A ( t − σ ) B d σ ⋅ u m G(t)=\int_{0}^{t}e^{A(t-\sigma)}B\mathrm{d}\sigma\cdot u_m G(t)=∫0teA(t−σ)Bdσ⋅um:强迫响应(零状态响应)
-
特殊性质:幂零矩阵 Nilpotent Matrix
-
如果矩阵 A A A 是幂零的(存在 k k k 使得 A k = 0 A^k=0 Ak=0),那么
e A t = I + A t 1 ! + ( A t ) 2 2 ! + ⋯ + ( A t ) k − 1 ( k − 1 ) ! e^{At}=I+\frac{At}{1!}+\frac{(At)^2}{2!}+\cdots+\frac{(At)^{k-1}}{(k-1)!} eAt=I+1!At+2!(At)2+⋯+(k−1)!(At)k−1 -
这意味着 可以精确计算轨迹,无需数值积分!
-
举个例子:对于二阶积分器(如位置→速度→加速度), A A A 是幂零的,所以 e A t e^{At} eAt 是一个二次多项式。
-
-
格点图 Lattice Graph 的生成

- 左图 9 方向离散化:从中心点出发,有 9 个方向的运动原语(motion primitives),每条边代表一个可执行的动作
- 右图 25 方向离散化:更多方向,更灵活的运动能力,但计算量更大,存储更多
- 说明:图可以在搜索时动态构建(on-the-fly),新发现节点时才创建状态和边,节省时间和空间。
-
汽车模型的控制空间采样(Bicycle Model)

- 从搜索树中选一个状态 s s s
- 选择控制向量 u u u(即速度 v v v 和转向角 ϕ \phi ϕ)
- 在短时间内进行数值积分(如欧拉法或龙格库塔法),得到新状态
- 如果轨迹无碰撞,则添加到树中
-
-
在状态空间中采样
-
构建 Reeds-Shepp Car Model 的格点图

- 初始状态:
中心是一个车辆状态(位置 + 方向)
周围是均匀分布的网格点(代表可能的状态) - 找到 8 个邻居的可行路径
对每个邻居节点,计算从当前状态到该节点的最短路径
使用的是 Reeds-Shepp 路径(由直线和圆弧组成) - 扩展到 24 个邻居
不仅考虑相邻格点,还考虑更远的可达状态
每条边都是一个最优路径段 - 完整格点图
所有状态之间通过最优路径连接
形成一个密集的、可搜索的图结构
- 初始状态:
-
双层格点图 - 不同初始状态的影响

- 两个图看起来非常相似
- 但第一层不同(即离初始状态最近的邻居)
- 因为 初始状态不同 → 导致局部可达性变化
-
控制空间与状态空间采样的对比

- 控制空间采样:从一个点出发,尝试所有可能的控制输入(如加速度、转向角),生成发散的轨迹;生成大量轨迹,集中在初始角速度方向(因为惯性作用);探索性强,但可能产生冗余轨迹。
- 状态空间采样:在状态空间中采样点,然后连接它们(如使用 Reeds-Shepp 路径);更倾向于生成平滑、符合几何约束的路径;结构化强,但需预先定义可达性。
-
4.2.2 Boundary Value Problem
-
为什么需要“边界值问题”?
因为机器人运动不是“从A点到B点”的简单直线,而是要考虑:
- 起始时的速度和加速度
- 终点时的速度和加速度
- 运动过程中的平滑性(避免抖动)
- 能耗/舒适性(如最小化“急加速”)
所以我们需要设计一条满足起终点约束的轨迹
x(t),这就是边界值问题。 -
基础概念:边界值问题 BVP

- 定义:给定一个系统,我们希望找到一条轨迹
x(t),使得它满足- 初始状态:
x(0)=a - 终止状态:
x(T)=b
- 初始状态:
- 其中:
t是时间,a和b是已知的起点和终点位置(或状态),T是总时间 - 为什么难解?
- 没有通用公式!必须根据具体需求逐个设计。
- 往往需要复杂的数值优化方法求解。
- 定义:给定一个系统,我们希望找到一条轨迹
-
多项式插值法(Polynomial Trajectory)
最常用的非最优方法
-
假设轨迹是一个 5 次多项式
x ( t ) = c 5 t 5 + c 4 t 4 + c 3 t 3 + c 2 t 2 + c 1 t + c 0 x(t)=c_5t^5+c_4t^4+c_3t^3+c_2t^2+c_1t+c_0 x(t)=c5t5+c4t4+c3t3+c2t2+c1t+c0 -
有边界条件
Position Velocity Acceleration t=0 a 0 0 t=T b 0 0 -
求解
[ a b 0 0 0 0 ] = [ 0 0 0 0 0 1 T 5 T 4 T 3 T 2 T 1 0 0 0 0 1 0 5 T 4 4 T 3 3 T 2 2 T 1 0 0 0 0 2 0 0 20 T 3 12 T 2 6 T 2 0 0 ] [ c 5 c 4 c 3 c 2 c 1 c 0 ] \begin{bmatrix} a \\ b \\ 0 \\ 0 \\ 0 \\ 0 \end{bmatrix}=\begin{bmatrix} 0 & 0 & 0 & 0 & 0 & 1 \\ T^5 & T^4 & T^3 & T^2 & T & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 \\ 5T^4 & 4T^3 & 3T^2 & 2T & 1 & 0 \\ 0 & 0 & 0 & 2 & 0 & 0 \\ 20T^3 & 12T^2 & 6T & 2 & 0 & 0 \end{bmatrix} \begin{bmatrix} c_5 \\ c_4 \\ c_3 \\ c_2 \\ c_1 \\ c_0 \end{bmatrix} ab0000 = 0T505T4020T30T404T3012T20T303T206T0T202T220T1100110000 c5c4c3c2c1c0
解这个方程组即可得到所有系数 -
结果:一条光滑、连续的轨迹,满足起终点位置、速度、加速度为零
-
缺点:没有考虑“最优性”,比如如何让轨迹最平稳,如何让能量消耗最小
-
-
最优边界值问题(OBVP)
-
核心思想:不仅要满足边界条件,还要最小化某个代价函数
-
比如:最小化加加速度
jerk
J ∑ = ∑ k = 1 3 J k , J k = 1 T ∫ 0 T j k ( t ) 2 d t J_{\sum}=\sum_{k=1}^3J_k,~J_k=\frac{1}{T}\int_{0}^Tj_k(t)^2\mathrm{d}t J∑=k=1∑3Jk, Jk=T1∫0Tjk(t)2dt
状态变量: S k = ( p k , v k , a k ) S_k=(p_k,v_k,a_k) Sk=(pk,vk,ak)输入: u k = j k u_k=j_k uk=jk
系统模型: s ˙ = f ( s , u ) = ( v , a , j ) \dot{s}=f(s,u)=(v,a,j) s˙=f(s,u)=(v,a,j)
-
-
求解最优问题:Pontryagin’s 最小值原理
-
问题定义
-
代价函数
J = h ( s ( T ) ) ⏟ 终端代价 + ∫ 0 T g ( s ( t ) , u ( t ) ) ⋅ d t ⏟ 运行代价 J=\underbrace{h(s(T))}_{\text{终端代价}} + \underbrace{\int_0^T g(s(t),u(t))\cdot\mathrm{d}t}_{\text{运行代价}} J=终端代价 h(s(T))+运行代价 ∫0Tg(s(t),u(t))⋅dt -
哈密顿方程和协状态变量
H ( s , u , λ ) = g ( s , u ) + λ ⊤ f ( s , u ) λ = ( λ 1 , λ 2 , λ 3 ) H(s,u,\lambda)=g(s,u)+\lambda^\top f(s,u) \\ \lambda=(\lambda_1,\lambda_2,\lambda_3) H(s,u,λ)=g(s,u)+λ⊤f(s,u)λ=(λ1,λ2,λ3) -
假设
s ∗ :最优状态 u ∗ :最优输入 s^*\text{:最优状态}\\ u^*\text{:最优输入} s∗:最优状态u∗:最优输入
-
-
核心思想:一个控制输入 u ∗ ( t ) u^*(t) u∗(t) 是最优的,当且仅当存在一个协状态轨迹 λ ( t ) \lambda(t) λ(t),使得以下三个条件同时成立
-
状态方程:给定初始状态 s ∗ ( 0 ) = s ( 0 ) s^*(0)=s(0) s∗(0)=s(0),考虑
s ˙ ∗ ( t ) = f ( s ∗ ( t ) , u ∗ ( t ) ) \dot{s}^*(t)=f(s^*(t),u^*(t)) s˙∗(t)=f(s∗(t),u∗(t)) -
协状态条件
-
协状态方程:描述协状态 λ ( t ) \lambda(t) λ(t) 如何随时间变化
λ ˙ ( t ) = − ∇ s H ( s ∗ ( t ) , u ∗ ( t ) , λ ( t ) ) \dot{\lambda}(t)=-\nabla_sH(s^*(t),u^*(t),\lambda(t)) λ˙(t)=−∇sH(s∗(t),u∗(t),λ(t))有几个状态就有几个协状态。
-
终端边界条件:协状态在终点满足
λ ( T ) = − ∇ h ( s ∗ ( T ) ) \lambda(T)=-\nabla h(s^*(T)) λ(T)=−∇h(s∗(T))
h ( s ) h(s) h(s) 是终端代价函数
-
-
最优控制输入:最优输入通过最小化哈密顿函数得到
u ∗ ( t ) = arg min u ( t ) H ( s ∗ ( t ) , u ( t ) , λ ( t ) ) u^*(t)=\arg\min_{u(t)}H(s^*(t),u(t),\lambda(t)) u∗(t)=argu(t)minH(s∗(t),u(t),λ(t))
-
-
详细过程说明
-
目标函数:最小化加加速度 jerk 的平方积分
J ∑ = ∑ k = 1 3 J k , J k = 1 T ∫ 0 T j k ( t ) 2 d t J_{\sum} = \sum_{k=1}^{3} J_k, \quad J_k = \frac{1}{T} \int_0^T j_k(t)^2 dt J∑=k=1∑3Jk,Jk=T1∫0Tjk(t)2dt -
系统
-
状态: s k = ( p k , v k , a k ) s_k = (p_k, v_k, a_k) sk=(pk,vk,ak)
-
输入: u k = j k u_k = j_k uk=jk
-
系统动力学方程: s ˙ k = f s ( s k , u k ) = ( v k , a k , j k ) \dot{s}_k = f_s(s_k, u_k) = (v_k, a_k, j_k) s˙k=fs(sk,uk)=(vk,ak,jk)
-
初始状态: s ( 0 ) = ( p 0 , v 0 , a 0 ) s(0) = (p_0, v_0, a_0) s(0)=(p0,v0,a0)
-
-
求解过程(基于庞加莱最小值原理)
-
引入协状态变量 costate λ \lambda λ,表示对状态的“敏感度”
λ = ( λ 1 , λ 2 , λ 3 ) \lambda = (\lambda_1, \lambda_2, \lambda_3) λ=(λ1,λ2,λ3)λ 1 \lambda_1 λ1 代表总代价 J J J 对位置 p p p 的敏感度
λ 2 \lambda_2 λ2 代表总代价 J J J 对速度 v v v 的敏感度
λ 3 \lambda_3 λ3 代表总代价 J J J 对加速度 a a a 的敏感度
-
构造哈密顿函数 Hamiltonian H H H
H ( s , u , λ ) = 1 T j 2 + λ T f s ( s , u ) H(s, u, \lambda) = \frac{1}{T} j^2 + \lambda^T f_s(s, u) H(s,u,λ)=T1j2+λTfs(s,u)
展开为
H = 1 T j 2 + λ 1 v + λ 2 a + λ 3 j H = \frac{1}{T} j^2 + \lambda_1 v + \lambda_2 a + \lambda_3 j H=T1j2+λ1v+λ2a+λ3j哈密顿函数:最优控制理论中的核心工具,用于描述系统在最优路径下的“总代价”或“能量”
哈密顿函数将目标函数和系统动力学结合起来,是判断“当前输入是否最优”的数学依据。
-
协状态方程
λ ˙ = − ∇ s H ( s ∗ ( t ) , u ∗ ( t ) , λ ( t ) ) = − ( ∂ H ∂ p , ∂ H ∂ v , ∂ H ∂ a ) = ( 0 , − λ 1 , − λ 2 ) \begin{aligned} \dot{\lambda} &= -\nabla_s H(s^*(t), u^*(t), \lambda(t)) \\ &= -(\frac{\partial H}{\partial p} , \frac{\partial H}{\partial v}, \frac{\partial H}{\partial a}) \\ &= (0, -\lambda_1, -\lambda_2) \end{aligned} λ˙=−∇sH(s∗(t),u∗(t),λ(t))=−(∂p∂H,∂v∂H,∂a∂H)=(0,−λ1,−λ2) -
通过求解 H H H 的极小值,可以得到最优输入 u ∗ ( t ) u^*(t) u∗(t),在本例中, u ∗ ( t ) = arg min H u^*(t)=\arg\min H u∗(t)=argminH,最终解得 j ∗ ( t ) = 1 2 α t 2 + β t + γ j^*(t)=\frac{1}{2}\alpha t^2+\beta t+\gamma j∗(t)=21αt2+βt+γ
-
-
最优解表达式
-
共态变量解:求解微分方程 λ ˙ = ( 0 , − λ 1 , λ 2 ) \dot{\lambda}=(0,-\lambda_1,\lambda_2) λ˙=(0,−λ1,λ2)
λ ( t ) = 1 T [ − 2 α 2 α t + 2 β − α t 2 − 2 β t − 2 γ ] \lambda(t) = \frac{1}{T} \begin{bmatrix} -2\alpha \\ 2\alpha t + 2\beta \\ -\alpha t^2 - 2\beta t - 2\gamma \end{bmatrix} λ(t)=T1 −2α2αt+2β−αt2−2βt−2γ -
最优输入 jerk
u ∗ ( t ) = j ∗ ( t ) = arg min j ( t ) H ( s ∗ ( t ) , j ( t ) , λ ( t ) ) = 1 2 α t 2 + β t + γ \begin{aligned} u^*(t) = j^*(t) &= \arg\min_{j(t)} H(s^*(t), j(t), \lambda(t)) \\ &= \frac{1}{2}\alpha t^2 + \beta t + \gamma \end{aligned} u∗(t)=j∗(t)=argj(t)minH(s∗(t),j(t),λ(t))=21αt2+βt+γ假设 s = s ∗ s=s^* s=s∗ 取到最优,那么: ∂ H ∂ u = 2 T j + λ 3 \frac{\partial H}{\partial u}=\frac{2}{T}j+\lambda_3 ∂u∂H=T2j+λ3,令 ∂ H ∂ u = 0 \frac{\partial H}{\partial u}=0 ∂u∂H=0 得 u ∗ = − T 2 λ 3 u^*=-\frac{T}{2}\lambda_3 u∗=−2Tλ3,再代入 λ 3 \lambda_3 λ3
-
最优轨迹
s ∗ ( t ) = [ α 120 t 5 + β 24 t 4 + γ 6 t 3 + a 0 2 t 2 + v 0 t + p 0 α 24 t 4 + β 6 t 3 + γ 2 t 2 + a d t + v 0 α 6 t 3 + β 2 t 2 + γ t + a 0 ] s^*(t) =\begin{bmatrix} \displaystyle \frac{\alpha}{120}t^5 + \frac{\beta}{24}t^4 + \frac{\gamma}{6}t^3 + \frac{a_0}{2}t^2 + v_0 t + p_0 \\ \displaystyle \frac{\alpha}{24}t^4 + \frac{\beta}{6}t^3 + \frac{\gamma}{2}t^2 + a_d t + v_0 \\ \displaystyle \frac{\alpha}{6}t^3 + \frac{\beta}{2}t^2 + \gamma t + a_0 \end{bmatrix} s∗(t)= 120αt5+24βt4+6γt3+2a0t2+v0t+p024αt4+6βt3+2γt2+adt+v06αt3+2βt2+γt+a0
-
-
代价函数:将 j ∗ ( t ) = 1 2 α t 2 + β t + γ j^*(t)=\frac{1}{2}\alpha t^2+\beta t+\gamma j∗(t)=21αt2+βt+γ 代入 J = ∫ 0 T j ( t ) 2 d t J=\int_0^Tj(t)^2\mathrm{d}t J=∫0Tj(t)2dt 积分得
J = γ 2 + β γ T + 1 3 β 2 T 2 + 1 3 α γ T 2 + 1 4 α β T 3 + 1 20 α 2 T 4 J = \gamma^2 + \beta\gamma T + \frac{1}{3}\beta^2 T^2 + \frac{1}{3}\alpha\gamma T^2 + \frac{1}{4}\alpha\beta T^3 + \frac{1}{20}\alpha^2 T^4 J=γ2+βγT+31β2T2+31αγT2+41αβT3+201α2T4- J J J 只依赖于 T , α , β , γ T,\alpha,\beta,\gamma T,α,β,γ,这些参数由边界条件确定
- 所以可以将 T T T 也作为优化变量来求解
-
求解参数 α , β , γ \alpha,\beta,\gamma α,β,γ,通过边界状态(初始和终止位置、速度、加速度)建立的线性方程组
[ 1 120 T 5 1 24 T 4 1 6 T 3 1 24 T 4 1 6 T 3 1 2 T 2 1 6 T 3 1 2 T 2 T ] [ α β γ ] = [ Δ p Δ v Δ a ] \begin{bmatrix} \frac{1}{120}T^5 & \frac{1}{24}T^4 & \frac{1}{6}T^3 \\ \frac{1}{24}T^4 & \frac{1}{6}T^3 & \frac{1}{2}T^2 \\ \frac{1}{6}T^3 & \frac{1}{2}T^2 & T \end{bmatrix}\begin{bmatrix} \alpha \\ \beta \\ \gamma \end{bmatrix} =\begin{bmatrix} \Delta p \\ \Delta v \\ \Delta a \end{bmatrix} 1201T5241T461T3241T461T321T261T321T2T αβγ = ΔpΔvΔa
这个矩阵是 Gram 矩阵,可逆,能唯一解出 α , β , γ \alpha,\beta,\gamma α,β,γ。其中
[ Δ p Δ v Δ a ] = [ p f − p 0 − v 0 T − 1 2 a 0 T 2 v f − v 0 − a 0 T a f − a 0 ] \begin{bmatrix} \Delta p \\ \Delta v \\ \Delta a \end{bmatrix} = \begin{bmatrix} p_f - p_0 - v_0 T - \frac{1}{2}a_0 T^2 \\ v_f - v_0 - a_0 T \\ a_f - a_0 \end{bmatrix} ΔpΔvΔa = pf−p0−v0T−21a0T2vf−v0−a0Taf−a0
解得(系数变换矩阵)
[ α β γ ] = 1 T 3 [ 720 − 360 T 60 T 2 − 360 T 168 T 2 − 24 T 3 60 T 2 − 24 T 3 3 T 4 ] [ Δ p Δ v Δ a ] \begin{bmatrix} \alpha \ \beta \ \gamma \end{bmatrix} = \frac{1}{T^3} \begin{bmatrix} 720 & -360T & 60T^2 \\ -360T & 168T^2 & -24T^3 \\ 60T^2 & -24T^3 & 3T^4 \end{bmatrix} \begin{bmatrix} \Delta p \\ \Delta v \\ \Delta a \end{bmatrix} [α β γ]=T31 720−360T60T2−360T168T2−24T360T2−24T33T4 ΔpΔvΔa -
求解最优时间 T T T:将上式代入代价函数 J J J,得到
J ( T ) = 关于 T 的函数 J(T) = \text{关于 $T$ 的函数} J(T)=关于 T 的函数
由于 J ( T ) J(T) J(T) 是 T T T 的函数,我们可以:- 对 J ( T ) J(T) J(T) 求导
- 令导数为零
- 解出使 J J J 最小的 T ∗ T^* T∗
这变成了一个多项式根寻找问题(polynomial root finding problem)
-
使用范围说明
- 此推导适用于 固定终点状态:即 s ( T ) = ( p f , v f , a f ) s(T)=(p_f,v_f,a_f) s(T)=(pf,vf,af) 完全已知。
- 若终点部分自由(如只知道位置,速度/加速度未知),也可以类似地推导,但形式略有不同。
-
-
固定终点与(部分)自由终点问题
-
常见场景
- 只知道终点位置,但允许任意速度和加速度(如从 A 到 B 的最短时间)
- 只知道终点速度为零,但位置可以调整(如平稳降落)
- 终点状态完全自由(如最大化飞行距离)
-
固定终点问题
-
目标:强制要求 s ( T ) = s T s(T)=s_T s(T)=sT
-
继续使用 h h h 函数
- 引入一个指示函数作为终端代价
h ( s ) = { 0 , if s = s T ∞ , otherwise h(s)=\begin{cases} 0, &\text{if $s=s_T$} \\ \infin, &\text{otherwise} \end{cases} h(s)={0,∞,if s=sTotherwise
- 问题: λ ( T ) = − ∇ h ( s ∗ ( T ) ) \lambda(T)=-\nabla h(s^*(T)) λ(T)=−∇h(s∗(T)) 不可用,因为 h ( s ) h(s) h(s) 在 s = s T s=s_T s=sT 处不连续且不可微。
-
解决办法:放弃这个条件,改用直接代入法,直接利用已知的终点状态 s ( T ) = ( p f , v f , a f ) s(T)=(p_f,v_f,a_f) s(T)=(pf,vf,af),将其代入最优轨迹表达式
s ∗ ( t ) = [ α 120 t 5 + β 24 t 4 + γ 6 t 3 + α 0 2 t 2 + v 0 t + p 0 α 24 t 4 + β 6 t 3 + γ 2 t 2 + a 0 t + v 0 α 6 t 3 + β 2 t 2 + γ t + a 0 ] s^*(t) =\begin{bmatrix} \frac{\alpha}{120}t^5 + \frac{\beta}{24}t^4 + \frac{\gamma}{6}t^3 + \frac{\alpha_0}{2}t^2+v_0t+p_0 \\ \frac{\alpha}{24}t^4+\frac{\beta}{6}t^3 + \frac{\gamma}{2}t^2 +a_0t+v_0 \\ \frac{\alpha}{6}t^3+\frac{\beta}{2}t^2+\gamma t +a_0 \end{bmatrix} s∗(t)= 120αt5+24βt4+6γt3+2α0t2+v0t+p024αt4+6βt3+2γt2+a0t+v06αt3+2βt2+γt+a0
令 s ∗ ( T ) = s ( T ) s^*(T)=s(T) s∗(T)=s(T),建立方程组,求解未知参数 α , β , γ \alpha,\beta,\gamma α,β,γ
-
-
(部分)自由终点问题
-
给定 s i ( T ) , i ∈ I s_i(T),~i\in I si(T), i∈I,其它变量是自由变量。
-
新边界条件:当某些状态分量是自由的,可以建立新的协状态边界条件
λ j ( T ) = ∂ h ( s ∗ ( T ) ) ∂ s j , for j ≠ i \lambda_j(T)=\frac{\partial h(s^*(T))}{\partial s_j}, \text{ for }j\neq i λj(T)=∂sj∂h(s∗(T)), for j=i
其中 i i i 是那些被约束的状态索引。 -
对于自由变量:若 s j ( T ) s_j(T) sj(T) 是自由的,则对应的 λ j ( T ) \lambda_j(T) λj(T) 通常为 0 或由其他物理条件确定;实际上,对于自由变量,我们不再施加终端约束,而是通过优化目标间接影响其值。
-
-
-
另一个例子:OBVP for Vehicle Control
-
非完整 nonholonomic 系统,控制输入是转向角 ω ( t ) \omega(t) ω(t) 或速度 v ( t ) v(t) v(t)
-
将控制输入参数化为多项式
ω ( t ) = a + b t + c t 2 + d t 3 + ⋯ \omega(t)=a+bt+ct^2+dt^3+\cdots ω(t)=a+bt+ct2+dt3+⋯ -
其它要点
-
Constrained Trajectory Generation:在约束下生成轨迹(如最大速度、加速度)
-
Numerical difference evaluated Jacobian:使用数值微分计算雅可比矩阵(用于牛顿法等优化算法)
-
Offline BVP, trajectory generation:离线求解边界值问题 → 生成轨迹
-
Online search:在线进行搜索
先用离线 OBVP 生成一组高质量的基础轨迹(称为 motion primitives),再在运行时通过在线图搜索,从这些预生成的轨迹中拼接出完整路径。
-
-
-
轨迹库 Trajectory library

- Single layer lattice planning 是局部避障的常用方法。
- 不是图搜索,而是轨迹选择(trajectory selection)。
- 每条轨迹根据多项成本函数评分。
4.2.3 启发式函数
-
启发式设计的基本思想
-
核心原则:求解一个更简单的问题
-
两个假设

- 忽略障碍物
- 忽略动力学约束
-
-
忽略动力学约束的例子

- 对每个节点(状态),忽略动力学模型并搜索最短路径
- 无人机绕飞障碍物,紫色虚线是真实路径,绿色实线是启发式估计的“直飞”路径
-
假设无障碍的方法
-
方法:对每个节点 n n n ,求解一个 OBVP 问题,得到到目标状态的最小代价轨迹
-
结果:这个代价就是启发式函数 h ( n ) h(n) h(n)
-
伪代码

- g ( n ) g(n) g(n):从起点到当前节点的实际累积代价
- h ( n ) h(n) h(n):从当前节点到目标的估计代价(即启发式)
- f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n) :总优先级,决定搜索顺序
-
-
不同启发式函数的比较

- 左图:使用 Euclidean 2D distance 作为启发式
- 绿色区域表示高启发值(远离目标)
- 路径较短,但不考虑非完整性和障碍物
- 右图:使用 non-holonomic-without-obstacles 作为启发式
- 更接近真实运动能力(如汽车不能原地转向)
- 路径更长,但更现实
- 左图:使用 Euclidean 2D distance 作为启发式
4.2.4 Planning in Frenet-serret Frame
-
什么是 Frenet-Serret 坐标系
- 一种动态参考坐标系,随车辆运动而变化
- 由三条正交轴构成:
- t c \boldsymbol{t}_c tc:切向单位向量(沿道路中心线方向)
- n c \boldsymbol{n}_c nc:法向单位向量(指向道路内侧,垂直于切向)
- b \boldsymbol{b} b:副法向量(不常用)
-
汽车车道线保持问题

-
中心线 r ( s ) \boldsymbol{r}(s) r(s):道路的几何中心线
-
车辆位置表示为 x ( s , d ) \boldsymbol{x}(s,d) x(s,d)
- s s s:纵向弧长参数(沿中心线的距离)
- d d d:横向偏移(相对于中心线的侧向距离)
- 解耦性:纵向和横向可分别建模
-
控制参数化:使用五次多项式描述轨迹
d ( t ) = a d 0 + a d 2 t 2 + a d 3 t 3 + a d 4 t 4 + a d 5 t 5 s ( t ) = a s 0 + a s 1 t + a s 2 t 2 + a s 3 t 3 + a s 4 t 4 + a s 5 t 5 d(t)=a_{d0}+a_{d2}t^2+a_{d3}t^3+a_{d4}t^4+a_{d5}t^5 \\ s(t)=a_{s0}+a_{s1}t+a_{s2}t^2+a_{s3}t^3+a_{s4}t^4+a_{s5}t^5 d(t)=ad0+ad2t2+ad3t3+ad4t4+ad5t5s(t)=as0+as1t+as2t2+as3t3+as4t4+as5t5 -
求解最优控制问题
-
-
横向轨迹示例

- 黑色曲线:不同参数组合下生成的横向轨迹(从起点到终点)
- 绿色曲线:最优轨迹(通常是最短或最平滑的一条)
- 横轴:时间 t t t,纵轴:横向偏移 d d d
-
边界条件
- 初始条件: D ( 0 ) = ( d 0 , d ˙ 0 , d ¨ 0 D(0)=(d_0,\dot{d}_0,\ddot{d}_0 D(0)=(d0,d˙0,d¨0
- 终止条件: D ( T ) = ( d f , d ˙ f , d ¨ f ) D(T)=(d_f,\dot{d}_f,\ddot{d}_f) D(T)=(df,d˙f,d¨f)
- 车道保持情况: D ( T ) = ( d f , 0 , 0 ) D(T)=(d_f,0,0) D(T)=(df,0,0),即最终横向位移为 d f d_f df,速度和加速度都归零(平稳回到车道)
-
线性方程组求解
-
将多项式系数写成矩阵形式
[ T 3 T 4 T 5 3 T 2 4 T 3 5 T 4 6 T 12 T 2 20 T 3 ] [ a d 3 a d 4 a d 5 ] = [ Δ p Δ v Δ a ] \begin{bmatrix} T^3 & T^4 & T^5 \\ 3T^2 & 4T^3 & 5T^4 \\ 6T & 12T^2 & 20T^3 \end{bmatrix} \begin{bmatrix} a_{d3} \\ a_{d4} \\ a_{d5} \end{bmatrix}=\begin{bmatrix} \Delta p \\ \Delta v \\ \Delta a \end{bmatrix} T33T26TT44T312T2T55T420T3 ad3ad4ad5 = ΔpΔvΔa -
其中边界条件为
[ Δ p Δ v Δ a ] = [ d f − ( d 0 + d ˙ 0 T + 1 2 d ¨ 0 T 2 ) d ˙ f − ( d ˙ 0 + d ¨ 0 T ) d ¨ f − d ¨ 0 ] \begin{bmatrix} \Delta p \\ \Delta v \\ \Delta a \end{bmatrix}=\begin{bmatrix} d_f - (d_0 + \dot{d}_0 T + \frac{1}{2}\ddot{d}_0 T^2) \\ \dot{d}_f - (\dot{d}_0 + \ddot{d}_0 T) \\ \ddot{d}_f - \ddot{d}_0 \end{bmatrix} ΔpΔvΔa = df−(d0+d˙0T+21d¨0T2)d˙f−(d˙0+d¨0T)d¨f−d¨0
-
4.3 Hybrid A*
4.3.1 workflow
-
基本概念:剪枝节点以提升效率

- 问题:在线生成密集格点(dense lattice)计算量太大
- 解决方案:prune(剪枝)一些不必要的节点
- 规则:使用网格地图(grid map)作为裁剪依据,在栅格地图的每个方块里保留一个节点,如果新的节点的累积cost由于原本方块里保留的节点的累积cost就更新节点,永远保留一个方块里只有一个节点。
-
A 算法的详细流程*
-
伪代码

-
根据前序PPT选择一个合适的启发式函数 h ( n ) h(n) h(n)
-
通过状态积分找到邻居(如车辆运动学模型)
-
第一个加号:在栅格
m记录状态 -
第二个加号:更新栅格
m记录的状态
-
-
四种启发式函数的比较

-
a 二维欧氏距离:最简单的直线距离,忽略机器人运动能力
-
b 无障碍非完整启发式:考虑车辆不能原地转向等约束,但假设没有障碍物
-
c 无障碍非完整启发式(在死胡同中表现差)
-
d 带障碍非完整 + 带障碍全向最短路径混合启发式:结合两种模型:先用全向模型算避障最短路,再叠加非完整约束
混合 A* 通常使用两个启发式函数并取最大值: h ( n ) = max ( h holonomic ( n ) , h non-holonomic ( n ) ) h(n)=\max(h_{\text{holonomic}(n)},h_{\text{non-holonomic}(n)}) h(n)=max(hholonomic(n),hnon-holonomic(n))
-
-
智能技巧增强搜索
-
Analytic Expansions: One-hot heuristic
- 含义:一次性计算启发式,避免重复求解
- 作用:减少在线计算负担,加快搜索速度
- 在每个新长出来的节点,以一定的概率,计算从该节点直接到终点的路径,看看这个路径是否可行,这个概率可以根据离终点的远近自适应变化。
-
Control space sample vs State space sample

- 控制空间采样(左图):
- 从一个状态出发,尝试所有可能的控制输入(如加速度、转向角)
- 优点:覆盖全面
- 缺点:无目标导向,效率低
- 状态空间采样(中图):
- 直接在状态空间中采样目标区域附近的点
- 优点:带有“目标偏置”,更高效
- 缺点:可能漏掉某些路径
- 控制空间采样(左图):
-
Manual state space sampling

- 含义:人工添加一些关键状态点(如路口、转弯处)
- 目的:引导搜索进入重要区域
- 应用场景:复杂环境下的任务规划(如停车场倒车)
-
4.3.2 应用
-
自主车

Practical Search Techniques in Path Planning for Autonomous Driving, Dmitri Dolgov, Sebastian Thrun
-
无人机

Robust and Efficient Quadrotor Trajectory Generation for Fast Autonomous Flight, Boyu Zhou, Fei Gao
4.4 Kinodynamic RRT*
4.4.1 workflow
-
算法伪代码

核心流程
Sample:在配置空间 MM 中随机采样一个点Near:找到树中离该点最近的节点Steer:从最近节点向采样点“伸一根线”(固定步长)CollisionFree:检查新点是否安全ChooseParent:选择最优父节点连接rewire:重新连接邻居以优化成本
注意:这是“点机器人”的规划方法:假设机器人可以瞬间移动到任意位置(如质点)
-
如何采样?
- 核心思想
- 传统 RRT 在 Euclidean space(欧氏空间)采样;
- Kinodynamic RRT* 必须在 full state space(完整状态空间)采样。
- 关键变化
- 不再只采样 ( x , y ) (x,y) (x,y) 位置
- 而是采样 完整的状态: ( x , y , x ˙ , y ˙ ) (x,y,\dot x,\dot y) (x,y,x˙,y˙)
- 因为机器人不能突然改变速度或方向!
- 核心思想
-
如何定义“近”?
-
核心思想
- 传统 RRT 使用 Euclidean 或 Manhattan 距离定义“近”
- Kinodynamic RRT* 需要用 最优控制理论 来定义“近”
-
引入最优控制:定义状态间转移的代价函数
c [ π ] = ∫ 0 τ ( 1 + u ( t ) ⊤ R u ( t ) ) d t c[\pi]=\int_0^\tau(1+u(t)^\top Ru(t))\mathrm{d}t c[π]=∫0τ(1+u(t)⊤Ru(t))dt- τ \tau τ:转移时间
- u ( t ) u(t) u(t):控制输入
- R R R:权重矩阵(通常正定),控制能量消耗
注意
- “两个状态相近”意味着:从一个状态到另一个状态所需的控制代价小
- 这个代价可能依赖于方向
-
这类问题有解析解
- 如果我们知道到达时间 τ \tau τ 和控制策略 u ( t ) u(t) u(t),就可以计算代价。
- 这就是经典的 Optimal Control Problem (OBVP)
-
固定终点 + 固定时间
-
给定:终点状态 x 1 x_1 x1,终止时间 τ \tau τ
-
最优控制策略为
u ∗ ( t ) = R − 1 B ⊤ e A ⊤ ( τ − t ) G ( τ ) − 1 [ x 1 − x ˉ ( τ ) ] u^*(t)=R^{-1}B^\top e^{A^\top(\tau-t)}G(\tau)^{-1}[x_1-\bar{x}(\tau)] u∗(t)=R−1B⊤eA⊤(τ−t)G(τ)−1[x1−xˉ(τ)] -
其中: G ( t ) G(t) G(t) 是加权可控性 Gramian
G ( t ) = ∫ 0 t e A ( t − t ′ ) B R − 1 B ⊤ e A ⊤ ( t − t ′ ) d t ′ G(t)=\int_0^te^{A(t-t')}BR^{-1}B^\top e^{A^\top(t-t')}\mathrm{d}t' G(t)=∫0teA(t−t′)BR−1B⊤eA⊤(t−t′)dt′ -
其中: x ˉ ( t ) \bar{x}(t) xˉ(t) 是无控情况下系统的自然响应(即 u = 0 u=0 u=0 时的状态)
x ˉ ( t ) = e A t x 0 + ∫ 0 t e A ( t − t ′ ) c d t ′ \bar{x}(t)=e^{At}x_0+\int_0^te^{A(t-t')}c\mathrm{d}t' xˉ(t)=eAtx0+∫0teA(t−t′)cdt′
是如下微分方程的解
x ˉ ˙ ( t ) = A x ˉ ( t ) + c , x ˉ ( 0 ) = x 0 \dot{\bar{x}}(t) = A\bar{x}(t) +c,\bar{x}(0)=x_0 xˉ˙(t)=Axˉ(t)+c,xˉ(0)=x0 -
且 G ( t ) G(t) G(t) 满足 Lyapunov 方程
G ˙ ( t ) = A G ( t ) + G ( t ) A ⊤ + B R − 1 B ⊤ , G ( 0 ) = 0 \dot{G}(t)=AG(t)+G(t)A^\top+BR^{-1}B^\top,~G(0)=0 G˙(t)=AG(t)+G(t)A⊤+BR−1B⊤, G(0)=0
这个公式给出了从任意初始状态到目标状态的最优控制输入,只要知道最终时间和目标状态。
-
-
固定终点 + 自由时间
-
如果我们希望找到最优到达时间 τ \tau τ
S1:把上面的最优控制策略代入代价函数
c [ τ ] = τ + [ x 1 − x ˉ ( τ ) ] ⊤ G ( τ ) − 1 [ x 1 − x ˉ ( τ ) ] c[\tau]=\tau + [x_1-\bar{x}(\tau)]^\top G(\tau)^{-1}[x_1-\bar{x}(\tau)] c[τ]=τ+[x1−xˉ(τ)]⊤G(τ)−1[x1−xˉ(τ)]
S2:对 τ \tau τ 求导
c ˙ [ τ ] = 1 − 2 ( A x 1 + c ) ⊤ d ( τ ) − d ( τ ) ⊤ B R − 1 B ⊤ d ( τ ) \dot{c}[\tau] = 1-2(Ax_1+c)^\top d(\tau)-d(\tau)^\top BR^{-1}B^\top d(\tau) c˙[τ]=1−2(Ax1+c)⊤d(τ)−d(τ)⊤BR−1B⊤d(τ)
其中
d ( τ ) = G ( τ ) − 1 [ x 1 − x ˉ ( τ ) ] d(\tau)=G(\tau)^{-1}[x_1-\bar{x}(\tau)] d(τ)=G(τ)−1[x1−xˉ(τ)]
S3:解 c ˙ [ τ ] = 0 \dot{c}[\tau]=0 c˙[τ]=0 得到最优时间 τ ∗ \tau^* τ∗ -
结果:一旦找到了最优时间 τ ∗ \tau^* τ∗,问题就退化为“固定时间、固定终点”的标准 OBVP。
-
-
-
如何选择父节点?
- 对每个候选父节点 x near x_{\text{near}} xnear,计算从它到 x rand x_{\text{rand}} xrand 的最优控制代价
- 选择代价最小且满足约束的那个作为父节点
- 同时检查:中间轨迹是否在状态和控制输入的范围内(如速度不超过限值)
- 如果没有合格的父节点,就重新采样。
-
如何高效查询近邻节点?
-
“Near” 查询太慢
- 每次采样 x rand x_{\text{rand}} xrand 后,要对树中每个节点都做一次 OBVP 求解 来判断是否“接近”
- 因为“接近”定义为:从该节点到 x rand x_{\text{rand}} xrand 的最小控制代价小于某个阈值
- 这意味着:每次 Near 都要做 O(n) 次最优控制求解 → 极其低效!
-
解决方案:引入“代价容忍度” cost tolerance r r r 和 KD-Tree
-
核心概念
- cost tolerance r r r:允许的最大转移代价
- forward-reachable set:从某状态出发,在代价 < r < r <r 内能到达的所有状态集合
- backward-reachable set:能以代价 < r <r <r 到达某状态的所有起始状态集合
-
方法
- 给定 x rand x_{\text{rand}} xrand 和代价容忍度 r r r
- 计算 backward-reachable set of x rand x_{\text{rand}} xrand → 即:哪些状态可以以代价 < r < r <r 到达 x rand x_{\text{rand}} xrand
- 将树中的节点存储在 KD-Tree 中(支持快速范围查询)
- 在 KD-Tree 中查询落在该 reachable set 内的所有节点 → 得到 X near X_{\text{near}} Xnear
这样就避免了对每个节点单独求解 OBVP。
-
-
数学推导:可达集是什么?
-
给出代价函数
c [ τ ] = τ + [ x 1 − x ˉ ( τ ) ] ⊤ G ( τ ) − 1 [ x 1 − x ˉ ( τ ) ] c[\tau]=\tau+[x_1-\bar{x}(\tau)]^\top G(\tau)^{-1}[x_1-\bar{x}(\tau)] c[τ]=τ+[x1−xˉ(τ)]⊤G(τ)−1[x1−xˉ(τ)]
我们希望找到所有满足 c [ τ ] < r c[\tau]<r c[τ]<r 的终点状态 x 1 x_1 x1 -
推导过程
- 令 d = x 1 − x ˉ ( τ ) d=x_1-\bar{x}(\tau) d=x1−xˉ(τ),则: c [ τ ] = τ + d ⊤ G ( τ ) − 1 d < r c[\tau]=\tau+d^\top G(\tau)^{-1}d<r c[τ]=τ+d⊤G(τ)−1d<r
- 移项得: d ⊤ G ( τ ) − 1 d < r − τ d^\top G(\tau)^{-1}d<r-\tau d⊤G(τ)−1d<r−τ
- 两边除以 r − τ r-\tau r−τ(假设 r > τ r>\tau r>τ): d ⊤ ( G ( τ ) r − τ ) − 1 d < 1 d^\top\left(\frac{G(\tau)}{r-\tau}\right)^{-1}d<1 d⊤(r−τG(τ))−1d<1
- 定义椭球: ε [ x , M ] = { x ′ ∣ ( x ′ − x ) ⊤ M − 1 ( x ′ − x ) < 1 } \varepsilon[x,M]=\{x'|(x'-x)^\top M^{-1}(x'-x)<1 \} ε[x,M]={x′∣(x′−x)⊤M−1(x′−x)<1}
- 所以: forward-reachable set = ∪ 0 < τ < r ε [ x ˉ ( τ ) , G ( τ ) ( r − τ ) ] \text{forward-reachable set} = \cup_{0<\tau<r}\varepsilon[\bar{x}(\tau),G(\tau)(r-\tau)] forward-reachable set=∪0<τ<rε[xˉ(τ),G(τ)(r−τ)]
-
结论:从初始状态 x 0 x_0 x0 出发,在代价 < r <r <r 内能到达的状态集合,是一系列随时间变化的高维椭球的并集。
-
可视化解释

- 曲线 x ˉ ( t ) \bar{x}(t) xˉ(t) 是无控情况下系统的自然响应(即 u = 0 u=0 u=0 时的状态)
- 每个灰色椭球代表:在时刻 t t t,以代价 < r − t < r−t <r−t 能到达的状态集合
- 所有椭球的并集就是总的 forward-reachable set
- 外层轮廓线是这些椭球的包络,表示整体可达区域
-
简化计算 - 使用轴对称包围盒(Axis-Aligned Bounding Box)
-
对多个时间点 t t t 计算对应的椭球
-
对每个椭球,计算其在每一维上的最大/最小值(即轴对称包围盒)
-
取所有时间点的包围盒的并集
Π k = 1 n [ min 0 < t < τ ( x ˉ ( t ) k − G [ t ] k , k ( r − t ) ) , max 0 < t < r ( x ˉ ( t ) k + G [ t ] k , k ( r − t ) ) ] \Pi_{k=1}^n\left[ \min_{0<t<\tau}\left( \bar{x}(t)_k-\sqrt{G[t]_{k,k}(r-t)} \right),~\max_{0<t<r}\left( \bar{x}(t)_k+\sqrt{G[t]_{k,k}}(r-t) \right) \right] Πk=1n[0<t<τmin(xˉ(t)k−G[t]k,k(r−t)), 0<t<rmax(xˉ(t)k+G[t]k,k(r−t))]
这是一个 矩形区域(hyper-rectangle),可以用 KD-Tree 快速查询。
这只是保守估计,实际可达集可能更大,但足以用于近似搜索。
-
-
-
如何重连接?
- 当执行 “Rewire” 时,我们计算:
- x rand x_{\text{rand}} xrand 的 forward-reachable set
- 并对每个候选节点求解 OBVP(最优边界值问题)
- 为什么是 forward-reachable set?
- 我们要判断:从 x rand x_{\text{rand}} xrand 出发,能否以更低代价到达某些已有的节点?
- 所以需要知道:从 x rand x_{\text{rand}} xrand 能到达哪些状态(即 forward-reachable set)
- 然后在这个集合内查找所有“可被重连”的节点
- 当执行 “Rewire” 时,我们计算:
4.4.2 Demos

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)