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