Add persistent magnetometer calibration and docs

This commit is contained in:
Joshua Sacherer
2026-04-23 19:25:22 +02:00
parent bdd2b4315b
commit 38b7b64ba8
9 changed files with 701 additions and 65 deletions
+33 -6
View File
@@ -44,10 +44,31 @@ void imuCalibration() {
jsonInfoHttp.clear();
jsonInfoHttp["T"] = FEEDBACK_IMU_DATA;
jsonInfoHttp["status"] = calibrationOk ? 1 : 0;
jsonInfoHttp["info"] = calibrationOk ? "IMU calibration finished." : "IMU calibration failed.";
jsonInfoHttp["info"] = calibrationOk ? "IMU calibration finished. Rotate the rover slowly once to refine heading." : "IMU calibration failed.";
jsonInfoHttp["r"] = icm_roll;
jsonInfoHttp["p"] = icm_pitch;
jsonInfoHttp["y"] = icm_yaw;
jsonInfoHttp["magCal"] = imuHasHeadingCalibration() ? 1 : 0;
jsonInfoHttp["magSaved"] = imuHasStoredMagnCalibration() ? 1 : 0;
jsonInfoHttp["magCalRunning"] = imuIsMagnCalibrationRunning() ? 1 : 0;
jsonInfoHttp["magCalProgress"] = imuGetMagnCalibrationProgress();
String getInfoJsonString;
serializeJson(jsonInfoHttp, getInfoJsonString);
Serial.println(getInfoJsonString);
}
void startMagCalibration() {
const bool started = imuStartMagnCalibration();
jsonInfoHttp.clear();
jsonInfoHttp["T"] = FEEDBACK_IMU_DATA;
jsonInfoHttp["status"] = started ? 1 : 0;
jsonInfoHttp["info"] = started ? "Mag calibration started. Rotate the rover slowly through different angles until progress reaches 100." : "Mag calibration failed to start.";
jsonInfoHttp["magCal"] = imuHasHeadingCalibration() ? 1 : 0;
jsonInfoHttp["magSaved"] = imuHasStoredMagnCalibration() ? 1 : 0;
jsonInfoHttp["magCalRunning"] = imuIsMagnCalibrationRunning() ? 1 : 0;
jsonInfoHttp["magCalProgress"] = imuGetMagnCalibrationProgress();
String getInfoJsonString;
serializeJson(jsonInfoHttp, getInfoJsonString);
@@ -71,11 +92,15 @@ void getIMUData() {
jsonInfoHttp["gy"] = gy;
jsonInfoHttp["gz"] = gz;
jsonInfoHttp["mx"] = mx;
jsonInfoHttp["my"] = my;
jsonInfoHttp["mz"] = mz;
jsonInfoHttp["temp"] = temp;
jsonInfoHttp["mx"] = mx;
jsonInfoHttp["my"] = my;
jsonInfoHttp["mz"] = mz;
jsonInfoHttp["magCal"] = imuHasHeadingCalibration() ? 1 : 0;
jsonInfoHttp["magSaved"] = imuHasStoredMagnCalibration() ? 1 : 0;
jsonInfoHttp["magCalRunning"] = imuIsMagnCalibrationRunning() ? 1 : 0;
jsonInfoHttp["magCalProgress"] = imuGetMagnCalibrationProgress();
jsonInfoHttp["temp"] = temp;
String getInfoJsonString;
serializeJson(jsonInfoHttp, getInfoJsonString);
@@ -91,6 +116,7 @@ void getIMUOffset() {
jsonInfoHttp["x"] = offsetData.s16X;
jsonInfoHttp["y"] = offsetData.s16Y;
jsonInfoHttp["z"] = offsetData.s16Z;
jsonInfoHttp["saved"] = imuHasStoredMagnCalibration() ? 1 : 0;
String getInfoJsonString;
serializeJson(jsonInfoHttp, getInfoJsonString);
@@ -99,5 +125,6 @@ void getIMUOffset() {
void setIMUOffset(int16_t inputX, int16_t inputY, int16_t inputZ) {
imuSetMagnOffsets(inputX, inputY, inputZ);
imuSaveMagnCalibration();
getIMUOffset();
}