简介

这篇论文是令我印象深刻的几篇关于MIT Cheetah的论文。除此之外还有MIT Cheetah 3提出使用凸优化的方法达到很好的动态控制效果,也算是我正式理解了四足动态控制的关键点。还有一篇就是Mini Cheetah的论文,它提出了低成本的四足机器人方案,在国内可以在1W5左右的成本做出一台四足机器人。

这篇论文第一章是Introduction,介绍了各种四足的控制方法,包括SLIP、WBC、MPC、Nonlinear TO、RL等。

理论与模型定义

第二章开始文章主体部分,从机器人理论建模开始。

模型定义

机器人的质心(CoM)表示为:

p = [ p x p y p z ] \bold{p} = \left[ \begin{array}{l} p_x \\ p_y \\ p_z \end{array} \right]

机器人的质心速度表示为:

p ˙ = [ p x ˙ p y ˙ p z ˙ ] \dot{\bold{p}} = \left[ \begin{array}{l} \dot{p_x} \\ \dot{p_y} \\ \dot{p_z} \end{array} \right]

B p ˙ = [ B p x ˙ B p y ˙ B p z ˙ ] ^{B}\dot{\bold{p}} = \left[ \begin{array}{l} ^{B}\dot{p_x} \\ ^{B}\dot{p_y} \\ ^{B}\dot{p_z} \end{array} \right]

p ˙ = I R B B p ˙ \dot{\bold{p}} = ^{I}\bold{R}_{B} \\ ^{B}\dot{\bold{p}}

对于机器人的身体旋转表示,文章中提到了三种方法,分别是欧拉角、四元数和旋转矩阵。本文中用到的主要与控制相关的方法是欧拉角。

欧拉角表示如下:

Θ = [ θ ϕ ψ ] \bold{\Theta} = \left[ \begin{array}{l} \theta \\ \phi \\ \psi \end{array} \right]

Θ ˙ = [ θ ˙ ϕ ˙ ψ ˙ ] \dot{\bold{\Theta}} = \left[ \begin{array}{l} \dot{\theta} \\ \dot{\phi} \\ \dot{\psi} \end{array} \right]

四元数表示如下:

q ˙ = [ q r q i q j q k ] \dot{\bold{q}} = \left[ \begin{array}{l} q_r \\ q_i \\ q_j \\ q_k \end{array} \right]

旋转矩阵相关的计算如下:

I R ˙ B = I R B [ B ω ] × ^{I}\dot{\bold{R}}_{B} = ^{I}\bold{R}_{B} [^{B}\omega]_{\times}

腿部的关节与足部末端的定义如下:

q ˙ = [ q i , A b / A d q i , h i p q i , k n e e ] p = [ p i , x p i , y p i , z ] \dot{\bold{q}} = \left[ \begin{array}{l} q_{i,Ab/Ad} \\ q_{i,hip} \\ q_{i,knee} \end{array} \right] \bold{p} = \left[ \begin{array}{l} p_{i,x} \\ p_{i,y} \\ p_{i,z} \end{array} \right]

控制架构

控制结构如下图所示,通过手柄输入期望的控制,经过控制器解算后得到机器人的关节控制力矩。其中摆动腿与支撑腿用不同的控制方法,支撑腿用力控制,摆动腿用带补偿的PD控制。

控制架构

状态估计

MIT这个机器人控制中,很重要的一个部分就是通过机器人的本体传感器,包括关节力矩传感器和IMU,不额外加视觉等传感器,机器人通过估计算法准确的得知机器人当前状态。我记得最早的四足相关的状态估计的论文是ETH出的,使用EKF进行估计,本文进行化简后,可以直接使用Kalman Filter进行状态估计。

状态转移函数如下

p ˙ = v \dot{\bold{{p}}} = \bold{v}

v ˙ = I R ˙ B b a + g + ω v \dot{\bold{v}} = ^{I}\dot{\bold{R}}_{B} \\ ^{b}a + \bold{g} + \bold{\omega}_v

p ˙ i = ω ˙ p i \dot{\bold{p}}_{i} = \dot{\bold{\omega}}_{p_i}

在后续文章里,我会补充关于Kalman Filer部分的公式。这里的基本思想就是,依靠支撑腿与IMU结合来估计身体的速度姿态等信息。

腿部控制

  1. 摆动腿控制

τ F F , i = J i T Λ i ( B a i , r e f J ˙ i a ˙ i ) + C i q ˙ i + G i \bold{\tau}_{FF,i} = \bold{J}^{T}_{i} \Lambda_i (^{B}a_{i,ref} - \dot{\bold{J}}_i \dot{\bold{a}}_i) + \bold{C}_i \dot{\bold{q}}_i + \bold{G}_i

τ F B , i = J i T [ K p ( B p i , r e f B p i ) + K d ( B v i , r e f B v i ) ] \bold{\tau}_{FB,i} = \bold{J}^{T}_{i}[ \bold{K}_p (^{B}\bold{p}_{i,ref} - ^{B}\bold{p}_i) + \bold{K}_d (^{B}\bold{v}_{i,ref} - ^{B}\bold{v}_i)]

