Значения кватерниона из 9-осевого щита движения Arduino кажутся очень неправильными
В настоящее время я использую датчик BNO055, установленный на девятиосном датчике движения Arduino, для измерения высоты и периода океанских волн. Для этого я хотел бы использовать предоставленные кватернионы, однако у меня есть небольшая проблема. Кватернион должен быть <cos(theta/2), Xsin(theta/2), Ysin(theta/2), Z*sin(theta/2)>, где X, Y и Z — координаты единичного вектора, а тета — угол поворота вокруг этого вектора. Поэтому я ожидаю, что все три будут хуже одного.
Однако, когда я запускаю простой код для просмотра необработанных данных, значение W, выдаваемое моим датчиком на столе, равно 16 375, а значения X, Y и Z находятся в диапазоне сотен...
Это дает мне высоту волны в сотни тысяч километров :slightly_smiling_face:
Кто-нибудь знает, почему это происходит? Нужно ли делить кватернион на его норму, чтобы получить правильный результат? Или, может быть, я неправильно понимаю использование кватерниона?
О, и я заранее откалибровал датчик
Заранее спасибо за помощь
@Kajitrim, 👍1
1 ответ
Лучший ответ:
Я не знаком с этим датчиком, поэтому могу только предположить.
Скорее всего, датчик выдает вам числа с фиксированной точкой. Судя по действительная часть, скорее всего, 14 бит справа от неявной точка основания. Если это так, фактический кватернион может быть вычислен как:
float w = raw_w / 16384.0;
float x = raw_x / 16384.0;
float y = raw_y / 16384.0;
float z = raw_z / 16384.0;
Вы можете проверить, разумно ли это, вычислив норму, которая должно быть очень близко к единице.
- В чем разница между акселерометром, гироскопом и датчиком магнитометра?
- Как прочитать необработанные данные с модуля GY-85?
- Линейное ускорение от MPU 6050
- Правильный способ получить значения крена, тангажа и перемещения
- Снять гравитацию с акселерометра MPU-6050
- Arduino Nano IOT LSM6DS3 получить угол гироскопа в градусах
- Помощь с MPU-6050
- Использование MPU-6050 без I2C
Большое спасибо, я не понял объяснения, но ваше решение сработало!, @Kajitrim