从 Python 上的 IMU 传感器获取 3D 位置坐标

问题描述

我计划从包含加速度计和陀螺仪的 IMU(惯性传感器)获取 3D 笛卡尔坐标中的位置。我正在使用它来跟踪 3D 中的对象位置和轨迹。

1- 根据我有限的知识,我假设仅使用加速度计就足够了,从而导致 xyz 轴 A(Ax,Ay,Az) 和需要积分两次才能得到速度和位置,但积分会增加一个未知的常数值,这个称为漂移的误差会随着时间的推移而增加。如何消除这个错误

2- 此外,为什么首先需要陀螺仪,我们不能将 xyz 轴加速度转换为位移,如果加速度计告诉运动轴,那么为什么要从陀螺仪检查方向.抱歉,这是一个非常基本的问题,我检查过的所有地方都使用了 Gyro+Accel 但不知道为什么。

3- 即使在静止且没有任何运动时,地球引力也会作用在传感器上,其给出的值总是大于传感器运动所产生的值。你如何去除重力?

一旦完成,将卡尔曼滤波器应用于它们以融合它们并平滑值。在无法使用 GPS 的环境中,这种方法用于物体轨迹估计的准确度如何。我正在从 arduino 获取加速度计和陀螺仪的值,然后导入到 Python 中,它将在实时更新的 3D 图形上绘制。任何帮助将不胜感激,尤其是类似代码链接

解决方法

1 - 可以校准加速度计以解决一些这种漂移,但最终没有传感器是完美的,不准确将不可避免地导致漂移。要解决此问题,您需要一些滤波器(例如卡尔曼滤波器)来使用加速度计获取短高频数据,并需要一个辅助传感器(例如相机)来定期获取绝对位置并更新内部位置。这是卡尔曼滤波器背后的基本思想。

2 - 加速度计不适用于高频旋转数据。仅使用加速度计数据意味着系统无法区分水平线性加速度和旋转位置。陀螺仪用于高频数据,加速度计用于低频数据,以调整和抵消旋转漂移。卡尔曼滤波器是解决此问题的一种可能方法,并且有许多出色的在线资源对此进行了解释。

3 - 您必须使用包括陀螺仪/加速度传感器融合在内的方法来获得传感器的 3d 方向,然后使用矢量数学从该方向减去 1g。

您很可能最好查看一些在线资源以了解其要点,然后使用预先构建的传感器融合系统,无论是加速度计上的库还是融合系统(在当今大多数加速度计上,包括mpu6050)。这些机载系统通常比简单的卡尔曼滤波器做得更好,并且可以结合其他传感器(如磁力计)来获得更高的精度。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...