问题标签 [imu]

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 投票
3 回答
3205 浏览

javascript - 使用横滚、俯仰、偏航和长度确定新的 GPS 位置

我正在使用 Reach RS+ 设备来捕获 GPS 位置数据以及 IMU 数据(滚动、俯仰和偏航);请参阅制造商网站上的“积分收集”图片。
我正在尝试确定底部点的 GPS 坐标(接收器固定在杆的空端)。
为了能够以米为单位进行计算,我将经度 ( X ) 和纬度 ( Y ) 转换为UTM,同时保持高度 ( Z ) 不变。
当杆直立时,XY保持不变,而

但是,当杆倾斜时,所有坐标都会受到影响,我需要一种方法来计算杆的末端位置。
我已经根据实验观察查看了旋转矩阵、三角方程、我自己的sincos公式,但我没有 3D 几何学背景,我不确定要采取哪条路线(例如,我不知道如何使用带有旋转矩阵的杆长度)。
基本上我需要以下公式:

滚动、俯仰和偏航的值介于 -180° 和 180° 之间。

0 投票
1 回答
518 浏览

arduino - 不断更改 Arduino I2C 总线地址

ADXL345 和 IMU9252 通过 i2c 总线连接到 arduino pro mini。两个模块都有不同的地址。
所以我应该不断改变slave(arduino)中的i2c地址来访问两个模块的数据。
我需要知道这怎么可能以及是否有任何标准解决方案来管理这种情况?

PS:我在 mpu9252 上使用RTimulib 在ADXL345 上使用 sparkfun。 所以我应该采用关于这些库的解决方案。

0 投票
0 回答
251 浏览

sensors - 有哪些很好的资源可以了解 IMU 的传感器漂移校正?

我正在制作一只手套,每个手指的尖端都有 IMU 单元,手掌上有一个 IMU。我从 IMU 得到的是四元数测量。

现在我在 IMU 的测量中面临 2 个问题:

  1. IMU 的参考系不一样。如果你以这样一种方式对它们进行物理旋转,以使它们都以数字方式给出身份四元数,那么你将在物理上获得略微不同的方向。

  2. 每个 IMU 的测量值都会随时间漂移。在相同的物理方向下,经过一分钟的随机物理旋转,它会给您带来稍微不同的四元数测量结果。

这两个问题可以概括为不知道一直在变化的IMU的参考系。或者不知道哪个方向是 IMU 的身份方向。

请告诉我帮助纠正漂移的资源或方法。

另一件可能有用的事情是,我允许用户通过移动手指(自然地)来校准 IMU。我在想,如果我知道手指的所有自然运动都在一定限度内,它可能有助于校准 IMU,但我不知道整合这些信息以用于校准的主题或想法。

你知道有没有办法整合手指运动的限制来帮助校准IMU?

0 投票
1 回答
47 浏览

unity3d - 我如何看待物理和虚拟世界中的旋转?

我有几个 IMU(旋转设备),我正在尝试将它们连接到手指上并制作手套。我很困惑,因为我没有一个好的方法来考虑物理和虚拟世界中的旋转。

现在,我的想法是,在物理世界中,有一个世界坐标(XYZ)。IMU 的旋转四元数大概就是基于此。我还认为每个 IMU 的物理世界坐标彼此略有不同(因为当它们指向相同方向时,它们给出的四元数值略有不同)。在虚拟世界中,每个 IMU 都有另一个虚拟世界坐标系。

我很困惑,也许它只是一个无法区分为世界或虚拟的坐标系?我不知道如何考虑这一切,这让我很难提问。

请告诉我我需要了解哪些概念/术语才能获得关于如何思考物理和虚拟世界中的旋转的直觉。

动机?我正在尝试校准我的手套(每个手指有一个 IMU,手掌有一个 IMU),以便它在 Unity 场景中显示正确的手部模型。但是我很难理解它。

0 投票
1 回答
3029 浏览

augmented-reality - ARCore 使用哪些传感器?

ARCore 使用哪些传感器:兼容手机中的单摄像头、双摄像头、IMU 等?

