changed measuring datatype to quanternions and convert them to radials and degrees

This commit is contained in:
2024-05-08 15:12:49 +02:00
parent c7951c3d9f
commit 2c51596996
3 changed files with 28 additions and 15 deletions

View File

@@ -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();
} }

View File

@@ -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;
} }
} }

View File

@@ -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: