Оценка ориентации по акселерометру и гироскопу ИДУ? - PullRequest
0 голосов
/ 26 апреля 2019

Я с трудом пытаюсь понять математический вывод уравнений, которые я включил ниже.Этот фрагмент кода является частью примера из библиотеки SparkFun IMU, которую можно найти здесь .Может ли кто-нибудь помочь мне понять теорию использования функций арктана для оценки крена, тангажа и рыскания?И как данные магнитометра используются для получения правильной оценки рыскания?Все ресурсы, которые я мог найти в Интернете, не отвечали на эти вопросы так, чтобы я мог понять.

 float roll = atan2(ay, az);
 float pitch = atan2(-ax, sqrt(ay * ay + az * az));

 float heading;
 if (my == 0)
   heading = (mx < 0) ? PI : 0;
 else
 heading = atan2(mx, my);

 heading -= EARTH_DECLINATION * PI / 180;

 if (heading > PI) heading -= (2 * PI);
 else if (heading < -PI) heading += (2 * PI);

 // Convert everything from radians to degrees:
 heading *= 180.0 / PI;
 pitch *= 180.0 / PI;
 roll  *= 180.0 / PI;

Ответы [ 2 ]

1 голос
/ 26 апреля 2019

Если предположить, что ay и az - это смещение от начала координат, заданное магнитометром, то atan (ay, az) даст вам угол, который произвел это смещение.

sqrt (ay * ay + az * az)следует теорема Пифагора, чтобы дать вам длину третьей стороны «смещенного треугольника», чтобы иметь возможность рассчитать высоту.-Ax происходит от определения высоты тона.

0 голосов
/ 26 апреля 2019

atan2 (y, x) - угол тета, как на следующей диаграмме:

enter image description here

В трех измерениях у вас есть три плоскости и atan2() применяется к паре из x, y и z в зависимости от того, для какой плоскости вы рассчитываете тета (крен, наклон, рыскание).

Когда с постоянной скоростью (т.е. без изменения скорости или направления) значения ax, ay, az каждый измеряет только гравитационную составляющую ускорения.Значение будет неточным при ускорении.Вы должны быть немного умнее в этой точке, комбинируя информацию от других датчиков, таких как гироскоп или магнитометр и другие ускорители - то есть, когда неподвижный топор, ау, аз сумма до 1G - что-нибудь еще, и действует дополнительное ускорение,Ускоритель измеряет ускорение, но это включает ускорение под действием силы тяжести.То есть, когда на постоянной скорости ускоритель является датчиком наклона относительно силы тяжести.

При вычислении магнитометра определяется угол относительно севера от его составляющих x и y и компенсируется разница между истинным севером и магнитным севером ( магнитное склонение ).Компоненты x a y магнитометра находятся на максимуме, когда они выровнены с магнитным полем, поскольку они установлены ортогонально, их относительные значения разрешаются в одном направлении с использованием atan2 (mx, my).x и y меняются местами из обычного порядка, потому что направления компаса увеличиваются по часовой стрелке, а математически углы увеличиваются против часовой стрелки.

На практике вам нужно использовать функцию датчика, чтобы объединить информацию от гироскопа (угловой скорости), ускорителя,и магнитометр и, возможно, также применяют некоторые эвристические методы для точного отслеживания движения.Каждый из этих датчиков имеет различные смешивающие факторы, и некоторые элементы измерения перекрываются в том смысле, что одна внешняя сила может оказывать влияние на более чем один датчик.Это может быть использовано для различения различных видов движения и отношения.Это сложно, поэтому, вероятно, это не пытается справиться с этим.

...