orientation - IMU 方向不断变化

标签 orientation hardware ros robot imu

我们有 XSENS MTi IMU 设备并使用 ROS 框架 (Ubuntu/Fuerte)。 我们订阅了 IMU 数据,所有数据看起来都不错,除了方向

在 Euler-Outputmode 中,就像在 Quaternion-Outputmode 中一样,值不断变化。不是随机的,它们以或多或少恒定的速率缓慢增加或减少,有时我观察到变化趋于平缓,然后改变方向。

当第二个 X 的值可能是:

x: 7.79210457616
y: -6.58661204898
z: 41.2841955308

Z 值在几秒内(我认为是 10-20 秒)在 10 左右的范围内变化。

什么会导致这种行为?我们是否误解了数据或驱动程序有问题?奇怪的是,这也发生在其他 2 个驱动程序和另一个 IMU 设备(我们有 2 个)上。每个组合的结果相同。

请随时索取更精确的数据或任何您想知道的可能对我们有所帮助的信息。我们将参加 11 月的 Spacebot-Cup,因此完成 IMU 会让人松一口气。 :)

最佳答案

如果您没有磁力计来提供正确的航向,则完全正常。

陀螺仪仅能测量转速,并不知道任何给定时间在任何轴上的方向。如果您知道初始航向并且陀螺仪 100% 准确,则对转弯率进行积分即可得出航向。它无论如何都会漂移,即使它经过完美校准,因为您是以离散间隔而不是连续采样。

添加一个加速度计至少会固定向下的方向(因为它测量的是朝向地球中心的重力)。这将使 Z 轴解决方案与垂直对齐,但不会固定水平方向(航向或偏航)。如您所见,它将继续漂移。

添加磁力计将确定相对于地球磁场的航向。这将为您提供相对于磁北的航向。您需要对本地磁偏角进行偏移才能获得真北。这些通常可以在线获得,并且在数十公里范围内相当稳定。谷歌 ITREF。

一些集成传感器没有磁力计。这就是航向漂移的原因。像 MPU6050 这样的单元有内置固件,可以访问磁力计,但通常的固件不使用它,所以你必须在你的微 Controller 或连接的 PC 上实现 Madgwick 等。博世有一个新的单一模块,内置一个处理单元。希望它使用 9 个自由度,而不是你在 MPU6050 上使用 DMP 获得的 6 个自由度。

磁性传感器的精确度约为 2 度。局部磁偏角校正也有误差。您可以通过在长基线上使用 GPS 来执行额外的校准以获得更好的结果。还值得注意的是,由于侧风/横流,航向和航向通常不同。

Madgwick 算法相当稳定且易于实现,并且比需要执行矩阵求逆的卡尔曼滤波器使用的资源更少。它仍然会产生轻微的抖动,但结果的轻微平滑不应引起太多延迟。

关于orientation - IMU 方向不断变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228629/

相关文章:

android - 使用 Sensor.TYPE_MAGNETIC_FIELD 发现的方位比 Sensor.TYPE_ORIENTATION 不稳定得多

ios - 使用NSNotificationCenter和UIDeviceOrientation更改方向

java - 使用 AMD 处理器开发 .net 软件

C++大内存分配

performance - 更好的图形卡或更多的内核会使Mathematica更快吗?

python-3.x - 使用ROS Kinetic和Python3忽略cmake参数构建cv_bridge软件包

iOS 8 屏幕旋转扰乱 View

iOS 方向更新问题

c++ - __getDataType 错误

python - rs-convert 不从 rosbag 文件生成 .ply 文件