Компас с компенсацией наклона имеет неравномерную компенсацию в зависимости от степени наклона - PullRequest
0 голосов
/ 18 февраля 2020

Я делаю компас с компенсацией наклона, используя MMC5983 и LIS2HH12. У меня есть расчеты курса и наклона, и оба устройства были откалиброваны.

При наклоне компаса на -5 градусов направление движения компаса c будет «колебаться» на 23 градуса, но если его наклонить до -15 градусов, колебание уменьшится до 6,1 градуса. Я изобразил колебание против угла наклона ниже. Я не уверен, почему это иногда калибруется, а не другие (см. Второй график). Три разных заголовка на втором графике указывают мне, что некоторые точки калибруются, а другие нет.

Код: {

void calc_tilt () {

float pitch = asinf(-accel.x);
float roll = asinf((accel.y)/ (cosf(pitch)));


accel.pitch = pitch;//rotation arond y-axis
accel.roll = roll;//rotation around x-axis

if ((pitch == 90) || (pitch ==-90)){
    roll = 0;
}

}

void calc_comp_field () {

 mag.x_comp = mag.x*cosf(accel.pitch) + mag.z*sinf(accel.pitch);
 mag.y_comp = mag.x*sinf(accel.roll)*sinf(accel.pitch) + mag.y*cosf(accel.roll) - mag.z*sinf(accel.roll)*cosf(accel.pitch);
 mag.z_comp = -mag.x*cosf(accel.roll)*sinf(accel.pitch) + mag.y*sinf(accel.roll) + mag.z*cosf(accel.roll)*cosf(accel.pitch);

}

void getHead () {

float heading = 0;

if((mag.x_comp ==0)&&(mag.y_comp<0)){
    heading = 90;
} else if ((mag.x_comp==0)&&(mag.y_comp>0)){
    heading = 0;
}

heading = (atan2f(-mag.y_comp,mag.x_comp))*(180/M_PI);



if(heading < 0){
    heading = heading + 360;
} else if (heading >360){
    heading = heading - 360;
}

mag.heading = heading;

} ​​

колебание компаса против угла наклона

Stati c Данные курса по компасу при 10 градусах крена

...