From 71369792b052b308c6cb2af3f8c9288a31ca6df1 Mon Sep 17 00:00:00 2001 From: lm Date: Thu, 17 Feb 2011 22:02:47 +0100 Subject: [PATCH] Fixes to Google Earth, guarded a PIXHAWK message with correct include guards --- images/earth.html | 6 +++ src/Waypoint.cc | 8 +-- src/Waypoint.h | 4 +- src/comm/MAVLinkSimulationLink.cc | 5 +- src/comm/MAVLinkSimulationMAV.cc | 7 +-- src/comm/MAVLinkSimulationMAV.h | 15 +++++- src/uas/UAS.cc | 8 +-- src/ui/MapWidget.cc | 10 ++++ src/ui/MapWidget.h | 4 ++ src/ui/WaypointView.cc | 20 +++++-- src/ui/map3D/QGCGoogleEarthView.cc | 28 +++++++--- src/ui/map3D/QGCGoogleEarthView.h | 4 ++ src/ui/map3D/QGCGoogleEarthView.ui | 85 ++++++++++++++++++------------ 13 files changed, 144 insertions(+), 60 deletions(-) diff --git a/images/earth.html b/images/earth.html index bed577520..e30a9ca33 100644 --- a/images/earth.html +++ b/images/earth.html @@ -36,6 +36,7 @@ var currViewRange = 50.0; ///<< The current viewing range from this position (in var currTilt = 40.0; ///<< The tilt angle (in degrees) var currFollowTilt = 40.0; var currView = null; +var distanceMode = 0; var viewMode = 0; var lastTilt = 0; @@ -94,6 +95,11 @@ function getDraggingAllowed() return draggingAllowed; } +function setDistanceMode(mode) +{ + distanceMode = mode; +} + function setDraggingAllowed(allowed) { draggingAllowed = allowed; diff --git a/src/Waypoint.cc b/src/Waypoint.cc index 3f3f484fe..8127e620d 100644 --- a/src/Waypoint.cc +++ b/src/Waypoint.cc @@ -210,9 +210,9 @@ void Waypoint::setCurrent(bool current) void Waypoint::setAcceptanceRadius(double radius) { - if (this->param1 != radius) + if (this->param2 != radius) { - this->param1 = radius; + this->param2 = radius; emit changed(this); } } @@ -291,9 +291,9 @@ void Waypoint::setLoiterOrbit(double orbit) void Waypoint::setHoldTime(int holdTime) { - if (this->param2 != holdTime) + if (this->param1 != holdTime) { - this->param2 = holdTime; + this->param1 = holdTime; emit changed(this); } } diff --git a/src/Waypoint.h b/src/Waypoint.h index d454758bc..5dbf6e46c 100644 --- a/src/Waypoint.h +++ b/src/Waypoint.h @@ -59,8 +59,8 @@ public: bool getAutoContinue() const { return autocontinue; } bool getCurrent() const { return current; } double getLoiterOrbit() const { return orbit; } - double getAcceptanceRadius() const { return param1; } - double getHoldTime() const { return param2; } + double getAcceptanceRadius() const { return param2; } + double getHoldTime() const { return param1; } double getParam1() const { return param1; } double getParam2() const { return param2; } double getParam3() const { return orbit; } diff --git a/src/comm/MAVLinkSimulationLink.cc b/src/comm/MAVLinkSimulationLink.cc index 781024c06..9cac0f6f0 100644 --- a/src/comm/MAVLinkSimulationLink.cc +++ b/src/comm/MAVLinkSimulationLink.cc @@ -1001,9 +1001,8 @@ bool MAVLinkSimulationLink::connect() start(LowPriority); MAVLinkSimulationMAV* mav1 = new MAVLinkSimulationMAV(this, 1, 47.376, 8.548); Q_UNUSED(mav1); - //MAVLinkSimulationMAV* mav2 = new MAVLinkSimulationMAV(this, 2); - // - //Q_UNUSED(mav2); +// MAVLinkSimulationMAV* mav2 = new MAVLinkSimulationMAV(this, 2, 47.375, 8.548, 1); +// Q_UNUSED(mav2); // timer->start(rate); return true; } diff --git a/src/comm/MAVLinkSimulationMAV.cc b/src/comm/MAVLinkSimulationMAV.cc index 70e25f0f3..92f8877f7 100644 --- a/src/comm/MAVLinkSimulationMAV.cc +++ b/src/comm/MAVLinkSimulationMAV.cc @@ -4,7 +4,7 @@ #include "MAVLinkSimulationMAV.h" -MAVLinkSimulationMAV::MAVLinkSimulationMAV(MAVLinkSimulationLink *parent, int systemid, double lat, double lon) : +MAVLinkSimulationMAV::MAVLinkSimulationMAV(MAVLinkSimulationLink *parent, int systemid, double lat, double lon, int version) : QObject(parent), link(parent), planner(parent, systemid), @@ -34,7 +34,8 @@ MAVLinkSimulationMAV::MAVLinkSimulationMAV(MAVLinkSimulationLink *parent, int sy sys_mode(MAV_MODE_READY), sys_state(MAV_STATE_STANDBY), nav_mode(MAV_NAV_GROUNDED), - flying(false) + flying(false), + mavlink_version(version) { // Please note: The waypoint planner is running connect(&mainloopTimer, SIGNAL(timeout()), this, SLOT(mainloop())); @@ -62,7 +63,7 @@ void MAVLinkSimulationMAV::mainloop() if (timer1Hz <= 0) { mavlink_message_t msg; - mavlink_msg_heartbeat_pack(systemid, MAV_COMP_ID_IMU, &msg, MAV_FIXED_WING, MAV_AUTOPILOT_PIXHAWK); + mavlink_msg_heartbeat_pack_version_free(systemid, MAV_COMP_ID_IMU, &msg, MAV_FIXED_WING, MAV_AUTOPILOT_PIXHAWK, mavlink_version); link->sendMAVLinkMessage(&msg); planner.handleMessage(msg); diff --git a/src/comm/MAVLinkSimulationMAV.h b/src/comm/MAVLinkSimulationMAV.h index 3a9d37ada..32f04d844 100644 --- a/src/comm/MAVLinkSimulationMAV.h +++ b/src/comm/MAVLinkSimulationMAV.h @@ -11,7 +11,7 @@ class MAVLinkSimulationMAV : public QObject { Q_OBJECT public: - explicit MAVLinkSimulationMAV(MAVLinkSimulationLink *parent, int systemid, double lat=47.376389, double lon=8.548056); + explicit MAVLinkSimulationMAV(MAVLinkSimulationLink *parent, int systemid, double lat=47.376389, double lon=8.548056, int version=MAVLINK_VERSION); signals: @@ -53,6 +53,19 @@ protected: uint8_t sys_state; uint8_t nav_mode; bool flying; + int mavlink_version; + + static inline uint16_t mavlink_msg_heartbeat_pack_version_free(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, uint8_t type, uint8_t autopilot, uint8_t version) + { + uint16_t i = 0; + msg->msgid = MAVLINK_MSG_ID_HEARTBEAT; + + i += put_uint8_t_by_index(type, i, msg->payload); // Type of the MAV (quadrotor, helicopter, etc., up to 15 types, defined in MAV_TYPE ENUM) + i += put_uint8_t_by_index(autopilot, i, msg->payload); // Type of the Autopilot: 0: Generic, 1: PIXHAWK, 2: SLUGS, 3: Ardupilot (up to 15 types), defined in MAV_AUTOPILOT_TYPE ENUM + i += put_uint8_t_by_index(version, i, msg->payload); // MAVLink version + + return mavlink_finalize_message(msg, system_id, component_id, i); + } }; diff --git a/src/uas/UAS.cc b/src/uas/UAS.cc index 9d0eb3ee5..76c7c7a80 100644 --- a/src/uas/UAS.cc +++ b/src/uas/UAS.cc @@ -894,7 +894,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) emit textMessageReceived(uasId, message.compid, severity, text); } break; - +#ifdef MAVLINK_ENABLED_PIXHAWK case MAVLINK_MSG_ID_DATA_TRANSMISSION_HANDSHAKE: { qDebug() << "RECIEVED ACK TO GET IMAGE"; @@ -939,7 +939,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message) } } break; - +#endif case MAVLINK_MSG_ID_DEBUG_VECT: { mavlink_debug_vect_t vect; @@ -1363,6 +1363,7 @@ QImage UAS::getImage() void UAS::requestImage() { + #ifdef MAVLINK_ENABLED_PIXHAWK qDebug() << "trying to get an image from the uas..."; if (imagePacketsArrived == 0) @@ -1371,7 +1372,7 @@ void UAS::requestImage() mavlink_msg_data_transmission_handshake_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, DATA_TYPE_JPEG_IMAGE, 0, 0, 0, 50); sendMessage(msg); } - else if (MG::TIME::getGroundTimeNow() - imageStart >= 1000) + else if (QGC::groundTimeMilliseconds() - imageStart >= 1000) { // handshake happened more than 1 second ago, packets should have arrived by now // maybe we missed some packets (dropped along the way) @@ -1380,6 +1381,7 @@ void UAS::requestImage() // Restart statemachine imagePacketsArrived = 0; } +#endif // default else, wait? } diff --git a/src/ui/MapWidget.cc b/src/ui/MapWidget.cc index 3d143b8f6..ed12e1a2d 100644 --- a/src/ui/MapWidget.cc +++ b/src/ui/MapWidget.cc @@ -33,9 +33,14 @@ MapWidget::MapWidget(QWidget *parent) : uasTrails(), mav(NULL), lastUpdate(0), + initialized(false), m_ui(new Ui::MapWidget) { m_ui->setupUi(this); +} + +void MapWidget::init() +{ mc = new qmapcontrol::MapControl(this->size()); // VISUAL MAP STYLE @@ -268,6 +273,9 @@ MapWidget::MapWidget(QWidget *parent) : drawCamBorder = false; radioCamera = 10; + + // Done set state + initialized = true; } void MapWidget::goTo() @@ -1013,6 +1021,8 @@ void MapWidget::hideEvent(QHideEvent* event) settings.setValue("LAST_ZOOM", mc->currentZoom()); settings.endGroup(); settings.sync(); + + if (!initialized) init(); } diff --git a/src/ui/MapWidget.h b/src/ui/MapWidget.h index 1490e593f..fd8608b54 100644 --- a/src/ui/MapWidget.h +++ b/src/ui/MapWidget.h @@ -146,6 +146,10 @@ protected: //QMap waypointPaths; UASInterface* mav; quint64 lastUpdate; + bool initialized; + + /** @brief Initialize view */ + void init(); protected slots: void captureMapClick (const QMouseEvent* event, const QPointF coordinate); diff --git a/src/ui/WaypointView.cc b/src/ui/WaypointView.cc index 0ca69377f..459ff34b8 100644 --- a/src/ui/WaypointView.cc +++ b/src/ui/WaypointView.cc @@ -97,6 +97,7 @@ WaypointView::WaypointView(Waypoint* wp, QWidget* parent) : connect(m_ui->acceptanceSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setAcceptanceRadius(double))); connect(m_ui->holdTimeSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setHoldTime(int))); connect(m_ui->turnsSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setTurns(int))); + connect(m_ui->takeOffAngleSpinBox, SIGNAL(valueChanged(double)), wp, SLOT(setParam1(double))); // Connect actions connect(customCommand->commandSpinBox, SIGNAL(valueChanged(int)), wp, SLOT(setAction(int))); @@ -246,8 +247,6 @@ void WaypointView::changedAction(int index) case MAV_CMD_NAV_LOITER_UNLIM: case MAV_CMD_NAV_LOITER_TURNS: case MAV_CMD_NAV_LOITER_TIME: - case MAV_CMD_CONDITION_DELAY: - case MAV_CMD_DO_SET_MODE: changeViewMode(QGC_WAYPOINTVIEW_MODE_NAV); // Update frame view updateFrameView(m_ui->comboBox_frame->currentIndex()); @@ -434,9 +433,14 @@ void WaypointView::updateValues() // Only update if changed if (m_ui->comboBox_action->currentIndex() != action_index) { - // TODO Action and frame should not be coupled - if (wp->getFrame() != MAV_FRAME_MISSION) + // If action is unknown, set direct editing mode + if (wp->getAction() < 0 || wp->getAction() > MAV_CMD_NAV_TAKEOFF) { + changeViewMode(QGC_WAYPOINTVIEW_MODE_DIRECT_EDITING); + } + else + { + // Action ID known, update m_ui->comboBox_action->setCurrentIndex(action_index); updateActionView(action); } @@ -480,6 +484,14 @@ void WaypointView::updateValues() { m_ui->holdTimeSpinBox->setValue(wp->getHoldTime()); } + if (m_ui->turnsSpinBox->value() != wp->getTurns()) + { + m_ui->turnsSpinBox->setValue(wp->getTurns()); + } + if (m_ui->takeOffAngleSpinBox->value() != wp->getParam1()) + { + m_ui->takeOffAngleSpinBox->setValue(wp->getParam1()); + } // UPDATE CUSTOM ACTION WIDGET diff --git a/src/ui/map3D/QGCGoogleEarthView.cc b/src/ui/map3D/QGCGoogleEarthView.cc index 5e4c9d379..a42107489 100644 --- a/src/ui/map3D/QGCGoogleEarthView.cc +++ b/src/ui/map3D/QGCGoogleEarthView.cc @@ -121,6 +121,11 @@ void QGCGoogleEarthView::reloadHTML() show(); } +void QGCGoogleEarthView::enableEditMode(bool mode) +{ + javaScript(QString("setDraggingAllowed(%1);").arg(mode)); +} + /** * @param range in meters (SI-units) */ @@ -129,6 +134,11 @@ void QGCGoogleEarthView::setViewRange(float range) javaScript(QString("setViewRange(%1);").arg(range, 0, 'f', 5)); } +void QGCGoogleEarthView::setDistanceMode(int mode) +{ + javaScript(QString("setDistanceMode(%1);").arg(mode)); +} + void QGCGoogleEarthView::toggleViewMode() { switch (currentViewMode) @@ -469,26 +479,31 @@ void QGCGoogleEarthView::initializeGoogleEarth() setActiveUAS(UASManager::instance()->getActiveUAS()); // Add any further MAV automatically - connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*))); - connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*))); + connect(UASManager::instance(), SIGNAL(UASCreated(UASInterface*)), this, SLOT(addUAS(UASInterface*)), Qt::UniqueConnection); + connect(UASManager::instance(), SIGNAL(activeUASSet(UASInterface*)), this, SLOT(setActiveUAS(UASInterface*)), Qt::UniqueConnection); // Connect UI signals/slots // Follow checkbox ui->followAirplaneCheckbox->setChecked(followCamera); - connect(ui->followAirplaneCheckbox, SIGNAL(toggled(bool)), this, SLOT(follow(bool))); + connect(ui->followAirplaneCheckbox, SIGNAL(toggled(bool)), this, SLOT(follow(bool)), Qt::UniqueConnection); // Trail checkbox ui->trailCheckbox->setChecked(trailEnabled); - connect(ui->trailCheckbox, SIGNAL(toggled(bool)), this, SLOT(showTrail(bool))); + connect(ui->trailCheckbox, SIGNAL(toggled(bool)), this, SLOT(showTrail(bool)), Qt::UniqueConnection); // Go home connect(ui->goHomeButton, SIGNAL(clicked()), this, SLOT(goHome())); // Cam distance slider - connect(ui->camDistanceSlider, SIGNAL(valueChanged(int)), this, SLOT(setViewRangeScaledInt(int))); + connect(ui->camDistanceSlider, SIGNAL(valueChanged(int)), this, SLOT(setViewRangeScaledInt(int)), Qt::UniqueConnection); setViewRangeScaledInt(ui->camDistanceSlider->value()); + // Distance combo box + connect(ui->camDistanceComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(setDistanceMode(int)), Qt::UniqueConnection); + // Edit mode button + connect(ui->editButton, SIGNAL(clicked(bool)), this, SLOT(enableEditMode(bool)), Qt::UniqueConnection); + // Update waypoint list if (mav) updateWaypointList(mav->getUASID()); @@ -497,7 +512,8 @@ void QGCGoogleEarthView::initializeGoogleEarth() // Set current view mode setViewMode(currentViewMode); - + setDistanceMode(ui->camDistanceComboBox->currentIndex()); + enableEditMode(ui->editButton->isChecked()); follow(this->followCamera); gEarthInitialized = true; diff --git a/src/ui/map3D/QGCGoogleEarthView.h b/src/ui/map3D/QGCGoogleEarthView.h index 994cca31e..5d256ce4d 100644 --- a/src/ui/map3D/QGCGoogleEarthView.h +++ b/src/ui/map3D/QGCGoogleEarthView.h @@ -102,8 +102,12 @@ public slots: void goHome(); /** @brief Set the home location */ void setHome(double lat, double lon, double alt); + /** @brief Allow waypoint editing */ + void enableEditMode(bool mode); /** @brief Set camera view range to aircraft in meters */ void setViewRange(float range); + /** @brief Set the distance mode - either to ground or to MAV */ + void setDistanceMode(int mode); /** @brief Set the view mode */ void setViewMode(VIEW_MODE mode); /** @brief Toggle through the different view modes */ diff --git a/src/ui/map3D/QGCGoogleEarthView.ui b/src/ui/map3D/QGCGoogleEarthView.ui index ec6e4bae0..81140f1d2 100644 --- a/src/ui/map3D/QGCGoogleEarthView.ui +++ b/src/ui/map3D/QGCGoogleEarthView.ui @@ -13,7 +13,7 @@ Form - + 8 @@ -23,7 +23,7 @@ 2 - + @@ -58,7 +58,7 @@ - + Qt::Horizontal @@ -71,7 +71,7 @@ - + Distance of the chase camera to the MAV @@ -96,22 +96,6 @@ - - - - Distance of the chase camera to the MAV - - - Distance of the chase camera to the MAV - - - Distance of the chase camera to the MAV - - - Dist - - - @@ -128,7 +112,7 @@ - + Chase the MAV @@ -145,7 +129,7 @@ - + Select the MAV to chase @@ -155,9 +139,40 @@ Select the MAV to chase + + + Ground Distance + + + + + MAV Distance + + + + + + + + Qt::Vertical + - + + + + Reset + + + + + + + Overhead + + + + Delete all waypoints @@ -173,24 +188,26 @@ - - + + Qt::Vertical - - - - Reset + + + + Enable waypoint and home location edit mode + + + Enable waypoint and home location edit mode - - - - - Overhead + Edit + + + true -- 2.22.0