IMU的加速度补偿、祛除向心力

7 篇文章 3 订阅
2 篇文章 0 订阅

1. 简介

  1. 一般,我们期望用IMU测量某个Target坐标系的加速度、角速度信息,然而IMU的坐标系Target 坐标系一般存在位姿关系,此时IMU测量的加速度不能直接代表Target左坐标系的加速度。比如Target 坐标系绕Z轴自转动,Target的XY轴的加速度应该为0;然而IMU的加速度,包含了向心力,XY的加速度发生变化,不能直接用于Target坐标系。
  2. 基于上述问题,如果需要Target坐标系的加速度,需要对IMU的加速度进行向心力的补偿。
  3. 参考:CSND-浅谈加速度计旋转补偿【3D个人觉得不合理】

2. 仅有XY偏移的修正过程

  1. 简介:假如IMU的坐标系Target坐标系只有平移关系,没有旋转关系,也就是坐标系对齐,且只考虑XY
    在这里插入图片描述

  2. 向心力 F 向 = m a 向 = m w 2 r F_{向}=ma_{向}=mw^2r F=ma=mw2r,其中 w w wTarget坐标系自转角速度(弧度)。可以得到在Target坐标系下,IMU的向心加速度
    a 向心 = w 2 ⋅ r = w 2 ⋅ △ x 2 + △ y 2 a_{向心}=w^2\cdot r=w^2 \cdot \sqrt {\triangle x^2 + \triangle y^2} a向心=w2r=w2x2+y2

  3. IMU的X轴上,向心力叠加量为,这一部分需要IMU的X轴加速度减去
    X a = a 向心 ⋅ c o s θ = a 向心 ⋅ △ x r = w 2 ⋅ △ x X_a=a_{向心} \cdot cos\theta=a_{向心} \cdot \frac{\triangle x}{r}=w^2\cdot \triangle x Xa=a向心cosθ=a向心rx=w2x

  4. IMU的Y轴上,向心力叠加量为,这一部分需要IMU的Y轴加速度减去
    Y a = a 向心 ⋅ s i n θ = a 向心 ⋅ △ y r = w 2 ⋅ △ y Y_a=a_{向心} \cdot sin\theta=a_{向心} \cdot \frac{\triangle y}{r}=w^2\cdot \triangle y Ya=a向心sinθ=a向心ry=w2y

3. 3D修正过程

  1. 首先将IMU的坐标系与Target坐标系的先旋转修正,此时IMU坐标系与Target的坐标系朝向对齐,问题就可以简化问题

  2. 对IMU的数据进行旋转

    • 设IMU坐标系在Target坐标系朝向的旋转关系为 R ,即Target到IMU的过渡旋转,或者叫在Target坐标系下,IMU的姿态为R
      T a r g e t ⋅ R = I M U Target \cdot R= IMU TargetR=IMU
    • 那么对齐后的IMU数据为
      a c c = R ⋅ a c c i m u g y r o = R ⋅ g y r o i m u acc=R \cdot acc_{imu} \\ gyro=R\cdot gyro_{imu} acc=Raccimugyro=Rgyroimu
  3. 此时问题和第2节中类似,不过此时我们区别是,需要考虑Z轴的偏移影响

    • 在第2节可以看到,Z轴旋转 只会 增加X轴、Y轴的向心力,不会增加Z轴。同理,X轴旋转也会增加Y轴、Z轴向心力,Y轴旋转会增加X轴、Z轴向心力。
    • 所以,每个轴的向心力会受到另外两个轴的旋转影响。这里角速度为Target坐标轴角速度,不过它和旋转后的IMU角速度一致。
    • 那么向心力在每个轴的分量为,需要注意的是,这是原始测量值需要减去的值
      a x = w z ⋅ △ x + w y ⋅ △ x a y = w z ⋅ △ y + w x ⋅ △ y a z = w y ⋅ △ z + w x ⋅ △ z a_x=w_z\cdot \triangle x + w_y \cdot \triangle x \\ a_y=w_z\cdot \triangle y + w_x \cdot \triangle y \\ a_z=w_y\cdot \triangle z + w_x \cdot \triangle z \\ ax=wzx+wyxay=wzy+wxyaz=wyz+wxz
  4. 代码实现

    def IMU_Centripetal_force_correction(self, imu_acc, imu_gyro, rotation, position):
        '''
            Target坐标系作为参考坐标系,IMU的姿态为rotation、position,进行向心力去除
            imu_acc、imu_gyro 为IMU的测量值
        '''
        # 0. 得到偏移量
        delta_x, delta_y, delta_z = position[0], position[1], position[2]
        
        # 1. 将IMU的坐标系朝向与Target坐标系对齐
        acc  =  np.asarray(rotation,dtype=np.float32) @ np.asarray(imu_acc, dtype=np.float32)
        gyro =  np.asarray(rotation,dtype=np.float32) @ np.asarray(imu_gyro, dtype=np.float32)
        
        # 2. 向心力的叠加量计算
        wx, wy, wz = gyro[0], gyro[1], gyro[2]
        delta_ax = wz*delta_x + wy*delta_x
        delta_ay = wz*delta_y + wx*delta_y
        delta_az = wy*delta_z + wx*delta_z
        
        # 3. 修正加速度,陀螺仪不需要再修正
        acc[0] = acc[0] - delta_ax
        acc[1] = acc[1] - delta_ay
        acc[2] = acc[2] - delta_az 
        
       return acc, gyro
    

