首页 文章

加速度计数据中的重力补偿

提问于
浏览
4

鉴于加速度计具有9 DOF(加速度计,陀螺仪和磁力计),我想在加速度计读数中去除/补偿重力的影响(加速度计可以自由旋转) . 传感器给出相对于(磁)北,西和上参考系的四元数表示的方向 .

我发现这个http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus但是无法理解给定方程的基础 .

如何获得上述信息呢?

2 回答

  • 0

    您需要将四元数的加速度计读数旋转到地球参照系(如果您愿意,进入房间的坐标系),然后减去重力 . 剩余的加速度是传感器在地球参考系中的加速度,通常称为线性加速度或用户加速度 .

    在伪代码中,类似这样的东西

    acceleration = [ax, ay, ay]  // accelerometer reading
    
    q                            // quaternion corresponding to the orientation
    
    gravity = [0, 0, -9.81]      // gravity on Earth in m/s^2
    
    a_rotated = rotate(acceleration, q) // rotate the measured acceleration into
                                        // the Earth frame of reference
    
    user_acceleration = a_rotated - gravity
    

    你说你可以通过API获得 q . 唯一不重要的一步是实现 rotate() 功能 .

    要在 q 旋转时计算向量 v 的图像,应使用以下公式:vrotated = qvq-1 . 要使用浮点数计算它,您需要自己计算公式;它们可在Using quaternion rotations获得 .

    据我所知,您提供的链接就是这样,您可以在那里看到扩展的公式,现在您知道它们来自何处 . 此外,链接的内容似乎以g为单位测量重力,即重力为[0,0,-1] .

    注意标志惯例(无论你考虑重力[0,0,-1]还是[0,0,1])和handedness of your coordinate systems

  • 10

    我假设你的加速度计读数在传感器主体框架中 . 首先,我们需要根据惯性框架表示加速度计数据,然后减去重力 . 如果直接使用欧拉角而不是四元数,则需要计算旋转矩阵

    R = [
        ctheta*cpsi,
        -cphi*spsi + sphi*stheta*cpsi,
        sphi*spsi + cphi*stheta*cpsi;
        ctheta*spsi, cphi*cpsi + sphi*stheta*spsi,
        -sphi*cpsi + cphi*stheta*spsi;
        -stheta, sphi*ctheta, cphi*ctheta
    ]
    

    (它以MATLAB表示法给出) . 这里 phi 代表侧倾角, theta 代表俯仰, psi 代表偏航 . 这个 R 矩阵是从身体到惯性框架 . 我认为在飞行动力学中它也被称为方向余弦矩阵(DCM)的转置 .

    当您应用矩阵乘法运算时,现在需要从 z 方向减去重力以消除静态加速度,即重力 .

相关问题