diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc index c85bb70db9289980e4e28409cda380907bc1128d..7b19ebf5c07fef25514a649149032b44b34cbbc8 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.cc @@ -36,23 +36,24 @@ PX4FirmwarePluginInstanceData::PX4FirmwarePluginInstanceData(QObject* parent) } PX4FirmwarePlugin::PX4FirmwarePlugin(void) - : _manualFlightMode(tr("Manual")) - , _acroFlightMode(tr("Acro")) - , _stabilizedFlightMode(tr("Stabilized")) - , _rattitudeFlightMode(tr("Rattitude")) - , _altCtlFlightMode(tr("Altitude")) - , _posCtlFlightMode(tr("Position")) - , _offboardFlightMode(tr("Offboard")) - , _readyFlightMode(tr("Ready")) - , _takeoffFlightMode(tr("Takeoff")) - , _holdFlightMode(tr("Hold")) - , _missionFlightMode(tr("Mission")) - , _rtlFlightMode(tr("Return")) - , _landingFlightMode(tr("Land")) - , _preclandFlightMode(tr("Precision Land")) - , _rtgsFlightMode(tr("Return to Groundstation")) - , _followMeFlightMode(tr("Follow Me")) - , _simpleFlightMode(tr("Simple")) + : _manualFlightMode (tr("Manual")) + , _acroFlightMode (tr("Acro")) + , _stabilizedFlightMode (tr("Stabilized")) + , _rattitudeFlightMode (tr("Rattitude")) + , _altCtlFlightMode (tr("Altitude")) + , _posCtlFlightMode (tr("Position")) + , _offboardFlightMode (tr("Offboard")) + , _readyFlightMode (tr("Ready")) + , _takeoffFlightMode (tr("Takeoff")) + , _holdFlightMode (tr("Hold")) + , _missionFlightMode (tr("Mission")) + , _rtlFlightMode (tr("Return")) + , _landingFlightMode (tr("Land")) + , _preclandFlightMode (tr("Precision Land")) + , _rtgsFlightMode (tr("Return to Groundstation")) + , _followMeFlightMode (tr("Follow Me")) + , _simpleFlightMode (tr("Simple")) + , _orbitFlightMode (tr("Orbit")) { qmlRegisterType ("QGroundControl.Controllers", 1, 0, "PX4AdvancedFlightModesController"); qmlRegisterType ("QGroundControl.Controllers", 1, 0, "PX4SimpleFlightModesController"); @@ -76,15 +77,14 @@ PX4FirmwarePlugin::PX4FirmwarePlugin(void) { PX4_CUSTOM_MAIN_MODE_ACRO, 0, true, true, true }, { PX4_CUSTOM_MAIN_MODE_RATTITUDE, 0, true, true, true }, { PX4_CUSTOM_MAIN_MODE_ALTCTL, 0, true, true, true }, - { PX4_CUSTOM_MAIN_MODE_POSCTL, 0, true, true, true }, - // simple can't be set by the user right now - { PX4_CUSTOM_MAIN_MODE_SIMPLE, 0, false, false, true }, + { PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, true, false, true }, + { PX4_CUSTOM_MAIN_MODE_SIMPLE, 0, false, false, true }, + { PX4_CUSTOM_MAIN_MODE_POSCTL, PX4_CUSTOM_SUB_MODE_POSCTL_POSCTL, true, true, true }, + { PX4_CUSTOM_MAIN_MODE_POSCTL, PX4_CUSTOM_SUB_MODE_POSCTL_ORBIT, false, false, false }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LOITER, true, true, true }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_MISSION, true, true, true }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_RTL, true, true, true }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_FOLLOW_TARGET, true, false, true }, - { PX4_CUSTOM_MAIN_MODE_OFFBOARD, 0, true, false, true }, - // modes that can't be directly set by the user { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_LAND, false, true, true }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_PRECLAND, false, false, true }, { PX4_CUSTOM_MAIN_MODE_AUTO, PX4_CUSTOM_SUB_MODE_AUTO_READY, false, true, true }, @@ -99,13 +99,14 @@ PX4FirmwarePlugin::PX4FirmwarePlugin(void) &_acroFlightMode, &_rattitudeFlightMode, &_altCtlFlightMode, - &_posCtlFlightMode, + &_offboardFlightMode, &_simpleFlightMode, + &_posCtlFlightMode, + &_orbitFlightMode, &_holdFlightMode, &_missionFlightMode, &_rtlFlightMode, &_followMeFlightMode, - &_offboardFlightMode, &_landingFlightMode, &_preclandFlightMode, &_readyFlightMode, diff --git a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h index 24628433a00a866efe72e822aee44ecfd6f0556b..fa2a4e8796a7fb35687396ec533aa2e75bbe2e2a 100644 --- a/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h +++ b/src/FirmwarePlugin/PX4/PX4FirmwarePlugin.h @@ -105,6 +105,7 @@ protected: QString _rtgsFlightMode; QString _followMeFlightMode; QString _simpleFlightMode; + QString _orbitFlightMode; private slots: void _mavCommandResult(int vehicleId, int component, int command, int result, bool noReponseFromVehicle); diff --git a/src/FirmwarePlugin/PX4/px4_custom_mode.h b/src/FirmwarePlugin/PX4/px4_custom_mode.h index f6b3c905502748b30e1d73ae4d337981308f1d1f..3e65a862af5da317fd81e5d1676be5fe89f8bc46 100644 --- a/src/FirmwarePlugin/PX4/px4_custom_mode.h +++ b/src/FirmwarePlugin/PX4/px4_custom_mode.h @@ -34,7 +34,7 @@ /** * @file px4_custom_mode.h * PX4 custom flight modes - * Copied from PX4 2018-04-07 - https://github.com/PX4/Firmware/blob/master/src/modules/commander/px4_custom_mode.h#L45 + * */ #ifndef PX4_CUSTOM_MODE_H_ @@ -66,18 +66,23 @@ enum PX4_CUSTOM_SUB_MODE_AUTO { PX4_CUSTOM_SUB_MODE_AUTO_PRECLAND }; +enum PX4_CUSTOM_SUB_MODE_POSCTL { + PX4_CUSTOM_SUB_MODE_POSCTL_POSCTL = 0, + PX4_CUSTOM_SUB_MODE_POSCTL_ORBIT +}; + union px4_custom_mode { struct { uint16_t reserved; uint8_t main_mode; uint8_t sub_mode; }; - struct { - uint16_t reserved_hl; - uint16_t custom_mode_hl; - }; - uint32_t data; + uint32_t data; float data_float; + struct { + uint16_t reserved_hl; + uint16_t custom_mode_hl; + }; }; #endif /* PX4_CUSTOM_MODE_H_ */ diff --git a/src/FlightDisplay/FlightDisplayViewMap.qml b/src/FlightDisplay/FlightDisplayViewMap.qml index bef117d3ac09dd7a74e9d9022c7627e150c4ab9f..788c2f21273ee2e2606d179ebec1434e419fcc8f 100644 --- a/src/FlightDisplay/FlightDisplayViewMap.qml +++ b/src/FlightDisplay/FlightDisplayViewMap.qml @@ -318,6 +318,8 @@ FlightMap { } } + // Orbit visuals + QGCMapCircleVisuals { id: orbitMapCircle mapControl: parent @@ -354,13 +356,29 @@ FlightMap { } } - // Used to show orbit status telemetry from the vehicle + // Orbit telemetry visuals + QGCMapCircleVisuals { + id: orbitTelemetryCircle mapControl: parent mapCircle: _activeVehicle ? _activeVehicle.orbitMapCircle : null visible: _activeVehicle ? _activeVehicle.orbitActive : false } + MapQuickItem { + id: orbitCenterIndicator + anchorPoint.x: sourceItem.anchorPointX + anchorPoint.y: sourceItem.anchorPointY + coordinate: _activeVehicle ? _activeVehicle.orbitMapCircle.center : undefined + visible: orbitTelemetryCircle.visible + + sourceItem: MissionItemIndexLabel { + checked: true + index: -1 + label: qsTr("Orbit", "Orbit waypoint") + } + } + // Handle guided mode clicks MouseArea { anchors.fill: parent