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("Sensors Setup is used to calibrate the sensors within your vehicle.");
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()) {
59 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SYS_HAS_NUM_ASPD")->rawValue().toBool() &&
60 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SENS_DPRES_OFF")->rawValue().toFloat() == 0.0f) {
61 return false;
62 }
63 } else {
64 if (!_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "FW_ARSP_MODE")->rawValue().toBool() &&
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
75QStringList SensorsComponent::setupCompleteChangedTriggerList(void) const
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
93{
94 QString summaryQml;
95
96 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
97 summaryQml = "qrc:/qml/QGroundControl/AutoPilotPlugins/PX4/SensorsComponentSummaryFixedWing.qml";
98 } else {
99 summaryQml = "qrc:/qml/QGroundControl/AutoPilotPlugins/PX4/SensorsComponentSummary.qml";
100 }
101
102 return QUrl::fromUserInput(summaryQml);
103}
104
105 bool SensorsComponent::_airspeedCalSupported(void) const
106 {
107 if (_vehicle->fixedWing() || _vehicle->vtol() || _vehicle->airship()) {
109 if (_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SYS_HAS_NUM_ASPD")->rawValue().toBool()) {
110 return true;
111 }
112 } else {
113 if (!_vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "FW_ARSP_MODE")->rawValue().toBool() &&
114 _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "CBRK_AIRSPD_CHK")->rawValue().toInt() != 162128) {
115 return true;
116 }
117 }
118 }
119
120 return false;
121 }
122
123 bool SensorsComponent::_airspeedCalRequired(void) const
124 {
125 return _airspeedCalSupported() && _vehicle->parameterManager()->getParameter(ParameterManager::defaultComponentId, "SENS_DPRES_OFF")->rawValue().toFloat() == 0.0f;
126 }
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
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
bool vtol() const
Definition Vehicle.cc:1869
int firmwareMinorVersion() const
Definition Vehicle.h:691
ParameterManager * parameterManager()
Definition Vehicle.h:578
bool fixedWing() const
Definition Vehicle.cc:1844
int firmwareMajorVersion() const
Definition Vehicle.h:690
bool airship() const
Definition Vehicle.cc:1839