QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
Gimbal.h
Go to the documentation of this file.
1#pragma once
2
3#include "FactGroup.h"
4#include "MAVLinkEnums.h"
5
7
8class Gimbal : public FactGroup
9{
10 Q_OBJECT
11 Q_PROPERTY(Fact *absoluteRoll READ absoluteRoll CONSTANT)
12 Q_PROPERTY(Fact *absolutePitch READ absolutePitch CONSTANT)
13 Q_PROPERTY(Fact *bodyYaw READ bodyYaw CONSTANT)
14 Q_PROPERTY(Fact *absoluteYaw READ absoluteYaw CONSTANT)
15 Q_PROPERTY(Fact *deltaYaw READ deltaYaw CONSTANT)
16 Q_PROPERTY(Fact *deviceId READ deviceId CONSTANT)
17 Q_PROPERTY(Fact *managerCompid READ managerCompid CONSTANT)
18 Q_PROPERTY(QString deviceName READ deviceName NOTIFY deviceNameChanged)
19 Q_PROPERTY(float pitchRate READ pitchRate NOTIFY pitchRateChanged)
20 Q_PROPERTY(float yawRate READ yawRate NOTIFY yawRateChanged)
21 Q_PROPERTY(bool yawLock READ yawLock NOTIFY yawLockChanged)
22 Q_PROPERTY(bool retracted READ retracted NOTIFY retractedChanged)
25 Q_PROPERTY(bool supportsRetract READ supportsRetract NOTIFY capabilityFlagsChanged)
26 Q_PROPERTY(bool supportsYawLock READ supportsYawLock NOTIFY capabilityFlagsChanged)
27
28 friend class GimbalController;
29
30public:
31 Gimbal(GimbalController *parent);
32 Gimbal(const Gimbal &other);
33 const Gimbal &operator=(const Gimbal &other);
34 ~Gimbal();
35
36 Fact *absoluteRoll() { return &_absoluteRollFact; }
37 Fact *absolutePitch() { return &_absolutePitchFact; }
38 Fact *bodyYaw() { return &_bodyYawFact; }
39 Fact *absoluteYaw() { return &_absoluteYawFact; }
40 Fact *deltaYaw() { return &_deltaYawFact; }
41 Fact *deviceId() { return &_deviceIdFact; }
42 Fact *managerCompid() { return &_managerCompidFact; }
43
44 QString deviceName() const { return _deviceName; }
45
46 float pitchRate() const { return _pitchRate; }
47 float yawRate() const { return _yawRate; }
48 bool yawLock() const { return _yawLock; }
49 bool retracted() const { return _retracted; }
50 bool gimbalHaveControl() const { return _haveControl; }
51 bool gimbalOthersHaveControl() const { return _othersHaveControl; }
52
53 void setAbsoluteRoll(float absRoll) { absoluteRoll()->setRawValue(absRoll); }
54 void setAbsolutePitch(float absPitch) { absolutePitch()->setRawValue(absPitch); }
55 void setBodyYaw(float yaw) { bodyYaw()->setRawValue(yaw); }
56 void setAbsoluteYaw(float absYaw) { absoluteYaw()->setRawValue(absYaw); }
57 void setDeltaYaw(float delta) { deltaYaw()->setRawValue(delta); }
58 void setDeviceId(uint id) { deviceId()->setRawValue(id); }
59 void setManagerCompid(uint id) { managerCompid()->setRawValue(id); }
60
61 void setDeviceName(const QString& name)
62 {
63 if (name != _deviceName) {
64 _deviceName = name;
65 emit deviceNameChanged();
66 }
67 }
68
69 void setPitchRate(float pitchRate) { if (pitchRate != _pitchRate) { _pitchRate = pitchRate; emit pitchRateChanged(); } }
70 void setYawRate(float yawRate) { if (yawRate != _yawRate) { _yawRate = yawRate; emit yawRateChanged(); } }
71 void setYawLock(bool yawLock) { if (yawLock != _yawLock) { _yawLock = yawLock; emit yawLockChanged(); } }
72 void setRetracted(bool retracted) { if (retracted != _retracted) { _retracted = retracted; emit retractedChanged(); } }
73 void setGimbalHaveControl(bool set) { if (set != _haveControl) { _haveControl = set; emit gimbalHaveControlChanged(); } }
74 void setGimbalOthersHaveControl(bool set) { if (set != _othersHaveControl) { _othersHaveControl = set; emit gimbalOthersHaveControlChanged(); } }
75
76 void setCapabilityFlags(uint32_t flags);
77 bool supportsRetract() const { return (_capabilityFlags & GIMBAL_MANAGER_CAP_FLAGS_HAS_RETRACT) != 0; }
78 bool supportsYawLock() const { return (_capabilityFlags & GIMBAL_MANAGER_CAP_FLAGS_HAS_YAW_LOCK) != 0; }
79
80signals:
89
90private:
91 void _initFacts();
92
93 unsigned _requestInformationRetries = 3;
94 unsigned _requestStatusRetries = 6;
95 unsigned _requestAttitudeRetries = 3;
96 qint64 _lastStatusRequestMs = 0;
97 bool _receivedGimbalManagerInformation = false;
98 bool _receivedGimbalManagerStatus = false;
99 bool _receivedGimbalDeviceAttitudeStatus = false;
100 bool _deltaYawValid = false;
101 bool _yawFrameFlagsInvalid = false;
102 bool _receivedGimbalDeviceInformation = false;
103 bool _isComplete = false;
104 bool _neutral = false;
105 uint32_t _capabilityFlags = 0; // GIMBAL_MANAGER_CAP_FLAGS
106
107 Fact _absoluteRollFact = Fact(0, QStringLiteral("gimbalRoll"), FactMetaData::valueTypeFloat);
108 Fact _absolutePitchFact = Fact(0, QStringLiteral("gimbalPitch"), FactMetaData::valueTypeFloat);
109 Fact _bodyYawFact = Fact(0, QStringLiteral("gimbalYaw"), FactMetaData::valueTypeFloat);
110 Fact _absoluteYawFact = Fact(0, QStringLiteral("gimbalAzimuth"), FactMetaData::valueTypeFloat);
111 Fact _deltaYawFact = Fact(0, QStringLiteral("gimbalDeltaYaw"), FactMetaData::valueTypeFloat);
112 Fact _deviceIdFact = Fact(0, QStringLiteral("deviceId"), FactMetaData::valueTypeUint8);
113 Fact _managerCompidFact = Fact(0, QStringLiteral("managerCompid"), FactMetaData::valueTypeUint8);
114
115 QString _deviceName;
116
117 float _pitchRate = 0.f;
118 float _yawRate = 0.f;
119 bool _yawLock = false;
120 bool _retracted = false;
121 bool _haveControl = false;
122 bool _othersHaveControl = false;
123};
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:16
A Fact is used to hold a single value within the system.
Definition Fact.h:15
void setRawValue(const QVariant &value)
Definition Fact.cc:135
Definition Gimbal.h:9
void yawRateChanged()
void setAbsolutePitch(float absPitch)
Definition Gimbal.h:54
void gimbalHaveControlChanged()
float pitchRate() const
Definition Gimbal.h:46
void setYawLock(bool yawLock)
Definition Gimbal.h:71
void setPitchRate(float pitchRate)
Definition Gimbal.h:69
Fact * absolutePitch()
Definition Gimbal.h:37
bool yawLock() const
Definition Gimbal.h:48
void setManagerCompid(uint id)
Definition Gimbal.h:59
bool supportsRetract() const
Definition Gimbal.h:77
Fact * managerCompid()
Definition Gimbal.h:42
Fact * deltaYaw()
Definition Gimbal.h:40
Fact * deviceId()
Definition Gimbal.h:41
void deviceNameChanged()
void setAbsoluteYaw(float absYaw)
Definition Gimbal.h:56
void setYawRate(float yawRate)
Definition Gimbal.h:70
bool gimbalOthersHaveControl() const
Definition Gimbal.h:51
void setGimbalHaveControl(bool set)
Definition Gimbal.h:73
void setBodyYaw(float yaw)
Definition Gimbal.h:55
void pitchRateChanged()
void setDeviceId(uint id)
Definition Gimbal.h:58
void setRetracted(bool retracted)
Definition Gimbal.h:72
QString deviceName() const
Definition Gimbal.h:44
void retractedChanged()
void setDeviceName(const QString &name)
Definition Gimbal.h:61
Fact * absoluteRoll()
Definition Gimbal.h:36
void capabilityFlagsChanged()
Fact * absoluteYaw()
Definition Gimbal.h:39
void yawLockChanged()
bool supportsYawLock() const
Definition Gimbal.h:78
bool gimbalHaveControl() const
Definition Gimbal.h:50
bool retracted() const
Definition Gimbal.h:49
void setAbsoluteRoll(float absRoll)
Definition Gimbal.h:53
void gimbalOthersHaveControlChanged()
void setGimbalOthersHaveControl(bool set)
Definition Gimbal.h:74
void setDeltaYaw(float delta)
Definition Gimbal.h:57
float yawRate() const
Definition Gimbal.h:47
void setCapabilityFlags(uint32_t flags)
Definition Gimbal.cc:76
Fact * bodyYaw()
Definition Gimbal.h:38