c'est une partie du code, qui visualise la rotation de mon arduino. Malheureusement, le rouleau est "inversé" ... Il est appelé chaque tick avec des valeurs mises à jour.Transformation Matrix (roll inversed?)
Par inversé je veux dire: Si je roule l'arduino vers la droite, la visualisation le fait rouler vers la gauche et vice versa.
pushMatrix(); // begin object
translate(width/4, height/4); // set position
float c1 = cos(radians(roll));
float s1 = sin(radians(roll));
float c2 = cos(radians(pitch));
float s2 = sin(radians(pitch));
float c3 = cos(radians(yaw));
float s3 = sin(radians(yaw));
applyMatrix(c2*c3, s1*s3+c1*c3*s2, c3*s1*s2-c1*s3, 0,
-s2 , c1*c2 , c2*s1 , 0,
c2*s3, c1*s2*s3-c3*s1, c1*c3+s1*s2*s3, 0,
0 , 0 , 0 , 1);
drawArduino();
popMatrix(); // end of object
Quelqu'un voit-il l'erreur que j'ai faite?
Voici comment je calculer les valeurs que je passe dans la matrice:
int aix, aiy, aiz, tax, tay, taz;
int gix, giy, giz;
float ax, ay, az;
float gx, gy, gz;
float roll, pitch, heading;
CurieIMU.readMotionSensor(aix, aiy, aiz, gix, giy, giz);
// convert from raw data to gravity and degrees/second units
ax = convertRawAcceleration(aix);
ay = convertRawAcceleration(aiy);
az = convertRawAcceleration(aiz); //acceleration for 2g
gx = convertRawGyro(gix);
gy = convertRawGyro(giy);
gz = convertRawGyro(giz);
// update the filter, which computes orientation
filter.updateIMU(gx, gy, gz, ax, ay, az);
// print the heading, pitch and roll
roll = filter.getRoll();
pitch = filter.getPitch();
heading = filter.getYaw();
fonctionne comme un charme, merci beaucoup. –