@ -10,6 +10,7 @@
# include <QTime>
# include <QTime>
# include <QDateTime>
# include <QDateTime>
# include <QLocale>
# include <QLocale>
# include <QQuaternion>
# include "Vehicle.h"
# include "Vehicle.h"
# include "MAVLinkProtocol.h"
# include "MAVLinkProtocol.h"
@ -54,6 +55,9 @@ const char* Vehicle::_joystickEnabledSettingsKey = "JoystickEnabled";
const char * Vehicle : : _rollFactName = " roll " ;
const char * Vehicle : : _rollFactName = " roll " ;
const char * Vehicle : : _pitchFactName = " pitch " ;
const char * Vehicle : : _pitchFactName = " pitch " ;
const char * Vehicle : : _headingFactName = " heading " ;
const char * Vehicle : : _headingFactName = " heading " ;
const char * Vehicle : : _rollRateFactName = " rollRate " ;
const char * Vehicle : : _pitchRateFactName = " pitchRate " ;
const char * Vehicle : : _yawRateFactName = " yawRate " ;
const char * Vehicle : : _airSpeedFactName = " airSpeed " ;
const char * Vehicle : : _airSpeedFactName = " airSpeed " ;
const char * Vehicle : : _groundSpeedFactName = " groundSpeed " ;
const char * Vehicle : : _groundSpeedFactName = " groundSpeed " ;
const char * Vehicle : : _climbRateFactName = " climbRate " ;
const char * Vehicle : : _climbRateFactName = " climbRate " ;
@ -166,6 +170,9 @@ Vehicle::Vehicle(LinkInterface* link,
, _rollFact ( 0 , _rollFactName , FactMetaData : : valueTypeDouble )
, _rollFact ( 0 , _rollFactName , FactMetaData : : valueTypeDouble )
, _pitchFact ( 0 , _pitchFactName , FactMetaData : : valueTypeDouble )
, _pitchFact ( 0 , _pitchFactName , FactMetaData : : valueTypeDouble )
, _headingFact ( 0 , _headingFactName , FactMetaData : : valueTypeDouble )
, _headingFact ( 0 , _headingFactName , FactMetaData : : valueTypeDouble )
, _rollRateFact ( 0 , _rollRateFactName , FactMetaData : : valueTypeDouble )
, _pitchRateFact ( 0 , _pitchRateFactName , FactMetaData : : valueTypeDouble )
, _yawRateFact ( 0 , _yawRateFactName , FactMetaData : : valueTypeDouble )
, _groundSpeedFact ( 0 , _groundSpeedFactName , FactMetaData : : valueTypeDouble )
, _groundSpeedFact ( 0 , _groundSpeedFactName , FactMetaData : : valueTypeDouble )
, _airSpeedFact ( 0 , _airSpeedFactName , FactMetaData : : valueTypeDouble )
, _airSpeedFact ( 0 , _airSpeedFactName , FactMetaData : : valueTypeDouble )
, _climbRateFact ( 0 , _climbRateFactName , FactMetaData : : valueTypeDouble )
, _climbRateFact ( 0 , _climbRateFactName , FactMetaData : : valueTypeDouble )
@ -353,6 +360,9 @@ Vehicle::Vehicle(MAV_AUTOPILOT firmwareType,
, _rollFact ( 0 , _rollFactName , FactMetaData : : valueTypeDouble )
, _rollFact ( 0 , _rollFactName , FactMetaData : : valueTypeDouble )
, _pitchFact ( 0 , _pitchFactName , FactMetaData : : valueTypeDouble )
, _pitchFact ( 0 , _pitchFactName , FactMetaData : : valueTypeDouble )
, _headingFact ( 0 , _headingFactName , FactMetaData : : valueTypeDouble )
, _headingFact ( 0 , _headingFactName , FactMetaData : : valueTypeDouble )
, _rollRateFact ( 0 , _rollRateFactName , FactMetaData : : valueTypeDouble )
, _pitchRateFact ( 0 , _pitchRateFactName , FactMetaData : : valueTypeDouble )
, _yawRateFact ( 0 , _yawRateFactName , FactMetaData : : valueTypeDouble )
, _groundSpeedFact ( 0 , _groundSpeedFactName , FactMetaData : : valueTypeDouble )
, _groundSpeedFact ( 0 , _groundSpeedFactName , FactMetaData : : valueTypeDouble )
, _airSpeedFact ( 0 , _airSpeedFactName , FactMetaData : : valueTypeDouble )
, _airSpeedFact ( 0 , _airSpeedFactName , FactMetaData : : valueTypeDouble )
, _climbRateFact ( 0 , _climbRateFactName , FactMetaData : : valueTypeDouble )
, _climbRateFact ( 0 , _climbRateFactName , FactMetaData : : valueTypeDouble )
@ -413,6 +423,9 @@ void Vehicle::_commonInit(void)
_addFact ( & _rollFact , _rollFactName ) ;
_addFact ( & _rollFact , _rollFactName ) ;
_addFact ( & _pitchFact , _pitchFactName ) ;
_addFact ( & _pitchFact , _pitchFactName ) ;
_addFact ( & _headingFact , _headingFactName ) ;
_addFact ( & _headingFact , _headingFactName ) ;
_addFact ( & _rollRateFact , _rollRateFactName ) ;
_addFact ( & _pitchRateFact , _pitchRateFactName ) ;
_addFact ( & _yawRateFact , _yawRateFactName ) ;
_addFact ( & _groundSpeedFact , _groundSpeedFactName ) ;
_addFact ( & _groundSpeedFact , _groundSpeedFactName ) ;
_addFact ( & _airSpeedFact , _airSpeedFactName ) ;
_addFact ( & _airSpeedFact , _airSpeedFactName ) ;
_addFact ( & _climbRateFact , _climbRateFactName ) ;
_addFact ( & _climbRateFact , _climbRateFactName ) ;
@ -696,6 +709,12 @@ void Vehicle::_mavlinkMessageReceived(LinkInterface* link, mavlink_message_t mes
case MAVLINK_MSG_ID_HIGH_LATENCY2 :
case MAVLINK_MSG_ID_HIGH_LATENCY2 :
_handleHighLatency2 ( message ) ;
_handleHighLatency2 ( message ) ;
break ;
break ;
case MAVLINK_MSG_ID_ATTITUDE :
_handleAttitude ( message ) ;
break ;
case MAVLINK_MSG_ID_ATTITUDE_TARGET :
_handleAttitudeTarget ( message ) ;
break ;
case MAVLINK_MSG_ID_SERIAL_CONTROL :
case MAVLINK_MSG_ID_SERIAL_CONTROL :
{
{
@ -760,6 +779,35 @@ void Vehicle::_handleVfrHud(mavlink_message_t& message)
_climbRateFact . setRawValue ( qIsNaN ( vfrHud . climb ) ? 0 : vfrHud . climb ) ;
_climbRateFact . setRawValue ( qIsNaN ( vfrHud . climb ) ? 0 : vfrHud . climb ) ;
}
}
void Vehicle : : _handleAttitudeTarget ( mavlink_message_t & message )
{
mavlink_attitude_target_t attitudeTarget ;
mavlink_msg_attitude_target_decode ( & message , & attitudeTarget ) ;
float roll , pitch , yaw ;
mavlink_quaternion_to_euler ( attitudeTarget . q , & roll , & pitch , & yaw ) ;
_setpointFactGroup . roll ( ) - > setRawValue ( roll ) ;
_setpointFactGroup . pitch ( ) - > setRawValue ( pitch ) ;
_setpointFactGroup . yaw ( ) - > setRawValue ( yaw ) ;
_setpointFactGroup . rollRate ( ) - > setRawValue ( qRadiansToDegrees ( attitudeTarget . body_roll_rate ) ) ;
_setpointFactGroup . pitchRate ( ) - > setRawValue ( qRadiansToDegrees ( attitudeTarget . body_pitch_rate ) ) ;
_setpointFactGroup . yawRate ( ) - > setRawValue ( qRadiansToDegrees ( attitudeTarget . body_yaw_rate ) ) ;
}
void Vehicle : : _handleAttitude ( mavlink_message_t & message )
{
mavlink_attitude_t attitude ;
mavlink_msg_attitude_decode ( & message , & attitude ) ;
rollRate ( ) - > setRawValue ( qRadiansToDegrees ( attitude . rollspeed ) ) ;
pitchRate ( ) - > setRawValue ( qRadiansToDegrees ( attitude . pitchspeed ) ) ;
yawRate ( ) - > setRawValue ( qRadiansToDegrees ( attitude . yawspeed ) ) ;
}
void Vehicle : : _handleGpsRawInt ( mavlink_message_t & message )
void Vehicle : : _handleGpsRawInt ( mavlink_message_t & message )
{
{
mavlink_gps_raw_int_t gpsRawInt ;
mavlink_gps_raw_int_t gpsRawInt ;
@ -869,18 +917,6 @@ void Vehicle::_handleHighLatency2(mavlink_message_t& message)
{ HL_FAILURE_FLAG_3D_ACCEL , MAV_SYS_STATUS_SENSOR_3D_ACCEL } ,
{ HL_FAILURE_FLAG_3D_ACCEL , MAV_SYS_STATUS_SENSOR_3D_ACCEL } ,
{ HL_FAILURE_FLAG_3D_GYRO , MAV_SYS_STATUS_SENSOR_3D_GYRO } ,
{ HL_FAILURE_FLAG_3D_GYRO , MAV_SYS_STATUS_SENSOR_3D_GYRO } ,
{ HL_FAILURE_FLAG_3D_MAG , MAV_SYS_STATUS_SENSOR_3D_MAG } ,
{ HL_FAILURE_FLAG_3D_MAG , MAV_SYS_STATUS_SENSOR_3D_MAG } ,
#if 0
// FIXME: These don't currently map to existing sensor health bits. Support needs to be added to show them
// on health page of instrument panel as well.
{ HL_FAILURE_FLAG_TERRAIN = 64 , /* Terrain subsystem failure. | */
{ HL_FAILURE_FLAG_BATTERY = 128 , /* Battery failure/critical low battery. | */
{ HL_FAILURE_FLAG_RC_RECEIVER = 256 , /* RC receiver failure/no rc connection. | */
{ HL_FAILURE_FLAG_OFFBOARD_LINK = 512 , /* Offboard link failure. | */
{ HL_FAILURE_FLAG_ENGINE = 1024 , /* Engine failure. | */
{ HL_FAILURE_FLAG_GEOFENCE = 2048 , /* Geofence violation. | */
{ HL_FAILURE_FLAG_ESTIMATOR = 4096 , /* Estimator failure, for example measurement rejection or large variances. | */
{ HL_FAILURE_FLAG_MISSION = 8192 , /* Mission failure. | */
# endif
} ;
} ;
// Map from MAV_FAILURE bits to standard SYS_STATUS message handling
// Map from MAV_FAILURE bits to standard SYS_STATUS message handling
@ -3217,7 +3253,6 @@ VehicleVibrationFactGroup::VehicleVibrationFactGroup(QObject* parent)
_zAxisFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_zAxisFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
}
}
const char * VehicleTemperatureFactGroup : : _temperature1FactName = " temperature1 " ;
const char * VehicleTemperatureFactGroup : : _temperature1FactName = " temperature1 " ;
const char * VehicleTemperatureFactGroup : : _temperature2FactName = " temperature2 " ;
const char * VehicleTemperatureFactGroup : : _temperature2FactName = " temperature2 " ;
const char * VehicleTemperatureFactGroup : : _temperature3FactName = " temperature3 " ;
const char * VehicleTemperatureFactGroup : : _temperature3FactName = " temperature3 " ;
@ -3261,3 +3296,35 @@ void VehicleClockFactGroup::_updateAllValues(void)
FactGroup : : _updateAllValues ( ) ;
FactGroup : : _updateAllValues ( ) ;
}
}
const char * VehicleSetpointFactGroup : : _rollFactName = " roll " ;
const char * VehicleSetpointFactGroup : : _pitchFactName = " pitch " ;
const char * VehicleSetpointFactGroup : : _yawFactName = " yaw " ;
const char * VehicleSetpointFactGroup : : _rollRateFactName = " rollRate " ;
const char * VehicleSetpointFactGroup : : _pitchRateFactName = " pitchRate " ;
const char * VehicleSetpointFactGroup : : _yawRateFactName = " yawRate " ;
VehicleSetpointFactGroup : : VehicleSetpointFactGroup ( QObject * parent )
: FactGroup ( 1000 , " :/json/Vehicle/SetpointFact.json " , parent )
, _rollFact ( 0 , _rollFactName , FactMetaData : : valueTypeDouble )
, _pitchFact ( 0 , _pitchFactName , FactMetaData : : valueTypeDouble )
, _yawFact ( 0 , _yawFactName , FactMetaData : : valueTypeDouble )
, _rollRateFact ( 0 , _rollRateFactName , FactMetaData : : valueTypeDouble )
, _pitchRateFact ( 0 , _pitchRateFactName , FactMetaData : : valueTypeDouble )
, _yawRateFact ( 0 , _yawRateFactName , FactMetaData : : valueTypeDouble )
{
_addFact ( & _rollFact , _rollFactName ) ;
_addFact ( & _pitchFact , _pitchFactName ) ;
_addFact ( & _yawFact , _yawFactName ) ;
_addFact ( & _rollRateFact , _rollRateFactName ) ;
_addFact ( & _pitchRateFact , _pitchRateFactName ) ;
_addFact ( & _yawRateFact , _yawRateFactName ) ;
// Start out as not available "--.--"
_rollFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_pitchFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_yawFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_rollRateFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_pitchRateFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
_yawRateFact . setRawValue ( std : : numeric_limits < float > : : quiet_NaN ( ) ) ;
}