mirror of
https://bitbucket.org/librepilot/librepilot.git
synced 2025-01-31 16:52:10 +01:00
LP-388 Use UAVObjectUpdaterHelper and avoid telemetry errors
This commit is contained in:
parent
daba66d32f
commit
b16e4838eb
@ -2,7 +2,8 @@
|
||||
******************************************************************************
|
||||
*
|
||||
* @file sixpointcalibrationmodel.cpp
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014.
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2016.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014.
|
||||
*
|
||||
* @brief Six point calibration for Magnetometer and Accelerometer
|
||||
* @see The GNU Public License (GPL) Version 3
|
||||
@ -29,6 +30,7 @@
|
||||
#include "extensionsystem/pluginmanager.h"
|
||||
#include "calibration/calibrationuiutils.h"
|
||||
#include "uavobjectmanager.h"
|
||||
#include <uavobjecthelper.h>
|
||||
|
||||
#include <math.h>
|
||||
#include <QThread>
|
||||
@ -156,6 +158,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag)
|
||||
// Store and reset board rotation before calibration starts
|
||||
storeAndClearBoardRotation();
|
||||
|
||||
UAVObjectUpdaterHelper updateHelper;
|
||||
|
||||
// Calibration accel
|
||||
AccelGyroSettings::DataFields accelGyroSettingsData = accelGyroSettings->getData();
|
||||
memento.accelGyroSettingsData = accelGyroSettingsData;
|
||||
@ -167,7 +171,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag)
|
||||
accelGyroSettingsData.accel_bias[AccelGyroSettings::ACCEL_BIAS_Y] = 0;
|
||||
accelGyroSettingsData.accel_bias[AccelGyroSettings::ACCEL_BIAS_Z] = 0;
|
||||
|
||||
accelGyroSettings->setData(accelGyroSettingsData);
|
||||
accelGyroSettings->setData(accelGyroSettingsData, false);
|
||||
updateHelper.doObjectAndWait(accelGyroSettings);
|
||||
|
||||
// Calibration mag
|
||||
RevoCalibration::DataFields revoCalibrationData = revoCalibration->getData();
|
||||
@ -187,7 +192,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag)
|
||||
// Disable adaptive mag nulling
|
||||
revoCalibrationData.MagBiasNullingRate = 0;
|
||||
|
||||
revoCalibration->setData(revoCalibrationData);
|
||||
revoCalibration->setData(revoCalibrationData, false);
|
||||
updateHelper.doObjectAndWait(revoCalibration);
|
||||
|
||||
// Calibration AuxMag
|
||||
AuxMagSettings::DataFields auxMagSettingsData = auxMagSettings->getData();
|
||||
@ -207,9 +213,8 @@ void SixPointCalibrationModel::start(bool calibrateAccel, bool calibrateMag)
|
||||
// Disable adaptive mag nulling
|
||||
auxMagSettingsData.MagBiasNullingRate = 0;
|
||||
|
||||
auxMagSettings->setData(auxMagSettingsData);
|
||||
|
||||
QThread::usleep(100000);
|
||||
auxMagSettings->setData(auxMagSettingsData, false);
|
||||
updateHelper.doObjectAndWait(auxMagSettings);
|
||||
|
||||
mag_accum_x.clear();
|
||||
mag_accum_y.clear();
|
||||
|
@ -2,7 +2,8 @@
|
||||
******************************************************************************
|
||||
*
|
||||
* @file ConfigRevoWidget.h
|
||||
* @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2016.
|
||||
* The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010.
|
||||
* @addtogroup GCSPlugins GCS Plugins
|
||||
* @{
|
||||
* @addtogroup ConfigPlugin Config Plugin
|
||||
@ -28,6 +29,7 @@
|
||||
|
||||
#include "ui_revosensors.h"
|
||||
|
||||
#include <uavobjecthelper.h>
|
||||
#include <attitudestate.h>
|
||||
#include <attitudesettings.h>
|
||||
#include <revocalibration.h>
|
||||
@ -255,6 +257,8 @@ void ConfigRevoWidget::updateVisualHelp()
|
||||
void ConfigRevoWidget::storeAndClearBoardRotation()
|
||||
{
|
||||
if (!isBoardRotationStored) {
|
||||
UAVObjectUpdaterHelper updateHelper;
|
||||
|
||||
// Store current board rotation
|
||||
isBoardRotationStored = true;
|
||||
AttitudeSettings *attitudeSettings = AttitudeSettings::GetInstance(getObjectManager());
|
||||
@ -268,7 +272,9 @@ void ConfigRevoWidget::storeAndClearBoardRotation()
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_YAW] = 0;
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_ROLL] = 0;
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_PITCH] = 0;
|
||||
attitudeSettings->setData(data);
|
||||
|
||||
attitudeSettings->setData(data, false);
|
||||
updateHelper.doObjectAndWait(attitudeSettings);
|
||||
|
||||
// Store current aux mag board rotation
|
||||
AuxMagSettings *auxMagSettings = AuxMagSettings::GetInstance(getObjectManager());
|
||||
@ -282,13 +288,17 @@ void ConfigRevoWidget::storeAndClearBoardRotation()
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_YAW] = 0;
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_ROLL] = 0;
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_PITCH] = 0;
|
||||
auxMagSettings->setData(auxMagData);
|
||||
|
||||
auxMagSettings->setData(auxMagData, false);
|
||||
updateHelper.doObjectAndWait(auxMagSettings);
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigRevoWidget::recallBoardRotation()
|
||||
{
|
||||
if (isBoardRotationStored) {
|
||||
UAVObjectUpdaterHelper updateHelper;
|
||||
|
||||
// Recall current board rotation
|
||||
isBoardRotationStored = false;
|
||||
|
||||
@ -299,7 +309,9 @@ void ConfigRevoWidget::recallBoardRotation()
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_YAW] = storedBoardRotation[AttitudeSettings::BOARDROTATION_YAW];
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_ROLL] = storedBoardRotation[AttitudeSettings::BOARDROTATION_ROLL];
|
||||
data.BoardRotation[AttitudeSettings::BOARDROTATION_PITCH] = storedBoardRotation[AttitudeSettings::BOARDROTATION_PITCH];
|
||||
attitudeSettings->setData(data);
|
||||
|
||||
attitudeSettings->setData(data, false);
|
||||
updateHelper.doObjectAndWait(attitudeSettings);
|
||||
|
||||
// Restore the aux mag board rotation
|
||||
AuxMagSettings *auxMagSettings = AuxMagSettings::GetInstance(getObjectManager());
|
||||
@ -308,7 +320,9 @@ void ConfigRevoWidget::recallBoardRotation()
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_YAW] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_YAW];
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_ROLL] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_ROLL];
|
||||
auxMagData.BoardRotation[AuxMagSettings::BOARDROTATION_PITCH] = auxMagStoredBoardRotation[AuxMagSettings::BOARDROTATION_PITCH];
|
||||
auxMagSettings->setData(auxMagData);
|
||||
|
||||
auxMagSettings->setData(auxMagData, false);
|
||||
updateHelper.doObjectAndWait(auxMagSettings);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user