MIT Cheetah 3中融合了许多论文中的算法和技术。
论文链接:MIT Cheetah 3: Design and Control of a Robust, Dynamic Quadruped Robot
MIT Cheetah Learning系列将解析Cheetah的算法部分,尝试将其中每一个模块解释清楚。
Cheetah 3 中的State Estimate是参考2013年ETH的论文——
“State Estimation for Legged Robots - Consistent Fusion of Leg Kinematics and IMU”
论文链接:State Estimation for Legged Robots - Consistent Fusion of Leg Kinematics and IMU
因此,只需搞明白ETH的论文即可。
下面将具体介绍论文是如何用IMU与编码器实现State Estimate
以Extended Kalman Filter(EKF)算法为核心,仅使用IMU与电机的编码器,可以准确估计除了yaw和absolute position以外的机器人状态(yaw和absolute position在短距离运动中误差也仅在10%),包括roll、pitch、velocity。
在任意步态、任意地形下,都可以实现对机器人的状态估计。前提是机器人至少有一条腿与地面接触,并且假设机器人与地面接触时,仅会发生非常小的的滑动。
Definition:
θ k \theta_k θk为真实值, θ k ′ \theta'_k θk′为模型预测值, ⟨ θ k ⟩ \langle \theta_k \rangle ⟨θk⟩为估计值(系统输出), z k z_k zk为系统观测值, s k s_k sk为状态转移噪声,服从高斯分布, v k v_k vk为观测噪声,也服从高斯分布
EKF的状态转移方程和观测方程如下:
{ θ k = f ( θ k − 1 ) + s k ( 1 ) z k = h ( θ k ) + v k ( 2 ) \left\{ \begin{array}{ll} \theta_k = f(\theta_{k-1})+s_k & (1)\\ z_k = h(\theta_{k}) + v_k & (2) \end{array}\right. {θk=f(θk−1)+skzk=h(θk)+vk(1)(2)
对(1)(2)式进行泰勒展开(雅克比矩阵性质: f ( x ) = f ( x 0 ) + J ⋅ ( x − x 0 ) f(x) = f(x_0)+J \cdot(x-x_0) f(x)=f(x0)+J⋅(x−x0)),得到
{ θ k = f ( θ k − 1 ) + s k = f ( ⟨ θ k − 1 ⟩ ) + F k − 1 ( θ k − 1 − ⟨ θ k − 1 ⟩ ) + s k ( 3 ) z k = h ( θ k ) + v k = h ( θ k ′ ) + H ( θ − θ k ′ ) + v k ( 4 ) \left\{ \begin{array}{ll} \theta_k = f(\theta_{k-1})+s_k = f(\langle \theta_{k-1} \rangle)+F_{k-1}(\theta_{k-1}-\langle \theta_{k-1} \rangle)+s_k & (3)\\ z_k = h(\theta_{k}) + v_k = h(\theta'_k) + H(\theta-\theta'_k) +v_k& (4) \end{array}\right. {θk=f(θk−1)+sk=f(⟨θk−1⟩)+Fk−1(θk−1−⟨θk−1⟩)+skzk=h(θk)+vk=h(θk′)+H(θ−θk′)+vk(3)(4)
引入反馈
⟨ θ k ⟩ = θ k ′ + K k ( z k − h ( θ k ′ ) ) \langle \theta_{k} \rangle = \theta'_k+K_k(z_k-h(\theta'_k)) ⟨θk⟩=θk′+Kk(zk−h(θk′))
由以上式子可以得到EKF的Predict和Update部分
Predict:
{ θ k ′ = f ( ⟨ θ k − 1 ⟩ ) Σ k ′ = F k − 1 Σ k − 1 ′ F k − 1 T + Q \left\{ \begin{array}{ll} \theta'_k = f(\langle \theta_{k-1} \rangle)\\ \Sigma'_k = F_{k-1} \Sigma'_{k-1} F_{k-1}^T + Q \end{array}\right. {θk′=f(⟨θk−1⟩)Σk′=Fk−1Σk−1′Fk−1T+Q
Update:
{ S k = ( H k Σ k ′ H k T + R ) − 1 K k = Σ k ′ H k T S k ⟨ θ k ⟩ = θ k ′ + K k ( z k − h ( θ k ′ ) ) Σ k = ( I − K k H k ) Σ k ′ \left\{ \begin{array}{ll} S_k = (H_{k} \Sigma'_{k} H_{k}^T+R)^{-1}\\ K_k = \Sigma'_k H^T_{k} S_k \\ \langle \theta_{k} \rangle = \theta'_k+K_k(z_k-h(\theta'_k)) \\ \Sigma_k = (I-K_k H_k)\Sigma'_k \end{array}\right. ⎩⎪⎪⎨⎪⎪⎧Sk=(HkΣk′HkT+R)−1Kk=Σk′HkTSk⟨θk⟩=θk′+Kk(zk−h(θk′))Σk=(I−KkHk)Σk′
其中,雅克比矩阵 F k = ∂ f ∂ θ ∣ ⟨ θ k − 1 ⟩ F_k = \frac{\partial f}{\partial \theta}|_{\langle \theta_{k-1} \rangle} Fk=∂θ∂f∣⟨θk−1⟩
雅克比矩阵 H k = ∂ h ∂ θ ∣ θ k ′ H_k = \frac{\partial h}{\partial \theta}|_{\theta'_k} Hk=∂θ∂h∣θk′
协方差矩阵 Σ k = ⟨ ( θ k − ⟨ θ k ⟩ ) ( θ k − ⟨ θ k ⟩ ) T ⟩ \Sigma_k = \langle (\theta_k-\langle \theta_k \rangle)(\theta_k-\langle \theta_k \rangle)^T \rangle Σk=⟨(θk−⟨θk⟩)(θk−⟨θk⟩)T⟩,表示估计值与真实值之间的误差
协方差矩阵 Σ k ′ = ⟨ ( θ k − θ k ′ ) ( θ k − θ k ′ ) T ⟩ \Sigma'_k = \langle (\theta_k-\theta'_k) (\theta_k-\theta'_k)^T \rangle Σk′=⟨(θk−θk′)(θk−θk′)T⟩,表示预测值与真实值之间的误差
状态转移噪声协方差矩阵 Q = ⟨ s k s k T ⟩ Q = \langle s_k s_k^T\rangle Q=⟨skskT⟩
观测噪声协方差矩阵 R = ⟨ v k v k T ⟩ R = \langle v_k v_k^T\rangle R=⟨vkvkT⟩
K k K_k Kk为卡尔曼增益
具体推导可参考扩展卡尔曼滤波
参考书籍:《视觉SLAM十四讲(第二版)》—— 高翔著
以下定义会在后续会使用到:
增量式编码器提供了所有电机的转动真实角度 α \alpha α,该反馈信息受到 n α n_{\alpha} nα高斯噪声的影响
α ~ = α + n α \tilde{\alpha} = \alpha + n_{\alpha} α~=α+nα
因此由正运动学可知所有足端在 B o d y F r a m e Body Frame BodyFrame( B B B)下的坐标 s i s_i si
s i = l k i n i ( α ) + n s , i s_i = lkin_i(\alpha) + n_{s,i} si=lkini(α)+ns,i
l k i n i ( ⋅ ) lkin_i(\cdot) lkini(⋅)表示腿部正运动学模型, n s , i n_{s, i} ns,i表示离散高斯噪声(校准误差与运动学模型误差)
定义—— R α R_{\alpha} Rα为 n α n_{\alpha} nα的协方差矩阵, R s R_s Rs为 n i , s n_{i,s} ni,s的协方差矩阵
由Part 1中IMU模型可知
加速度计得到在 B B B下的加速度 f f f,陀螺仪得到在 B B B下的角速度 ω \omega ω
旋转矩阵 C C C表示从世界坐标系 I I I到机器人坐标系 B B B变换
a a a表示 I I I下的加速度
因此可得
f = C ( a − g ) f = C(a-g) f=C(a−g) f ~ = f + b f + w f \tilde{f} = f+b_f+w_f f~=f+bf+wf b ˙ f = ω b f \dot b_f = \omega_{bf} b˙f=ωbf ω ~ = ω + b ω + w ω \tilde{\omega} = \omega+b_{\omega}+w_{\omega} ω~=ω+bω+wω b ˙ ω = ω b ω \dot b_{\omega} = \omega_{b\omega} b˙ω=ωbω
其中 f ~ , ω ~ \tilde{f},\tilde{\omega} f~,ω~是受高斯噪声项 ω f , w ω \omega_{f},w_{\omega} ωf,wω和偏置项 b f , b ω b_f,b_{\omega} bf,bω影响得到的测量值,且偏置项的导数可以由高斯噪声 ω b f , ω b ω \omega_{bf},\omega_{b\omega} ωbf,ωbω表示
定义以上四个高斯噪声的协方差矩阵为 Q f , Q b f , Q ω , Q b ω Q_f, Q_{bf},Q_{\omega},Q_{b\omega} Qf,Qbf,Qω,Qbω
Definition:
r r r为在世界坐标系 I I I下,机器人身体中心的位置
v v v为机器人在世界坐标系 I I I下的速度
q q q为世界坐标系 I I I到机器人坐标系 B B B的旋转四元数
p 1 , p 2 , . . . , p N p_1, p_2, ..., p_N p1,p2,...,pN为机器人足端在世界坐标系 I I I下的位置
b f , b ω b_f, b_{\omega} bf,bω为在机器人坐标系 B B B下,IMU的偏置项(可由旋转矩阵转化到世界坐标系 I I I下)
因此我们定义
x : = ( r , v , q , p 1 , . . . , p N , b f , b ω ) x:= (r, v, q, p_1, ..., p_N, b_f, b_{\omega}) x:=(r,v,q,p1,...,pN,bf,bω) P : = c o v ( Δ x ) P:= cov(\Delta x) P:=cov(Δx) Δ x : = ( Δ r , Δ v , Δ q , Δ p 1 , . . . , Δ p N , Δ b f , Δ b ω ) \Delta x := (\Delta r, \Delta v, \Delta q, \Delta p_1, ..., \Delta p_N, \Delta b_f, \Delta b_{\omega}) Δx:=(Δr,Δv,Δq,Δp1,...,ΔpN,Δbf,Δbω)
由Part 1中IMU模型可知
r ˙ = v v ˙ = a = C T ( f ~ − b f − ω f ) + g q ˙ = 1 2 Ω ( ω ) q = 1 2 Ω ( ω ~ − b ω − ω ω ) q p i ˙ = C T ω p , i , ∀ i ∈ 1 , . . . , N b f ˙ = ω b f b ω ˙ = ω b ω \begin{aligned} &\dot{r} = v \\ & \dot{v}=a=C^T(\tilde{f}-b_f-\omega_f)+g \\ &\dot{q} = \frac{1}{2}\Omega(\omega) q = \frac{1}{2}\Omega(\tilde{\omega}-b_{\omega}-\omega_{\omega})q \\ & \dot{p_i} = C^T\omega_{p,i},\forall i \in {1, ..., N} \\ & \dot{b_f} = \omega_{bf} \\ & \dot{b_\omega} = \omega_{b\omega} \end{aligned} r˙=vv˙=a=CT(f~−bf−ωf)+gq˙=21Ω(ω)q=21Ω(ω~−bω−ωω)qpi˙=CTωp,i,∀i∈1,...,Nbf˙=ωbfbω˙=ωbω
白噪声 ω p , i \omega_{p,i} ωp,i表示足端与地面接触可能产生的微小滑动
Q p , i Q_{p,i} Qp,i为 ω p , i \omega_{p,i} ωp,i的协方差矩阵,定义如下:
Q p , i : = [ ω p , i , x 0 0 0 ω p , i , y 0 0 0 ω p , i , z ] Q_{p,i} : = \begin{bmatrix} \omega_{p,i,x} & 0 & 0 \\ 0 & \omega_{p,i,y} & 0 \\ 0 & 0 & \omega_{p,i,z} \end{bmatrix} Qp,i:=⎣⎡ωp,i,x000ωp,i,y000ωp,i,z⎦⎤
由Part 1中Encoders模型可知
s i ~ : = l k i n i ( α ~ ) ≈ l k i n i ( α ) + J l k i n , i n α ≈ s i − n s , i + J l k i n , i n α ⏟ n i \tilde{s_i}:=lkin_i(\tilde{\alpha}) \\ \approx lkin_i(\alpha)+J_{lkin,i}n_{\alpha} \\ \approx s_i \underbrace{- n_{s,i}+J_{lkin,i}n_{\alpha}}_{n_{i}} si~:=lkini(α~)≈lkini(α)+Jlkin,inα≈sini −ns,i+Jlkin,inα
其中,雅克比矩阵 J l k i n , i : = ∂ l k i n i ( α ) ∂ α i J_{lkin,i}:=\frac{\partial lkin_i(\alpha)}{\partial \alpha_i} Jlkin,i:=∂αi∂lkini(α)
n i n_{i} ni可视为经过线性离散化的噪声,包含编码器噪声和正运动学计算噪声,即观测误差
R i R_i Ri是每一条腿的观测误差协方差矩阵,同时由Part 1.A可知
R i = R s + J l k i n , i R α J l k i n , i T R_i = R_s+J_{lkin,i}R_{\alpha}J_{lkin,i}^T Ri=Rs+Jlkin,iRαJlkin,iT
由定义可知, s i ~ \tilde{s_i} si~可以表示 s i ~ = C ( p i − r ) + n i \tilde{s_i} = C(p_i-r)+n_i si~=C(pi−r)+ni,即足端坐标与机器人中心坐标(世界坐标系 I I I)的差值乘上旋转矩阵
将编码器视为观测值, Δ x \Delta x Δx视为真实值,即可建立EKF状态转移方程与观测方程,如下
{ Δ x k = f ( Δ x k − 1 ) + q k s k = h ( Δ x k ) + v k \left\{ \begin{array}{ll} \Delta x_k = f(\Delta x_{k-1})+q_k \\ s_k = h(\Delta x_{k}) + v_k \end{array}\right. {Δxk=f(Δxk−1)+qksk=h(Δxk)+vk
Predict:
经过模型线性化处理之后(参考文章Computing integrals involving the matrix exponential),得到关于 Δ x \Delta x Δx的协方差矩阵 F k F_k Fk,以及离散过程噪声的协方差矩阵 Q k Q_k Qk( Q k Q_k Qk包含了 Q f , Q b f , Q ω , Q b ω Q_f, Q_{bf},Q_{\omega},Q_{b\omega} Qf,Qbf,Qω,Qbω)
两个协方差矩阵 F k , Q k F_k,Q_k Fk,Qk的具体表达式在论文中由展示,在这里便不展示了(会涉及反对称阵,四元数,e指数,罗德里格斯公式等)
因此可以得到
{ Δ ′ x = f ( ⟨ Δ x k − 1 ⟩ ) P k + 1 − = F k P k + F k T + Q k \left\{ \begin{array}{ll} \Delta' x = f(\langle \Delta x_{k-1} \rangle)\\ P^-_{k+1} = F_k P^+_k F_k^T + Q_k \end{array}\right. {Δ′x=f(⟨Δxk−1⟩)Pk+1−=FkPk+FkT+Qk
Update:
引入 y k y_k yk,定义如下:
y k : = ( ( s ~ 1 , k − C ^ k − ( p ^ 1 , k − − r ^ k − ) ⋮ ( s ~ N , k − C ^ k − ( p ^ N , k − − r ^ k − ) ) y_k : = \left(\begin{array}{l} (\tilde{s}_{1,k}-\hat{C}^-_k(\hat{p}^-_{1,k}-\hat{r}^-_k) \\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \vdots \\ (\tilde{s}_{N,k}-\hat{C}^-_k(\hat{p}^-_{N,k}-\hat{r}^-_k) \end{array} \right) yk:=⎝⎜⎛(s~1,k−C^k−(p^1,k−−r^k−) ⋮(s~N,k−C^k−(p^N,k−−r^k−)⎠⎟⎞
关于式子 s ~ i , k − C ^ k − ( p ^ i , k − − r ^ k − ) \tilde{s}_{i,k}-\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k) s~i,k−C^k−(p^i,k−−r^k−),使用泰勒展开,忽略所有的高阶项,得到
s ~ i , k − C ^ k − ( p ^ i , k − − r ^ k − ) ≈ − C ^ k − Δ r k − + C ^ k − Δ p i , k − + ( C ^ k − ( p ^ i , k − − r ^ k − ) ) × Δ ϕ k − \tilde{s}_{i,k}-\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k) \approx -\hat{C}^-_k \Delta r^-_k+\hat{C}^-_k \Delta p^-_{i,k}+(\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k))^{\times}\Delta \phi^-_k s~i,k−C^k−(p^i,k−−r^k−)≈−C^k−Δrk−+C^k−Δpi,k−+(C^k−(p^i,k−−r^k−))×Δϕk−
证明如下:
定义 ∂ g ( x k ) ∂ x k : = s ~ i , k − C ^ k − ( p ^ i , k − − r ^ k − ) \frac{\partial g( x_k)}{\partial x_k} := \tilde{s}_{i,k}-\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k) ∂xk∂g(xk):=s~i,k−C^k−(p^i,k−−r^k−)
∵ ∂ g ( x k ) ∂ x k = − C ^ k − Δ r k − + C ^ k − Δ p i , k − + ( C ^ k − ( p ^ i , k − − r ^ k − ) ) × Δ ϕ k − + G ( Δ v k − ) \because \frac{\partial g( x_k)}{\partial x_k} = -\hat{C}^-_k \Delta r^-_k+\hat{C}^-_k \Delta p^-_{i,k}+(\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k))^{\times}\Delta \phi^-_k+G(\Delta v^-_k) ∵∂xk∂g(xk)=−C^k−Δrk−+C^k−Δpi,k−+(C^k−(p^i,k−−r^k−))×Δϕk−+G(Δvk−)
= − C ^ k − Δ r k − + C ^ k − Δ p i , k − + ( C ^ k − ( p ^ i , k − − r ^ k − ) ) × Δ ϕ k − =-\hat{C}^-_k \Delta r^-_k+\hat{C}^-_k \Delta p^-_{i,k}+(\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k))^{\times}\Delta \phi^-_k =−C^k−Δrk−+C^k−Δpi,k−+(C^k−(p^i,k−−r^k−))×Δϕk−
G ( Δ v k − ) G(\Delta v^-_k) G(Δvk−)可视为 − C ^ k − Δ r k − -\hat{C}^-_k \Delta r^-_k −C^k−Δrk−的高阶项,因此可以忽略
∴ s ~ i , k − C ^ k − ( p ^ i , k − − r ^ k − ) ≈ − C ^ k − Δ r k − + C ^ k − Δ p i , k − + ( C ^ k − ( p ^ i , k − − r ^ k − ) ) × Δ ϕ k − \therefore \tilde{s}_{i,k}-\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k) \approx -\hat{C}^-_k \Delta r^-_k+\hat{C}^-_k \Delta p^-_{i,k}+(\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k))^{\times}\Delta \phi^-_k ∴s~i,k−C^k−(p^i,k−−r^k−)≈−C^k−Δrk−+C^k−Δpi,k−+(C^k−(p^i,k−−r^k−))×Δϕk−
因此我们可以得到雅克比矩阵 H k = ∂ y k ∂ x k H_k = \frac{\partial y_k}{\partial x_k} Hk=∂xk∂yk
H k = [ − C ^ k − 0 ( C ^ k − ( p ^ 1 , k − − r ^ k − ) ) × C ^ k − ⋯ 0 0 0 ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ − C ^ k − 0 ( C ^ k − ( p ^ N , k − − r ^ k − ) ) × C ^ k − ⋯ 0 0 0 ] H_k = \begin{bmatrix} -\hat{C}^-_k & 0 & (\hat{C}^-_k(\hat{p}^-_{1,k}-\hat{r}^-_k))^{\times} & \hat{C}^-_k & \cdots& 0 & 0 & 0 \\ \vdots & \vdots & \vdots & \vdots & \ddots & \vdots & \vdots & \vdots \\ -\hat{C}^-_k & 0 & (\hat{C}^-_k(\hat{p}^-_{N,k}-\hat{r}^-_k))^{\times} & \hat{C}^-_k & \cdots& 0 & 0 & 0 \end{bmatrix} Hk=⎣⎢⎡−C^k−⋮−C^k−0⋮0(C^k−(p^1,k−−r^k−))×⋮(C^k−(p^N,k−−r^k−))×C^k−⋮C^k−⋯⋱⋯0⋮00⋮00⋮0⎦⎥⎤
由Part 2.C可知, R k R_k Rk是观测误差的协方差矩阵
R k = [ R 1 , k ⋱ R N , k ] R_k = \begin{bmatrix} R_{1,k} & &\\ & \ddots \\ & & R_{N,k} \end{bmatrix} Rk=⎣⎡R1,k⋱RN,k⎦⎤
因此我们可以得到EFK的Update等式,如下:
{ S k = ( H k P k − H k T + R k ) K k = P k − H k T S k − 1 ⟨ Δ x k ⟩ = K k y k ( ∗ ) P k + = ( I − K k H k ) P k − \left\{ \begin{array}{ll} S_k = (H_{k} P^-_{k} H_{k}^T+R_k)\\ K_k = P^-_{k} H^T_{k} S^{-1}_k \\ \langle \Delta x_k \rangle = K_k y_k & (*)\\ P^+_{k} = (I-K_k H_k)P^-_k \end{array}\right. ⎩⎪⎪⎨⎪⎪⎧Sk=(HkPk−HkT+Rk)Kk=Pk−HkTSk−1⟨Δxk⟩=KkykPk+=(I−KkHk)Pk−(∗)
( ∗ ) (*) (∗)式证明如下:
⟨ Δ x i , k ⟩ = Δ x i , k ′ + K k ( s ~ i , k − C ^ k − ( p ^ i , k − − r ^ k − ) ) \langle \Delta x_{i,k} \rangle = \Delta x'_{i,k}+K_k(\tilde{s}_{i,k}-\hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k)) ⟨Δxi,k⟩=Δxi,k′+Kk(s~i,k−C^k−(p^i,k−−r^k−))
由于 Δ x i , k ′ \Delta x'_{i,k} Δxi,k′与 C ^ k − ( p ^ i , k − − r ^ k − ) \hat{C}^-_k(\hat{p}^-_{i,k}-\hat{r}^-_k) C^k−(p^i,k−−r^k−)式等价的
∴ ⟨ Δ x i , k ⟩ = K k y k \therefore \langle \Delta x_{i,k} \rangle = K_k y_k ∴⟨Δxi,k⟩=Kkyk
参考文章Nonlinear controllability and observability
该部分从数学的角度证明了对于该机器人系统来说,有以下几个结论:
具体证明过程可参考论文本身,数学部分较为复杂,便不一一阐述
参考文章Analysis and improvement of the consistency of extended Kalman filter based SLAM
参考文章A counter example to the theory of simultaneous localization and map building
该部分从数学的角度证明了对于该机器人系统的EKF模型来说,有以下结论:
对于Part 3的证明,还有一些问题没有搞清楚,特别是非线性机器人模型的可观测性这个部分。
后面在搭建好四足机器人平台之后,尝试复现State Estimate。