Перейти к основному содержимому

06 Урок. Калибровка магнитометра

Получение сырых данных для калибровки магнитометра

По умолчанию магнитометр не откалиброван, т.е. выдает неточные значения. Уточненные значения можно получить из сырых данных путем калибровки, которая заключается в нахождении матрицы преобразования и вектора смещения.

к сведению

Более подробно ознакомиться с работой магнитометра вы можете по ссылке: 02 Урок. Знакомство с датчиками.

Подвесьте ОрбиКрафт 3D в токовую рамку. При выполнении программы маховик будет вращать конструктор спутника самостоятельно. После калибровки данные будут отправлены в ПО Houston Application.

Анализ работы программы на С++

В программе используются следующие функции работы с магнитометром.

magnetometer_gyro_set_telemetry_period(mag_num, dt)
  • установка периода телеметрии магнитометра и ДУСа с номером магнитометра mag_num и периодом dt
magnetometer_set_offset(mag_num, mag_x, mag_y, mag_z)
  • функция задает смещение нуля для магнитометра с номером mag_num в плоскостях x,y,z.
motor_set_speed(0, speed);
  • функция устанавливает скорость вращения маховика с номером 0 и скоростью speed
подсказка

В одноосном ОрбиКрафт 3D номер маховика соответствует 0, в трехосном - от 0 до 2 в зависимости от оси (ось X - 0, ось Y - 1, ось Z -2)

magnetometer_request_raw(mag_num, &mag_x, &mag_y, &mag_z)
  • функция, возвращающая сырые данные, измеренные магнитометром с номером mag_num, представляющие собой список из 4 числовых значений. Считанные данные мы помещаем в переменные mag_x, mag_y и mag_z.

В программе использован оператор цикла:

for (int i = 0; i < count; i++)

который будет выполнен n раз, соответственно будет собрано n значений с датчика.

Анализ работы программы на Python

magGyroSetTelemetryPeriod (100, 2)
  • установка периода телеметрии магнитометра и ДУСа с номером магнитометра с периодом телеметрии 100 мс
magSetOffset (0, 0, 0)
  • функция задает смещение нуля для магнитометра в плоскостях x,y,z.
motorSetSpeed('0xA', speed)
  • функция устанавливает скорость вращения маховика 0хА и скоростью speed
mag_x, mag_y, mag_z = lib.magRequestRaw (2)
arrX.append(mag_x)
arrY.append(mag_y)
  • функция запрашивает регулярную телеметрию carrier и возвращает список значений магнетометра (x, y, z). Так как в одноосной конфигурации конструктора спутника вращается вокруг оси Z, то в mag_x и mag_y записываются данные по осям x и y.