从陀螺仪中,我得到以rad / s为单位的角速度[dRoll,dPitch和dYaw],以dt = 10ms的间隔进行采样。

如何计算短期的全局方向(忽略漂移)陀螺仪?

伪代码会很有帮助。

评论

我也有同样的问题,我能知道如何从角速度得到角度吗?

#1 楼

陀螺仪不测量[dRoll,...],它们测量的是人体速度。这些不一样。有一个转换矩阵(我手头没有这个转换矩阵)将机率与欧拉率关联起来。然后将欧拉速率积分以获得方向的短期变化。

-关系-

这是从imu测得的人体比率和欧拉比率之间的关系。
\ begin {equation }
\ label {eq:euler_rates}
\ begin {bmatrix}
\ dot \ phi \\
\ dot \ theta \\
\ dot \ psi
\ end {bmatrix}
\ begin {bmatrix}
1&\ sin \ phi \ tan \ theta和\ cos \ phi \ tan \ theta \\
0&\ cos \ phi&-\ sin \ phi \\
0&\ frac {\ sin \ phi} {\ cos \ theta}&\ frac {\ cos \ phi} {\ cos \ theta}
\ end {bmatrix}
\开始{bmatrix}
p \\
q \\
r
\ end {bmatrix}
\ end {equation}

其中$ \ left [p,q,r \ right] ^ T $是从imu测得的身体比率。

评论


$ \ begingroup $
是的,但是随着时间的推移积分的角速度是一个角度-在这种情况下绕主轴“滚动,俯仰和偏航”旋转是不正确的吗?
$ \ endgroup $
– Lars
16-3-29在9:52

$ \ begingroup $
基本上没有。我已经用正确的整合方式编辑了我的问题。这很容易,没有任何借口不使用正确的方程式。
$ \ endgroup $
– Holmeski
16 Mar 29 '16 at 12:48

$ \ begingroup $
是的,当以零姿态开始时,对人体比率进行积分与对欧拉比率进行积分是相同的,但只有在对单个轴进行积分时,只要绕第二根轴旋转,这便是正确的。变得不正确。即使不期望绕两个轴有大的旋转,也不应使用此方法,因为正确的方法非常简单。
$ \ endgroup $
– Holmeski
16 Mar 29 '16 at 12:59

$ \ begingroup $
我注意到$ \ psi $并未明确出现在矩阵中。假设$ \ dot {\ psi} $不为零,那么当$ \ psi $变化时,是否不必将其包括在矩阵中?
$ \ endgroup $
– uhoh
17-10-11在10:29

$ \ begingroup $
不! $ \ psi $正在前进。左侧是取向率。右边是转弯速率。车辆的前进方向不会改变转弯率如何改变方向。
$ \ endgroup $
– Holmeski
17-10-11在21:21

#2 楼

简短的回答:陀螺仪本身无法确定其全局参考系。您需要以已知的初始全局方向启动设备并测量方向变化了多少,或者您需要其他设备来确定“初始”或周期性全局参考框架。

长答案:

陀螺仪只能为您提供角速度,然后可以从起点将其集成到相对偏航,俯仰和横滚中。这是一个3自由度(3dof)系统。

可以与测量加速度的加速度计结合使用。如果您的设备在固定位置启动,则可以使用加速度计来测量重力方向,并确定朝向重力的初始“向下”方向。现在,您知道向下的初始方向(但不知道北/南/东/西)。这是一个6dof系统。

接下来,您可以将上述两个与磁力计结合使用。这将检测包括北极在内的磁场。设备处于静止的起始位置,可以确定哪个方向是北。现在,您将知道全局参考系中的初始下降位置和初始北向。这是一个9dof系统。

#3 楼

要从每个轴获取方向,您需要对时间角速度进行积分。


以下是上述集成的代码实现:


//What we have
dPitch = 0; angular rate from Pitch
dRoll = 0; angular rate from Roll
dYaw = 0; angular rate from Yaw

//What we want
aPitch = 0; angle from Pitch
aRoll = 0; angle from Roll
aYaw = 0; angle from Yaw

//Calculating the angles:
aPitch += dPitch*dt; // or aPitch = aPitch + dPitch*dt;
aRoll += dRoll*dt; // or aRoll = aRoll + dRoll*dt;
aYaw += dYaw*dt; // or aYaw = aYaw + dYaw*dt;


评论


$ \ begingroup $
我知道我需要整合角速度来获取角度,但是您建议的方式仅给出了陀螺仪轴的累积旋转,而没有给出方向。我想要的是全球参考系统中的角度。
$ \ endgroup $
– Lars
16 Mar 27 '16 at 13:09