#arduino #rotation #imu
Вопрос:
Я пытаюсь использовать значения акселерометра из IMU, чтобы получить вращение вокруг оси. У меня возникли трудности с разделением поворотов между осями в среде IDE Arduino. Используя приведенный ниже код, мне удается получить полный диапазон между 0-360 при вращении вокруг оси x, и он отлично работает при вращении вокруг оси x. Однако, когда я поворачиваюсь на 90 градусов вокруг оси y и на 0 градусов вокруг оси x, он показывает поворот на 180 градусов по оси x. Я знаю, что проблема возникает из-за того, что функция atan2 думает, что она находится во 2-м квадранте, но как я могу это исправить. x z и y — показания ускорения в соответствующих направлениях.
if( z < 0){
accXangle = (atan2(y, -sqrt( pow(x,2) pow(z,2)) ) * 180 /PI) xErr;
}
if(z > 0){
accXangle = (atan2(y, sqrt( pow(x,2) pow(z,2))) *180/PI) - xErr;
}