- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对我的加速度计数据进行重力补偿。给定一个具有 6 DOF(加速计、陀螺仪)的加速计,我想消除/补偿加速计读数中重力的影响(加速计可以自由旋转)。
以下是我将原始传感器值存储到名为 sample
的 struct
的方法:
uint8_t *p=data; // p is a pointer to the sensor data
int i;
for(i=0; i<4; i++) // quaternion
{
sample.quaternion[i]=((float)get_int32(p))/(1<<29);
len+=snprintf(s+len, sizeof(line)-len, "\t%9.6f", sample.quaternion[i]);
p+=4;
}
for(i=0; i<3; i++) // euler213_degrees
{
sample.euler213_degrees[i]=get_int16(p);
len+=snprintf(s+len, sizeof(line)-len, "\t%d", sample.euler213_degrees[i]);
p+=2;
}
for(i=0; i<3; i++) // euler123_degrees
{
sample.euler123_degrees[i]=get_int16(p);
len+=snprintf(s+len, sizeof(line)-len, "\t%d", sample.euler123_degrees[i]);
p+=2;
}
for(i=0; i<3; i++) // acceleration_g
{
sample.acceleration_g[i]=(2.0*get_int16(p))/(1<<15);
len+=snprintf(s+len, sizeof(line)-len, "\t%6.3f", sample.acceleration_g[i]);
p+=2;
}
for(i=0; i<3; i++) // gyroscope_dps
{
sample.gyroscope_dps[i]=(2000.0*get_int16(p))/(1<<15);
len+=snprintf(s+len, sizeof(line)-len, "\t%6.1f", sample.gyroscope_dps[i]);
p+=2;
}
你能告诉我一种获取重力补偿加速度计数据的方法吗?
最佳答案
IMU(6 DOF 设备)计算的四元数基本上是设备相对于本地地球引用系的姿态(3D 方向);因此它可以用于将加速度测量从本地 body 引用系(IMU直接测量的值)旋转到本地地球引用系(x-y平面与地面相切的坐标系)。您可以使用四元数乘法来执行此操作
v' = q 。 v. q *
其中 q 是四元数,v 是加速度 vector (请查找四元数 vector 乘法以了解更多详细信息*)。因为我们知道重力是本地地球引用系中的 vector u = (0,0,g)(其中 g ≈ 9.81 m/s^2,假设IMU 测量值的单位也是 m/s^2),然后我们可以从 v'
中减去该 vectorv'' = v' - u
v'' 是重力补偿/移除 vector 。但是,它不在 IMU 的本地 body 引用系中(记住我们将其旋转到本地地球引用系)。因此,要将其转换回来,您可以将其乘以逆四元数
v''' = q-1 。 v''。 q-1 *
v''' 将是原始加速度测量值减去重力。为了确认结果正确,您可以在设备静止时进行测量。无论设备如何旋转,加速度测量值都应接近 (0,0,0)。
如果 IMU 没有提供四元数测量,则可以通过加速度计和陀螺仪读数的融合来计算(这正是 IMU 正在做的事情)。如果您对此感兴趣,我建议查找 Madgwick、Mahony 或扩展卡尔曼滤波器算法来进行姿态估计。
*有用的资源
四元数乘法:https://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/arithmetic/index.htm
用四元数旋转 vector (如果您想查看一些代码,尤其是第三个答案):https://math.stackexchange.com/questions/40164/how-do-you-rotate-a-vector-by-a-unit-quaternion
关于c++ - IMU数据中的重力补偿,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60492369/
我们有 XSENS MTi IMU 设备并使用 ROS 框架 (Ubuntu/Fuerte)。我们订阅了 IMU 数据,所有数据看起来都不错,除了方向。 在 Euler-Outputmode 中,就像
我正在从事一个项目,目标是从山上追踪动物。在第一个实地考察季中,我们使用了 OpenTags 和经过校准的摄像头,虽然可以正常工作,但需要大量的处理/校准,而且至关重要的是,当系统出现问题时无法提供任
我很难理解下面包含的方程式的数学推导。这段代码是来自 SparkFun IMU 库的示例的一部分,可以在 here 中找到.有人可以帮我理解使用反正切函数来估计横滚、俯仰和偏航背后的理论吗?磁力计数据
我找到了这个 beautiful quick way从加速度计读数中去除重力。但是,我有一个 6dof IMU(xyz 陀螺仪,xyz 加速度,无磁力计),所以我不确定是否可以使用此代码(我尝试过,但
订阅汽车的 IMU 传感器并监控方向值以确定汽车是直行、左转还是右转,并创建一个每秒在屏幕上输出的程序。 由于方向值是四元数格式,我们需要使用'Euler_from_quaternion'函数将其替换
我已经对 IMU 的短期位置跟踪进行了大量研究,但似乎无法真正找到任何相关信息。很多人说用加速度计跟踪位置是不可能的,但这一切都在 的背景下。长期位置跟踪。我只是在寻找不到一秒钟的东西。 我搜索了一下
这是关于使用惯性(智能手机 + aceel + 陀螺仪)进行室内跟踪的另一个问题首先,我想说我已经阅读了几乎所有关于 stackoverflow 上谈论这个主题的帖子。而且我知道要跟踪一个位置,我们必
从数据手册中可以看出,MPU9250的六个输出 channel 中的每一个都具有2字节和16位分辨率。我想知道 16 位二进制值,它们是二进制补码的格式吗?或者当传感器静止时,假设沿 x 轴的加速度为
我正在使用此设备 ( http://www.sparkfun.com/products/10724 ) 并基于此 http://www.x-io.co.uk/node/8#open_source_im
我有 MPU9250 IMU,我正在使用它从传感器输出数据中获取方向。在探索 MPU9250(还有其他传感器,如 BNO055)数据表时,我发现了加速度计和陀螺仪的满量程范围,如 ±2 ±4 ±8 ±
我在两个物体上使用两个相同类型的 IMU(BHI160,即方向是相对于北方并与北方对齐,IMU 的局部 y 轴指向北方)在两个物体上,比如说笔,增加了难度如果我将两个物体平行放置,两个 IMU 的 z
我找不到有关如何从连接到我的树莓派的 sensehat 上的 IMU 导入和收集数据的信息。我应该写什么来导入它并保存数据? 我编写了具有相同功能的代码,但是对于加速度计: import loggin
我正在尝试使用 Sebastian Madgwick 的 IMU algorithms从我的传感器(MPU-9150)获取滚动、俯仰和偏航。我下载的文件夹带有一些样本数据,我只是用我自己的数据替换了这
我们有一个 XSens MTi 并通过 sensor_msgs::IMU 订阅 IMU 数据。 linear_acceleration 的输出是: x:0.12y:0.02z: 9.83 都在小范围内
我一直在尝试为通过 I2C 连接到 mbed 板的 LSM9DS1 IMU 实现 C++ 互补滤波器,但时序问题使我无法获得正确的角速率积分。这是因为在我的代码中,我假设我的采样率为 100Hz,而由
我有一个带有 UART 接口(interface)的 IMU。制造商提供了一个基于 Windows 的程序,可以从 IMU 获取所有数据并实时显示。 (设备通过 USB 连接到 PC)。我需要编写自己
我正在使用微型车,我想估计位置。我们不能使用 GPS 模块,我看到的大多数跟踪系统都使用 IMU senson 和 GPS 模块。在我们的汽车中,我们能够通过图像处理找到我们准确的正确位置,但对于一些
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 4年前关闭。 Improve thi
我正在为我的 FTC 机器人团队运行一些代码,但是当我按 init 时,会出现橙色错误:““imu”出现问题”。我们的代码中没有名为imu的变量,这是一个橙色的运行时错误,这通常是由rev hub的问
我正在使用 Velodyne HDL-32E 和 Velodyne 抓取器,GPS 鼠标连接到传感器。有什么方法可以从抓取器访问 IMU 数据,还是我应该自己实现? 请分享您的经验。 最佳答案 我猜你
我是一名优秀的程序员,十分优秀!