4. 位置的旋转

  1. 设IMU的一点为 P I P_I PI,IMU在Word的旋转关系为 R W I R_{WI} RWI,则该点在Word坐标系下的点为 R W I ⋅ P I R_{WI}\cdot P_I RWIPI

5. 速度的旋转

  1. 结论:该量与位置无关,不考虑位置影响;不同坐标系下的速度,并非直接旋转得到
  2. 同一点 P P P 在IMU坐标系的坐标为 P i P_i Pi,在Word坐标系下为 P w P_w Pw,二者的关系满足
    P w = R w i ⋅ P i P_w = R_{wi}\cdot P_i Pw=RwiPi
  3. 对向量求导,可以得到每个轴的速度。因此对该点进行求导,得到该点的速度。 注意: [ ] × [ ]_{\times} []× 是一个反对程矩阵算子, w i w_i wi是IMU坐标系下的角速度 w w × P w w_w \times P_w ww×Pw 是对应元素相乘
    V w = P w ˙ = R w i ⋅ P i ˙ + R w i ˙ ⋅ P i = R w i ⋅ V i + R w i ⋅ [ w i ] × ⋅ P i = R w i ⋅ V i + [ R w i ⋅ w i ] × ⋅ R w i ⋅ P i = R w i ⋅ V i ⏟ 旋转后的速度 + w w × P w ⏟ 坐标系之间的相对速度 \begin{align*} V_w =\dot {P_w} &=R_{wi} \cdot \dot{ P_i} + \dot {R_{wi}}\cdot P_i \\ &= R_{wi} \cdot V_i + R_{wi}\cdot [w_i]_{\times} \cdot P_i \\ &= R_{wi} \cdot V_i + [R_{wi}\cdot w_i]_{\times} \cdot R_{wi} \cdot P_i \\ &= \underbrace{R_{wi} \cdot V_i}_{旋转后的速度} + \underbrace{w_w \times P_w}_{坐标系之间的相对速度} \end{align*} Vw=Pw˙=RwiPi˙+Rwi˙Pi=RwiVi+Rwi[wi]×Pi=RwiVi+[Rwiwi]×RwiPi=旋转后的速度 RwiVi+坐标系之间的相对速度 ww×Pw
  4. 结论:IMU在Word坐标系下的速度,等于速度进行旋转,与相对速度 w w ⋅ P w w_w \cdot P_w wwPw的和

