19 "[9.810 0.000 0.000]",
20 "[-9.810 0.000 0.000]",
21 "[0.000 9.810 0.000]",
22 "[0.000 -9.810 0.000]",
23 "[0.000 0.000 9.810]",
24 "[0.000 0.000 -9.810]",
39 _startCalibration(CalType::Mag);
44 _startCalibration(CalType::Accel);
47void MockLinkPX4Calibration::_startCalibration(CalType calType)
49 QMutexLocker locker(&_mutex);
55 _finishTickCount = -1;
56 std::fill(std::begin(_sideDone), std::end(_sideDone),
false);
59 .arg(QLatin1String((calType == CalType::Mag) ?
"mag" :
"accel")));
64 QMutexLocker locker(&_mutex);
66 if (_calType == CalType::None) {
70 _calType = CalType::None;
73 _finishTickCount = -1;
75 _mockLink->
sendStatusTextMessage(MAV_SEVERITY_CRITICAL, QStringLiteral(
"[cal] calibration cancelled"));
81 QMutexLocker locker(&_mutex);
82 return _calType != CalType::None;
87 QMutexLocker locker(&_mutex);
88 _requestedPose =
static_cast<int>(pose);
93 QMutexLocker locker(&_mutex);
95 if (_calType == CalType::None) {
99 if (_finishTickCount >= 0) {
104 if (_finishTickCount >= kTicksToFinish) {
105 const CalType calType = _calType;
106 _calType = CalType::None;
107 _finishTickCount = -1;
108 if (calType == CalType::Mag) {
118 .arg(QLatin1String((calType == CalType::Mag) ?
"mag" :
"accel")));
123 if (_activeSide >= 0) {
130int MockLinkPX4Calibration::_doneCount()
const
133 for (
bool done : _sideDone) {
142void MockLinkPX4Calibration::_detectPose()
144 const int pose = _requestedPose;
150 if (_sideDone[pose]) {
156 if (_calType == CalType::Accel) {
166void MockLinkPX4Calibration::_sideTick()
183 _finishTickCount = 0;
188void MockLinkPX4Calibration::_magSideTick()
190 if (_sideTickCount < kTicksPerSide) {
192 const unsigned progress = (_doneCount() * 100 /
kSideCount) + ((100 /
kSideCount) * _sideTickCount / kTicksPerSide);
193 _mockLink->
sendStatusTextMessage(MAV_SEVERITY_INFO, QStringLiteral(
"[cal] %1 side calibration: progress <%2>").arg(QLatin1String(
kSideNames[_activeSide])).arg(progress));
197 _sideDone[_activeSide] =
true;
198 _mockLink->
sendStatusTextMessage(MAV_SEVERITY_INFO, QStringLiteral(
"[cal] %1 side done, rotate to a different side").arg(QLatin1String(
kSideNames[_activeSide])));
204void MockLinkPX4Calibration::_accelSideTick()
206 if (_sideTickCount < kTicksPerSide) {
210 _sideDone[_activeSide] =
true;
215 _mockLink->
sendStatusTextMessage(MAV_SEVERITY_INFO, QStringLiteral(
"[cal] progress <%1>").arg(17 * _doneCount()));
216 _mockLink->
sendStatusTextMessage(MAV_SEVERITY_INFO, QStringLiteral(
"[cal] %1 side done, rotate to a different side").arg(QLatin1String(
kSideNames[_activeSide])));
static constexpr const char * kSideNames[MockLinkPX4Calibration::kSideCount]
static constexpr const char * kSideAccelResults[MockLinkPX4Calibration::kSideCount]
static constexpr int32_t kAccelDeviceId
static constexpr int32_t kMagDeviceId
static constexpr int kSideCount
void startMagCalibration()
MockLinkPX4Calibration(MockLink *mockLink)
bool calibrationActive() const
Pose
Vehicle poses. Order matches the PX4 detect_orientation_return enum.
void run10HzTasks()
Called by MockLink::run10HzTasks on the worker thread.
void startAccelCalibration()
void sendStatusTextMessage(uint8_t severity, const QString &text)
void setInt32ParamValue(int componentId, const QString ¶mName, int32_t value)