一. ilqr原理推导
1.1 ilqr问题描述
本文参考知乎博主: LQR与iLQR:从理论到实践【详细】
基础LQR只能处理线性系统 (指可以使用 x ( k + 1 ) = A x ( k ) + B u ( k ) x(k+1) = Ax(k) + Bu(k) x(k+1)=Ax(k)+Bu(k)来描述系统 ) ,对目标代价函数也做了要求,而在实际问题中非线性系统占了绝大部分,iLQR(Iterative Linear Quadratic Regulator,迭代线性二次型调节器)则能够通过迭代的方式有效地求解非线性最优控制问题,考虑如下问题表述形式:
min u 0 , … , u N − 1 J = l f ( x N ) + ∑ k = 0 N − 1 l ( x k , u k ) s.t. x k + 1 = f ( x k , u k ) , x 0 given \begin{gather} \min_{u_0, \ldots, u_{N-1}} & \quad J = l_f(x_N) + \sum_{k=0}^{N-1} l(x_k, u_k) \\ \text{s.t.} & \quad x_{k+1} = f(x_k, u_k), \quad x_0 \text{ given} \end{gather} u0,…,uN−1mins.t.J=lf(xN)+k=0∑N−1l(xk,uk)xk+1=f(xk,uk),x0 given
其中 J J J是目标函数,需要在控制变量 u 0 , . . . , u N − 1 u_0,...,u_{N-1} u0,...,uN−1下进行最小化。目标函数由两部分组成:终端状态 x N x_N xN的代价 l f ( x N ) l_f(x_N) lf(xN) 和 从 k = 0 k = 0 k=0 到 N − 1 N - 1 N−1 的每一个时间步的代价 l ( x k , u k ) l(x_k,u_k) l(xk,uk)的总和,约束条件是状态转移方程 x k + 1 = f ( x k , u k ) x_{k+1} = f(x_k,u_k) xk+1=f(xk,uk),并且初始状态 x 0 x_0 x0是给定的。
1.2 ilqr算法原理
与LQR问题求解过程类似,定义问题的最优状态值函数 J ^ i ( x i ) \hat{J}_{i}(x_{i}) J^i(xi)和动作值函数 J ~ i ( x i , u i ) \tilde{J}_{i}(x_{i}, u_{i}) J~i(xi,ui):
J ^ i ( x i ) = min u i { l ( x i , u i ) + J ^ i + 1 ( x i + 1 ) } = min u i { l ( x i , u i ) + J ^ i + 1 ( f ( x i , u i ) ) } = min u i J ~ i ( x i , u i ) \begin{align*} \hat{J}_{i}(x_{i}) &= \min_{u_{i}}\left\{ l(x_{i},u_{i}) + \hat{J}_{i+1}(x_{i+1}) \right\} \\ &= \min_{u_{i}}\left\{ l(x_{i},u_{i}) + \hat{J}_{i+1}(f(x_{i},u_{i})) \right\} \\ &= \min_{u_{i}} \tilde{J}_{i}\left( x_{i},u_{i} \right) \tag{3} \end{align*} J^i(xi)=uimin{
l(xi,ui)+J^i+1(xi+1)}=uimin{
l(xi,ui)+J^i+1(f(xi,ui))}=uiminJ~i(xi,ui)(3)
下面详细解释(3)是怎么来的:
- 最优状态值函数 J ^ i ( x i ) \hat{J}_{i}(x_{i}) J^i(xi) 定义为给定当前状态 x i x_i xi,从时间步 i i i 到 N N N 的最小总代价,举个例子,现在状态是 x N − 1 x_{N - 1} xN−1,那么可以预期的最优状态值 J ^ N − 1 ( x N − 1 ) \hat{J}_{N - 1}(x_{N - 1}) J^N−1(xN−1) 为当前 N − 1 N-1 N−1 时刻的最小即时代价 l ( x N − 1 , u N − 1 ) l(x_{N-1},u_{N-1}) l(xN−1,uN−1) 加上最小终端代价 J ^ N ( x N ) \hat{J}_{N}(x_{N}) J^N(xN),就像一个人开车从A市去B市,计算最优燃油消耗量Y,那么他最省油的开法肯定是当前时刻采用最省油的开法,并在到达B市之前都一直采用最省油的开法。
- 动作值函数 J ~ i ( x i , u i ) \tilde{J}_{i}\left( x_{i},u_{i} \right) J~i(xi,ui) 定义为在当前状态 x i x_i xi下采取某个控制输入 u i u_i ui并遵循最优策略直到终端状态的总代价,动作值函数为最优需要满足采取的控制输入 u i u_i ui为最优。
- 状态转移:状态 x i + 1 x_{i + 1} xi+1 由当前状态 x i x_{i} xi和 u i u_i ui通过状态转移函数 f ( x i , u i ) f(x_{i},u_{i}) f(xi,ui)决定,因此,可以将当前状态 x i x_i xi的最优状态值函数 J ^ i ( x i ) \hat{J}_{i}(x_{i}) J^i(xi) 表达为:
J ^ i ( x i ) = min u i { l ( x i , u i ) + J ^ i + 1 ( x i + 1 ) } = min u i { l ( x i , u i ) + J ^ i + 1 ( f ( x i , u i ) ) } = min u i J ~ i ( x i , u i ) \begin{align*} \hat{J}_{i}(x_{i}) &= \min_{u_{i}} \left\{ l(x_{i}, u_{i}) + \hat{J}_{i+1}(x_{i+1}) \right\} \\ &= \min_{u_{i}} \left\{ l(x_{i}, u_{i}) + \hat{J}_{i+1}(f(x_{i}, u_{i})) \right\} \\ &= \min_{u_{i}} \tilde{J}_{i}(x_{i}, u_{i}) \tag{4} \end{align*} J^i(xi)=uimin{ l(xi,ui)+J^i+1(xi+1)}=uimin{ l(xi,ui)+J^i+1(f(xi,ui))}=uiminJ~i(xi,ui)(4) - 动作值函数 J ~ i ( x i , u i ) \tilde{J}_{i}\left( x_{i},u_{i} \right) J~i(xi,ui) 可以定义为:
J ~ i ( x i , u i ) = l ( x i , u i ) + J ^ i + 1 ( f ( x i , u i ) ) \begin{align*} \tilde{J}_{i}\left( x_{i},u_{i} \right) = l(x_{i},u_{i}) + \hat{J}_{i+1}(f(x_{i},u_{i})) \tag{5} \end{align*} J~i(xi,ui)=l(xi,ui)+J^i+1(f(xi,ui))(5) - 最小化动作值函数:最优状态值函数也可以通过最小化所有可能的动作值函数得到:
J ^ i ( x i ) = min u i J ~ i ( x i , u i ) \begin{align*} \hat{J}_{i}(x_{i}) = \min_{u_{i}} \tilde{J}_{i}(x_{i}, u_{i}) \tag{6} \end{align*} J^i(xi)=uiminJ~i(xi,ui)(6)
坐稳了,下面开始推导,终端最优状态值函数 J ^ N ( x N ) = l f ( x N ) \hat{J}_{N}(x_{N})={l}_{f}(x_{N}) J^N(xN)=lf(xN) ,很好理解,因为到终端状态就没有输入了,所以只有状态代价,没有控制代价。
使用泰勒展开将系统在当前状态 x i x_{i} xi附近线性化,进而转换为LQR问题进行求解:
状态转移函数展开,这里需要了解下非线性系统是如何线性化的,链接: 雅可比矩阵几何意义的直观解释及应用
通过雅可比矩阵得到 A i A_{i} Ai和 B i B_{i} Bi
f ( x i , u i ) + δ f ( x i , u i ) = f ( x i + δ x i , u i + δ u i ) ≈ f ( x i , u i ) + ∂ f ( x i , u i ) ∂ x i δ x i + ∂ f ( x i , u i ) ∂ u i δ u i ≜ f ( x i , u i ) + A i δ x i + B i δ u i \begin{align*} f\left(x_{i}, u_{i}\right)+\delta f\left(x_{i}, u_{i}\right) &= f\left(x_{i}+\delta x_{i}, u_{i}+\delta u_{i}\right) \\ &\approx f\left(x_{i}, u_{i}\right)+\frac{\partial f\left(x_{i}, u_{i}\right)}{\partial x_{i}}\delta x_{i}+\frac{\partial f\left(x_{i}, u_{i}\right)}{\partial u_{i}}\delta u_{i} \\ &\triangleq f\left(x_{i}, u_{i}\right)+A_{i}\delta x_{i}+B_{i}\delta u_{i}\tag{7} \end{align*} f(xi,ui)+δf(xi,ui)=f(xi+δxi,ui+δui)≈f(xi,ui)+∂xi∂f(xi,ui)δxi+∂ui∂f(xi,ui)δui≜f(xi,ui)+Aiδxi+Biδui(7)
状态值函数展开,这里也很好理解,注意这个 p i T p_{i}^T piT和 P i P_{i} Pi,后面backward pass的时候通过更新它们俩来实现状态递推
J ^ i ( x i ) + δ J ^ i ( x i ) = J ^ i ( x i + δ x i ) ≈ J ^ i ( x i ) + ∂ J ^ i ( x i ) ∂ x i δ x i + 1 2 δ x i T ∂ 2 J ^ i ( x i ) ∂ x i 2 δ x i ≜ J ^ i ( x i ) + p i T δ x i + 1 2 δ x i T P i δ x i \begin{align*} \hat{J}_{i}(x_{i}) + \delta \hat{J}_{i}(x_{i}) &= \hat{J}_{i}(x_{i} + \delta x_{i}) \\ &\approx \hat{J}_{i}(x_{i}) + \frac{\partial \hat{J}_{i}(x_{i})}{\partial x_{i}} \delta x_{i} + \frac{1}{2} \delta x_{i}^T \frac{\partial^2 \hat{J}_{i}(x_{i})}{\partial x_{i}^2} \delta x_{i} \\ &\triangleq \hat{J}_{i}(x_{i}) + p_{i}^T \delta x_{i} + \frac{1}{2} \delta x_{i}^T P_{i} \delta x_{i}\tag{8} \end{align*} J^i(

最低0.47元/天 解锁文章
535

被折叠的 条评论
为什么被折叠?