6. 加速度的旋转

  1. 同一点 P P P 在IMU坐标系的坐标为 P i P_i Pi,在Word坐标系下为 P w P_w Pw,二者的关系满足
    P w = R w i ⋅ P i P_w = R_{wi}\cdot P_i Pw=RwiPi
  2. 对该速度向量求导,可以得到每个轴的加速度大小, 需要注意 w w = R w i ⋅ w i w_w=R_{wi} \cdot w_i ww=Rwiwi, 并且 R w i ˙ = [ R w i ⋅ w i ] × ⋅ R w i \dot {R_{wi}}=[R_{wi}\cdot w_i]_{\times} \cdot R_{wi} Rwi˙=[Rwiwi]×Rwi
    a w = V w ˙ = R w i ⋅ V i ˙ + R w i ˙ ⋅ V i + w w × P w ˙ + w w ˙ × P w = R w i ⋅ a i + R w i ˙ ⋅ V i + w w × ( V w + w w × P w ) + [ R w i ˙ ⋅ w i + R w i ⋅ w i ˙ ] × P w = R w i ⋅ a i + w w × V w + w w × V w + w w × ( w w × P w ) + [ [ R w i ⋅ w i ] × ⋅ R w i ⋅ w i + R w i ⋅ w i ˙ ] × P w = R w i ⋅ a i + 2 w w × V w + w w × ( w w × P w ) + ( w × w + w w ˙ ) × P w = R w i ⋅ a i ⏟ 旋转后的加速度 + 2 w w × V w ⏟ 科氏力 + w w × ( w w × P w ) ⏟ 离心力 + w w ˙ × P w ⏟ 欧拉力 \begin{align*} a_w =\dot {V_w} &= R_{wi} \cdot \dot {V_i} +\dot {R_{wi}} \cdot V_i + w_w \times \dot {P_w} + \dot {w_w} \times P_w \\ &= R_{wi} \cdot a_i +\dot {R_{wi}} \cdot V_i + w_w \times (V_w+w_w \times P_w)+ [ \dot{R_{wi}} \cdot w_i + R_{wi} \cdot \dot{w_i}]\times P_w \\ &= R_{wi} \cdot a_i + w_w \times V_w + w_w \times V_w +w_w \times (w_w \times P_w) + [ [R_{wi}\cdot w_i]_{\times} \cdot R_{wi}\cdot w_i + R_{wi} \cdot \dot{w_i}]\times P_w\\ &= R_{wi} \cdot a_i + 2w_w \times V_w +w_w \times(w_w \times P_w)+(w \times w + \dot {w_w} ) \times P_w \\ &= \underbrace {R_{wi} \cdot a_i}_{旋转后的加速度} +\underbrace{2w_w \times V_w}_{科氏力} + \underbrace{w_w \times(w_w \times P_w)}_{离心力} + \underbrace{\dot {w_w} \times P_w}_{欧拉力} \end{align*} aw=Vw˙=RwiVi˙+Rwi˙Vi+ww×Pw˙+ww˙×Pw=Rwiai+Rwi˙Vi+ww×(Vw+ww×Pw)+[Rwi˙wi+Rwiwi˙]×Pw=Rwiai+ww×Vw+ww×Vw+ww×(ww×Pw)+[[Rwiwi]×Rwiwi+Rwiwi˙]×Pw=Rwiai+2ww×Vw+ww×(ww×Pw)+(w×w+ww˙)×Pw=旋转后的加速度 Rwiai+科氏力 2ww×Vw+离心力 ww×(ww×Pw)+欧拉力 ww˙×Pw
  3. 需要注意的是,上面加速度的只需要 IMU与world 坐标系之间的关系 R w i R_{wi} Rwi,以及 P P P点的位置,IMU测量得到的 w i 、 a i w_i、a_i wiai,最后是world坐标系下的 w w ˙ \dot {w_w} ww˙
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酸奶可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值