Я работаю над магнитометром AK8975, являющимся частью IMU. Что кажется мне очень сложным. Эта микросхема выдает трехмерный вектор в качестве выходного сигнала, описывающего магнитное поле Земли в любом месте на земле или вблизи нее.
Я попробовал два типа алгоритмов вычисления заголовка: один простой, arctan(-y/x)
а другой математика отмены наклона (тангажа) и банка (крена), как указано ниже. И по наклонности, и по банкам дают неправильный вывод.
Я могу получить правильный курс относительно земли (используя простые доступные открытые учебные ресурсы), когда он вращается, сохраняя горизонтальный относительно плана земли, используя любой из двух алгоритмов.
Я пробовал калибровку на ошибки мягкого и твердого железа. Я мог бы построить его в 3D и показать идеальную 3D-сферу. Все еще не работает на склонность или склонение.
Любой указатель будет полезен.
Код и его реализации, как показано ниже:
void Compass_Heading()
{
double MAG_X;
double MAG_Y;
double cos_roll;
double sin_roll;
double cos_pitch;
double sin_pitch;
cos_roll = cos(roll);
sin_roll = sin(roll);
cos_pitch = cos(pitch);
sin_pitch = sin(pitch);
//// Tilt compensated Magnetic filed X:
MAG_X = magnetom_x*cos_pitch + magnetom_y*sin_roll*sin_pitch + magnetom_z*cos_roll*sin_pitch;
//// Tilt compensated Magnetic filed Y:
MAG_Y = magnetom_y*cos_roll-magnetom_z*sin_roll;
//// Magnetic Heading
MAG_Heading = atan2(-MAG_Y, MAG_X) ;
}
Там , где magnetom_x
, #_y
и #_z
являются компонентами 3D вектора , который на самом деле является значением RAW от магнитометра. крен и шаг от загадочного выхода фильтра Калмана от бортового акселерометра и гироскопа. Эти три датчика находятся в ATAVRSBIN1 . Крен и подача в порядке до этой стадии.
Теперь простой расчет заголовка в соответствии с journal_of_sensors_renaudin et al_2010c.pdf должен был быть MAG_Heading = atan2(-magnetom_y, magnetom_x) ;
с компенсацией, как указано выше.
Общий код просто из открытых AHRS .
Данные в формате Roll, Pitch и Yaw. Я повернул устройство только рукой. Первые три были сконцентрированы только на Roll, Pitch и Yaw соответственно. Остальные два сначала поворачивают устройство примерно на 45 градусов вдоль X (прокручено), затем поворачивают вдоль локального Z магнитометра. Затем то же самое повторяют с вращением на 45 градусов вдоль Y (наклонно), затем поворачивают вдоль локального Z магнитометра.
Графики построены в диапазоне от -180 до 180 градусов.
Углы в градусах в файле Характеристики YAW на Roll.
Углы в градусах в файле Характеристики YAW на Pitch.
Углы в градусах в файле Характеристики YAW на самом Yaw.
Углы в градусах в файле Характеристики YAW на Yaw с наклоном 45 градусов.
Углы в градусах в файле Характеристики YAW на Yaw с углом 45 градусов.
Примечание: для последних 2 изображений: сначала хранится в исходном положении, то же самое для всех (см. Текстовые файлы). Затем повернули на 45 градусов, затем с помощью плоского устройства (с магнитометром) повернули вдоль оси Z магнитометра.
Аналогично для последнего изображения устройство было наклонено на 45 градусов, а затем вдоль оси Z магнитометра.
Я надеюсь, что это поможет решить мою проблему.
Новые разработки заключаются в следующем:
Я работал над заголовком. Я получил следующий вывод. CSV