问题标签 [sensor-fusion]
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.
ios - iOS默认参考框架上的真实和磁航向估计
我目前正在为 iOS 进行航向估计,我正在记录trueHeading
和magneticHeading
使用 CoreLocation,我还在记录原始磁力计数据以及校准的磁力计数据。
我观察到,在默认参考框架中,CMAttitudeReferenceFrameXArbitraryZVertical
校准磁数据总是得到 0。难道我做错了什么?
此外,在一些论文中,我找到了一个从磁力计计算航向的公式。公式如下:
H = -atan2(my,mx) 其中 mx、my 和 H 是磁力计的 x 分量,磁力计的 y 分量,H 是航向。
当我应用上述公式时,估计的航向与 CoreLocation 的 MagneticHeading 或 TrueHeading 都不匹配。
那么如何获取Heading呢?
android - Android 和 iOS 的参考框架是否不同?
我目前正在尝试按照此处trueHeading
的要求获得对 Android的准确估计。对找不到好的解决方案感到失望,我尝试实现自己的算法,用于 Android 的 trueHeading 估计。在我的调查中,我决定从头开始。
RAW
因此,当手机(Apple iPhone 6 和三星 Galaxy Note 3)放在桌子上,屏幕朝上时,我记录了来自 Android 和 iOS 的数据。传感器(加速度计、陀螺仪和磁力计)的mean
值如下所示:
iPhone 6
加速度计 (x, y, z) = [0.0037 0.0018 -1.007]
陀螺仪 (x, y, z) = [-0.0129 -0.0062 0.0047]
磁力计 (x, y, z) = [134.94 122.94 -614.94]
三星
加速度计 (x, y, z) = [0.0491 0.2289 9.3865]
陀螺仪 (x, y, z) = [-0.0060 -0.0360 -0.0281]
磁力计 (x, y, z) = [8.8665 21.0000 -48.2367]
我可以看到 iOS 在 Gs 中提供加速,而 Android 在 m/s^2 中提供加速,但为什么 Z 分量的符号在完全相同的位置相反?
我假设对于Android和iOS,轴是相似的,如链接中所示。
有人可以向我解释一下我错过了什么吗?是否有办法在 Android 中获得 trueHeading 的解决方案?
kalman-filter - 如何使用扩展卡尔曼滤波器进行 IMU 和光流传感器融合?
我正在建造一个四轴飞行器,我正在使用 pixhawk 自动驾驶仪系统,并连接了 px4flow 传感器来获取光流数据。px4flow 是一款集成陀螺仪和高度传感器的高速智能相机(手臂处理器),它通过内部光流算法输出线速度。
现在,我想通过使用扩展卡尔曼滤波器来融合 IMU 和光流数据来改进我的位置和速度估计。我已经为预测步骤导出了状态模型函数和状态转移矩阵。
问题在于导出光流速度的测量模型/函数,以用于扩展卡尔曼滤波器的更新阶段。我相信我必须以某种方式从光流算法中推导出它,但这就是我所得到的。
*编辑:这是一篇描述 px4flow 单元以及它如何计算速度的文章。(忘记加链接了,现在有)
accelerometer - 使用 9 轴 IMU 将加速度双积分到位置
第一次在这个论坛上发帖,希望我做对了。我知道过去有几个关于加速度双重积分的线程,而且我知道不是 200k+ 军用级传感器的加速度计固有的误差。幸运的是,我的目的只需要它大约正确(+/- 3 英寸)不超过十秒。
我已经快到了。我正在使用 bno055 IMU 的线性加速度。我以 50hz(每 20 毫秒)的速率进行采样。每次采样时,我都会使用基本的梯形积分来从加速度移动到速度和从速度移动到位置。我有一个“辨别窗口”来抛出静止错误,以及一个“运动结束检测”代码,用于在加速度为 0 后将速度设置回 0 对于给定数量的计数。
它正在流行,我只需要它更好地工作。我看到一些非常奇怪的回弹,我移动加速度计并且位置非常正确地移动,直到我停下来,然后位置“回弹”几英寸 - 有时几乎回到我开始的地方。带了一个比我聪明得多的朋友,他建议我更聪明地集成,使用 4 或 5 个数据点,而不是我在梯形集成中使用的最后两个数据点。
所以我的问题是:如何使用最后四个或五个数据点进行比基本梯形积分更精确的积分?我尝试研究 Euler 和 RK4,但自从我完成更高级别的数学以来已经很长时间了,我不知道从哪里开始。如果有人可以简单地解释一下,那就太棒了。谢谢。作为背景,这段代码都是在微型计算机上运行的,所以我不能通过matlab运行数据。
PS。还建议我使用高通滤波器,但同样,当我尝试开始阅读数字高通滤波器时,我就是无法理解它。我想我会从更智能的集成开始,看看它会做什么。
android - 不同设备的 TYPE_ROTATION_VECTOR 传感器值不同
我在我的应用程序中使用 ROTATION_VECTOR 类型的传感器数据。
使用我的 Nexus 5,我可以从方向 [0] 获得方位角,并且可以在下图所示的范围内获得手机的航向(非常准确)。
由于我在不同的设备上尝试过我的应用程序,我发现传感器值与我的 Nexus 5 测试设备不同。如图所示,在我的三星 Galaxy Nexus 和三星 Galaxy S3 Mini 上,方位角会受到设备倾斜的影响。
TYPE_ROTATION_VECTOR 正在使用传感器融合,这就是我使用传感器测试应用程序检查不同设备上的单个传感器值的原因。在 Nexus 5 上,z 轴的方向值在设备倾斜时保持大致相同,在三星 Galaxy Nexus 上,z 值在倾斜时发生变化(从直立到躺下大约 90°)。我担心传感器融合正在使用这些值,这就是为什么我的方位角在不同设备上不同的原因。
有没有人遇到过类似的情况,甚至更重要的是:是否有人有解决方法或不同的方式来接收方位角?
为了确定,我在寻找后置摄像头指向的方向......
这是我的代码:
...
c - 基于整数的传感器融合/卡尔曼滤波器
有没有人知道在大多数开源实现中只使用整数运算而不是所有浮点累加/除法/乘法的传感器融合实现?
在我的处理器上执行重复的浮点计算很昂贵,我想尽可能地减少它们。我可能会失去一些精度,但我的应用程序不需要高精度的输出。
将所有变量都转换为整数并精确命中是否有任何问题?任何建议都会很棒,谢谢大家。
macos - 使用时间与 Micropython Mac OSX Python2.7
设置
我正在使用来自 Madwick 算法的传感器融合 python 模块基础。源代码可以在这里找到https://github.com/micropython-IMU/micropython-fusion/blob/master/fusion.py。
问题
有什么方法可以在不使用 python2.7 的 import pyb 库的情况下实现pyb.elapsed_micro()和pyb.micros()下面的函数?
ios - 不同状态的 iOS 四元数到欧拉的转换
我为以下情况记录了来自 iOS 的两组四元数信号:
- 手机稳稳地放在桌子上
- 手机垂直站立。
正如预期的那样,四元数非常不同。
我正在尝试将四元数转换为欧拉以获得围绕 z 轴的航向或偏航。但是当手机站立时,例如手机在口袋里(因此是第二种情况),我是否需要做任何不同的事情才能获得航向?
或者我只是将手机放在口袋里时获得的四元数转换并使用 Yaw 作为航向?
android - Sensor.TYPE_ROTATION_VECTOR 有漂移:有替代方案吗?
我正在 Android 上试用 Sensor.TYPE_ROTATION_VECTOR。它应该使用磁场传感器、加速度计和陀螺仪来始终提供准确的旋转。但是,我注意到 Moto G 2nd 发生了巨大的漂移。我想知道这是否是特定于设备的问题,或者这发生在很多手机上(我会假设,尽管我很熟悉 Moto G 2nd 的陀螺仪是一个有问题的案例)。
是否有另一种形式的传感器融合,它是无漂移的(使用磁传感器)?我也尝试过 Google Cardboard 的传感器融合,但它使用偏差估计,所以可能不是完全没有漂移(因为此时似乎没有使用磁场传感器),尽管仍然比 TYPE_ROTATION_VECTOR 好很多。
trigonometry - 如何使用陀螺仪和磁力计计算航向
我有陀螺仪和磁力计的原始数据。根据这些数据,我必须以 1Deg 的精度计算航向信息。
我想知道,是否有任何算法可以帮助我使用具有上述准确性的可用信息来获取航向信息?
任何文章或任何链接也会有所帮助。
谢谢