changed measuring datatype to quanternions and convert them to radials and degrees
This commit is contained in:
@@ -14,11 +14,21 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
SensorManager::Rotation rotation = sensorManager.readLoop();
|
SensorManager::Rotation rotation = sensorManager.readLoop();
|
||||||
|
|
||||||
Serial.print(rotation.x);
|
// Convert quaternion to Euler angles in radians
|
||||||
|
float roll = atan2(2.0f * (rotation.w * rotation.i + rotation.j * rotation.k), 1.0f - 2.0f * (rotation.i * rotation.i + rotation.j * rotation.j));
|
||||||
|
float pitch = asin(2.0f * (rotation.w * rotation.j - rotation.k * rotation.i));
|
||||||
|
float yaw = atan2(2.0f * (rotation.w * rotation.k + rotation.i * rotation.j), 1.0f - 2.0f * (rotation.j * rotation.j + rotation.k * rotation.k));
|
||||||
|
|
||||||
|
// Convert to degrees
|
||||||
|
float rollDegrees = roll * 180.0f / PI;
|
||||||
|
float pitchDegrees = pitch * 180.0f / PI;
|
||||||
|
float yawDegrees = yaw * 180.0f / PI;
|
||||||
|
|
||||||
|
Serial.print(roll);
|
||||||
Serial.print(" ");
|
Serial.print(" ");
|
||||||
Serial.print(rotation.y);
|
Serial.print(pitch);
|
||||||
Serial.print(" ");
|
Serial.print(" ");
|
||||||
Serial.print(rotation.z);
|
Serial.print(yaw);
|
||||||
|
|
||||||
Serial.println();
|
Serial.println();
|
||||||
}
|
}
|
@@ -18,7 +18,7 @@ void SensorManager::sensorSetup() {
|
|||||||
|
|
||||||
Wire.setClock(400000); //Increase I2C data rate to 400kHz
|
Wire.setClock(400000); //Increase I2C data rate to 400kHz
|
||||||
myIMU.calibrateAll(); //Turn on cal for Accel, Gyro, and Mag
|
myIMU.calibrateAll(); //Turn on cal for Accel, Gyro, and Mag
|
||||||
myIMU.enableGameRotationVector(100);
|
myIMU.enableGyroIntegratedRotationVector(100);
|
||||||
myIMU.enableMagnetometer(100); //Send data update every 100ms
|
myIMU.enableMagnetometer(100); //Send data update every 100ms
|
||||||
myIMU.saveCalibration(); //Saves the current dynamic calibration data (DCD) to memory
|
myIMU.saveCalibration(); //Saves the current dynamic calibration data (DCD) to memory
|
||||||
myIMU.requestCalibrationStatus(); //Sends command to get the latest calibration status
|
myIMU.requestCalibrationStatus(); //Sends command to get the latest calibration status
|
||||||
@@ -32,19 +32,21 @@ void SensorManager::sensorSetup() {
|
|||||||
|
|
||||||
SensorManager::Rotation SensorManager::readLoop() {
|
SensorManager::Rotation SensorManager::readLoop() {
|
||||||
if (myIMU.dataAvailable() == true) {
|
if (myIMU.dataAvailable() == true) {
|
||||||
float x = myIMU.getMagX();
|
float i = myIMU.getQuatI();
|
||||||
float y = myIMU.getMagY();
|
float j = myIMU.getQuatJ();
|
||||||
float z = myIMU.getMagZ();
|
float k = myIMU.getQuatK();
|
||||||
|
float w = myIMU.getQuatReal();
|
||||||
|
|
||||||
Rotation rotation = { x, y, z };
|
Rotation rotation = { i, j, k, w };
|
||||||
return rotation;
|
return rotation;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
float x = myIMU.getMagX();
|
float i = myIMU.getQuatI();
|
||||||
float y = myIMU.getMagY();
|
float j = myIMU.getQuatJ();
|
||||||
float z = myIMU.getMagZ();
|
float k = myIMU.getQuatK();
|
||||||
|
float w = myIMU.getQuatReal();
|
||||||
|
|
||||||
Rotation rotation = { x, y, z };
|
Rotation rotation = { i, j, k, w };
|
||||||
return rotation;
|
return rotation;
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -9,9 +9,10 @@ class SensorManager {
|
|||||||
SensorManager();
|
SensorManager();
|
||||||
void sensorSetup();
|
void sensorSetup();
|
||||||
struct Rotation {
|
struct Rotation {
|
||||||
float x;
|
float i;
|
||||||
float y;
|
float j;
|
||||||
float z;
|
float k;
|
||||||
|
float w;
|
||||||
};
|
};
|
||||||
Rotation readLoop();
|
Rotation readLoop();
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user