From 0641f7f27dde8a2ab54db26f4cf38075e193a36d Mon Sep 17 00:00:00 2001 From: Don Gagne Date: Mon, 5 Oct 2015 09:12:16 -0700 Subject: [PATCH] Removing unused code --- QGCApplication.pro | 9 - src/uas/UAS.cc | 893 +---------------------------------------- src/uas/UAS.h | 287 +------------ src/uas/UASInterface.h | 184 +-------- 4 files changed, 11 insertions(+), 1362 deletions(-) diff --git a/QGCApplication.pro b/QGCApplication.pro index fb0c0999f..7d91f27b9 100644 --- a/QGCApplication.pro +++ b/QGCApplication.pro @@ -201,11 +201,8 @@ FORMS += \ src/ui/uas/UASMessageView.ui \ src/ui/uas/UASQuickView.ui \ src/ui/uas/UASQuickViewItemSelect.ui \ - src/ui/UASControl.ui \ src/ui/UASInfo.ui \ - src/ui/UASList.ui \ src/ui/UASRawStatusView.ui \ - src/ui/UASView.ui \ src/ui/WaypointEditableView.ui \ src/ui/WaypointList.ui \ src/ui/WaypointViewOnlyView.ui \ @@ -322,16 +319,13 @@ HEADERS += \ src/ui/SettingsDialog.h \ src/ui/toolbar/MainToolBar.h \ src/ui/uas/QGCUnconnectedInfoWidget.h \ - src/ui/uas/UASControlWidget.h \ src/ui/uas/UASInfoWidget.h \ - src/ui/uas/UASListWidget.h \ src/ui/uas/UASMessageView.h \ src/ui/uas/UASQuickView.h \ src/ui/uas/UASQuickViewGaugeItem.h \ src/ui/uas/UASQuickViewItem.h \ src/ui/uas/UASQuickViewItemSelect.h \ src/ui/uas/UASQuickViewTextItem.h \ - src/ui/uas/UASView.h \ src/ui/UASRawStatusView.h \ src/ui/WaypointEditableView.h \ src/ui/WaypointList.h \ @@ -452,16 +446,13 @@ SOURCES += \ src/ui/SettingsDialog.cc \ src/ui/toolbar/MainToolBar.cc \ src/ui/uas/QGCUnconnectedInfoWidget.cc \ - src/ui/uas/UASControlWidget.cc \ src/ui/uas/UASInfoWidget.cc \ - src/ui/uas/UASListWidget.cc \ src/ui/uas/UASMessageView.cc \ src/ui/uas/UASQuickView.cc \ src/ui/uas/UASQuickViewGaugeItem.cc \ src/ui/uas/UASQuickViewItem.cc \ src/ui/uas/UASQuickViewItemSelect.cc \ src/ui/uas/UASQuickViewTextItem.cc \ - src/ui/uas/UASView.cc \ src/ui/UASRawStatusView.cpp \ src/ui/WaypointEditableView.cc \ src/ui/WaypointList.cc \ diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 1930d4a97..1cfa5b87f 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -63,20 +63,9 @@ UAS::UAS(MAVLinkProtocol* protocol, Vehicle* vehicle) : UASInterface(), type(MAV_TYPE_GENERIC), airframe(QGC_AIRFRAME_GENERIC), autopilot(vehicle->firmwareType()), - systemIsArmed(false), base_mode(0), custom_mode(0), - // custom_mode not initialized status(-1), - // shortModeText not initialized - // shortStateText not initialized - - // actuatorValues not initialized - // actuatorNames not initialized - // motorValues not initialized - // motorNames mnot initialized - thrustSum(0), - thrustMax(10), startVoltage(-1.0f), tickVoltage(10.5f), @@ -87,7 +76,6 @@ UAS::UAS(MAVLinkProtocol* protocol, Vehicle* vehicle) : UASInterface(), lpVoltage(12.0f), currentCurrent(0.4f), chargeLevel(-1), - timeRemaining(0), lowBattAlarm(false), startTime(QGC::groundTimeMilliseconds()), @@ -127,9 +115,6 @@ UAS::UAS(MAVLinkProtocol* protocol, Vehicle* vehicle) : UASInterface(), speedY(0.0), speedZ(0.0), - nedPosGlobalOffset(0,0,0), - nedAttGlobalOffset(0,0,0), - airSpeed(std::numeric_limits::quiet_NaN()), groundSpeed(std::numeric_limits::quiet_NaN()), fileManager(this, vehicle), @@ -194,73 +179,11 @@ UAS::UAS(MAVLinkProtocol* protocol, Vehicle* vehicle) : UASInterface(), connect(mavlink, SIGNAL(messageReceived(LinkInterface*,mavlink_message_t)), &fileManager, SLOT(receiveMessage(LinkInterface*,mavlink_message_t))); - // Store a list of available actions for this UAS. - // Basically everything exposed as a SLOT with no return value or arguments. - - QAction* newAction = new QAction(tr("Arm"), this); - newAction->setToolTip(tr("Enable the UAS so that all actuators are online")); - connect(newAction, SIGNAL(triggered()), this, SLOT(armSystem())); - actions.append(newAction); - - newAction = new QAction(tr("Disarm"), this); - newAction->setToolTip(tr("Disable the UAS so that all actuators are offline")); - connect(newAction, SIGNAL(triggered()), this, SLOT(disarmSystem())); - actions.append(newAction); - - newAction = new QAction(tr("Toggle armed"), this); - newAction->setToolTip(tr("Toggle between armed and disarmed")); - connect(newAction, SIGNAL(triggered()), this, SLOT(toggleAutonomy())); - actions.append(newAction); - - newAction = new QAction(tr("Go home"), this); - newAction->setToolTip(tr("Command the UAS to return to its home position")); - connect(newAction, SIGNAL(triggered()), this, SLOT(home())); - actions.append(newAction); - - newAction = new QAction(tr("Land"), this); - newAction->setToolTip(tr("Command the UAS to land")); - connect(newAction, SIGNAL(triggered()), this, SLOT(land())); - actions.append(newAction); - - newAction = new QAction(tr("Launch"), this); - newAction->setToolTip(tr("Command the UAS to launch itself and begin its mission")); - connect(newAction, SIGNAL(triggered()), this, SLOT(launch())); - actions.append(newAction); - - newAction = new QAction(tr("Resume"), this); - newAction->setToolTip(tr("Command the UAS to continue its mission")); - connect(newAction, SIGNAL(triggered()), this, SLOT(go())); - actions.append(newAction); - - newAction = new QAction(tr("Stop"), this); - newAction->setToolTip(tr("Command the UAS to halt and hold position")); - connect(newAction, SIGNAL(triggered()), this, SLOT(halt())); - actions.append(newAction); - - newAction = new QAction(tr("Go autonomous"), this); - newAction->setToolTip(tr("Set the UAS into an autonomous control mode")); - connect(newAction, SIGNAL(triggered()), this, SLOT(goAutonomous())); - actions.append(newAction); - - newAction = new QAction(tr("Go manual"), this); - newAction->setToolTip(tr("Set the UAS into a manual control mode")); - connect(newAction, SIGNAL(triggered()), this, SLOT(goManual())); - actions.append(newAction); - - newAction = new QAction(tr("Toggle autonomy"), this); - newAction->setToolTip(tr("Toggle between manual and full-autonomy")); - connect(newAction, SIGNAL(triggered()), this, SLOT(toggleAutonomy())); - actions.append(newAction); - color = UASInterface::getNextColor(); connect(&statusTimeout, SIGNAL(timeout()), this, SLOT(updateState())); connect(this, SIGNAL(systemSpecsChanged(int)), this, SLOT(writeSettings())); statusTimeout.start(500); readSettings(); - - // Initial signals - emit disarmed(); - emit armingChanged(false); } /** @@ -290,7 +213,6 @@ void UAS::writeSettings() settings.beginGroup(QString("MAV%1").arg(uasId)); settings.setValue("NAME", this->name); settings.setValue("AIRFRAME", this->airframe); - settings.setValue("BATTERY_SPECS", getBatterySpecs()); settings.endGroup(); } @@ -304,25 +226,9 @@ void UAS::readSettings() settings.beginGroup(QString("MAV%1").arg(uasId)); this->name = settings.value("NAME", this->name).toString(); this->airframe = settings.value("AIRFRAME", this->airframe).toInt(); - if (settings.contains("BATTERY_SPECS")) - { - setBatterySpecs(settings.value("BATTERY_SPECS").toString()); - } settings.endGroup(); } -/** -* Deletes the settings origianally read into the UAS by readSettings. -* This is in case one does not want the old values but would rather -* start with the values assigned by the constructor. -*/ -void UAS::deleteSettings() -{ - this->name = ""; - this->airframe = QGC_AIRFRAME_GENERIC; - warnLevelPercent = UAS_DEFAULT_BATTERY_WARNLEVEL; -} - /** * @ return the id of the uas */ @@ -331,15 +237,6 @@ int UAS::getUASID() const return uasId; } -void UAS::triggerAction(int action) -{ - if (action >= 0 && action < actions.size()) - { - qDebug() << "Triggering action: '" << actions[action]->text() << "'"; - actions[action]->trigger(); - } -} - /** * Update the heartbeat. */ @@ -411,7 +308,6 @@ void UAS::receiveMessage(mavlink_message_t message) } components.insert(message.compid, componentName); - emit componentCreated(uasId, message.compid, componentName); } // qDebug() << "UAS RECEIVED from" << message.sysid << "component" << message.compid << "msg id" << message.msgid << "seq no" << message.seq; @@ -485,22 +381,6 @@ void UAS::receiveMessage(mavlink_message_t message) setSystemType(state.type); } - bool currentlyArmed = state.base_mode & MAV_MODE_FLAG_DECODE_POSITION_SAFETY; - - if (systemIsArmed != currentlyArmed) - { - systemIsArmed = currentlyArmed; - emit armingChanged(systemIsArmed); - if (systemIsArmed) - { - emit armed(); - } - else - { - emit disarmed(); - } - } - QString audiostring = QString("System %1").arg(uasId); QString stateAudio = ""; QString modeAudio = ""; @@ -518,8 +398,6 @@ void UAS::receiveMessage(mavlink_message_t message) emit statusChanged(this, uasState, stateDescription); emit statusChanged(this->status); - shortStateText = uasState; - // Adjust for better audio if (uasState == QString("STANDBY")) uasState = QString("standing by"); if (uasState == QString("EMERGENCY")) uasState = QString("emergency condition"); @@ -534,9 +412,6 @@ void UAS::receiveMessage(mavlink_message_t message) modechanged = true; this->base_mode = state.base_mode; this->custom_mode = state.custom_mode; - shortModeText = FirmwarePluginManager::instance()->firmwarePluginForAutopilot((MAV_AUTOPILOT)autopilot)->flightMode(base_mode, custom_mode); - emit modeChanged(this->getUASID(), shortModeText, ""); - modeAudio = " is now in " + audiomodeText + "flight mode"; } @@ -631,12 +506,10 @@ void UAS::receiveMessage(mavlink_message_t message) } if (startVoltage == -1.0f && currentVoltage > 0.1f) startVoltage = currentVoltage; - timeRemaining = calculateTimeRemaining(); chargeLevel = state.battery_remaining; - emit batteryChanged(this, lpVoltage, currentCurrent, getChargeLevel(), timeRemaining); + emit batteryChanged(this, lpVoltage, currentCurrent, getChargeLevel(), 0); emit valueChanged(uasId, name.arg("battery_remaining"), "%", getChargeLevel(), time); - // emit voltageChanged(message.sysid, currentVoltage); emit valueChanged(uasId, name.arg("battery_voltage"), "V", currentVoltage, time); // And if the battery current draw is measured, log that also. @@ -758,18 +631,6 @@ void UAS::receiveMessage(mavlink_message_t message) } } break; - case MAVLINK_MSG_ID_LOCAL_POSITION_NED_SYSTEM_GLOBAL_OFFSET: - { - mavlink_local_position_ned_system_global_offset_t offset; - mavlink_msg_local_position_ned_system_global_offset_decode(&message, &offset); - nedPosGlobalOffset.setX(offset.x); - nedPosGlobalOffset.setY(offset.y); - nedPosGlobalOffset.setZ(offset.z); - nedAttGlobalOffset.setX(offset.roll); - nedAttGlobalOffset.setY(offset.pitch); - nedAttGlobalOffset.setZ(offset.yaw); - } - break; case MAVLINK_MSG_ID_HIL_CONTROLS: { mavlink_hil_controls_t hil; @@ -878,7 +739,6 @@ void UAS::receiveMessage(mavlink_message_t message) quint64 time = getUnixTime(pos.time_usec); - emit gpsLocalizationChanged(this, pos.fix_type); // TODO: track localization state not only for gps but also for other loc. sources int loc_type = pos.fix_type; if (loc_type == 1) @@ -1271,22 +1131,6 @@ void UAS::receiveMessage(mavlink_message_t message) } } break; -#if 0 - case MAVLINK_MSG_ID_SERVO_OUTPUT_RAW: - { - mavlink_servo_output_raw_t raw; - mavlink_msg_servo_output_raw_decode(&message, &raw); - - if (hilEnabled && raw.port == 0) - { - emit hilActuatorsChanged(static_cast(getUnixTimeFromMs(raw.time_usec)), static_cast(raw.servo1_raw), - static_cast(raw.servo2_raw), static_cast(raw.servo3_raw), - static_cast(raw.servo4_raw), static_cast(raw.servo5_raw), static_cast(raw.servo6_raw), - static_cast(raw.servo7_raw), static_cast(raw.servo8_raw)); - } - } - break; -#endif case MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE: { @@ -1371,8 +1215,6 @@ void UAS::receiveMessage(mavlink_message_t message) if (!unknownPackets.contains(message.msgid)) { unknownPackets.append(message.msgid); - - emit unknownPacketReceived(uasId, message.compid, message.msgid); qDebug() << "Unknown message from system:" << uasId << "message:" << message.msgid; } } @@ -1421,57 +1263,6 @@ void UAS::setHomePosition(double lat, double lon, double alt) } } -/** -* Set the origin to the current GPS location. -**/ -void UAS::setLocalOriginAtCurrentGPSPosition() -{ - if (!_vehicle) { - return; - } - - QMessageBox::StandardButton button = QGCMessageBox::question(tr("Set the home position at the current GPS position?"), - tr("Do you want to set a new origin? Waypoints defined in the local frame will be shifted in their physical location"), - QMessageBox::Yes | QMessageBox::Cancel, - QMessageBox::Cancel); - if (button == QMessageBox::Yes) - { - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, this->getUASID(), 0, MAV_CMD_DO_SET_HOME, 1, 1, 0, 0, 0, 0, 0, 0); - // Send message twice to increase chance that it reaches its goal - _vehicle->sendMessage(msg); - } -} - -/** -* Set a local position setpoint. -* @param x postion -* @param y position -* @param z position -*/ -void UAS::setLocalPositionSetpoint(float x, float y, float z, float yaw) -{ - Q_UNUSED(x); - Q_UNUSED(y); - Q_UNUSED(z); - Q_UNUSED(yaw); -} - -/** -* Set a offset of the local position. -* @param x position -* @param y position -* @param z position -* @param yaw -*/ -void UAS::setLocalPositionOffset(float x, float y, float z, float yaw) -{ - Q_UNUSED(x); - Q_UNUSED(y); - Q_UNUSED(z); - Q_UNUSED(yaw); -} - void UAS::startCalibration(UASInterface::StartCalibrationType calType) { if (!_vehicle) { @@ -1613,28 +1404,6 @@ void UAS::stopBusConfig(void) _vehicle->sendMessage(msg); } -void UAS::startDataRecording() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, 0, MAV_CMD_DO_CONTROL_VIDEO, 1, -1, -1, -1, 2, 0, 0, 0); - _vehicle->sendMessage(msg); -} - -void UAS::stopDataRecording() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, 0, MAV_CMD_DO_CONTROL_VIDEO, 1, -1, -1, -1, 0, 0, 0, 0); - _vehicle->sendMessage(msg); -} - /** * Check if time is smaller than 40 years, assuming no system without Unix * timestamp runs longer than 40 years continuously without reboot. In worst case @@ -1763,58 +1532,6 @@ quint64 UAS::getUnixTime(quint64 time) return ret; } -/** -* @param newBaseMode that UAS is to be set to. -* @param newCustomMode that UAS is to be set to. -*/ -void UAS::setMode(uint8_t newBaseMode, uint32_t newCustomMode) -{ - if (receivedMode) - { - //this->mode = mode; //no call assignament, update receive message from UAS - - // Strip armed / disarmed call for safety reasons, this is not relevant for setting the mode - newBaseMode &= ~MAV_MODE_FLAG_SAFETY_ARMED; - // Now set current state (request no change) - newBaseMode |= this->base_mode & MAV_MODE_FLAG_SAFETY_ARMED; - -// // Strip HIL part, replace it with current system state -// newBaseMode &= (~MAV_MODE_FLAG_HIL_ENABLED); -// // Now set current state (request no change) -// newBaseMode |= this->base_mode & MAV_MODE_FLAG_HIL_ENABLED; - - setModeArm(newBaseMode, newCustomMode); - } - else - { - qDebug() << "WARNING: setMode called before base_mode bitmask was received from UAS, new mode was not sent to system"; - } -} - -/** -* @param newBaseMode that UAS is to be set to. -* @param newCustomMode that UAS is to be set to. -*/ -void UAS::setModeArm(uint8_t newBaseMode, uint32_t newCustomMode) -{ - if (!_vehicle) { - return; - } - - if (receivedMode) - { - mavlink_message_t msg; - mavlink_msg_set_mode_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, (uint8_t)uasId, newBaseMode, newCustomMode); - qDebug() << "mavlink_msg_set_mode_pack 1"; - _vehicle->sendMessage(msg); - qDebug() << "SENDING REQUEST TO SET MODE TO SYSTEM" << uasId << ", MODE " << newBaseMode << " " << newCustomMode; - } - else - { - qDebug() << "WARNING: setModeArm called before base_mode bitmask was received from UAS, new mode was not sent to system"; - } -} - /** * @param value battery voltage */ @@ -1992,292 +1709,6 @@ bool UAS::isFixedWing() } } -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableAllDataTransmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - // 0 is a magic ID and will enable/disable the standard message set except for heartbeat - stream.req_stream_id = MAV_DATA_STREAM_ALL; - // Select the update rate in Hz the message should be send - // All messages will be send with their default rate - // TODO: use 0 to turn off and get rid of enable/disable? will require - // a different magic flag for turning on defaults, possibly something really high like 1111 ? - stream.req_message_rate = 0; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableRawSensorDataTransmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_RAW_SENSORS; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableExtendedSystemStatusTransmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_EXTENDED_STATUS; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableRCChannelDataTransmission(int rate) -{ - if (!_vehicle) { - return; - } - -#if defined(MAVLINK_ENABLED_UALBERTA_MESSAGES) - mavlink_message_t msg; - mavlink_msg_request_rc_channels_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, enabled); - _vehicle->sendMessage(msg); -#else - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_RC_CHANNELS; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -#endif -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableRawControllerDataTransmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_RAW_CONTROLLER; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -} - -//void UAS::enableRawSensorFusionTransmission(int rate) -//{ -// // Buffers to write data to -// mavlink_message_t msg; -// mavlink_request_data_stream_t stream; -// // Select the message to request from now on -// stream.req_stream_id = MAV_DATA_STREAM_RAW_SENSOR_FUSION; -// // Select the update rate in Hz the message should be send -// stream.req_message_rate = rate; -// // Start / stop the message -// stream.start_stop = (rate) ? 1 : 0; -// // The system which should take this command -// stream.target_system = uasId; -// // The component / subsystem which should take this command -// stream.target_component = 0; -// // Encode and send the message -// mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); -// // Send message twice to increase chance of reception -// _vehicle->sendMessage(msg); -// _vehicle->sendMessage(msg); -//} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enablePositionTransmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_POSITION; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableExtra1Transmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_EXTRA1; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableExtra2Transmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_EXTRA2; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); - _vehicle->sendMessage(msg); -} - -/** -* @param rate The update rate in Hz the message should be sent -*/ -void UAS::enableExtra3Transmission(int rate) -{ - if (!_vehicle) { - return; - } - - // Buffers to write data to - mavlink_message_t msg; - mavlink_request_data_stream_t stream; - // Select the message to request from now on - stream.req_stream_id = MAV_DATA_STREAM_EXTRA3; - // Select the update rate in Hz the message should be send - stream.req_message_rate = rate; - // Start / stop the message - stream.start_stop = (rate) ? 1 : 0; - // The system which should take this command - stream.target_system = uasId; - // The component / subsystem which should take this command - stream.target_component = 0; - // Encode and send the message - mavlink_msg_request_data_stream_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &stream); - // Send message twice to increase chance of reception - _vehicle->sendMessage(msg); - _vehicle->sendMessage(msg); -} - //TODO update this to use the parameter manager / param data model instead void UAS::processParamValueMsg(mavlink_message_t& msg, const QString& paramName, const mavlink_param_value_t& rawValue, mavlink_param_union_t& paramUnion) { @@ -2355,53 +1786,6 @@ void UAS::setSystemType(int systemType) } } -void UAS::setUASName(const QString& name) -{ - if (name != "") - { - this->name = name; - writeSettings(); - emit nameChanged(name); - emit systemSpecsChanged(uasId); - } -} - -void UAS::executeCommand(MAV_CMD command) -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_command_long_t cmd; - cmd.command = (uint16_t)command; - cmd.confirmation = 0; - cmd.param1 = 0.0f; - cmd.param2 = 0.0f; - cmd.param3 = 0.0f; - cmd.param4 = 0.0f; - cmd.param5 = 0.0f; - cmd.param6 = 0.0f; - cmd.param7 = 0.0f; - cmd.target_system = uasId; - cmd.target_component = 0; - mavlink_msg_command_long_encode(mavlink->getSystemId(), mavlink->getComponentId(), &msg, &cmd); - _vehicle->sendMessage(msg); -} -void UAS::executeCommandAck(int num, bool success) -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_command_ack_t ack; - ack.command = num; - ack.result = (success ? 1 : 0); - mavlink_msg_command_ack_encode(mavlink->getSystemId(),mavlink->getComponentId(),&msg,&ack); - _vehicle->sendMessage(msg); -} - void UAS::executeCommand(MAV_CMD command, int confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7, int component) { if (!_vehicle) { @@ -2425,72 +1809,6 @@ void UAS::executeCommand(MAV_CMD command, int confirmation, float param1, float _vehicle->sendMessage(msg); } -/** - * Launches the system - * - */ -void UAS::launch() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, this->getUASID(), 0, MAV_CMD_NAV_TAKEOFF, 1, 0, 0, 0, 0, 0, 0, 0); - _vehicle->sendMessage(msg); -} - -/** - * @warning Depending on the UAS, this might make the rotors of a helicopter spinning - * - */ -void UAS::armSystem() -{ - // We specifically do not use setModeArm to change arming state. The APM flight stack does not support - // arm/disarm through the SET_MODE mavlink message. Instead we use COMMAND_LONG:MAV_CMD_COMPONENT_ARM_DISARM - // which works on both PX4 and APM flight stack. - executeCommand(MAV_CMD_COMPONENT_ARM_DISARM, 0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0); -} - -/** - * @warning Depending on the UAS, this might completely stop all motors. - * - */ -void UAS::disarmSystem() -{ - // We specifically do not use setModeArm to change arming state. The APM flight stack does not support - // arm/disarm through the SET_MODE mavlink message. Instead we use COMMAND_LONG:MAV_CMD_COMPONENT_ARM_DISARM - // which works on both PX4 and APM flight stack. - executeCommand(MAV_CMD_COMPONENT_ARM_DISARM, 0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0); -} - -void UAS::toggleArmedState() -{ - if (isArmed()) { - disarmSystem(); - } else { - armSystem(); - } -} - -void UAS::goAutonomous() -{ - setMode((base_mode & ~(MAV_MODE_FLAG_MANUAL_INPUT_ENABLED)) | (MAV_MODE_FLAG_AUTO_ENABLED | MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED), 0); - qDebug() << __FILE__ << __LINE__ << "Going autonomous"; -} - -void UAS::goManual() -{ - setMode((base_mode & ~(MAV_MODE_FLAG_AUTO_ENABLED | MAV_MODE_FLAG_STABILIZE_ENABLED | MAV_MODE_FLAG_GUIDED_ENABLED)) | MAV_MODE_FLAG_MANUAL_INPUT_ENABLED, 0); - qDebug() << __FILE__ << __LINE__ << "Going manual"; -} - -void UAS::toggleAutonomy() -{ - setMode(base_mode ^ MAV_MODE_FLAG_AUTO_ENABLED ^ MAV_MODE_FLAG_MANUAL_INPUT_ENABLED ^ MAV_MODE_FLAG_GUIDED_ENABLED ^ MAV_MODE_FLAG_STABILIZE_ENABLED, 0); - qDebug() << __FILE__ << __LINE__ << "Toggling autonomy"; -} - /** * Set the manual control commands. * This can only be done if the system has manual inputs enabled and is armed. @@ -2742,68 +2060,6 @@ bool UAS::isAirplane() return false; } -/** -* Halt the uas. -*/ -void UAS::halt() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_OVERRIDE_GOTO, 1, MAV_GOTO_DO_HOLD, MAV_GOTO_HOLD_AT_CURRENT_POSITION, 0, 0, 0, 0, 0); - _vehicle->sendMessage(msg); -} - -/** -* Make the UAS move. -*/ -void UAS::go() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_OVERRIDE_GOTO, 1, MAV_GOTO_DO_CONTINUE, MAV_GOTO_HOLD_AT_CURRENT_POSITION, 0, 0, 0, 0, 0); - _vehicle->sendMessage(msg); -} - -/** -* Order the robot to return home -*/ -void UAS::home() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - - double latitude = HomePositionManager::instance()->getHomeLatitude(); - double longitude = HomePositionManager::instance()->getHomeLongitude(); - double altitude = HomePositionManager::instance()->getHomeAltitude(); - - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_OVERRIDE_GOTO, 1, MAV_GOTO_DO_CONTINUE, MAV_GOTO_HOLD_AT_CURRENT_POSITION, MAV_FRAME_GLOBAL, 0, latitude, longitude, altitude); - _vehicle->sendMessage(msg); -} - -/** -* Order the robot to land on the runway -*/ -void UAS::land() -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_NAV_LAND, 1, 0, 0, 0, 0, 0, 0, 0); - _vehicle->sendMessage(msg); -} - /** * Order the robot to start receiver pairing */ @@ -2819,54 +2075,6 @@ void UAS::pairRX(int rxType, int rxSubType) _vehicle->sendMessage(msg); } -/** - * The MAV starts the emergency landing procedure. The behaviour depends on the onboard implementation - * and might differ between systems. - */ -void UAS::emergencySTOP() -{ - // FIXME MAVLINKV10PORTINGNEEDED - halt(); -} - -/** - * Shut down this mav - All onboard systems are immediately shut down (e.g. the - * main power line is cut). - * @warning This might lead to a crash. - * - * The command will not be executed until emergencyKILLConfirm is issues immediately afterwards - */ -bool UAS::emergencyKILL() -{ - halt(); - // FIXME MAVLINKV10PORTINGNEEDED - // bool result = false; - // QMessageBox msgBox; - // msgBox.setIcon(QMessageBox::Critical); - // msgBox.setText("EMERGENCY: KILL ALL MOTORS ON UAS"); - // msgBox.setInformativeText("Do you want to cut power on all systems?"); - // msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::Cancel); - // msgBox.setDefaultButton(QMessageBox::Cancel); - // int ret = msgBox.exec(); - - // // Close the message box shortly after the click to prevent accidental clicks - // QTimer::singleShot(5000, &msgBox, SLOT(reject())); - - - // if (ret == QMessageBox::Yes) - // { - // mavlink_message_t msg; - // // TODO Replace MG System ID with static function call and allow to change ID in GUI - // mavlink_msg_action_pack(MG::SYSTEM::ID, MG::SYSTEM::COMPID, &msg, this->getUASID(), MAV_COMP_ID_IMU, (int)MAV_ACTION_EMCY_KILL); - // // Send message twice to increase chance of reception - // _vehicle->sendMessage(msg); - // _vehicle->sendMessage(msg); - // result = true; - // } - // return result; - return false; -} - /** * If enabled, connect the flight gear link. */ @@ -3077,7 +2285,7 @@ void UAS::sendHilState(quint64 time_us, float roll, float pitch, float yaw, floa else { // Attempt to set HIL mode - setMode(base_mode | MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(true); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to enable."; } } @@ -3158,7 +2366,7 @@ void UAS::sendHilSensors(quint64 time_us, float xacc, float yacc, float zacc, fl else { // Attempt to set HIL mode - setMode(base_mode | MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(true); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to enable."; } } @@ -3196,7 +2404,7 @@ void UAS::sendHilOpticalFlow(quint64 time_us, qint16 flow_x, qint16 flow_y, floa else { // Attempt to set HIL mode - setMode(base_mode | MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(true); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to enable."; } @@ -3232,7 +2440,7 @@ void UAS::sendHilGps(quint64 time_us, double lat, double lon, double alt, int fi else { // Attempt to set HIL mode - setMode(base_mode | MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(true); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to enable."; } } @@ -3247,7 +2455,7 @@ void UAS::startHil() if (hilEnabled) return; hilEnabled = true; sensorHil = false; - setMode(base_mode | MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(true); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to enable."; // Connect HIL simulation link simulation->connectSimulation(); @@ -3262,7 +2470,7 @@ void UAS::stopHil() { if (simulation && simulation->isConnected()) { simulation->disconnectSim(); - setMode(base_mode & ~MAV_MODE_FLAG_HIL_ENABLED, custom_mode); + _vehicle->setHilMode(false); qDebug() << __FILE__ << __LINE__ << "HIL is onboard not enabled, trying to disable."; } hilEnabled = false; @@ -3270,42 +2478,6 @@ void UAS::stopHil() } #endif -void UAS::shutdown() -{ - if (!_vehicle) { - return; - } - - QMessageBox::StandardButton button = QGCMessageBox::question(tr("Shutting down the UAS"), - tr("Do you want to shut down the onboard computer?"), - QMessageBox::Yes | QMessageBox::Cancel, - QMessageBox::Cancel); - if (button == QMessageBox::Yes) - { - // If the active UAS is set, execute command - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_PREFLIGHT_REBOOT_SHUTDOWN, 1, 0, 2, 0, 0, 0, 0, 0); - _vehicle->sendMessage(msg); - } -} - -/** -* @param x position -* @param y position -* @param z position -* @param yaw -*/ -void UAS::setTargetPosition(float x, float y, float z, float yaw) -{ - if (!_vehicle) { - return; - } - - mavlink_message_t msg; - mavlink_msg_command_long_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_ALL, MAV_CMD_NAV_PATHPLANNING, 1, 1, 1, 0, yaw, x, y, z); - _vehicle->sendMessage(msg); -} - /** * @return The name of this system as string in human-readable form */ @@ -3323,19 +2495,6 @@ QString UAS::getUASName(void) const return result; } -/** -* @return the state of the uas as a short text. -*/ -const QString& UAS::getShortState() const -{ - return shortStateText; -} - -const QString& UAS::getShortMode() const -{ - return shortModeText; -} - /** * @rerturn the map of the components */ @@ -3344,44 +2503,6 @@ QMap UAS::getComponents() return components; } -/** -* Set the battery specificaitons: empty voltage, warning voltage, and full voltage. -* @param specifications of the battery -*/ -void UAS::setBatterySpecs(const QString& specs) -{ - batteryRemainingEstimateEnabled = false; - bool ok; - QString percent = specs; - percent = percent.remove("%"); - float temp = percent.toFloat(&ok); - if (ok) - { - warnLevelPercent = temp; - } - else - { - emit textMessageReceived(0, 0, MAV_SEVERITY_WARNING, "Could not set battery options, format is wrong"); - } -} - -/** -* @return the battery specifications(empty voltage, warning voltage, full voltage) -*/ -QString UAS::getBatterySpecs() -{ - return QString("%1%").arg(warnLevelPercent); -} - -/** -* @return the time remaining. -*/ -int UAS::calculateTimeRemaining() -{ - // XXX needs fixing - return 0; -} - /** * @return charge level in percent - 0 - 100 */ diff --git a/src/uas/UAS.h b/src/uas/UAS.h index e1287f66a..f2386a6fa 100644 --- a/src/uas/UAS.h +++ b/src/uas/UAS.h @@ -72,10 +72,6 @@ public: /** @brief The name of the robot */ QString getUASName(void) const; - /** @brief Get short state */ - const QString& getShortState() const; - /** @brief Get short mode */ - const QString& getShortMode() const; /** @brief Get the unique system id */ int getUASID() const; /** @brief Get the airframe */ @@ -319,17 +315,6 @@ public: return yaw; } - QVector3D getNedPosGlobalOffset() const - { - return nedPosGlobalOffset; - } - - QVector3D getNedAttGlobalOffset() const - { - return nedAttGlobalOffset; - } - - // Setters for HIL noise variance void setXaccVar(float var){ xacc_var = var; @@ -406,20 +391,9 @@ protected: //COMMENTS FOR TEST UNIT unsigned char type; ///< UAS type (from type enum) int airframe; ///< The airframe type int autopilot; ///< Type of the Autopilot: -1: None, 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM - bool systemIsArmed; ///< If the system is armed uint8_t base_mode; ///< The current mode of the MAV uint32_t custom_mode; ///< The current mode of the MAV int status; ///< The current status of the MAV - QString shortModeText; ///< Short textual mode description - QString shortStateText; ///< Short textual state description - - /// OUTPUT - QList actuatorValues; - QList actuatorNames; - QList motorValues; - QList motorNames; - double thrustSum; ///< Sum of forward/up thrust of all thrust actuators, in Newtons - double thrustMax; ///< Maximum forward/up thrust of this vehicle, in Newtons // dongfang: This looks like a candidate for being moved off to a separate class. /// BATTERY / ENERGY @@ -433,7 +407,6 @@ protected: //COMMENTS FOR TEST UNIT double currentCurrent; ///< Battery current currently measured bool batteryRemainingEstimateEnabled; ///< If the estimate is enabled, QGC will try to estimate the remaining battery life float chargeLevel; ///< Charge level of battery, in percent - int timeRemaining; ///< Remaining time calculated based on previous and current bool lowBattAlarm; ///< Switch if battery is low @@ -477,9 +450,6 @@ protected: //COMMENTS FOR TEST UNIT double speedY; ///< True speed in Y axis double speedZ; ///< True speed in Z axis - QVector3D nedPosGlobalOffset; ///< Offset between the system's NED position measurements and the swarm / global 0/0/0 origin - QVector3D nedAttGlobalOffset; ///< Offset between the system's NED position measurements and the swarm / global 0/0/0 origin - /// WAYPOINT NAVIGATION double distToWaypoint; ///< Distance to next waypoint double airSpeed; ///< Airspeed @@ -534,20 +504,10 @@ protected: //COMMENTS FOR TEST UNIT public: /** @brief Set the current battery type */ void setBattery(BatteryType type, int cells); - /** @brief Estimate how much flight time is remaining */ - int calculateTimeRemaining(); /** @brief Get the current charge level */ float getChargeLevel(); /** @brief Get the human-readable status message for this code */ void getStatusForCode(int statusCode, QString& uasState, QString& stateDescription); - /** @brief Check if vehicle is in autonomous mode */ - bool isAuto(); - /** @brief Check if vehicle is armed */ - bool isArmed() const { return systemIsArmed; } - /** @brief Check if vehicle is supposed to be in HIL mode by the GS */ - bool isHilEnabled() const { return hilEnabled; } - /** @brief Check if vehicle is in HIL mode */ - bool isHilActive() const { return base_mode & MAV_MODE_FLAG_HIL_ENABLED; } /** @brief Get reference to the waypoint manager **/ UASWaypointManager* getWaypointManager() { @@ -568,155 +528,11 @@ public: int getSystemType(); bool isAirplane(); - /** - * @brief Returns true for systems that can reverse. If the system has no control over position, it returns false as - * @return If the specified vehicle type can - */ - bool systemCanReverse() const - { - switch(type) - { - case MAV_TYPE_GENERIC: - case MAV_TYPE_FIXED_WING: - case MAV_TYPE_ROCKET: - case MAV_TYPE_FLAPPING_WING: - - // System types that don't have movement - case MAV_TYPE_ANTENNA_TRACKER: - case MAV_TYPE_GCS: - case MAV_TYPE_FREE_BALLOON: - default: - return false; - case MAV_TYPE_QUADROTOR: - case MAV_TYPE_COAXIAL: - case MAV_TYPE_HELICOPTER: - case MAV_TYPE_AIRSHIP: - case MAV_TYPE_GROUND_ROVER: - case MAV_TYPE_SURFACE_BOAT: - case MAV_TYPE_SUBMARINE: - case MAV_TYPE_HEXAROTOR: - case MAV_TYPE_OCTOROTOR: - case MAV_TYPE_TRICOPTER: - return true; - } - } - - QString getSystemTypeName() - { - switch(type) - { - case MAV_TYPE_GENERIC: - return "GENERIC"; - break; - case MAV_TYPE_FIXED_WING: - return "FIXED_WING"; - break; - case MAV_TYPE_QUADROTOR: - return "QUADROTOR"; - break; - case MAV_TYPE_COAXIAL: - return "COAXIAL"; - break; - case MAV_TYPE_HELICOPTER: - return "HELICOPTER"; - break; - case MAV_TYPE_ANTENNA_TRACKER: - return "ANTENNA_TRACKER"; - break; - case MAV_TYPE_GCS: - return "GCS"; - break; - case MAV_TYPE_AIRSHIP: - return "AIRSHIP"; - break; - case MAV_TYPE_FREE_BALLOON: - return "FREE_BALLOON"; - break; - case MAV_TYPE_ROCKET: - return "ROCKET"; - break; - case MAV_TYPE_GROUND_ROVER: - return "GROUND_ROVER"; - break; - case MAV_TYPE_SURFACE_BOAT: - return "BOAT"; - break; - case MAV_TYPE_SUBMARINE: - return "SUBMARINE"; - break; - case MAV_TYPE_HEXAROTOR: - return "HEXAROTOR"; - break; - case MAV_TYPE_OCTOROTOR: - return "OCTOROTOR"; - break; - case MAV_TYPE_TRICOPTER: - return "TRICOPTER"; - break; - case MAV_TYPE_FLAPPING_WING: - return "FLAPPING_WING"; - break; - default: - return ""; - break; - } - } - QImage getImage(); void requestImage(); int getAutopilotType(){ return autopilot; } - QString getAutopilotTypeName() - { - switch (autopilot) - { - case MAV_AUTOPILOT_GENERIC: - return "GENERIC"; - break; - case MAV_AUTOPILOT_SLUGS: - return "SLUGS"; - break; - case MAV_AUTOPILOT_ARDUPILOTMEGA: - return "ARDUPILOTMEGA"; - break; - case MAV_AUTOPILOT_OPENPILOT: - return "OPENPILOT"; - break; - case MAV_AUTOPILOT_GENERIC_WAYPOINTS_ONLY: - return "GENERIC_WAYPOINTS_ONLY"; - break; - case MAV_AUTOPILOT_GENERIC_WAYPOINTS_AND_SIMPLE_NAVIGATION_ONLY: - return "GENERIC_MISSION_NAVIGATION_ONLY"; - break; - case MAV_AUTOPILOT_GENERIC_MISSION_FULL: - return "GENERIC_MISSION_FULL"; - break; - case MAV_AUTOPILOT_INVALID: - return "NO AP"; - break; - case MAV_AUTOPILOT_PPZ: - return "PPZ"; - break; - case MAV_AUTOPILOT_UDB: - return "UDB"; - break; - case MAV_AUTOPILOT_FP: - return "FP"; - break; - case MAV_AUTOPILOT_PX4: - return "PX4"; - break; - default: - return "UNKNOWN"; - break; - } - } - /** From UASInterface */ - QList getActions() const - { - return actions; - } public slots: /** @brief Set the autopilot type */ @@ -737,35 +553,12 @@ public slots: } } - /** @brief Set a new name **/ - void setUASName(const QString& name); - /** @brief Executes a command **/ - void executeCommand(MAV_CMD command); /** @brief Executes a command with 7 params */ void executeCommand(MAV_CMD command, int confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7, int component); - /** @brief Executes a command ack, with success boolean **/ - void executeCommandAck(int num, bool success); - /** @brief Set the current battery type and voltages */ - void setBatterySpecs(const QString& specs); - /** @brief Get the current battery type and specs */ - QString getBatterySpecs(); - - /** @brief Launches the system **/ - void launch(); - /** @brief Write this waypoint to the list of waypoints */ - //void setWaypoint(MissionItem* wp); FIXME tbd - /** @brief Set currently active waypoint */ - //void setWaypointActive(int id); FIXME tbd - /** @brief Order the robot to return home **/ - void home(); - /** @brief Order the robot to land **/ - void land(); + /** @brief Order the robot to pair its receiver **/ void pairRX(int rxType, int rxSubType); - void halt(); - void go(); - /** @brief Enable / disable HIL */ #ifndef __mobile__ void enableHilFlightGear(bool enable, QString options, bool sensorHil, QObject * configuration); @@ -813,40 +606,9 @@ public slots: void stopHil(); #endif - /** @brief Stops the robot system. If it is an MAV, the robot starts the emergency landing procedure **/ - void emergencySTOP(); - - /** @brief Kills the robot. All systems are immediately shut down (e.g. the main power line is cut). This might lead to a crash **/ - bool emergencyKILL(); - - /** @brief Shut the system cleanly down. Will shut down any onboard computers **/ - void shutdown(); - - /** @brief Set the target position for the robot to navigate to. */ - void setTargetPosition(float x, float y, float z, float yaw); - void startLowBattAlarm(); void stopLowBattAlarm(); - /** @brief Arm system */ - void armSystem(); - /** @brief Disable the motors */ - void disarmSystem(); - /** @brief Toggle the armed state of the system. */ - void toggleArmedState(); - /** - * @brief Tell the UAS to switch into a completely-autonomous mode, so disable manual input. - */ - void goAutonomous(); - /** - * @brief Tell the UAS to switch to manual control. Stabilized attitude may simultaneously be engaged. - */ - void goManual(); - /** - * @brief Tell the UAS to switch between manual and autonomous control. - */ - void toggleAutonomy(); - /** @brief Set the values for the manual control of the vehicle */ #ifndef __mobile__ void setExternalControlSetpoint(float roll, float pitch, float yaw, float thrust, quint16 buttons, int joystickMode); @@ -860,39 +622,11 @@ public slots: /** @brief Receive a message from one of the communication links. */ virtual void receiveMessage(mavlink_message_t message); -#ifdef QGC_PROTOBUF_ENABLED - /** @brief Receive a message from one of the communication links. */ - virtual void receiveExtendedMessage(LinkInterface* link, std::tr1::shared_ptr message); -#endif - - /** @brief Set current mode of operation, e.g. auto or manual, always uses the current arming status for safety reason */ - void setMode(uint8_t newBaseMode, uint32_t newCustomMode); - - /** @brief Set current mode of operation, e.g. auto or manual, does not check the arming status, for anything else than arming/disarming operations use setMode instead */ - void setModeArm(uint8_t newBaseMode, uint32_t newCustomMode); - - void enableAllDataTransmission(int rate); - void enableRawSensorDataTransmission(int rate); - void enableExtendedSystemStatusTransmission(int rate); - void enableRCChannelDataTransmission(int rate); - void enableRawControllerDataTransmission(int rate); - //void enableRawSensorFusionTransmission(int rate); - void enablePositionTransmission(int rate); - void enableExtra1Transmission(int rate); - void enableExtra2Transmission(int rate); - void enableExtra3Transmission(int rate); - /** @brief Update the system state */ void updateState(); - /** @brief Set world frame origin at current GPS position */ - void setLocalOriginAtCurrentGPSPosition(); /** @brief Set world frame origin / home position at this GPS position */ void setHomePosition(double lat, double lon, double alt); - /** @brief Set local position setpoint */ - void setLocalPositionSetpoint(float x, float y, float z, float yaw); - /** @brief Add an offset in body frame to the setpoint */ - void setLocalPositionOffset(float x, float y, float z, float yaw); void startCalibration(StartCalibrationType calType); void stopCalibration(void); @@ -900,27 +634,12 @@ public slots: void startBusConfig(StartBusConfigType calType); void stopBusConfig(void); - void startDataRecording(); - void stopDataRecording(); - void deleteSettings(); - - /** @brief Triggers the action associated with the given ID. */ - void triggerAction(int action); - /** @brief Send command to map a RC channel to a parameter */ void sendMapRCToParam(QString param_id, float scale, float value0, quint8 param_rc_channel_index, float valueMin, float valueMax); /** @brief Send command to disable all bindings/maps between RC and parameters */ void unsetRCToParameterMap(); signals: - /** @brief The main/battery voltage has changed/was updated */ - //void voltageChanged(int uasId, double voltage); // Defined in UASInterface already - /** @brief An actuator value has changed */ - //void actuatorChanged(UASInterface*, int actId, double value); // Defined in UASInterface already - /** @brief An actuator value has changed */ - void actuatorChanged(UASInterface* uas, QString actuatorName, double min, double max, double value); - void motorChanged(UASInterface* uas, QString motorName, double min, double max, double value); - /** @brief The system load (MCU/CPU usage) changed */ void loadChanged(UASInterface* uas, double load); /** @brief Propagate a heartbeat received from the system */ //void heartbeat(UASInterface* uas); // Defined in UASInterface already @@ -966,13 +685,11 @@ protected: quint64 lastVoltageWarning; ///< Time at which the last voltage warning occured quint64 lastNonNullTime; ///< The last timestamp from the MAV that was not null unsigned int onboardTimeOffsetInvalidCount; ///< Count when the offboard time offset estimation seemed wrong - bool hilEnabled; ///< Set to true if HIL mode is enabled from GCS (UAS might be in HIL even if this flag is not set, this defines the GCS HIL setting) + bool hilEnabled; bool sensorHil; ///< True if sensor HIL is enabled quint64 lastSendTimeGPS; ///< Last HIL GPS message sent quint64 lastSendTimeSensors; ///< Last HIL Sensors message sent quint64 lastSendTimeOpticalFlow; ///< Last HIL Optical Flow message sent - QList actions; ///< A list of actions that this UAS can perform. - protected slots: /** @brief Write settings to disk */ diff --git a/src/uas/UASInterface.h b/src/uas/UASInterface.h index 6613e282c..879697a1c 100644 --- a/src/uas/UASInterface.h +++ b/src/uas/UASInterface.h @@ -54,32 +54,6 @@ enum BatteryType AGZN = 5 }; ///< The type of battery used -/* -enum SpeedMeasurementSource -{ - PRIMARY_SPEED = 0, // ArduPlane: Measured airspeed or estimated airspeed. ArduCopter: Ground (XY) speed. - GROUNDSPEED_BY_UAV = 1, // Ground speed as reported by UAS - GROUNDSPEED_BY_GPS = 2, // Ground speed as calculated from received GPS velocity data - LOCAL_SPEED = 3 -}; ///< For velocity data, the data source - -enum AltitudeMeasurementSource -{ - PRIMARY_ALTITUDE = 0, // ArduPlane: air and ground speed mix. This is the altitude used for navigastion. - BAROMETRIC_ALTITUDE = 1, // Altitude is pressure altitude. Ardupilot reports no altitude purely by barometer, - // however when ALT_MIX==1, mix-altitude is purely barometric. - GPS_ALTITUDE = 2 // GPS ASL altitude -}; ///< For altitude data, the data source - -// TODO!!! The different frames are probably represented elsewhere. There should really only -// be one set of frames. We also need to keep track of the home alt. somehow. -enum AltitudeMeasurementFrame -{ - ABSOLUTE = 0, // Altitude is pressure altitude - ABOVE_HOME_POSITION = 1 -}; ///< For altitude data, a reference frame -*/ - /** * @brief Interface for all robots. * @@ -96,11 +70,6 @@ public: /** @brief The name of the robot **/ virtual QString getUASName() const = 0; - /** @brief Get short state */ - virtual const QString& getShortState() const = 0; - /** @brief Get short mode */ - virtual const QString& getShortMode() const = 0; - //virtual QColor getColor() = 0; virtual int getUASID() const = 0; ///< Get the ID of the connected UAS /** @brief The time interval the robot is switched on **/ virtual quint64 getUptime() const = 0; @@ -120,8 +89,6 @@ public: virtual double getPitch() const = 0; virtual double getYaw() const = 0; - virtual bool isArmed() const = 0; - /** @brief Set the airframe of this MAV */ virtual int getAirframe() const = 0; @@ -192,15 +159,9 @@ public: virtual int getSystemType() = 0; /** @brief Is it an airplane (or like one)?,..)*/ virtual bool isAirplane() = 0; - /** @brief Indicates whether this system is capable of controlling a reverse velocity. - * Used for, among other things, altering joystick input to either -1:1 or 0:1 range. - */ - virtual bool systemCanReverse() const = 0; - virtual QString getSystemTypeName() = 0; /** @brief Get the type of the autopilot (PIXHAWK, APM, UDB, PPZ,..) */ virtual int getAutopilotType() = 0; - virtual QString getAutopilotTypeName() = 0; virtual void setAutopilotType(int apType) = 0; virtual QMap getComponents() = 0; @@ -210,13 +171,6 @@ public: return color; } - /** @brief Returns a list of actions/commands that this vehicle can perform. - * Used for creating UI elements for built-in functionality for this vehicle. - * Actions should be mappings to `void f(void);` functions that simply issue - * a command to the vehicle. - */ - virtual QList getActions() const = 0; - static const unsigned int WAYPOINT_RADIUS_DEFAULT_FIXED_WING = 25; static const unsigned int WAYPOINT_RADIUS_DEFAULT_ROTARY_WING = 5; @@ -250,86 +204,22 @@ public: public slots: - /** @brief Set a new name for the system */ - virtual void setUASName(const QString& name) = 0; - /** @brief Execute command immediately **/ - virtual void executeCommand(MAV_CMD command) = 0; /** @brief Executes a command **/ virtual void executeCommand(MAV_CMD command, int confirmation, float param1, float param2, float param3, float param4, float param5, float param6, float param7, int component) = 0; - /** @brief Executes a command ack, with success boolean **/ - virtual void executeCommandAck(int num, bool success) = 0; /** @brief Selects the airframe */ virtual void setAirframe(int airframe) = 0; - /** @brief Launches the system/Liftof **/ - virtual void launch() = 0; - /** @brief Set a new waypoint **/ - //virtual void setWaypoint(MissionItem* wp) = 0; - /** @brief Set this waypoint as next waypoint to fly to */ - //virtual void setWaypointActive(int wp) = 0; - /** @brief Order the robot to return home / to land on the runway **/ - virtual void home() = 0; - /** @brief Order the robot to land **/ - virtual void land() = 0; /** @brief Order the robot to pair its receiver **/ virtual void pairRX(int rxType, int rxSubType) = 0; - /** @brief Halt the system */ - virtual void halt() = 0; - /** @brief Start/continue the current robot action */ - virtual void go() = 0; - /** @brief Set the current mode of operation */ - virtual void setMode(uint8_t newBaseMode, uint32_t newCustomMode) = 0; - /** Stops the robot system. If it is an MAV, the robot starts the emergency landing procedure **/ - virtual void emergencySTOP() = 0; - /** Kills the robot. All systems are immediately shut down (e.g. the main power line is cut). This might lead to a crash **/ - virtual bool emergencyKILL() = 0; - /** - * @brief Shut down the system's computers - * - * Works only if already landed and will cleanly shut down all onboard computers. - */ - virtual void shutdown() = 0; - /** @brief Set the target position for the robot to navigate to. - * @param x x-coordinate of the target position - * @param y y-coordinate of the target position - * @param z z-coordinate of the target position - * @param yaw heading of the target position - */ - virtual void setTargetPosition(float x, float y, float z, float yaw) = 0; - /** @brief Request the list of stored waypoints from the robot */ - //virtual void requestWaypoints() = 0; - /** @brief Clear all existing waypoints on the robot */ - //virtual void clearWaypointList() = 0; - /** @brief Set world frame origin at current GPS position */ - virtual void setLocalOriginAtCurrentGPSPosition() = 0; - /** @brief Set world frame origin / home position at this GPS position */ + virtual void setHomePosition(double lat, double lon, double alt) = 0; - virtual void enableAllDataTransmission(int rate) = 0; - virtual void enableRawSensorDataTransmission(int rate) = 0; - virtual void enableExtendedSystemStatusTransmission(int rate) = 0; - virtual void enableRCChannelDataTransmission(int rate) = 0; - virtual void enableRawControllerDataTransmission(int rate) = 0; - //virtual void enableRawSensorFusionTransmission(int rate) = 0; - virtual void enablePositionTransmission(int rate) = 0; - virtual void enableExtra1Transmission(int rate) = 0; - virtual void enableExtra2Transmission(int rate) = 0; - virtual void enableExtra3Transmission(int rate) = 0; - - virtual void setLocalPositionSetpoint(float x, float y, float z, float yaw) = 0; - virtual void setLocalPositionOffset(float x, float y, float z, float yaw) = 0; - /** @brief Return if this a rotary wing */ virtual bool isRotaryWing() = 0; /** @brief Return if this is a fixed wing */ virtual bool isFixedWing() = 0; - /** @brief Set the current battery type and voltages */ - virtual void setBatterySpecs(const QString& specs) = 0; - /** @brief Get the current battery type and specs */ - virtual QString getBatterySpecs() = 0; - /** @brief Send the full HIL state to the MAV */ #ifndef __mobile__ virtual void sendHilState(quint64 time_us, float roll, float pitch, float yaw, float rollspeed, @@ -360,8 +250,6 @@ protected: signals: /** @brief The robot state has changed */ void statusChanged(int stateFlag); - /** @brief A new component was detected or created */ - void componentCreated(int uas, int component, const QString& name); /** @brief The robot state has changed * * @param uas this robot @@ -369,32 +257,10 @@ signals: * @param description longer textual description. Should be however limited to a short text, e.g. 200 chars. */ void statusChanged(UASInterface* uas, QString status, QString description); - /** - * @brief Received a plain text message from the robot - * This signal should NOT be used for standard communication, but rather for VERY IMPORTANT - * messages like critical errors. - * - * @param uasid ID of the sending system - * @param compid ID of the sending component - * @param text the status text - * @param severity The severity of the message, 0 for plain debug messages, 10 for very critical messages - */ - - void poiFound(UASInterface* uas, int type, int colorIndex, QString message, float x, float y, float z); - void poiConnectionFound(UASInterface* uas, int type, int colorIndex, QString message, float x1, float y1, float z1, float x2, float y2, float z2); /** @brief A text message from the system has been received */ void textMessageReceived(int uasid, int componentid, int severity, QString text); - void navModeChanged(int uasid, int mode, const QString& text); - - /** @brief System is now armed */ - void armed(); - /** @brief System is now disarmed */ - void disarmed(); - /** @brief Arming mode changed */ - void armingChanged(bool armed); - /** * @brief Update the error count of a device * @@ -417,22 +283,10 @@ signals: * @param receiveDrop drop rate of packets this MAV receives (sent from GCS or other MAVs) */ void dropRateChanged(int systemId, float receiveDrop); - /** @brief Robot mode has changed */ - void modeChanged(int sysId, QString status, QString description); - /** @brief A command has been issued **/ - void commandSent(int command); - /** @brief The robot is connecting **/ - void connecting(); /** @brief The robot is connected **/ void connected(); /** @brief The robot is disconnected **/ void disconnected(); - /** @brief The robot is active **/ - void activated(); - /** @brief The robot is inactive **/ - void deactivated(); - /** @brief The robot is manually controlled **/ - void manualControl(); /** @brief A value of the robot has changed. * @@ -448,12 +302,8 @@ signals: */ void valueChanged(const int uasid, const QString& name, const QString& unit, const QVariant &value,const quint64 msecs); - void voltageChanged(int uasId, double voltage); - void waypointUpdated(int uasId, int id, double x, double y, double z, double yaw, bool autocontinue, bool active); - void waypointSelected(int uasId, int id); - void waypointReached(UASInterface* uas, int id); - void autoModeChanged(bool autoMode); void parameterUpdate(int uas, int component, QString parameterName, int parameterCount, int parameterId, int type, QVariant value); + /** * @brief The battery status has been updated * @@ -465,7 +315,6 @@ signals: void batteryChanged(UASInterface* uas, double voltage, double current, double percent, int seconds); void batteryConsumedChanged(UASInterface* uas, double current_consumed); void statusChanged(UASInterface* uas, QString status); - void actuatorChanged(UASInterface*, int actId, double value); void thrustChanged(UASInterface*, double thrust); void heartbeat(UASInterface* uas); void attitudeChanged(UASInterface*, double roll, double pitch, double yaw, quint64 usec); @@ -520,13 +369,6 @@ signals: void baroStatusChanged(bool supported, bool enabled, bool ok); /** @brief Differential pressure / airspeed status changed */ void airspeedStatusChanged(bool supported, bool enabled, bool ok); - /** @brief Actuator status changed */ - void actuatorStatusChanged(bool supported, bool enabled, bool ok); - /** @brief Laser scanner status changed */ - void laserStatusChanged(bool supported, bool enabled, bool ok); - /** @brief Vicon / Leica Geotracker status changed */ - void groundTruthSensorStatusChanged(bool supported, bool enabled, bool ok); - /** @brief Value of a remote control channel (raw) */ void remoteControlChannelRawChanged(int channelId, float raw); @@ -540,21 +382,6 @@ signals: * @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization */ void localizationChanged(UASInterface* uas, int fix); - /** - * @brief GPS localization quality changed - * @param fix 0: lost, 1: at least one satellite, but no GPS fix, 2: 2D localization, 3: 3D localization - */ - void gpsLocalizationChanged(UASInterface* uas, int fix); - /** - * @brief Vision localization quality changed - * @param fix 0: lost, 1: 2D local position hold, 2: 2D localization, 3: 3D localization - */ - void visionLocalizationChanged(UASInterface* uas, int fix); - /** - * @brief IR/U localization quality changed - * @param fix 0: No IR/Ultrasound sensor, N > 0: Found N active sensors - */ - void irUltraSoundLocalizationChanged(UASInterface* uas, int fix); // ERROR AND STATUS SIGNALS /** @brief Heartbeat timed out or was regained */ @@ -564,16 +391,9 @@ signals: /** @brief Core specifications have changed */ void systemSpecsChanged(int uasId); - /** @brief Object detected */ - void objectDetected(unsigned int time, int id, int type, const QString& name, int quality, float bearing, float distance); - - // HOME POSITION / ORIGIN CHANGES void homePositionChanged(int uas, double lat, double lon, double alt); - /** @brief The system received an unknown message, which it could not interpret */ - void unknownPacketReceived(int uas, int component, int messageid); - protected: // TIMEOUT CONSTANTS -- 2.22.0