QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
VehicleWindFactGroup.cc
Go to the documentation of this file.
2
3#include <QtMath>
4
5#include "MAVLinkLib.h"
6#include "Vehicle.h"
7
9 : FactGroup(1000, QStringLiteral(":/json/Vehicle/WindFact.json"), parent)
10{
11 _addFact(&_directionFact);
12 _addFact(&_speedFact);
13 _addFact(&_verticalSpeedFact);
14
15 _directionFact.setRawValue(qQNaN());
16 _speedFact.setRawValue(qQNaN());
17 _verticalSpeedFact.setRawValue(qQNaN());
18}
19
21{
22 Q_UNUSED(vehicle);
23
24 switch (message.msgid) {
25 case MAVLINK_MSG_ID_WIND_COV:
26 _handleWindCov(message);
27 break;
28 case MAVLINK_MSG_ID_HIGH_LATENCY:
29 _handleHighLatency(message);
30 break;
31 case MAVLINK_MSG_ID_HIGH_LATENCY2:
32 _handleHighLatency2(message);
33 break;
34 case MAVLINK_MSG_ID_WIND:
35 _handleWind(message);
36 break;
37 default:
38 break;
39 }
40}
41
42void VehicleWindFactGroup::_handleHighLatency(const mavlink_message_t &message)
43{
44 mavlink_high_latency_t highLatency{};
45 mavlink_msg_high_latency_decode(&message, &highLatency);
46
47 speed()->setRawValue(static_cast<double>(highLatency.airspeed) / 5.0);
48
50}
51
52void VehicleWindFactGroup::_handleHighLatency2(const mavlink_message_t &message)
53{
54 mavlink_high_latency2_t highLatency2{};
55 mavlink_msg_high_latency2_decode(&message, &highLatency2);
56
57 direction()->setRawValue(static_cast<double>(highLatency2.wind_heading) * 2.0);
58 speed()->setRawValue(static_cast<double>(highLatency2.windspeed) / 5.0);
59
61}
62
63void VehicleWindFactGroup::_handleWindCov(const mavlink_message_t &message)
64{
65 mavlink_wind_cov_t wind{};
66 mavlink_msg_wind_cov_decode(&message, &wind);
67
68 float windDirection = qRadiansToDegrees(qAtan2(wind.wind_y, wind.wind_x));
69 if (windDirection < 0) {
70 windDirection += 360;
71 }
72 direction()->setRawValue(windDirection);
73
74 const float windSpeed = qSqrt(qPow(wind.wind_x, 2) + qPow(wind.wind_y, 2));
75 speed()->setRawValue(windSpeed);
76
77 verticalSpeed()->setRawValue(wind.wind_z);
78
80}
81
82void VehicleWindFactGroup::_handleWind(const mavlink_message_t &message)
83{
84 mavlink_wind_t wind{};
85 mavlink_msg_wind_decode(&message, &wind);
86
87 // We don't want negative wind angles
88 float windDirection = wind.direction;
89 if (windDirection < 0) {
90 windDirection += 360;
91 }
92 direction()->setRawValue(windDirection);
93 speed()->setRawValue(wind.speed);
94 verticalSpeed()->setRawValue(wind.speed_z);
95
97}
struct __mavlink_message mavlink_message_t
struct __mavlink_high_latency2_t mavlink_high_latency2_t
Used to group Facts together into an object hierarachy.
Definition FactGroup.h:16
void _setTelemetryAvailable(bool telemetryAvailable)
Definition FactGroup.cc:175
void _addFact(Fact *fact, const QString &name)
Definition FactGroup.cc:116
void setRawValue(const QVariant &value)
Definition Fact.cc:135
VehicleWindFactGroup(QObject *parent=nullptr)
void handleMessage(Vehicle *vehicle, const mavlink_message_t &message) final
Allows a FactGroup to parse incoming messages and fill in values.