Надежная перезагрузка данных калибровки IMU BNO055

Я использую IMU BNO055 и библиотеку Adafruit. Я хочу сохранить данные калибровки и загрузить их после выключения и повторного включения микроконтроллера. Библиотека Adafruit предоставляет пример для хранения и восстановления, но на самом деле он не работает. Всегда требуется повторная калибровка магнитометров, но даже при этом библиотека повторно выполняет всю калибровку, включая акселерометры.

Я хотел бы просто восстановить все данные калибровки (включая данные магнитометров), чтобы не выполнять калибровку при запуске IMU.

Я прочитал огромное количество сообщений по этому аргументу, но я действительно не мог понять, как надежно загрузить все данные калибровки при загрузке и избежать их повторной калибровки.

Есть ли кто-нибудь, кому это удалось, и может поделиться кодом?

, 👍0

Обсуждение

Возможный дубликат [После восстановления смещения BNO055 в датчике все значения калибровки равны 0](https://arduinoprosto.ru/q/56841/after-restoring-the-bno055-offsets-to-the-sensor- калибровочные значения-все), @Juraj

На самом деле нет, это вовсе не дубликат. Действительно, я использую Teensy и Arduino. Кроме того, этот пост не показывает код., @L_T

читайте ответ в дубликате, а не вопрос. невозможно избежать автоматической калибровки. сохраненная калибровка используется только после завершения автоматической калибровки. не тратьте на это время., @Juraj

Спасибо. Тогда что мне делать? В последнем комментарии говорится: «Я бы проигнорировал калибровку. Датчик справится с этим. После включения питания сделайте те же движения, и датчик откалибрует себя». Так должен ли я в конце концов избегать какой-либо калибровки? И стоит ли вообще избегать сохранения калибровки в EEPROM?, @L_T

вы пытаетесь решить какую-то проблему или вы только думали, что должны справиться с калибровкой?, @Juraj

Я просто хочу, чтобы калибровка выполнялась автоматически при загрузке с ранее сохраненными данными. Любое предложение/код?, @L_T

https://github.com/adafruit/Adafruit_BNO055/tree/master/examples/restore_offsets, @Juraj


1 ответ


1

Я нашел решение. Достаточно добавить функцию, которая при повторном выполнении калибровки магнитометра проверяет ТОЛЬКО, откалиброван ли магнитометр (при этом калибровка для акселерометра и гироскопа перезагружается из EEPROM).

void performMagCal(void) {
  uint8_t system, gyro, accel, mag;
  system = gyro = accel = mag = 0;

  while (mag != 3) {

    bno.getCalibration(&system, &gyro, &accel, &mag);
    displayCalStatus();
    Serial.println("");
  }

  Serial.println("\nMagnetometer calibrated!");
}  
,