τ i = τ F F , i + τ F B , i \bold{\tau}_i = \bold{\tau}_{FF,i} + \bold{\tau}_{FB,i}

  1. 支撑腿力控制

τ i = J i T f i \bold{\tau}_i = \bold{J}^{T}_{i} \bold{f}_i

步态规划

这篇论文使用步态相位这种方法来定义步态,通过这种方法可以直接用统一的参数定义比如Trot、Gallop、Walk等步态。论文使用下述参数来计算当前腿的相位或者是状态。这是一个很巧妙的办法,我个人觉得这种方法可以用在强化学习中,作为某种待优化的参数,来使机器人学习到更好的控制策略。

Φ i = m o d ( t t 0 , i T p , 1 ) \Phi_i = mod \left( \tfrac{t-t_{0,i}}{T_p} , 1 \right)

步态规划

足部触地检测

这部分可以参考MIT的论文,Contact Model Fusion for Event-based Locomotion in Unstructred Terrains。理论部分比较多,就不详细展开了。
我个人觉得可以用仿真加随机化获得数据,通过神经网络训练一个检测器出来,结合Sim-To-Real的理念,想办法直接用在实际机器人上。

Regularized Predictive Control

这一章是本文的重点,是控制算法的核心。Regularized Predictive Control在普通MPC算法的基础上,添加人为设计的运动约束,使得机器人具有更好的运动效果。论文中提到:

  • The philosophy behind RPC is to use our knowledge of robotic and legged systems to inform the optimization.

MIT还有一篇论文是在MPC的基础上添加Whole Body Control来优化机器人的关节输出,两个方法都有可取之处,不过在我看来,如果四足的运动控制板性能有限,可以考虑选择一个计算量需求小一点的算法,来进行整体的权衡。 (说的就是Up Board)

Regularized Predictive Control Framework

选择合适的Regular Heuristics Cost Function可以提高优化的结果并提升计算速度,但是若选择了不合适的函数,则可能只能求得局部最优解,甚至无法求解。为了避免手工设计的Heuristics Cost Function具有缺陷,后文作者使用一种基于学习的方法来得到更优的Heuristics Cost Function

MPC Control

这一节主要介绍MPC算法。

为了达到实时的MPC控制,我们需要尽量减少计算量,同时又要保证计算结果的有效性,因此在这里选择了简化模型的方法。

在该模型中,机器人状态定义如下:

x = [ p Θ p ˙ Θ ˙ ] \bold{x} = \left[ \begin{array}{l} \bold{p} \\ \bold{\Theta} \\ \dot{\bold{p}} \\ \dot{\bold{\Theta}} \end{array} \right]

其中, p \bold{p} 代表机器人位置, Θ \bold{\Theta} 代表机器人朝向的欧拉角表示。机器人的控制量为:

u = [ r 1 f 1 . . . r F f F ] \bold{u} = \left[ \begin{array}{l} \bold{r}_1 \\ \bold{f}_1 \\ ... \\ \bold{r}_F \\ \bold{f}_F \end{array} \right]

由此得到的机器人化简后离散系统的动力学:

x k + 1 = A ( Δ t k ) x k + B ( Δ t k ) h ( x k , u k , Φ k ) + d ( Δ t k ) \bold{x}_{k+1} = \bold{A}(\Delta t_k)\bold{x}_k + \bold{B}(\Delta t_k)h(\bold{x}_k, \bold{u}_k, \bold{\Phi}_k) + \bold{d}(\Delta t_k)

其中:

A ( Δ t k ) = [ I 6 Δ t k I 6 0 6 I 6 ] , B ( Δ t k ) = [ Δ t k 2 2 I 1 Δ t k I 1 ] , d ( Δ t k ) = [ Δ t k 2 2 a g Δ t k a g ] , a g = [ g T   0 3 × 1 T ] T \bold{A}(\Delta t_k) = \left[ \begin{array}{l} \bold{I}_6 & \Delta t_k \bold{I}_6 \\ \bold{0}_6 & \bold{I}_6 \end{array} \right], \bold{B}(\Delta t_k) = \left[ \begin{array}{l} \tfrac{\Delta t_k^2}{2}\bold{I}^{-1} \\ \Delta t_k \bold{I}^{-1} \end{array} \right], \bold{d}(\Delta t_k) = \left[ \begin{array}{l} \tfrac{\Delta t_k^2}{2} \bold{a}_g \\ \Delta t_k \bold{a}_g \end{array} \right], \bold{a}_g = [\bold{g}^T \ \bold{0}_{3 \times 1}^T]^T

h ( x k , u k , Φ k ) h(\bold{x}_k, \bold{u}_k, \bold{\Phi}_k) 函数是用于计算足部力与身体力矩的关系矩阵。

在前文提到过,机器人假设欧拉角中roll和pitch角很小,由此简化了动力学模型。MPC就是在前述的动力学方程上加上约束得到的。比如足部力需要满足摩擦角约束,比如足部力必须指向地面之类的,再通过非线性求解器得到输出控制量,进行机器人控制。

Regularized MPC

为了进一步优化MPC表现,作者提出了对常规MPC添加Cost Function的方法来改善结果。而Cost Function是通过学习方法得到的。我个人对这个部分不感兴趣,所以没有深入研究。