BNO055 方向万向节锁不起作用

问题描述 投票:0回答:1

当我将俯仰角增加到 90 度时,滚动意外地显示出一些角度捕捉,可能在 5 度左右,有时会增加到 11 或 15 度甚至更多。 请帮我解决这个万向节锁问题。

示例代码:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>

Adafruit_BNO055 bno = Adafruit_BNO055(55);

void setup() {
  Serial.begin(115200);
  if (!bno.begin()) {
    Serial.print("No BNO055 detected. Check your wiring or I2C address.");
    while (1);
  }
  bno.setExtCrystalUse(true);
}

void loop() {
  sensors_event_t event;
  bno.getEvent(&event);

  // Print orientation data
  Serial.print("Orientation: ");
  Serial.print("X: ");
  Serial.print(event.orientation.x, 4);
  Serial.print(" | Y: ");
  Serial.print(event.orientation.y, 4);
  Serial.print(" | Z: ");
  Serial.println(event.orientation.z, 4);

  delay(10);
}

我尝试使用ChatGPT来解决这个问题,但仍然无法得到解决方案。

arduino esp32 sensors imu
1个回答
0
投票

您应该使用四元数或旋转矩阵而不是欧拉角。

四元数使用 4 维数学对象来表示 3D 方向。附加组件可确保唯一地表示每个可能的方向,并避免万向节锁定问题。旋转矩阵也不会面临这个问题,但它们由 9 个分量组成,因此在实践中计算量很大。

重要的是要了解,如果您决定将四元数转换为欧拉角,或将方向矩阵转换为欧拉角,万向节锁定问题将会再次出现;问题不在于如何计算方向,而在于如何表示方向。

© www.soinside.com 2019 - 2024. All rights reserved.