QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
VehicleWindFactGroup.cc
Go to the documentation of this file.
2#include "Vehicle.h"
3
4#include <QtMath>
5
7 : FactGroup(1000, QStringLiteral(":/json/Vehicle/WindFact.json"), parent)
8{
9 _addFact(&_directionFact);
10 _addFact(&_speedFact);
11 _addFact(&_verticalSpeedFact);
12
13 _directionFact.setRawValue(qQNaN());
14 _speedFact.setRawValue(qQNaN());
15 _verticalSpeedFact.setRawValue(qQNaN());
16}
17
19{
20 Q_UNUSED(vehicle);
21
22 switch (message.msgid) {
23 case MAVLINK_MSG_ID_WIND_COV:
24 _handleWindCov(message);
25 break;
26 case MAVLINK_MSG_ID_HIGH_LATENCY:
27 _handleHighLatency(message);
28 break;
29 case MAVLINK_MSG_ID_HIGH_LATENCY2:
30 _handleHighLatency2(message);
31 break;
32 case MAVLINK_MSG_ID_WIND:
33 _handleWind(message);
34 break;
35 default:
36 break;
37 }
38}
39
40void VehicleWindFactGroup::_handleHighLatency(const mavlink_message_t &message)
41{
42 mavlink_high_latency_t highLatency{};
43 mavlink_msg_high_latency_decode(&message, &highLatency);
44
45 speed()->setRawValue(static_cast<double>(highLatency.airspeed) / 5.0);
46
48}
49
50void VehicleWindFactGroup::_handleHighLatency2(const mavlink_message_t &message)
51{
52 mavlink_high_latency2_t highLatency2{};
53 mavlink_msg_high_latency2_decode(&message, &highLatency2);
54
55 direction()->setRawValue(static_cast<double>(highLatency2.wind_heading) * 2.0);
56 speed()->setRawValue(static_cast<double>(highLatency2.windspeed) / 5.0);
57
59}
60
61void VehicleWindFactGroup::_handleWindCov(const mavlink_message_t &message)
62{
63 mavlink_wind_cov_t wind{};
64 mavlink_msg_wind_cov_decode(&message, &wind);
65
66 float windDirection = qRadiansToDegrees(qAtan2(wind.wind_y, wind.wind_x));
67 if (windDirection < 0) {
68 windDirection += 360;
69 }
70 direction()->setRawValue(windDirection);
71
72 const float windSpeed = qSqrt(qPow(wind.wind_x, 2) + qPow(wind.wind_y, 2));
73 speed()->setRawValue(windSpeed);
74
75 verticalSpeed()->setRawValue(wind.wind_z);
76
78}
79
80void VehicleWindFactGroup::_handleWind(const mavlink_message_t &message)
81{
82 mavlink_wind_t wind{};
83 mavlink_msg_wind_decode(&message, &wind);
84
85 // We don't want negative wind angles
86 float windDirection = wind.direction;
87 if (windDirection < 0) {
88 windDirection += 360;
89 }
90 direction()->setRawValue(windDirection);
91 speed()->setRawValue(wind.speed);
92 verticalSpeed()->setRawValue(wind.speed_z);
93
95}
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:134
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.