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

Math 加速度计数据中的重力补偿,math,accelerometer,gravity,quaternions,Math,Accelerometer,Gravity,Quaternions,给定一个9自由度的加速度计(加速度计、陀螺仪和磁强计),我想消除/补偿加速度计读数中重力的影响(加速度计可以自由旋转)。传感器以四元数表示给出相对于(磁性)北、西和上参考坐标系的方向 我找到了这个 但无法理解给定方程的基础 如果提供上述信息,我如何实现这一点?您需要将加速度计读数按四元数旋转到地球参考系(如果愿意,旋转到房间的坐标系),然后减去重力。剩余加速度是地球参考系中传感器的加速度,通常称为线性加速度或用户加速度 在伪代码中,类似这样的代码 acceleration = [ax, ay,

给定一个9自由度的加速度计(加速度计、陀螺仪和磁强计),我想消除/补偿加速度计读数中重力的影响(加速度计可以自由旋转)。传感器以四元数表示给出相对于(磁性)北、西和上参考坐标系的方向

我找到了这个 但无法理解给定方程的基础


如果提供上述信息,我如何实现这一点?

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

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

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。要用浮点数计算它,你需要自己计算公式;可在以下网址获得:

据我所知,你提供的链接正是这样的,你可以看到那里的扩展公式,现在你知道它们来自哪里。此外,链接内容似乎以g度量重力,即重力为[0,0,-1]


注意符号约定(无论您考虑重力[0,0,-1]还是[0,0,1]),并且

我假设您的加速计读数在传感器主体框架内。首先,我们需要表示相对于惯性系的加速度计数据,然后减去重力。 如果直接使用Euler角度而不是四元数,则需要计算旋转矩阵

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
方向减去重力,以消除静态加速度,即重力。

@dragsu我很高兴它有帮助!