本文主要讨论轨迹优化问题中的直接配点法,希望通过此教程帮助读者理解轨迹优化问题的基本概念与直接配点法的相关理论基础,最后我们还会讨论一些具体实现问题。直接配点法最终是通过非线性规划求解器来得到最终结果,因此在阅读本文之间可以先了解NLP问题相关基础知识,当然这并不影响对本文的理解,本文仅需要一些简单的高等数学与微分方程的知识。
轨迹优化问题
问题简介
轨迹用来描述一个物体的运动过程,通常是关于时间的变量。轨迹优化一种用于寻找最佳轨迹选择的方法,通常是通过选择合适的系统输入或控制量,是系统完成期望的运动过程。在控制领域,轨迹优化近似于最优控制,但从更广的概念上来讲,轨迹优化更具一般性。
下面我们用一个例子来进一步说明轨迹优化问题。
如图所示,一个滑块放置在光滑地面上,并受到一个水平方向的作用力。我们想要滑块在里的作用下,在1s的时间内从开始位置运动到指定位置,并刚好停在该处。这个问题存在着无数种可能的运动轨迹,进一步,我们希望从中确定一条最优的轨迹,如图所示。
我们可以把这个问题用数学语言形式化。系统满足如下的动力学方程:
x ˙ = ν , ν ˙ = u \dot{x}=\nu, \quad \dot{\nu}=u x˙=ν,ν˙=u
并要求满足如下的边界约束:
x ( 0 ) = 0 , x ( 1 ) = 1 ν ( 0 ) = 0 , ν ( 1 ) = 0 \begin{array}{ll} x(0)=0, & x(1)=1 \\ \nu(0)=0, & \nu(1)=0 \end{array} x(0)=0,ν(0)=0,x(1)=1ν(1)=0
轨迹优化关心在一定指标下的最优轨迹,这样的指标可以用如下的目标函数来描述:
min u ( t ) , x ( t ) , ν ( t ) ∫ 0 1 u 2 ( τ ) d τ \min _{u(t), x(t), \nu(t)} \int_{0}^{1} u^{2}(\tau) d \tau u(t),x(t),ν(t)min∫01u2(τ)dτ
形式化描述
一般来说,轨迹优化问题通过在一定的约束条件下优化如下的目标函数来得到最优轨迹:
min t 0 , t F , x ( t ) , u ( t ) J ( t 0 , t F , x ( t 0 ) , x ( t F ) ) ⏟ Mayer Term + ∫ t 0 t F w ( τ , x ( τ ) , u ( τ ) ) d τ ⏟ Lagrange Term \min _{t_{0}, t_{F}, \boldsymbol{x}(t), \boldsymbol{u}(t)} \underbrace{J\left(t_{0}, t_{F}, \boldsymbol{x}\left(t_{0}\right), \boldsymbol{x}\left(t_{F}\right)\right)}_{\text {Mayer Term }}+\underbrace{\int_{t_{0}}^{t_{F}} w(\tau, \boldsymbol{x}(\tau), \boldsymbol{u}(\tau)) d \tau}_{\text {Lagrange Term }} t0,tF,x(t),u(t)minMayer Term
J(t0,tF,x(t0),x(tF))+Lagrange Term
∫t0tFw(τ,x(τ),u(τ))dτ
其中的约束条件包含如下形式:
系统的动力学约束:
x ˙ ( t ) = f ( t , x ( t ) , u ( t ) ) \dot{\boldsymbol{x}}(t)=\boldsymbol{f}(t, \boldsymbol{x}(t), \boldsymbol{u}(t)) x˙(t)=f(t,x(t),u(t))
路径约束:
h ( t , x ( t ) , u ( t ) ) ≤ 0 \boldsymbol{h}(t, \boldsymbol{x}(t), \boldsymbol{u}(t)) \leq \mathbf{0} h(t,x(t),u(t))≤0
边界约束:
g ( t 0 , t F , x ( t 0 ) , x ( t F ) ) ≤ 0 \boldsymbol{g}\left(t_{0}, t_{F}, \boldsymbol{x}\left(t_{0}\right), \boldsymbol{x}\left(t_{F}\right)\right) \leq \mathbf{0} g(t0,tF,x(t0),x(tF))≤0
和状态量与控制量边界:
x l o w ≤ x ( t ) ≤ x u p p u l o w ≤ u ( t ) ≤ u u p p \begin{array}{l} \boldsymbol{x}_{\mathrm{low}} \leq \boldsymbol{x}(t) \leq \boldsymbol{x}_{\mathrm{upp}} \\ \boldsymbol{u}_{\mathrm{low}} \leq \boldsymbol{u}(t) \leq \boldsymbol{u}_{\mathrm{upp}} \end{array} xlow≤x(t)≤xuppulow≤u(t)≤uupp
由于最终我们想要求得的是控制量关于时间的具体函数形式,而非一个值或一个参数,因此轨迹优化问题也可以理解为在一定约束或大量约束下的泛函问题。
变分法求解
(对变分法不熟悉的可以跳过本部分)
针对泛函问题,可以采用变分法进行求解。以滑块移动的问题为例,由于其目标函数可以表示为如下形式:
J = ∫ 0 1 u 2 ( τ ) d τ = ∫ 0 1 x ¨ 2 ( τ ) d τ J=\int_{0}^{1} u^{2}(\tau) d \tau=\int_{0}^{1} \ddot{x}^{2}(\tau) d \tau J=∫01u2(τ)dτ=∫