QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SensorsComponent.cc
Go to the documentation of this file.
1#include "SensorsComponent.h"
2#include "ParameterManager.h"
3#include "Vehicle.h"
4
5SensorsComponent::SensorsComponent(Vehicle* vehicle, AutoPilotPlugin* autopilot, QObject* parent)
6 : VehicleComponent(vehicle, autopilot, AutoPilotPlugin::KnownSensorsVehicleComponent, parent)
7 , _name(tr("Sensors"))
8{
9 _deviceIds = QStringList({QStringLiteral("CAL_GYRO0_ID"), QStringLiteral("CAL_ACC0_ID") });
10
11 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
12 _airspeedCalTriggerParams << "SENS_DPRES_OFF";
14 _airspeedCalTriggerParams << "SYS_HAS_NUM_ASPD";
15 } else {
16 _airspeedCalTriggerParams << "FW_ARSP_MODE" << "CBRK_AIRSPD_CHK";
17 }
18 }
19}
20
21QString SensorsComponent::name(void) const
22{
23 return _name;
24}
25
27{
28 return tr("Configure and calibrate gyroscope, accelerometer, magnetometer, and airspeed sensors.");
29}
30
32{
33 return "/qmlimages/SensorsComponentIcon.png";
34}
35
37{
38 return true;
39}
40
42{
43 for (const QString &triggerParam : std::as_const(_deviceIds)) {
44 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, triggerParam)->rawValue().toFloat() == 0.0f) {
45 return false;
46 }
47 }
48 bool magEnabled = true;
50 magEnabled = _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, _magEnabledParam)->rawValue().toBool();
51 }
52
53 if (magEnabled && _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, _magCalParam)->rawValue().toFloat() == 0.0f) {
54 return false;
55 }
56
57 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
60 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SENS_DPRES_OFF")->rawValue().toFloat() == 0.0f) {
61 return false;
62 }
63 } else {
65 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "CBRK_AIRSPD_CHK")->rawValue().toInt() != 162128 &&
66 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SENS_DPRES_OFF")->rawValue().toFloat() == 0.0f) {
67 return false;
68 }
69 }
70 }
71
72 return true;
73}
74
76{
77 QStringList triggers;
78
79 triggers << _deviceIds << _magCalParam << _magEnabledParam;
80 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
81 triggers << _airspeedCalTriggerParams;
82 }
83
84 return triggers;
85}
86
88{
89 return QUrl::fromUserInput("qrc:/qml/QGroundControl/AutoPilotPlugins/PX4/SensorsComponent.qml");
90}
91
92QStringList SensorsComponent::sections() const
93{
94 QStringList sectionList;
95
96 // Compass (hidden when all mags disabled)
97 bool allMagsDisabled = false;
99 allMagsDisabled = !_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, _magEnabledParam)->rawValue().toBool();
100 }
101 if (!allMagsDisabled) {
102 sectionList << tr("Compass");
103 }
104
105 sectionList << tr("Gyroscope");
106 sectionList << tr("Accelerometer");
107 sectionList << tr("Level Horizon");
108
109 if (_airspeedCalSupported()) {
110 sectionList << tr("Airspeed");
111 }
112
113 sectionList << tr("Orientations");
114
115 return sectionList;
116}
117
119{
120 QString summaryQml;
121
122 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
123 summaryQml = "qrc:/qml/QGroundControl/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml";
124 } else {
125 summaryQml = "qrc:/qml/QGroundControl/AutoPilotPlugins/PX4/SensorsComponentSummary.qml";
126 }
127
128 return QUrl::fromUserInput(summaryQml);
129}
130
131 bool SensorsComponent::_airspeedCalSupported(void) const
132 {
133 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
136 return true;
137 }
138 } else {
140 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "CBRK_AIRSPD_CHK")->rawValue().toInt() != 162128) {
141 return true;
142 }
143 }
144 }
145
146 return false;
147 }
148
149 bool SensorsComponent::_airspeedCalRequired(void) const
150 {
151 return _airspeedCalSupported() && _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SENS_DPRES_OFF")->rawValue().toFloat() == 0.0f;
152 }
153
154bool SensorsComponent::sectionSetupComplete(const QString &sectionName) const
155{
156 auto *pm = _vehicle->parameterManager();
157
158 if (sectionName == tr("Compass")) {
159 bool magEnabled = true;
160 if (pm->parameterExists(ParameterManager::defaultComponentId, _magEnabledParam)) {
161 magEnabled = pm->getParameter(ParameterManager::defaultComponentId, _magEnabledParam)->rawValue().toBool();
162 }
163 if (!magEnabled) return true;
164 return pm->getParameter(ParameterManager::defaultComponentId, _magCalParam)->rawValue().toFloat() != 0.0f;
165 }
166 if (sectionName == tr("Gyroscope")) {
167 return pm->getParameter(ParameterManager::defaultComponentId, "CAL_GYRO0_ID")->rawValue().toFloat() != 0.0f;
168 }
169 if (sectionName == tr("Accelerometer")) {
170 return pm->getParameter(ParameterManager::defaultComponentId, "CAL_ACC0_ID")->rawValue().toFloat() != 0.0f;
171 }
172 if (sectionName == tr("Level Horizon")) {
173 // Level cal doesn't have a distinct completion indicator — consider complete if accel+gyro are done
174 return pm->getParameter(ParameterManager::defaultComponentId, "CAL_ACC0_ID")->rawValue().toFloat() != 0.0f
175 && pm->getParameter(ParameterManager::defaultComponentId, "CAL_GYRO0_ID")->rawValue().toFloat() != 0.0f;
176 }
177 if (sectionName == tr("Airspeed")) {
178 return !_airspeedCalRequired();
179 }
180
181 return true;
182}
The AutoPilotPlugin class is an abstract base class which represents the methods and objects which ar...
QVariant rawValue() const
Value after translation.
Definition Fact.h:85
bool parameterExists(int componentId, const QString &paramName) const
Fact * getParameter(int componentId, const QString &paramName)
static constexpr int defaultComponentId
virtual bool requiresSetup(void) const override
virtual QUrl setupSource(void) const override
virtual QString iconResource(void) const override
bool sectionSetupComplete(const QString &sectionName) const override
Returns setup-complete status for a named section. Default returns true (no per-section tracking).
QStringList setupCompleteChangedTriggerList(void) const override
QStringList sections() const override
virtual bool setupComplete(void) const override
virtual QString name(void) const override
virtual QUrl summaryQmlSource(void) const override
SensorsComponent(Vehicle *vehicle, AutoPilotPlugin *autopilot, QObject *parent=nullptr)
virtual QString description(void) const override
A vehicle component is an object which abstracts the physical portion of a vehicle into a set of conf...
bool vtol() const
Definition Vehicle.cc:1763
int firmwareMinorVersion() const
Definition Vehicle.h:650
ParameterManager * parameterManager()
Definition Vehicle.h:573
bool fixedWing() const
Definition Vehicle.cc:1738
int firmwareMajorVersion() const
Definition Vehicle.h:649
bool airship() const
Definition Vehicle.cc:1733