此外,如果通过切换到其自身不太准确的版本而无法使用传感器,ARCore 是否足够动态以继续工作?

0 投票
1 回答
76 浏览

python - 从 sensehats IMU 上的磁力计收集数据

我找不到有关如何从连接到我的树莓派的 sensehat 上的 IMU 导入和收集数据的信息。我要写什么来导入它并保存数据?

我制作了一个具有相同功能的代码,但是对于加速度计:

0 投票
0 回答
217 浏览

c - stm32板线程查询imu传感器数据

我正在从单个 stm32 板上查询多个 imu 传感器。但是,读取这些多个传感器会导致每个添加的传感器的数据频率下降 100 毫秒。我想知道是否有办法在我的代码中使用线程,以便可以同时进行查询,或者想知道是否有另一种方法。

以下是它更新传感器数据的地方

此外,此功能是读取传感器数据的示例。

以下代码为 MPU_SPI_Read

我在函数调用 MPU_Chip_Select 中发现了 10ms HAL_Delay,在 Deselect 中发现了另外 10ms。虽然,我认为这种延迟对于 spi 信号完整性是必要的,即不干扰信号。

总的来说,我希望电路板每 100 毫秒输出 8 个传感器的数据,其中 NUM_MPU_DEVICES == 8。但是,输出所有 8 个传感器的数据大约需要 800 毫秒。

先感谢您。

0 投票
1 回答
82 浏览

android - 通过重力将加速度数据与一个轴对齐

我从骑自行车时收集了一些加速度数据。它仍然有重力,因为我想将手机的 z 轴与现实世界的 z 轴对齐。电话几乎与地面平行安装。(另外两个轴不必与另一个轴匹配,因为只有加速度数据似乎存在一些问题。)
为了得到我计算的旋转矩阵:

并将其放入函数中

它计算旋转矩阵。但是,当我计算

似乎数据是对齐的,但也乘以一些奇怪的因素。我错过了什么或做错了什么?

0 投票
0 回答
242 浏览

algorithm - 如何使用滚动、俯仰和偏航更新 GPS 坐标?

我正在尝试获取对象在纬度/经度中的位置。问题是,我不想使用 GPS,所以我正在使用 LSM9DS1,它是一个 9 自由度 IMU(惯性测量单元)分线器。

我已经查看了很多链接,但我仍然无法弄清楚。我知道结果不会精确,但我想要一个近似的新位置。

我明白那个 :

  • Roll 是围绕 x 轴的旋转(-180 到 180 度之间)
  • 俯仰是围绕 y 轴的旋转(-90 到 90 度之间)
  • Yaw 是围绕 z 轴的旋转(在 -180 和 180 之间)

我见过很多算法来获取这些滚动、俯仰和偏航值,所以假设我有它们,我如何在轻微移动后更新初始位置并获得新的 GPS 坐标?

0 投票
1 回答
179 浏览

c++ - Write IMU data to csv file using buffer and overflow buffer?

I have been trying to implement a C++ complementary filter for a LSM9DS1 IMU connected via I2C to an mbed board, but timing issues are preventing me from getting the angular rate integration right. This is because in my code I'm assuming that my sample rate is 100Hz, while this isn't exactly the rate at which data is being sampled due to the printf() statements I am using to display values in real time. This results in my filter outputting angles that drift/don't go back to the original value when the IMU is put back in its original position.

I've been recommended to follow the following steps in order to avoid delays in my code that could disrupt my time sensitive application:

  • On each iteration of the program, add the raw IMU data to a buffer
  • When the buffer is nearly full, use an interrupt to write all the data from the buffer to a .csv file
  • When/if the buffer overflows, add the remaining data to a new "overflow buffer"
  • Empty the first buffer and refill it with the data stored in the overflow buffer, and so on
  • Handle the filtering calculations separately by manually treating the data from the .csv file once it's all been collected, so as to avoid timing issues, and see if the output is as expected

The whole buffer/overflow buffer back and forth thing really confuses me, could someone please help me clarifying how to technically achieve the above steps? Thanks in advance!

Edit:

in main.cpp: