问题标签 [inertial-navigation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5505 浏览

matlab - 间接(误差状态)卡尔曼滤波器的结构是什么?如何得出误差方程?

我一直在尝试为机器人实现一个导航系统,该系统使用惯性测量单元 (IMU) 和已知地标的摄像头观察,以便在其环境中定位自己。我选择了间接反馈卡尔曼滤波器(又名错误状态卡尔曼滤波器,ESKF)来执行此操作。我在扩展 KF 方面也取得了一些成功。

我已经阅读了很多文本,我用来实现 ESKF 的两篇文章是“错误状态 KF 的四元数运动学”和“用于 IMU-Camera Calibration 的基于卡尔曼滤波器的算法”(付费墙的论文,google-able) . 我使用第一个文本是因为它更好地描述了 ESKF 的结构,第二个是因为它包含有关视觉测量模型的详细信息。在我的问题中,我将使用第一个文本中的术语:“名义状态”、“错误状态”和“真实状态”;其中指的是 IMU 积分器、卡尔曼滤波器,以及两者的组合(标称减去误差)。

下图显示了我在 Matlab/Simulink 中实现的 ESKF 的结构;如果您不熟悉 Simulink,我将简要解释该图。绿色部分是标称状态积分器,蓝色部分是 ESKF,红色部分是标称状态和错误状态的总和。“RT”块是可以忽略的“速率转换”。

在此处输入图像描述

我的第一个问题:这个结构正确吗?

我的第二个问题:测量模型的误差状态方程是如何得出的? 就我而言,我尝试使用第二个文本的测量模型,但它不起作用。

亲切的问候,

0 投票
1 回答
7474 浏览

c++ - 使用带有传感器融合的 9DOF IMU 在 C++ 中双积分加速

我花了几个小时研究数值积分和速度/位置估计,但我真的找不到我的大脑可以理解或适合我的情况的答案。

我有一个 IMU(惯性测量单元),它有一个陀螺仪、一个加速度计和一个磁力计。所有这些传感器都处于融合状态,这意味着例如使用陀螺仪可以补偿加速度计读数中的重力,而磁力计可以补偿漂移。换句话说,我可以使用这样的设置获得纯加速度读数。

现在,我正在尝试根据加速度准确估计位置,您可能知道这需要双重积分,并且有多种方法可以做到这一点。但我不知道哪个最适合这里。有人可以分享一些关于此的信息吗?另外,如果您能在不使用任何复杂数学公式/符号的情况下向我解释它,我将不胜感激,我不是数学家,这是我在寻找信息时遇到的问题之一。

谢谢

0 投票
1 回答
541 浏览

android - Android 上的加速度计、陀螺仪和磁力计之间的样本数不均匀

我正在开发一个 Android 应用程序,它在智能手机上记录惯性数据,然后进一步处理它。不同的 Android 设备具有不同的行为,具体取决于将惯性传感器连接到 Android 的固件,这一点非常清楚。我无法回答自己的一件事是,为什么只有 moto g 2nd gen 显示当应用程序正在录制时,我的传感器样本数量明显不同?

例如,几秒钟的录音,我看到:

  • 约 6000 个陀螺仪样本

  • 约 5200 个样本用于 acc

  • 约 2000 个磁力计样本

还假设我正在记录的活动始终影响所有传感器,因此我希望 onSensorChange 函数被均匀调用。我尝试过的所有其他智能手机(5 或 6 个不同的智能手机)都会发生这种情况。

有什么建议为什么磁电机似乎不像其他传感器那样频繁地更改值以便 onSensorChange 记录它?

显而易见的答案是因为固件,但你知道如何减轻我看到的效果吗?

谢谢各位!

0 投票
1 回答
463 浏览

raspberry-pi - 使用相机快门触发树莓派上的 MPU6050

我已经通过 GPIO 将 DSLR 连接到 RPi;和 MPU6050 使用 I2C 到 RPi。当我按下相机快门按钮时,我试图在一个小时间窗口(通常小于 50 毫秒)内记录陀螺仪和加速度计数据。我想要的采样率在 500Hz 到 1000Hz 之间。我使用 FIFO 来临时存储传感器数据。

当前的问题是代码有时会过采样(与理论值相比有很大的偏移)。例如,当我将 500Hz 设置为 100 毫秒时——我希望有 50 个样本,但结果却是 62 个样本。如果在不同步相机的情况下运行 MPU6050,我没有这个问题。

另外,我很困惑什么是

为了?

如果有人可以提供帮助,我将不胜感激。谢谢!

Python代码:

0 投票
1 回答
308 浏览

kalman-filter - IMU中使用的卡尔曼滤波器,融合过程结合了哪些信号?

从我读到的内容来看,卡尔曼滤波器基本上试图根据这个变量的历史来“协调”一个变量的预测,并实际观察这个变量。在寻找 IMU 位置的情况下,我想我们需要读出速度,以便我们可以预测 x_(k+1) = v * dt + x_(k) ,我们还需要直接读出 z_(k+1)。

但实际上在 IMU 上我们没有读出这个 z。那么 IMU 上的卡尔曼滤波究竟是做什么的呢?

谢谢杨

0 投票
1 回答
84 浏览

robotics - 自平衡两轮车辆的水平加速度测量?

现在的标准做法是通过卡尔曼滤波器融合来自加速度计和陀螺仪的测量值,用于自平衡两轮推车等应用:例如:http ://www.mouser.com/applications/sensor_solutions_mems/

加速度计通过 arctan(a_x/a_y) 给出倾斜角读数。在这里使用术语“加速度”非常令人困惑,因为它的真正含义是重力沿设备轴的投影(尽管我理解,从物理上讲,重力实际上只是加速度)。

这是一个大问题:当小车试图移动时,电机驱动小车并在水平方向产生一个非平凡的加速度,这将使 a_x 不再是重力沿设备 x 轴的投影。事实上,它会使测得的倾斜角显得更大。这是如何处理的?我想鉴于 Segway 的成熟度,肯定有一些现有的方法来处理它。有人有一些指示吗?

谢谢杨

0 投票
1 回答
3315 浏览

accelerometer - 使用 9 轴 IMU 将加速度双积分到位置

第一次在这个论坛上发帖,希望我做对了。我知道过去有几个关于加速度双重积分的线程,而且我知道不是 200k+ 军用级传感器的加速度计固有的误差。幸运的是,我的目的只需要它大约正确(+/- 3 英寸)不超过十秒。

我已经快到了。我正在使用 bno055 IMU 的线性加速度。我以 50hz(每 20 毫秒)的速率进行采样。每次采样时,我都会使用基本的梯形积分来从加速度移动到速度和从速度移动到位置。我有一个“辨别窗口”来抛出静止错误,以及一个“运动结束检测”代码,用于在加速度为 0 后将速度设置回 0 对于给定数量的计数。

它正在流行,我只需要它更好地工作。我看到一些非常奇怪的回弹,我移动加速度计并且位置非常正确地移动,直到我停下来,然后位置“回弹”几英寸 - 有时几乎回到我开始的地方。带了一个比我聪明得多的朋友,他建议我更聪明地集成,使用 4 或 5 个数据点,而不是我在梯形集成中使用的最后两个数据点。

所以我的问题是:如何使用最后四个或五个数据点进行比基本梯形积分更精确的积分?我尝试研究 Euler 和 RK4,但自从我完成更高级别的数学以来已经很长时间了,我不知道从哪里开始。如果有人可以简单地解释一下,那就太棒了。谢谢。作为背景,这段代码都是在微型计算机上运行的,所以我不能通过matlab运行数据。

PS。还建议我使用高通滤波器,但同样,当我尝试开始阅读数字高通滤波器时,我就是无法理解它。我想我会从更智能的集成开始,看看它会做什么。

0 投票
0 回答
101 浏览

html - 如何在固定标题下方制作可滚动的 div 而不会混淆移动 Safari?

顶部固定标题。下面的可滚动 div。这个问题被问了很多:

但我需要找到一个不会破坏移动 Safari 的解决方案。

上述问题的公认解决方案存在两个问题。一是可滚动 div 内的惯性滚动不起作用。第二个是当您尝试在可滚动 div 的底部向上滚动(向下滑动)时,您可能会得到橡皮筋效果。Mobile Safari 显然对是否将滑动解释为尝试滚动 div 或 html 文档感到困惑。

0 投票
1 回答
562 浏览

java - 使用智能手机传感器进行驾驶风格检测

我想使用安卓智能手机设备测量加速度(分别向前和横向),以便能够分析驾驶行为/风格。

我的方法如下:

1.对齐坐标系

校准(无运动/第一次运动): 当汽车静止时,我会使用计算重力大小Sensor.TYPE_GRAVITY并将其直接旋转到 z 轴(假设平面朝下)。这样,俯仰角和侧倾角应该接近于零并且等于汽车相对于世界的角度。

在此之后,我将开始与汽车一起直线前进以获得第一个运动指示,Sensor.TYPE_ACCELEROMETER并将这个幅度直接旋转到 x 轴(指向前方)。这样,偏航角应该等于车辆相对于世界的航向。

更新方向(驾驶时): 为了能够在驾驶时保持坐标系对齐,我将使用以下方法Sensor.TYPE_GRAVITY来保持系统的滚动和俯仰

在此处输入图像描述

在此处输入图像描述

其中 A_x,y,z 是重力加速度。

通常,偏航角将通过Sensor.ROTATION_VECTOR或来保持Sensor.MAGNETIC_FIELD。但是,不使用它们的原因是因为我还将在电动汽车中使用该应用程序。发动机产生的大量伏特和安培可能会使这些传感器值的准确性受到影响。因此,我所知道的最佳选择(虽然不是最佳选择)是使用 GPS 航向来保持偏航角。

2. 测量

通过应用所有上述旋转,应该可以保持智能手机和车辆坐标系之间的对齐,因此,在 x 轴和 y 轴上给出纯正向和横向加速度值。

问题:

  • 这种方法适用还是我错过了一些重要的东西?
  • 有没有更简单/替代的方法?
0 投票
0 回答
1296 浏览

java - Jython 错误“ImportError:没有名为 type_check 的模块”

我正在开发一个快速界面,以允许在来自 java 的 rpi sense hat 中使用 9 DOF IMU,但我似乎无法让 python 工作。我已将 python 2.7 库添加到 Jython 环境的 sys 路径中,但它仍然找不到这个“type_check”模块。

这是java代码:

它尝试使用 RPI sense hat python API。执行时出现此错误: