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

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.