diff --git a/flight/libraries/sanitycheck.c b/flight/libraries/sanitycheck.c index dff5572fb..08d8a67d2 100644 --- a/flight/libraries/sanitycheck.c +++ b/flight/libraries/sanitycheck.c @@ -364,6 +364,8 @@ FrameType_t GetCurrentFrameType() case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLECAR: case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIAL: case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE: + case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEBOAT: + case SYSTEMSETTINGS_AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIALBOAT: return FRAME_TYPE_GROUND; case SYSTEMSETTINGS_AIRFRAMETYPE_VTOL: diff --git a/ground/gcs/src/plugins/config/airframe_ccpm.ui b/ground/gcs/src/plugins/config/airframe_ccpm.ui index 946ccf06f..b875042ea 100644 --- a/ground/gcs/src/plugins/config/airframe_ccpm.ui +++ b/ground/gcs/src/plugins/config/airframe_ccpm.ui @@ -1061,7 +1061,7 @@ margin:1px; - Motor outputs + Motor Outputs Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter @@ -1206,7 +1206,7 @@ margin:1px; - Swashplate outputs + Swashplate Outputs diff --git a/ground/gcs/src/plugins/config/airframe_ground.ui b/ground/gcs/src/plugins/config/airframe_ground.ui index 1275298d1..5720b2ce5 100644 --- a/ground/gcs/src/plugins/config/airframe_ground.ui +++ b/ground/gcs/src/plugins/config/airframe_ground.ui @@ -84,7 +84,7 @@ - + 0 0 @@ -102,7 +102,7 @@ - Output channel assignments + Output Channel Assignments @@ -206,7 +206,7 @@ true - + 0 0 @@ -365,7 +365,7 @@ margin:1px; - Vehicle frame + Vehicle Frame diff --git a/ground/gcs/src/plugins/config/airframe_multirotor.ui b/ground/gcs/src/plugins/config/airframe_multirotor.ui index a50cc8969..0834a57d4 100644 --- a/ground/gcs/src/plugins/config/airframe_multirotor.ui +++ b/ground/gcs/src/plugins/config/airframe_multirotor.ui @@ -509,7 +509,7 @@ Typical value is 50% for + or X configuration on quads. - Motor output channels + Motor Output Channels diff --git a/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.cpp b/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.cpp index e2e0099fb..f835dc84e 100644 --- a/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.cpp +++ b/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.cpp @@ -1,9 +1,9 @@ /** ****************************************************************************** * - * @file configgroundvehiclemwidget.cpp - * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015. - * @author K. Sebesta & The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @file configgroundvehiclewidget.cpp + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. + * K. Sebesta & The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin @@ -81,15 +81,15 @@ ConfigGroundVehicleWidget::ConfigGroundVehicleWidget(QWidget *parent) : populateChannelComboBoxes(); QStringList groundVehicleTypes; - groundVehicleTypes << "Turnable (car)" << "Differential (tank)" << "Motorcycle"; + groundVehicleTypes << "Car (Turnable)" << "Tank (Differential)" << "Motorcycle" << "Boat (Turnable)" << "Boat (Differential)"; m_aircraft->groundVehicleType->addItems(groundVehicleTypes); m_aircraft->groundShape->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_aircraft->groundShape->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - // Set default model to "Turnable (car)" + // Set default model to "Car (Turnable)" connect(m_aircraft->groundVehicleType, SIGNAL(currentIndexChanged(QString)), this, SLOT(setupUI(QString))); - m_aircraft->groundVehicleType->setCurrentIndex(m_aircraft->groundVehicleType->findText("Turnable (car)")); + m_aircraft->groundVehicleType->setCurrentIndex(m_aircraft->groundVehicleType->findText("Car (Turnable)")); setupUI(m_aircraft->groundVehicleType->currentText()); } @@ -122,20 +122,65 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType) m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true); m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); - m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH); + m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); initMixerCurves(frameType); + if (frameType == "GroundVehicleBoat" || frameType == "Boat (Turnable)") { + // Boat + m_vehicleImg->setElementId("boat"); + setComboCurrentIndex(m_aircraft->groundVehicleType, m_aircraft->groundVehicleType->findText("Boat (Turnable)")); + + m_aircraft->gvMotor1ChannelBox->setEnabled(true); + m_aircraft->gvMotor2ChannelBox->setEnabled(true); + + m_aircraft->gvMotor1Label->setText("First motor"); + m_aircraft->gvMotor2Label->setText("Second motor"); + + m_aircraft->gvSteering1ChannelBox->setEnabled(true); + m_aircraft->gvSteering2ChannelBox->setEnabled(true); + + m_aircraft->gvSteering1Label->setText("First rudder"); + m_aircraft->gvSteering2Label->setText("Second rudder"); + + m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle Curve 1"); + m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true); + m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle Curve 2"); + m_aircraft->gvThrottleCurve2GroupBox->setEnabled(false); + + m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); + m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); + + initMixerCurves(frameType); + + // If new setup, set curves values + if (frameTypeSaved->getValue().toString() != "GroundVehicleBoat") { + m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0, 0.0); + m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, 0.0); + } + } else if ((frameType == "GroundVehicleDifferential") || (frameType == "Tank (Differential)") || + (frameType == "GroundVehicleDifferentialBoat") || (frameType == "Boat (Differential)")) { + bool is_Boat = frameType.contains("Boat"); + + if (is_Boat) { + // Boat differential + m_vehicleImg->setElementId("boat_diff"); + setComboCurrentIndex(m_aircraft->groundVehicleType, + m_aircraft->groundVehicleType->findText("Boat (Differential)")); + m_aircraft->gvSteering1Label->setText("First rudder"); + m_aircraft->gvSteering2Label->setText("Second rudder"); + } else { + // Tank + m_vehicleImg->setElementId("tank"); + setComboCurrentIndex(m_aircraft->groundVehicleType, + m_aircraft->groundVehicleType->findText("Tank (Differential)")); + m_aircraft->gvSteering1Label->setText("Front steering"); + m_aircraft->gvSteering2Label->setText("Rear steering"); + } - if (frameType == "GroundVehicleDifferential" || frameType == "Differential (tank)") { - // Tank - m_vehicleImg->setElementId("tank"); - setComboCurrentIndex(m_aircraft->groundVehicleType, - m_aircraft->groundVehicleType->findText("Differential (tank)")); m_aircraft->gvMotor1ChannelBox->setEnabled(true); m_aircraft->gvMotor2ChannelBox->setEnabled(true); - m_aircraft->gvThrottleCurve1GroupBox->setEnabled(false); m_aircraft->gvMotor1Label->setText("Left motor"); m_aircraft->gvMotor2Label->setText("Right motor"); @@ -143,34 +188,34 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType) m_aircraft->gvSteering1ChannelBox->setEnabled(false); m_aircraft->gvSteering2ChannelBox->setEnabled(false); - m_aircraft->gvSteering1Label->setText("Front steering"); - m_aircraft->gvSteering2Label->setText("Rear steering"); - m_aircraft->differentialSteeringSlider1->setEnabled(true); m_aircraft->differentialSteeringSlider2->setEnabled(true); - m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1"); - m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2 "); + m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle Curve 1"); + m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true); + m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle Curve 2 "); + m_aircraft->gvThrottleCurve2GroupBox->setEnabled(false); - m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH); + m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); initMixerCurves(frameType); // If new setup, set sliders to defaults and set curves values - if (frameTypeSaved->getValue().toString() != "GroundVehicleDifferential") { + if ((!is_Boat && (frameTypeSaved->getValue().toString() != "GroundVehicleDifferential")) || + (is_Boat && (frameTypeSaved->getValue().toString() != "GroundVehicleDifferentialBoat"))) { m_aircraft->differentialSteeringSlider1->setValue(100); m_aircraft->differentialSteeringSlider2->setValue(100); - m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 1.0, 0.0); - m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 1.0, 0.0); + m_aircraft->groundVehicleThrottle1->initLinearCurve(5, 0.8, 0.0); + m_aircraft->groundVehicleThrottle2->initLinearCurve(5, 0.8, 0.0); } } else if (frameType == "GroundVehicleMotorcycle" || frameType == "Motorcycle") { // Motorcycle m_vehicleImg->setElementId("motorbike"); setComboCurrentIndex(m_aircraft->groundVehicleType, m_aircraft->groundVehicleType->findText("Motorcycle")); - m_aircraft->gvMotor1ChannelBox->setEnabled(true); - m_aircraft->gvMotor2ChannelBox->setEnabled(false); + m_aircraft->gvMotor1ChannelBox->setEnabled(false); + m_aircraft->gvMotor2ChannelBox->setEnabled(true); m_aircraft->gvMotor2Label->setText("Rear motor"); @@ -181,10 +226,10 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType) m_aircraft->gvSteering2Label->setText("Balancing"); // Curve1 for Motorcyle - m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1"); + m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle Curve 1"); m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true); - m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2"); - m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true); + m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle Curve 2"); + m_aircraft->gvThrottleCurve2GroupBox->setEnabled(false); m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); @@ -199,7 +244,7 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType) } else { // Car m_vehicleImg->setElementId("car"); - setComboCurrentIndex(m_aircraft->groundVehicleType, m_aircraft->groundVehicleType->findText("Turnable (car)")); + setComboCurrentIndex(m_aircraft->groundVehicleType, m_aircraft->groundVehicleType->findText("Car (Turnable)")); m_aircraft->gvMotor1ChannelBox->setEnabled(true); m_aircraft->gvMotor2ChannelBox->setEnabled(true); @@ -213,12 +258,12 @@ void ConfigGroundVehicleWidget::setupUI(QString frameType) m_aircraft->gvSteering1Label->setText("Front steering"); m_aircraft->gvSteering2Label->setText("Rear steering"); - m_aircraft->gvThrottleCurve2GroupBox->setTitle("Throttle curve2"); - m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true); - m_aircraft->gvThrottleCurve1GroupBox->setTitle("Throttle curve1"); + m_aircraft->gvThrottleCurve1GroupBox->setTitle("Front Motor Throttle Curve"); m_aircraft->gvThrottleCurve1GroupBox->setEnabled(true); + m_aircraft->gvThrottleCurve2GroupBox->setTitle("Rear Motor Throttle Curve"); + m_aircraft->gvThrottleCurve2GroupBox->setEnabled(true); - m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_PITCH); + m_aircraft->groundVehicleThrottle2->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); m_aircraft->groundVehicleThrottle1->setMixerType(MixerCurve::MIXERCURVE_THROTTLE); initMixerCurves(frameType); @@ -288,7 +333,7 @@ void ConfigGroundVehicleWidget::refreshWidgetsValues(QString frameType) setComboCurrentIndex(m_aircraft->gvSteering1ChannelBox, config.ground.GroundVehicleSteering1); setComboCurrentIndex(m_aircraft->gvSteering2ChannelBox, config.ground.GroundVehicleSteering2); - if (frameType == "GroundVehicleDifferential") { + if (frameType.contains("GroundVehicleDifferential")) { // Find the channel number for Motor1 int channel = m_aircraft->gvMotor1ChannelBox->currentIndex() - 1; if (channel > -1) { @@ -322,7 +367,7 @@ void ConfigGroundVehicleWidget::initMixerCurves(QString frameType) m_aircraft->groundVehicleThrottle1->initCurve(&curveValues); } else { // no, init a straight curve - if (frameType == "GroundVehicleDifferential") { + if (frameType.contains("GroundVehicleDifferential")) { m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 0.8, 0.0); } else if (frameType == "GroundVehicleCar") { m_aircraft->groundVehicleThrottle1->initLinearCurve(curveValues.count(), 1.0, 0.0); @@ -338,7 +383,7 @@ void ConfigGroundVehicleWidget::initMixerCurves(QString frameType) m_aircraft->groundVehicleThrottle2->initCurve(&curveValues); } else { // no, init a straight curve - if (frameType == "GroundVehicleDifferential") { + if (frameType.contains("GroundVehicleDifferential")) { m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 0.8, 0.0); } else if (frameType == "GroundVehicleCar") { m_aircraft->groundVehicleThrottle2->initLinearCurve(curveValues.count(), 1.0, 0.0); @@ -363,10 +408,16 @@ QString ConfigGroundVehicleWidget::updateConfigObjectsFromWidgets() setThrottleCurve(mixer, VehicleConfig::MIXER_THROTTLECURVE2, m_aircraft->groundVehicleThrottle2->getCurve()); // All airframe types must start with "GroundVehicle" - if (m_aircraft->groundVehicleType->currentText() == "Turnable (car)") { + if (m_aircraft->groundVehicleType->currentText() == "Boat (Differential)") { + airframeType = "GroundVehicleDifferentialBoat"; + setupGroundVehicleDifferential(airframeType); + } else if (m_aircraft->groundVehicleType->currentText() == "Boat (Turnable)") { + airframeType = "GroundVehicleBoat"; + setupGroundVehicleTurnable(airframeType); + } else if (m_aircraft->groundVehicleType->currentText() == "Car (Turnable)") { airframeType = "GroundVehicleCar"; - setupGroundVehicleCar(airframeType); - } else if (m_aircraft->groundVehicleType->currentText() == "Differential (tank)") { + setupGroundVehicleTurnable(airframeType); + } else if (m_aircraft->groundVehicleType->currentText() == "Tank (Differential)") { airframeType = "GroundVehicleDifferential"; setupGroundVehicleDifferential(airframeType); } else { @@ -460,13 +511,13 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleDifferential(QString airframeT // left motor int channel = m_aircraft->gvMotor1ChannelBox->currentIndex() - 1; setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_REVERSABLEMOTOR); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127); setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, yawmotor1); // right motor channel = m_aircraft->gvMotor2ChannelBox->currentIndex() - 1; setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_REVERSABLEMOTOR); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127); + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127); setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW, -yawmotor2); // Output success message @@ -480,7 +531,7 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleDifferential(QString airframeT Returns False if impossible to create the mixer. */ -bool ConfigGroundVehicleWidget::setupGroundVehicleCar(QString airframeType) +bool ConfigGroundVehicleWidget::setupGroundVehicleTurnable(QString airframeType) { // Check coherence: // Show any config errors in GUI @@ -517,8 +568,13 @@ bool ConfigGroundVehicleWidget::setupGroundVehicleCar(QString airframeType) channel = m_aircraft->gvMotor2ChannelBox->currentIndex() - 1; setMixerType(mixer, channel, VehicleConfig::MIXERTYPE_REVERSABLEMOTOR); - setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127); - + if (airframeType == "GroundVehicleCar") { + // Car: Throttle2 curve for 2nd motor + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE2, 127); + } else { + // Boat: Throttle1 curve for both motors + setMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_THROTTLECURVE1, 127); + } // Output success message m_aircraft->gvStatusLabel->setText("Mixer generated"); @@ -539,7 +595,7 @@ bool ConfigGroundVehicleWidget::throwConfigError(QString airframeType) pixmap.fill(QColor("red")); - if (airframeType == "GroundVehicleCar") { // Car + if ((airframeType == "GroundVehicleCar") || (airframeType == "GroundVehicleBoat")) { // Car if (m_aircraft->gvMotor1ChannelBox->currentText() == "None" && m_aircraft->gvMotor2ChannelBox->currentText() == "None") { m_aircraft->gvMotor1ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes @@ -559,7 +615,7 @@ bool ConfigGroundVehicleWidget::throwConfigError(QString airframeType) m_aircraft->gvSteering1ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes m_aircraft->gvSteering2ChannelBox->setItemData(0, 0, Qt::DecorationRole); // Reset color palettes } - } else if (airframeType == "GroundVehicleDifferential") { // Tank + } else if (airframeType.contains("GroundVehicleDifferential")) { // differential Tank and Boat if (m_aircraft->gvMotor1ChannelBox->currentText() == "None" || m_aircraft->gvMotor2ChannelBox->currentText() == "None") { m_aircraft->gvMotor1ChannelBox->setItemData(0, pixmap, Qt::DecorationRole); // Set color palettes diff --git a/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.h b/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.h index b9216665b..31bdd167f 100644 --- a/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.h +++ b/ground/gcs/src/plugins/config/cfg_vehicletypes/configgroundvehiclewidget.h @@ -2,7 +2,8 @@ ****************************************************************************** * * @file configgroundvehiclewidget.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup GCSPlugins GCS Plugins * @{ * @addtogroup ConfigPlugin Config Plugin @@ -64,7 +65,7 @@ private: virtual void registerWidgets(ConfigTaskWidget &parent); virtual void resetActuators(GUIConfigDataUnion *configData); - bool setupGroundVehicleCar(QString airframeType); + bool setupGroundVehicleTurnable(QString airframeType); bool setupGroundVehicleDifferential(QString airframeType); bool setupGroundVehicleMotorcycle(QString airframeType); diff --git a/ground/gcs/src/plugins/config/configinputwidget.cpp b/ground/gcs/src/plugins/config/configinputwidget.cpp index d0e77a50c..9df7c0906 100644 --- a/ground/gcs/src/plugins/config/configinputwidget.cpp +++ b/ground/gcs/src/plugins/config/configinputwidget.cpp @@ -882,10 +882,18 @@ void ConfigInputWidget::wizardTearDownStep(enum wizardSteps step) transmitterType = acro; } else if (wizardUi->typeGround->isChecked()) { transmitterType = ground; - /* Make sure to tell controller, this is really a ground vehicle. */ + systemSettingsData = systemSettingsObj->getData(); - systemSettingsData.AirframeType = SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR; - systemSettingsObj->setData(systemSettingsData); + /* Make sure to tell controller, this is really a ground vehicle. */ + if ((systemSettingsData.AirframeType != SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR) || + (systemSettingsData.AirframeType != SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIAL) || + (systemSettingsData.AirframeType != SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE) || + (systemSettingsData.AirframeType != SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEBOAT) || + (systemSettingsData.AirframeType != SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIALBOAT)) { + // Apply default ground vehicle airframe + systemSettingsData.AirframeType = SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR; + systemSettingsObj->setData(systemSettingsData); + } } else { transmitterType = heli; } @@ -1990,7 +1998,11 @@ void ConfigInputWidget::simpleCalibration(bool enable) manualSettingsData = manualSettingsObj->getData(); systemSettingsData = systemSettingsObj->getData(); - if (systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR) { + if ((systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR) || + (systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIAL) || + (systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE) || + (systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEBOAT) || + (systemSettingsData.AirframeType == SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIALBOAT)) { QMessageBox::warning(this, tr("Ground Vehicle"), tr("

Please center throttle control and press OK when ready.

")); diff --git a/ground/gcs/src/plugins/config/configvehicletypewidget.cpp b/ground/gcs/src/plugins/config/configvehicletypewidget.cpp index 69ec26829..9e35c40d6 100644 --- a/ground/gcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/gcs/src/plugins/config/configvehicletypewidget.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * * @file configvehicletypewidget.cpp - * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. * E. Lafargue, K. Sebesta & The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012 * @addtogroup GCSPlugins GCS Plugins * @{ @@ -99,6 +99,8 @@ QStringList ConfigVehicleTypeWidget::getChannelDescriptions() case SystemSettings::AIRFRAMETYPE_GROUNDVEHICLECAR: case SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIAL: case SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE: + case SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEBOAT: + case SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIALBOAT: // ground channelDesc = ConfigGroundVehicleWidget::getChannelDescriptions(); break; @@ -282,9 +284,11 @@ int ConfigVehicleTypeWidget::frameCategory(QString frameType) return ConfigVehicleTypeWidget::MULTIROTOR; } else if (frameType == "HeliCP") { return ConfigVehicleTypeWidget::HELICOPTER; - } else if (frameType == "GroundVehicleCar" || frameType == "Turnable (car)" - || frameType == "GroundVehicleDifferential" || frameType == "Differential (tank)" - || frameType == "GroundVehicleMotorcycle" || frameType == "Motorcycle") { + } else if (frameType == "GroundVehicleCar" || frameType == "Car (Turnable)" + || frameType == "GroundVehicleDifferential" || frameType == "Tank (Differential)" + || frameType == "GroundVehicleMotorcycle" || frameType == "Motorcycle" + || frameType == "GroundVehicleBoat" || frameType == "Boat (Turnable)" + || frameType == "GroundVehicleDifferentialBoat" || frameType == "Boat (Differential)") { return ConfigVehicleTypeWidget::GROUND; } else { return ConfigVehicleTypeWidget::CUSTOM; diff --git a/ground/gcs/src/plugins/config/images/ground-shapes.svg b/ground/gcs/src/plugins/config/images/ground-shapes.svg index 730da9a62..d1efcd420 100644 --- a/ground/gcs/src/plugins/config/images/ground-shapes.svg +++ b/ground/gcs/src/plugins/config/images/ground-shapes.svg @@ -14,9 +14,9 @@ id="Layer_1" x="0px" y="0px" - width="665.06097" - height="2346.0632" - viewBox="0 0 665.06097 2346.0632" + width="804.33447" + height="3250.895" + viewBox="0 0 804.33447 3250.895" enable-background="new 0 0 792 1008" xml:space="preserve" inkscape:version="0.91 r13725" @@ -26,7 +26,7 @@ inkscape:export-ydpi="70.479134">image/svg+xml \ No newline at end of file diff --git a/ground/gcs/src/plugins/setupwizard/connectiondiagram.cpp b/ground/gcs/src/plugins/setupwizard/connectiondiagram.cpp index 5ea7fea46..c8f02c137 100644 --- a/ground/gcs/src/plugins/setupwizard/connectiondiagram.cpp +++ b/ground/gcs/src/plugins/setupwizard/connectiondiagram.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * * @file connectiondiagram.cpp - * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup * @{ @@ -159,6 +159,12 @@ void ConnectionDiagram::setupGraphicsScene() case VehicleConfigurationSource::GROUNDVEHICLE_MOTORCYCLE: elementsToShow << "motorbike"; break; + case VehicleConfigurationSource::GROUNDVEHICLE_BOAT: + elementsToShow << "boat"; + break; + case VehicleConfigurationSource::GROUNDVEHICLE_DIFFERENTIAL_BOAT: + elementsToShow << "boat_diff"; + break; default: break; } diff --git a/ground/gcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp b/ground/gcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp index be54e549e..f1836c73e 100644 --- a/ground/gcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp +++ b/ground/gcs/src/plugins/setupwizard/pages/outputcalibrationpage.cpp @@ -82,9 +82,11 @@ void OutputCalibrationPage::setupActuatorMinMaxAndNeutral(int motorChannelStart, m_actuatorSettings[servoid].channelNeutral = LOW_OUTPUT_RATE_MILLISECONDS; m_actuatorSettings[servoid].channelMax = getHighOutputRate(); m_actuatorSettings[servoid].isReversableMotor = false; - // Car and Tank should use reversable Esc/motors + // Car, Tank, Boat and Boat differential should use reversable Esc/motors if ((getWizard()->getVehicleSubType() == SetupWizard::GROUNDVEHICLE_CAR) - || (getWizard()->getVehicleSubType() == SetupWizard::GROUNDVEHICLE_DIFFERENTIAL)) { + || (getWizard()->getVehicleSubType() == SetupWizard::GROUNDVEHICLE_DIFFERENTIAL) + || (getWizard()->getVehicleSubType() == SetupWizard::GROUNDVEHICLE_BOAT) + || (getWizard()->getVehicleSubType() == SetupWizard::GROUNDVEHICLE_DIFFERENTIAL_BOAT)) { m_actuatorSettings[servoid].channelNeutral = NEUTRAL_OUTPUT_RATE_MILLISECONDS; m_actuatorSettings[servoid].isReversableMotor = true; // Set initial output value @@ -290,6 +292,30 @@ void OutputCalibrationPage::setupVehicle() setupActuatorMinMaxAndNeutral(3, 3, 2); + getWizard()->setActuatorSettings(m_actuatorSettings); + break; + case SetupWizard::GROUNDVEHICLE_BOAT: + loadSVGFile(GROUND_SVG_FILE); + m_wizardIndexes << 0 << 1 << 2; + m_vehicleElementIds << "boat" << "boat-frame" << "boat-motor" << "boat-rudder"; + m_vehicleElementTypes << FULL << FRAME << MOTOR << SERVO; + m_vehicleHighlightElementIndexes << 0 << 1 << 2; + m_channelIndex << 0 << 3 << 0; + + setupActuatorMinMaxAndNeutral(3, 3, 2); + + getWizard()->setActuatorSettings(m_actuatorSettings); + break; + case SetupWizard::GROUNDVEHICLE_DIFFERENTIAL_BOAT: + loadSVGFile(GROUND_SVG_FILE); + m_wizardIndexes << 0 << 1 << 1; + m_vehicleElementIds << "boat_diff" << "boat_diff-frame" << "boat_diff-left-motor" << "boat_diff-right-motor"; + m_vehicleElementTypes << FULL << FRAME << MOTOR << MOTOR; + m_vehicleHighlightElementIndexes << 0 << 1 << 2; + m_channelIndex << 0 << 0 << 1; + + setupActuatorMinMaxAndNeutral(0, 1, 2); + getWizard()->setActuatorSettings(m_actuatorSettings); break; diff --git a/ground/gcs/src/plugins/setupwizard/pages/surfacepage.cpp b/ground/gcs/src/plugins/setupwizard/pages/surfacepage.cpp index 405f1a4c9..dc5ded76b 100644 --- a/ground/gcs/src/plugins/setupwizard/pages/surfacepage.cpp +++ b/ground/gcs/src/plugins/setupwizard/pages/surfacepage.cpp @@ -2,7 +2,8 @@ ****************************************************************************** * * @file surfacepage.cpp - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2014. * @addtogroup * @{ * @addtogroup SurfacePage @@ -56,12 +57,12 @@ void SurfacePage::setupSelection(Selection *selection) "Please select the type of ground vehicle you want to create a configuration for below:")); selection->addItem(tr("Car"), - tr("This setup expects a traditional car with a rear motor and a front streering servo"), + tr("This setup expects a traditional car with a rear motor and a front steering servo."), "car", SetupWizard::GROUNDVEHICLE_CAR); selection->addItem(tr("Tank"), - tr("This setup expects a traditional vehicle using only two motors and differential steering"), + tr("This setup expects a traditional vehicle using only two motors and differential steering."), "tank", SetupWizard::GROUNDVEHICLE_DIFFERENTIAL); @@ -69,4 +70,14 @@ void SurfacePage::setupSelection(Selection *selection) tr("This setup currently expects a motorcyle setup, using one motor and one servo for steering."), "motorbike", SetupWizard::GROUNDVEHICLE_MOTORCYCLE); + + selection->addItem(tr("Boat"), + tr("This setup currently expects a boat setup, using one motor and one servo for rudder/helm."), + "boat", + SetupWizard::GROUNDVEHICLE_BOAT); + + selection->addItem(tr("Boat differential"), + tr("This setup expects a boat using only two motors and differential steering."), + "boat_diff", + SetupWizard::GROUNDVEHICLE_DIFFERENTIAL_BOAT); } diff --git a/ground/gcs/src/plugins/setupwizard/resources/connection-diagrams.svg b/ground/gcs/src/plugins/setupwizard/resources/connection-diagrams.svg index 7a5acbdea..0792b247a 100644 --- a/ground/gcs/src/plugins/setupwizard/resources/connection-diagrams.svg +++ b/ground/gcs/src/plugins/setupwizard/resources/connection-diagrams.svg @@ -27,16 +27,16 @@ inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" - inkscape:window-height="983" + inkscape:window-height="1016" id="namedview4616" showgrid="false" - inkscape:zoom="0.7387262" - inkscape:cx="699.29419" - inkscape:cy="537.41156" + inkscape:zoom="0.82128601" + inkscape:cx="866.11172" + inkscape:cy="491.62738" inkscape:window-x="0" inkscape:window-y="27" inkscape:window-maximized="1" - inkscape:current-layer="layer79" + inkscape:current-layer="layer94" fit-margin-top="15" fit-margin-left="15" fit-margin-right="15" @@ -19258,6 +19258,240 @@ y1="1450" x2="1490" y2="1450" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -56391,34 +56625,34 @@ transform="matrix(1.0251161,0,0,-1.0251161,645.40289,1667.6177)"> @@ -56433,7 +56667,7 @@ transform="translate(175.5146,1564.4219)"> @@ -56455,7 +56689,7 @@ id="g10097"> @@ -56480,7 +56714,7 @@ id="g10129"> @@ -56493,7 +56727,7 @@ id="g10143"> @@ -56508,7 +56742,7 @@ transform="translate(587.4541,1567.4229)"> @@ -56530,7 +56764,7 @@ id="g10205"> @@ -56555,7 +56789,7 @@ id="g10237"> @@ -56566,17 +56800,17 @@ @@ -56612,7 +56846,7 @@ id="g10309"> @@ -56637,7 +56871,7 @@ id="g10341"> @@ -56648,22 +56882,22 @@ @@ -56725,19 +56959,19 @@ style="fill:#6b6b6b;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.99199998px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" /> @@ -56749,90 +56983,90 @@ style="fill:none;stroke:#000000;stroke-width:0.99212599px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" /> @@ -56845,7 +57079,7 @@ style="fill:#4d4d4d;fill-rule:nonzero" /> @@ -56861,22 +57095,22 @@ @@ -56887,23 +57121,23 @@ @@ -57017,26 +57251,26 @@ sodipodi:nodetypes="ccc" id="path9977" style="opacity:0.6;fill:none;stroke:#ff0000;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#Arrow2Send)" - d="m 684.6044,148.81326 l 72.17444,0 l 99.49693,-20.7551" + d="M 684.6044,148.81326 L 756.77884,148.81326 L 856.27577,128.05816" stroke-miterlimit="4" inkscape:connector-curvature="0" /> @@ -57069,13 +57303,13 @@ inkscape:connector-curvature="0" style="fill:none;stroke:#2e2d2d;stroke-width:23.29394341;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" id="path5043-4" - d="m 1237.6152,301.80531 c 3.018,3e-5 5.4616,-2.09563 5.4616,-4.68391 c 0,-2.58533 -2.4453,-4.68243 -5.4616,-4.6839 l -270.99659,0.002 c -3.01799,0 -5.46165,2.09566 -5.46165,4.68392 c 0,2.58536 2.44533,4.68245 5.46179,4.68392 l 270.99645,-0.002 z" /> + d="M 1237.6152,301.80531 C 1240.6332,301.80534 1243.0768,299.70968 1243.0768,297.1214 C 1243.0768,294.53607 1240.6315,292.43897 1237.6152,292.4375 L 966.61861,292.4395 C 963.60062,292.4395 961.15696,294.53516 961.15696,297.12342 C 961.15696,299.70878 963.60229,301.80587 966.61875,301.80734 L 1237.6152,301.80534 Z" /> + d="M 1061.0892,39.3142 L 1138.9152,39.3142 C 1141.0666,39.3142 1147.0411,44.625059 1147.0411,51.179153 L 1147.0411,301.14395 C 1147.0411,307.70608 1141.0666,313.03305 1138.9152,313.03305 L 1067.4282,313.03305 C 1065.2743,313.03305 1057.1973,307.70608 1057.1973,301.14395 L 1057.1973,51.179153 C 1057.1973,44.625059 1065.2743,39.3142 1067.4282,39.3142" /> @@ -57113,23 +57347,23 @@ @@ -57255,7 +57489,7 @@ inkscape:connector-curvature="0" style="fill:#b1c7eb;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5075-0" - d="m 0,0 c 33.172,-33.223 33.172,-87.071 -0.049,-120.245 c -33.215,-33.22 -87.06,-33.22 -120.24,0 c -33.213,33.174 -33.213,87.021 0.008,120.237 C -87.066,33.214 -33.221,33.215 0,0" /> + d="M 0,0 C 33.172,-33.223 33.172,-87.071 -0.049,-120.245 C -33.264,-153.465 -87.109,-153.465 -120.289,-120.245 C -153.502,-87.071 -153.502,-33.224 -120.281,-0.008 C -87.066,33.214 -33.221,33.215 0,0" /> @@ -57283,7 +57517,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39816-2);fill-opacity:1;stroke:none" id="path5353-4" - d="m 939.441,1484.164 c -3.009,-9.776 -12.107,-16.872 -22.865,-16.875 c -12.172,0 -22.205,9.107 -23.699,20.877 l 12.014,0 l -35.604,35.601 l -35.599,-35.601 l 11.283,0 c 1.64,-31.106 27.381,-55.821 58.888,-55.811 c 23.629,-0.01 44.004,13.895 53.426,33.963 l -17.844,17.846 z" /> + d="M 939.441,1484.164 C 936.432,1474.388 927.334,1467.292 916.576,1467.289 C 904.404,1467.289 894.371,1476.396 892.877,1488.166 L 904.891,1488.166 L 869.287,1523.767 L 833.688,1488.166 L 844.971,1488.166 C 846.611,1457.06 872.352,1432.345 903.859,1432.355 C 927.488,1432.345 947.863,1446.25 957.285,1466.318 L 939.441,1484.164 Z" /> @@ -57309,7 +57543,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39814-0);fill-opacity:1;stroke:none" id="path5385-8" - d="m 989.162,1494.462 c -1.295,31.435 -27.178,56.541 -58.93,56.528 c -23.839,0 -44.363,-14.144 -53.666,-34.502 l 17.444,-17.442 c 3.242,9.351 12.109,16.068 22.572,16.066 c 12.092,0.01 22.066,-8.989 23.662,-20.65 l -11.103,0 l 10.3,-10.3 l 17.844,-17.846 l 7.457,-7.457 l 35.602,35.601 l -11.182,0 z" /> + d="M 989.162,1494.462 C 987.867,1525.897 961.984,1551.003 930.232,1550.99 C 906.393,1550.99 885.869,1536.846 876.566,1516.488 L 894.01,1499.046 C 897.252,1508.397 906.119,1515.114 916.582,1515.112 C 928.674,1515.122 938.648,1506.123 940.244,1494.462 L 929.141,1494.462 L 939.441,1484.162 L 957.285,1466.316 L 964.742,1458.859 L 1000.344,1494.46 L 989.162,1494.46 Z" /> @@ -57320,12 +57554,12 @@ inkscape:connector-curvature="0" style="fill:#48484a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5389-0" - d="m 969.4838,35.32925 c 11.755,11.76625 11.755,30.8375 -0.01,42.59625 c -11.75747,11.7625 -30.82997,11.7625 -42.59497,0 c -11.755,-11.75875 -11.755,-30.8275 0.01,-42.58625 c 11.7575,-11.765 30.83,-11.76625 42.59496,-0.0125" /> + d="M 969.4838,35.32925 C 981.2388,47.0955 981.2388,66.16675 969.4738,77.9255 C 957.71633,89.688 938.64383,89.688 926.87883,77.9255 C 915.12383,66.16675 915.12383,47.098 926.88883,35.33925 C 938.64633,23.57425 957.71883,23.573 969.48379,35.32675" /> + d="M 946.85808,66.63225 L 946.85808,52.98475 L 943.39434,55.66225 L 941.10933,52.5385 L 947.22433,48.051 L 951.26684,48.051 L 951.26684,66.63225 L 946.85808,66.63225 Z" /> @@ -57343,7 +57577,7 @@ inkscape:connector-curvature="0" style="fill:#b1c7eb;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5059-7" - d="m 0,0 c 33.174,-33.223 33.174,-87.071 -0.049,-120.245 c -33.217,-33.22 -87.064,-33.22 -120.246,0 c -33.215,33.174 -33.215,87.021 0.008,120.237 C -87.07,33.214 -33.223,33.215 0,0" /> + d="M 0,0 C 33.174,-33.223 33.174,-87.071 -0.049,-120.245 C -33.266,-153.465 -87.113,-153.465 -120.295,-120.245 C -153.51,-87.071 -153.51,-33.224 -120.287,-0.008 C -87.07,33.214 -33.223,33.215 0,0" /> @@ -57366,7 +57600,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39820-6);fill-opacity:1;stroke:none" id="path5161-8" - d="m 1086.99,1484.162 c 3.008,-9.774 12.108,-16.87 22.864,-16.873 c 12.173,0 22.207,9.109 23.701,20.878 l -12.014,-10e-4 l 35.604,35.604 l 35.601,-35.603 l -11.285,0 c -1.641,-31.105 -27.381,-55.822 -58.889,-55.814 c -23.629,-0.01 -44.006,13.897 -53.427,33.965 l 17.845,17.844 z" /> + d="M 1086.99,1484.162 C 1089.998,1474.388 1099.098,1467.292 1109.854,1467.289 C 1122.027,1467.289 1132.061,1476.398 1133.555,1488.167 L 1121.541,1488.166 L 1157.145,1523.77 L 1192.746,1488.167 L 1181.461,1488.167 C 1179.82,1457.062 1154.08,1432.345 1122.572,1432.353 C 1098.943,1432.343 1078.566,1446.25 1069.145,1466.318 L 1086.99,1484.162 Z" /> @@ -57392,7 +57626,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39818-1);fill-opacity:1;stroke:none" id="path5193-7" - d="m 1037.268,1494.462 c 1.295,31.435 27.179,56.542 58.933,56.529 c 23.84,0.01 44.363,-14.143 53.666,-34.501 l -17.443,-17.444 c -3.244,9.353 -12.111,16.07 -22.574,16.067 c -12.092,0.01 -22.067,-8.99 -23.664,-20.651 l 11.105,0 l -10.301,-10.302 l -17.845,-17.844 l -7.457,-7.457 l -35.602,35.601 l 11.182,0 z" /> + d="M 1037.268,1494.462 C 1038.563,1525.897 1064.447,1551.004 1096.201,1550.991 C 1120.041,1551.001 1140.564,1536.848 1149.867,1516.49 L 1132.424,1499.046 C 1129.18,1508.399 1120.313,1515.116 1109.85,1515.113 C 1097.758,1515.123 1087.783,1506.123 1086.186,1494.462 L 1097.291,1494.462 L 1086.99,1484.16 L 1069.145,1466.316 L 1061.688,1458.859 L 1026.086,1494.46 L 1037.268,1494.46 Z" /> @@ -57403,12 +57637,12 @@ inkscape:connector-curvature="0" style="fill:#48484a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5397-5" - d="m 1276.7533,35.32925 c 11.755,11.76625 11.755,30.8375 -0.013,42.59625 c -11.7575,11.7625 -30.83,11.7625 -42.5975,0 c -11.755,-11.75875 -11.755,-30.8275 0.013,-42.58625 c 11.7575,-11.765 30.83,-11.76625 42.5975,-0.0125" /> + d="M 1276.7533,35.32925 C 1288.5083,47.0955 1288.5083,66.16675 1276.7403,77.9255 C 1264.9828,89.688 1245.9103,89.688 1234.1428,77.9255 C 1222.3878,66.16675 1222.3878,47.098 1234.1558,35.33925 C 1245.9133,23.57425 1264.9858,23.573 1276.7533,35.32675" /> + d="M 1247.4308,65.38175 L 1247.4308,61.708 L 1254.6746,55.14675 C 1255.5921,54.2805 1256.1971,53.41425 1256.1971,52.2855 C 1256.1971,50.973 1255.2771,50.05425 1253.8871,50.05425 C 1252.4171,50.05425 1251.4471,51.20925 1251.2621,52.863 L 1247.0383,52.2855 C 1247.4571,48.533 1250.5021,46.30175 1254.1233,46.30175 C 1257.5358,46.30175 1260.8421,48.113 1260.8421,51.99675 C 1260.8421,54.648 1259.2933,56.1955 1257.5871,57.718 L 1253.2833,61.5505 L 1260.8683,61.5505 L 1260.8683,65.38175 L 1247.4308,65.38175 Z" /> @@ -57426,7 +57660,7 @@ inkscape:connector-curvature="0" style="fill:#b1c7eb;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5107-4" - d="m 0,0 c 33.172,-33.223 33.172,-87.07 -0.049,-120.244 c -33.215,-33.221 -87.06,-33.221 -120.24,0 c -33.213,33.174 -33.213,87.019 0.008,120.236 C -87.066,33.213 -33.221,33.215 0,0" /> + d="M 0,0 C 33.172,-33.223 33.172,-87.07 -0.049,-120.244 C -33.264,-153.465 -87.109,-153.465 -120.289,-120.244 C -153.502,-87.07 -153.502,-33.225 -120.281,-0.008 C -87.066,33.213 -33.221,33.215 0,0" /> @@ -57449,7 +57683,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39826-1);fill-opacity:1;stroke:none" id="path5225-1" - d="m 894.977,1292.144 c 3.009,-9.774 12.107,-16.87 22.865,-16.873 c 12.172,0 22.205,9.107 23.699,20.876 l -12.014,-10e-4 l 35.604,35.603 l 35.601,-35.602 l -11.285,0 c -1.64,-31.105 -27.381,-55.82 -58.888,-55.812 c -23.627,-0.01 -44.004,13.896 -53.426,33.965 l 17.844,17.844 z" /> + d="M 894.977,1292.144 C 897.986,1282.37 907.084,1275.274 917.842,1275.271 C 930.014,1275.271 940.047,1284.378 941.541,1296.147 L 929.527,1296.146 L 965.131,1331.749 L 1000.732,1296.147 L 989.447,1296.147 C 987.807,1265.042 962.066,1240.327 930.559,1240.335 C 906.932,1240.325 886.555,1254.231 877.133,1274.3 L 894.977,1292.144 Z" /> @@ -57475,7 +57709,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39828-6);fill-opacity:1;stroke:none" id="path5257-5" - d="m 845.256,1302.444 c 1.295,31.436 27.178,56.541 58.93,56.528 c 23.839,0 44.363,-14.145 53.666,-34.502 l -17.444,-17.444 c -3.242,9.354 -12.109,16.071 -22.572,16.069 c -12.092,0.01 -22.065,-8.991 -23.662,-20.651 l 11.105,0 l -10.302,-10.302 l -17.844,-17.844 l -7.457,-7.457 l -35.602,35.601 l 11.182,0 z" /> + d="M 845.256,1302.444 C 846.551,1333.88 872.434,1358.985 904.186,1358.972 C 928.025,1358.972 948.549,1344.827 957.852,1324.47 L 940.408,1307.026 C 937.166,1316.38 928.299,1323.097 917.836,1323.095 C 905.744,1323.105 895.771,1314.104 894.174,1302.444 L 905.279,1302.444 L 894.977,1292.142 L 877.133,1274.298 L 869.676,1266.841 L 834.074,1302.442 L 845.256,1302.442 Z" /> @@ -57486,12 +57720,12 @@ inkscape:connector-curvature="0" style="fill:#48484a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5405-2" - d="m 969.4838,275.35487 c 11.755,11.765 11.755,30.83501 -0.01,42.5925 c -11.75747,11.76501 -30.82997,11.76501 -42.59247,0 c -11.7575,-11.75749 -11.7575,-30.8275 0.008,-42.58499 c 11.7575,-11.765 30.83,-11.765 42.59496,-0.0125" /> + d="M 969.4838,275.35487 C 981.2388,287.11987 981.2388,306.18988 969.4738,317.94737 C 957.71633,329.71238 938.64383,329.71238 926.88133,317.94737 C 915.12383,306.18988 915.12383,287.11987 926.88933,275.36238 C 938.64683,263.59738 957.71933,263.59738 969.48429,275.34988" /> + d="M 948.85271,291.73913 L 948.77391,291.73913 L 944.36391,298.61663 L 948.85266,298.61663 L 948.85266,291.73913 Z M 952.94646,302.18538 L 952.94646,305.80662 L 948.82646,305.80662 L 948.82646,302.18538 L 940.08521,302.18538 L 940.08521,298.48412 L 947.64396,287.22537 L 952.92021,287.22537 L 952.92021,298.61663 L 955.49271,298.61663 L 955.49271,302.18538 L 952.94646,302.18538 Z" /> @@ -57509,7 +57743,7 @@ inkscape:connector-curvature="0" style="fill:#b1c7eb;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5091-5" - d="m 0,0 c 33.174,-33.223 33.174,-87.07 -0.049,-120.244 c -33.217,-33.221 -87.064,-33.221 -120.246,0 c -33.215,33.174 -33.215,87.019 0.008,120.236 C -87.07,33.213 -33.223,33.215 0,0" /> + d="M 0,0 C 33.174,-33.223 33.174,-87.07 -0.049,-120.244 C -33.266,-153.465 -87.113,-153.465 -120.295,-120.244 C -153.51,-87.07 -153.51,-33.225 -120.287,-0.008 C -87.07,33.213 -33.223,33.215 0,0" /> @@ -57532,7 +57766,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39824-5);fill-opacity:1;stroke:none" id="path5289-5" - d="m 1131.455,1292.144 c -3.008,-9.776 -12.107,-16.872 -22.865,-16.875 c -12.172,0 -22.205,9.109 -23.701,20.878 l 12.015,-10e-4 l -35.605,35.603 l -35.6,-35.6 l 11.283,0 c 1.641,-31.107 27.383,-55.822 58.891,-55.814 c 23.629,-0.012 44.006,13.894 53.428,33.963 l -17.846,17.846 z" /> + d="M 1131.455,1292.144 C 1128.447,1282.368 1119.348,1275.272 1108.59,1275.269 C 1096.418,1275.269 1086.385,1284.378 1084.889,1296.147 L 1096.904,1296.146 L 1061.299,1331.749 L 1025.699,1296.149 L 1036.982,1296.149 C 1038.623,1265.042 1064.365,1240.327 1095.873,1240.335 C 1119.502,1240.323 1139.879,1254.229 1149.301,1274.298 L 1131.455,1292.144 Z" /> @@ -57558,7 +57792,7 @@ inkscape:connector-curvature="0" style="fill:url(#radialGradient39822-2);fill-opacity:1;stroke:none" id="path5321-5" - d="m 1181.178,1302.442 c -1.295,31.436 -27.182,56.543 -58.934,56.53 c -23.84,0.01 -44.363,-14.143 -53.666,-34.5 l 17.443,-17.446 c 3.245,9.354 12.112,16.071 22.575,16.069 c 12.092,0.01 22.064,-8.991 23.664,-20.651 l -11.106,0 l 10.301,-10.3 l 17.846,-17.846 l 7.457,-7.457 l 35.601,35.601 l -11.181,0 z" /> + d="M 1181.178,1302.442 C 1179.883,1333.878 1153.996,1358.985 1122.244,1358.972 C 1098.404,1358.982 1077.881,1344.829 1068.578,1324.472 L 1086.021,1307.026 C 1089.266,1316.38 1098.133,1323.097 1108.596,1323.095 C 1120.688,1323.105 1130.66,1314.104 1132.26,1302.444 L 1121.154,1302.444 L 1131.455,1292.144 L 1149.301,1274.298 L 1156.758,1266.841 L 1192.359,1302.442 L 1181.178,1302.442 Z" /> @@ -57569,23 +57803,23 @@ inkscape:connector-curvature="0" style="fill:#48484a;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path5413-7" - d="m 1275.5033,275.35237 c 11.755,11.76501 11.755,30.83751 -0.013,42.595 c -11.7575,11.76501 -30.83,11.76501 -42.5975,0 c -11.755,-11.75749 -11.755,-30.8275 0.013,-42.58499 c 11.7575,-11.765 30.83,-11.765 42.5975,-0.0125" /> + d="M 1275.5033,275.35237 C 1287.2583,287.11738 1287.2583,306.18988 1275.4903,317.94737 C 1263.7328,329.71238 1244.6603,329.71238 1232.8928,317.94737 C 1221.1378,306.18988 1221.1378,287.11987 1232.9058,275.36238 C 1244.6633,263.59738 1263.7358,263.59738 1275.5033,275.34988" /> + d="M 1253.9396,306.30575 C 1250.5533,306.30575 1247.4833,304.83575 1246.4858,301.372 L 1250.5796,300.29575 C 1250.9221,301.5295 1252.0496,302.60575 1253.7296,302.60575 C 1254.9896,302.60575 1256.4321,301.97575 1256.4321,300.242 C 1256.4321,298.35325 1254.4908,297.802 1252.6533,297.802 L 1251.4721,297.802 L 1251.4721,294.57325 L 1252.7583,294.57325 C 1254.4121,294.57325 1256.0121,294.15325 1256.0121,292.3695 C 1256.0121,291.03075 1254.8846,290.32325 1253.6771,290.32325 C 1252.4171,290.32325 1251.4196,291.13575 1251.1321,292.39575 L 1247.0383,291.45075 C 1247.9283,288.32825 1250.8683,286.727 1253.9658,286.727 C 1257.2471,286.727 1260.5008,288.407 1260.5008,291.97575 C 1260.5008,294.02325 1259.1883,295.54575 1257.3771,296.01825 L 1257.3771,296.09695 C 1259.4771,296.59445 1260.9458,298.32695 1260.9458,300.4007 C 1260.9458,304.4682 1257.3508,306.3057 1253.9396,306.3057" /> @@ -57624,29 +57858,29 @@ transform="matrix(1,0,0,-1,0,2792.2535)"> @@ -57662,7 +57896,7 @@ transform="translate(1170.2617,1551.2617)"> @@ -57680,7 +57914,7 @@ transform="translate(977.2441,1551.2617)"> @@ -57708,7 +57942,7 @@ style="fill:url(#linearGradient10058-2)"> @@ -57729,7 +57963,7 @@ transform="translate(1170.2617,1361.2432)"> @@ -57747,7 +57981,7 @@ transform="translate(977.2441,1361.2432)"> @@ -57770,7 +58004,7 @@ id="g5159"> @@ -57796,7 +58030,7 @@ id="g5191"> @@ -57822,7 +58056,7 @@ id="g5223"> @@ -57848,7 +58082,7 @@ id="g5255"> @@ -57874,7 +58108,7 @@ id="g5287"> @@ -57900,7 +58134,7 @@ id="g5319"> @@ -57926,7 +58160,7 @@ id="g5383"> @@ -57937,47 +58171,47 @@ @@ -58017,23 +58251,23 @@ @@ -58146,13 +58380,13 @@ @@ -58190,29 +58424,29 @@ id="g5429"> @@ -58227,7 +58461,7 @@ transform="translate(1823.7813,1443.3135)"> @@ -58244,7 +58478,7 @@ transform="translate(1687.2949,1579.7949)"> @@ -58261,7 +58495,7 @@ transform="translate(1689.418,1308.9482)"> @@ -58278,7 +58512,7 @@ transform="translate(1552.9316,1445.4316)"> @@ -58300,7 +58534,7 @@ id="g5577"> @@ -58326,7 +58560,7 @@ id="g5609"> @@ -58351,7 +58585,7 @@ id="g5641"> @@ -58377,7 +58611,7 @@ id="g5673"> @@ -58402,7 +58636,7 @@ id="g5705"> @@ -58427,7 +58661,7 @@ id="g5737"> @@ -58452,7 +58686,7 @@ id="g5769"> @@ -58477,7 +58711,7 @@ id="g5801"> @@ -58488,47 +58722,47 @@ @@ -58568,23 +58802,23 @@ @@ -58696,7 +58930,7 @@ @@ -58775,7 +59009,7 @@ id="g4307"> @@ -58791,7 +59025,7 @@ transform="translate(2515.9893,1514.8203)"> @@ -58808,7 +59042,7 @@ transform="translate(2355.4863,1607.2334)"> @@ -58825,7 +59059,7 @@ transform="translate(2516.0371,1330.8896)"> @@ -58842,7 +59076,7 @@ transform="translate(2354.9951,1235.6455)"> @@ -58865,7 +59099,7 @@ id="g5929"> @@ -58891,7 +59125,7 @@ id="g5961"> @@ -58917,7 +59151,7 @@ id="g5993"> @@ -58943,7 +59177,7 @@ id="g6025"> @@ -58969,7 +59203,7 @@ id="g6057"> @@ -58995,7 +59229,7 @@ id="g6089"> @@ -59021,7 +59255,7 @@ id="g6121"> @@ -59047,7 +59281,7 @@ id="g6153"> @@ -59058,12 +59292,12 @@ @@ -59100,7 +59334,7 @@ id="g6209"> @@ -59126,7 +59360,7 @@ id="g6241"> @@ -59137,32 +59371,32 @@ @@ -59198,7 +59432,7 @@ id="g6313"> @@ -59224,7 +59458,7 @@ id="g6345"> @@ -59235,27 +59469,27 @@ @@ -59295,23 +59529,23 @@ @@ -59424,34 +59658,34 @@ @@ -59478,12 +59712,12 @@ transform="matrix(2.2864496,0,0,-2.2864496,-2586.624,2782.7411)"> @@ -59492,29 +59726,29 @@ id="g7099"> @@ -59529,7 +59763,7 @@ transform="translate(2538.3311,837.6123)"> @@ -59551,7 +59785,7 @@ id="g7199"> @@ -59576,7 +59810,7 @@ id="g7231"> @@ -59596,7 +59830,7 @@ transform="translate(2538.3311,657.5947)"> @@ -59618,7 +59852,7 @@ id="g7279"> @@ -59643,7 +59877,7 @@ id="g7311"> @@ -59663,7 +59897,7 @@ transform="translate(2538.3252,1017.5234)"> @@ -59685,7 +59919,7 @@ id="g7391"> @@ -59710,7 +59944,7 @@ id="g7359"> @@ -59721,32 +59955,32 @@ @@ -59784,7 +60018,7 @@ id="g7463"> @@ -59810,7 +60044,7 @@ id="g7495"> @@ -59831,7 +60065,7 @@ transform="translate(2056.7451,657.5947)"> @@ -59854,7 +60088,7 @@ id="g7543"> @@ -59879,7 +60113,7 @@ id="g7575"> @@ -59899,7 +60133,7 @@ transform="translate(2056.7471,1017.5234)"> @@ -59922,7 +60156,7 @@ id="g7623"> @@ -59948,7 +60182,7 @@ id="g7655"> @@ -59959,37 +60193,37 @@ @@ -60029,23 +60263,23 @@ @@ -60157,21 +60391,21 @@ @@ -60245,7 +60479,7 @@ id="g4369"> @@ -60270,7 +60504,7 @@ id="g4401"> @@ -60281,39 +60515,39 @@ @@ -60328,7 +60562,7 @@ transform="translate(429.3359,762.3701)"> @@ -60350,7 +60584,7 @@ id="g4477"> @@ -60375,7 +60609,7 @@ id="g4509"> @@ -60386,7 +60620,7 @@ @@ -60422,7 +60656,7 @@ id="g4965"> @@ -60447,7 +60681,7 @@ id="g4997"> @@ -60460,7 +60694,7 @@ id="g7881"> @@ -60475,7 +60709,7 @@ transform="translate(406.8271,782.3682)"> @@ -60497,7 +60731,7 @@ id="g7943"> @@ -60522,7 +60756,7 @@ id="g7975"> @@ -60533,7 +60767,7 @@ @@ -60557,23 +60791,23 @@ style="fill-rule:nonzero"> @@ -60611,7 +60845,7 @@ id="g5162"> @@ -60637,7 +60871,7 @@ id="g5176"> @@ -60648,7 +60882,7 @@ @@ -60686,7 +60920,7 @@ id="g5200"> @@ -60712,7 +60946,7 @@ id="g5214"> @@ -60729,19 +60963,19 @@ style="fill-rule:nonzero"> @@ -60781,23 +61015,23 @@ @@ -60909,35 +61143,35 @@ @@ -60963,7 +61197,7 @@ id="hexa-x"> @@ -61042,7 +61276,7 @@ @@ -61060,7 +61294,7 @@ @@ -61078,7 +61312,7 @@ @@ -61101,7 +61335,7 @@ @@ -61127,7 +61361,7 @@ @@ -61153,7 +61387,7 @@ @@ -61179,7 +61413,7 @@ @@ -61205,7 +61439,7 @@ @@ -61231,7 +61465,7 @@ @@ -61257,7 +61491,7 @@ @@ -61283,7 +61517,7 @@ @@ -61294,12 +61528,12 @@ @@ -61337,7 +61571,7 @@ @@ -61363,7 +61597,7 @@ @@ -61374,32 +61608,32 @@ @@ -61437,7 +61671,7 @@ @@ -61463,7 +61697,7 @@ @@ -61474,27 +61708,27 @@ @@ -61533,23 +61767,23 @@ @@ -61661,13 +61895,13 @@ @@ -61676,28 +61910,28 @@ style="opacity:0.6;fill:none;stroke:#ff0000;stroke-width:7.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#Arrow2Send)" inkscape:connector-curvature="0" stroke-miterlimit="4" - d="m 470.3229,324.24379 l 34.1726,0.5182 m 107.5,-0.5182 l 288.48736,0 l 81.95096,-90.17068" + d="M 470.3229,324.24379 L 504.4955,324.76199 M 611.9955,324.24379 L 900.48286,324.24379 L 982.43382,234.07311" id="path19792" /> @@ -61706,8 +61940,9 @@ inkscape:groupmode="layer" id="layer14" inkscape:label="fixed-wing-frames" - style="display:inline" - transform="translate(-32.46875,315.85439)"> + style="display:none" + transform="translate(-32.46875,315.85439)" + sodipodi:insensitive="true"> @@ -61748,7 +61983,7 @@ sodipodi:nodetypes="ccccccccccscsccccccscsccccccccccccc" inkscape:connector-curvature="0" id="path4853" - d="m 377.05917,2623.2856 l -0.96875,37.4376 l -0.8125,38.0623 l -1.96875,3.1564 l -283.968749,12.2186 l 0.65625,34.5314 l 283.374999,19.7187 l 2.4375,4.5938 l 5.65625,190.375 l 0,4.0625 c 0,0 1.07651,2.0384 -6.75,4.0625 c -7.82651,2.0241 -48.53125,7.6875 -48.53125,7.6875 c 0,0 -1.45881,0.5411 -1.59375,3.375 c -0.13494,2.8336 0,25.5 0,25.5 l 56.75,7.2813 c 3.14965,4.8562 3.05563,9.8278 5.25,15.375 l 2.0937,0 c 2.18253,-5.1923 2.17978,-10.5946 5.3125,-15.375 l 56.75,-7.2813 c 0,0 0.13494,-22.6663 0,-25.5 c -0.13494,-2.8338 -1.59375,-3.375 -1.59375,-3.375 c 0,0 -40.73599,-5.6634 -48.5625,-7.6875 c -7.82651,-2.0242 -6.71875,-4.0625 -6.71875,-4.0625 l 0,-4.0313 l 5.65625,-190.4062 l 2.4375,-4.5939 l 283.375,-19.7186 l 0.65625,-34.5314 l -283.9687,-12.2186 l -1.96875,-3.1563 l -0.8125,-38.0624 l -0.96875,-37.4376 c 0,10e-5 -2.11666,-36.8653 -4.04398,-37.6011 l -13.19412,0 c -1.94258,0.8205 -3.98065,37.6011 -3.98065,37.6011 z" + d="M 377.05917,2623.2856 L 376.09042,2660.7232 L 375.27792,2698.7855 L 373.30917,2701.9419 L 89.340421,2714.1605 L 89.996671,2748.6919 L 373.37167,2768.4106 L 375.80917,2773.0044 L 381.46542,2963.3794 L 381.46542,2967.4419 C 381.46542,2967.4419 382.54193,2969.4803 374.71542,2971.5044 C 366.88891,2973.5285 326.18417,2979.1919 326.18417,2979.1919 C 326.18417,2979.1919 324.72536,2979.733 324.59042,2982.5669 C 324.45548,2985.4005 324.59042,3008.0669 324.59042,3008.0669 L 381.34042,3015.3482 C 384.49007,3020.2044 384.39605,3025.176 386.59042,3030.7232 L 388.68412,3030.7232 C 390.86665,3025.5309 390.8639,3020.1286 393.99662,3015.3482 L 450.74662,3008.0669 C 450.74662,3008.0669 450.88156,2985.4006 450.74662,2982.5669 C 450.61168,2979.7331 449.15287,2979.1919 449.15287,2979.1919 C 449.15287,2979.1919 408.41688,2973.5285 400.59037,2971.5044 C 392.76386,2969.4802 393.87162,2967.4419 393.87162,2967.4419 L 393.87162,2963.4106 L 399.52787,2773.0044 L 401.96537,2768.4105 L 685.34037,2748.6919 L 685.99662,2714.1605 L 402.02792,2701.9419 L 400.05917,2698.7856 L 399.24667,2660.7232 L 398.27792,2623.2856 C 398.27792,2623.2857 396.16126,2586.4203 394.23394,2585.6845 L 381.03982,2585.6845 C 379.09724,2586.505 377.05917,2623.2856 377.05917,2623.2856 Z" style="fill:#3c3c3c;fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> @@ -61786,23 +62021,23 @@ @@ -61948,12 +62183,12 @@ @@ -61996,7 +62231,7 @@ id="circle3889-7-2" /> @@ -62019,252 +62254,252 @@ transform="matrix(1.0115794,-0.02798318,0.07024172,0.98661003,-60.945163,973.97741)" id="aileron-left-raster-1-6-5-8"> @@ -62289,12 +62524,12 @@ @@ -62337,7 +62572,7 @@ id="circle3915-5-9" /> @@ -62363,252 +62598,252 @@ style="fill:none;stroke:#010101;stroke-width:0.46786007;stroke-linecap:round;stroke-linejoin:round" inkscape:connector-curvature="0" id="_x31_63_1_-7-5-7" - d="m 136.118,661.657 l 0,-21.22" /> + d="M 136.118,661.657 L 136.118,640.437" /> + d="M 140.689,661.657 L 140.689,640.437" /> + d="M 145.233,661.657 L 145.233,640.437" /> + d="M 149.804,661.657 L 149.804,640.437" /> + d="M 154.348,661.657 L 154.348,640.437" /> + d="M 158.892,661.657 L 158.892,640.437" /> + d="M 163.463,661.657 L 163.463,640.437" /> + d="M 168.006,661.657 L 168.006,640.437" /> + d="M 172.578,661.657 L 172.578,640.437" /> + d="M 177.12,661.657 L 177.12,640.437" /> + d="M 181.664,661.657 L 181.664,640.437" /> + d="M 186.235,661.657 L 186.235,640.437" /> + d="M 190.779,661.657 L 190.779,640.437" /> + d="M 195.35,661.657 L 195.35,640.437" /> + d="M 199.894,661.657 L 199.894,640.437" /> + d="M 204.438,661.657 L 204.438,640.437" /> + d="M 209.009,661.657 L 209.009,640.437" /> + d="M 213.552,661.657 L 213.552,640.437" /> + d="M 218.124,661.657 L 218.124,640.437" /> + d="M 222.666,661.657 L 222.666,640.437" /> + d="M 227.211,661.657 L 227.211,640.437" /> + d="M 236.325,661.657 L 236.325,641.241" /> + d="M 240.896,661.657 L 240.896,641.241" /> + d="M 245.439,661.657 L 245.439,641.241" /> + d="M 250.012,661.657 L 250.012,641.241" /> + d="M 254.555,661.657 L 254.555,641.241" /> + d="M 259.098,661.657 L 259.098,641.241" /> + d="M 263.67,661.657 L 263.67,641.241" /> + d="M 268.213,661.657 L 268.213,641.241" /> + d="M 272.784,661.657 L 272.784,641.241" /> + d="M 277.328,661.657 L 277.328,641.241" /> + d="M 281.871,661.657 L 281.871,641.241" /> + d="M 286.442,661.657 L 286.442,641.241" /> + d="M 290.986,661.657 L 290.986,641.241" /> + d="M 295.558,661.657 L 295.558,641.241" /> + d="M 300.101,661.657 L 300.101,641.241" /> + d="M 304.645,661.657 L 304.645,641.241" /> + d="M 309.216,661.657 L 309.216,641.241" /> + d="M 313.76,661.657 L 313.76,641.241" /> + d="M 318.33,661.657 L 318.33,641.241" /> + d="M 322.874,661.657 L 322.874,641.241" /> + d="M 327.417,661.657 L 327.417,641.241" /> + d="M 331.989,661.657 L 331.989,641.241" /> + d="M 336.532,661.657 L 336.532,641.241" /> + d="M 341.104,661.657 L 341.104,641.241" /> + d="M 345.646,661.657 L 345.646,641.241" /> + d="M 350.19,661.657 L 350.19,641.241" /> + d="M 354.762,661.657 L 354.762,641.241" /> + d="M 359.306,661.657 L 359.306,641.241" /> + d="M 231.089,661.657 L 231.089,636.359" /> @@ -62925,12 +63160,12 @@ @@ -62975,7 +63210,7 @@ id="circle3808-2" /> @@ -63030,252 +63265,252 @@ transform="translate(-9.2889168,955.33477)" id="aileron-left-raster-1-3"> @@ -63289,12 +63524,12 @@ @@ -63339,7 +63574,7 @@ id="circle3853-8" /> @@ -63380,31 +63615,31 @@ @@ -63428,7 +63663,7 @@ transform="matrix(1.2253368,0,0,1.2253368,630.54136,-87.099306)"> + d="M 107.091,651.979 L 103.183,631.125" /> + d="M 116.049,650.299 L 112.142,629.445" /> + d="M 120.516,649.463 L 116.608,628.609" /> + d="M 124.981,648.626 L 121.074,627.772" /> + d="M 129.475,647.785 L 125.567,626.928" /> + d="M 133.94,646.948 L 130.033,626.092" /> + d="M 142.898,645.269 L 138.991,624.415" /> + d="M 147.366,644.433 L 143.458,623.579" /> + d="M 160.817,641.912 L 157.057,621.844" /> + d="M 165.282,641.076 L 161.522,621.009" /> + d="M 169.776,640.232 L 166.017,620.166" /> + d="M 174.242,639.396 L 170.482,619.33" /> + d="M 178.707,638.56 L 174.947,618.496" /> + d="M 183.201,637.718 L 179.441,617.654" /> + d="M 187.666,636.882 L 183.906,616.817" /> + d="M 192.159,636.039 L 188.399,615.974" /> + d="M 196.625,635.203 L 192.865,615.137" /> + d="M 201.091,634.366 L 197.331,614.299" /> + d="M 205.583,633.524 L 201.823,613.457" /> + d="M 210.05,632.688 L 206.29,612.623" /> + d="M 214.543,631.846 L 210.783,611.782" /> + d="M 219.009,631.009 L 215.249,610.944" /> + d="M 223.475,630.172 L 219.715,610.108" /> + d="M 227.968,629.33 L 224.209,609.264" /> + d="M 232.434,628.494 L 228.674,608.428" /> + d="M 236.926,627.652 L 233.166,607.584" /> + d="M 241.392,626.815 L 237.633,606.748" /> + d="M 245.858,625.979 L 242.098,605.913" /> + d="M 250.352,625.136 L 246.592,605.073" /> + d="M 254.817,624.3 L 251.058,604.235" /> + d="M 259.31,623.458 L 255.55,603.392" /> + d="M 263.775,622.622 L 260.015,602.555" /> + d="M 268.241,621.784 L 264.482,601.718" /> + d="M 272.735,620.943 L 268.975,600.876" /> + d="M 277.201,620.106 L 273.441,600.038" /> + d="M 151.177,643.718 L 146.518,618.854" /> + d="M 107.091,651.979 L 103.183,631.125" /> + d="M 116.049,650.299 L 112.142,629.445" /> + d="M 120.516,649.463 L 116.608,628.609" /> + d="M 124.981,648.626 L 121.074,627.772" /> + d="M 129.475,647.785 L 125.567,626.928" /> + d="M 133.94,646.948 L 130.033,626.092" /> + d="M 142.898,645.269 L 138.991,624.415" /> + d="M 147.366,644.433 L 143.458,623.579" /> + d="M 160.817,641.912 L 157.057,621.844" /> + d="M 165.282,641.076 L 161.522,621.009" /> + d="M 169.776,640.232 L 166.017,620.166" /> + d="M 174.242,639.396 L 170.482,619.33" /> + d="M 178.707,638.56 L 174.947,618.496" /> + d="M 183.201,637.718 L 179.441,617.654" /> + d="M 187.666,636.882 L 183.906,616.817" /> + d="M 192.159,636.039 L 188.399,615.974" /> + d="M 196.625,635.203 L 192.865,615.137" /> + d="M 201.091,634.366 L 197.331,614.299" /> + d="M 205.583,633.524 L 201.823,613.457" /> + d="M 210.05,632.688 L 206.29,612.623" /> + d="M 214.543,631.846 L 210.783,611.782" /> + d="M 219.009,631.009 L 215.249,610.944" /> + d="M 223.475,630.172 L 219.715,610.108" /> + d="M 227.968,629.33 L 224.209,609.264" /> + d="M 232.434,628.494 L 228.674,608.428" /> + d="M 236.926,627.652 L 233.166,607.584" /> + d="M 241.392,626.815 L 237.633,606.748" /> + d="M 245.858,625.979 L 242.098,605.913" /> + d="M 250.352,625.136 L 246.592,605.073" /> + d="M 254.817,624.3 L 251.058,604.235" /> + d="M 259.31,623.458 L 255.55,603.392" /> + d="M 263.775,622.622 L 260.015,602.555" /> + d="M 268.241,621.784 L 264.482,601.718" /> + d="M 272.735,620.943 L 268.975,600.876" /> + d="M 277.201,620.106 L 273.441,600.038" /> + d="M 151.177,643.718 L 146.518,618.854" /> @@ -64030,7 +64265,7 @@ id="circle3808-0-9-5" /> @@ -64076,12 +64311,12 @@ @@ -64126,7 +64361,7 @@ id="circle3808-0-9" /> @@ -64170,19 +64405,19 @@ id="g3577-1-6-2"> + d="M 388.375,1470.057 L 409.069,1470.057 C 409.069,1470.057 403.881,1454.799 398.709,1454.682 C 393.533,1454.565 388.375,1470.057 388.375,1470.057 Z" /> @@ -64221,23 +64456,23 @@ @@ -64349,21 +64584,21 @@ + d="M 388.375,1470.057 L 409.069,1470.057 C 409.069,1470.057 403.881,1454.799 398.709,1454.682 C 393.533,1454.565 388.375,1470.057 388.375,1470.057 Z" /> @@ -64454,23 +64689,23 @@ @@ -64588,19 +64823,19 @@ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.64670002;stroke-miterlimit:10" inkscape:connector-curvature="0" stroke-miterlimit="10" - d="m 398.002,892.888 c -0.523,-9.188 -0.92,-18.377 -1.326,-27.563 l -0.547,-13.783 l -0.447,-13.782 c -0.135,-4.594 -0.416,-9.188 -0.63,-13.783 c -0.213,-4.595 -0.231,-9.188 -0.033,-13.78 c 0.194,-4.597 0.512,-9.189 0.972,-13.782 c 0.475,-4.596 1.061,-9.189 2.012,-13.784 c 0.055,-0.267 0.248,-0.42 0.432,-0.339 c 0.114,0.053 0.197,0.184 0.23,0.339 c 0.951,4.595 1.537,9.188 2.012,13.784 c 0.46,4.593 0.776,9.188 0.974,13.782 c 0.195,4.594 0.18,9.188 -0.033,13.78 c -0.215,4.596 -0.496,9.189 -0.631,13.783 l -0.446,13.782 l -0.547,13.783 c -0.406,9.188 -0.803,18.378 -1.326,27.563 c -0.016,0.271 -0.176,0.469 -0.359,0.445 c -0.168,-0.02 -0.294,-0.213 -0.307,-0.445 z" + d="M 398.002,892.888 C 397.479,883.7 397.082,874.511 396.676,865.325 L 396.129,851.542 L 395.682,837.76 C 395.547,833.166 395.266,828.572 395.052,823.977 C 394.839,819.382 394.821,814.789 395.019,810.197 C 395.213,805.6 395.531,801.008 395.991,796.415 C 396.466,791.819 397.052,787.226 398.003,782.631 C 398.058,782.364 398.251,782.211 398.435,782.292 C 398.549,782.345 398.632,782.476 398.665,782.631 C 399.616,787.226 400.202,791.819 400.677,796.415 C 401.137,801.008 401.453,805.603 401.651,810.197 C 401.846,814.791 401.831,819.385 401.618,823.977 C 401.403,828.573 401.122,833.166 400.987,837.76 L 400.541,851.542 L 399.994,865.325 C 399.588,874.513 399.191,883.703 398.668,892.888 C 398.652,893.159 398.492,893.357 398.309,893.333 C 398.141,893.313 398.015,893.12 398.002,892.888 Z" id="path3769-8" /> + d="M 317.151,880.135 L 317.151,866.188" /> + d="M 320.473,880.135 L 320.473,866.188" /> + d="M 323.776,880.135 L 323.776,866.188" /> + d="M 327.098,880.135 L 327.098,866.188" /> + d="M 330.401,880.135 L 330.401,866.188" /> + d="M 333.703,880.135 L 333.703,866.188" /> + d="M 337.026,880.135 L 337.026,866.188" /> + d="M 340.328,880.135 L 340.328,866.188" /> + d="M 343.651,880.135 L 343.651,866.188" /> + d="M 346.953,880.135 L 346.953,866.188" /> + d="M 350.255,880.135 L 350.255,866.188" /> + d="M 353.578,880.135 L 353.578,866.188" /> + d="M 356.881,880.135 L 356.881,866.188" /> + d="M 360.203,880.135 L 360.203,866.188" /> + d="M 363.505,880.135 L 363.505,866.188" /> + d="M 366.808,880.135 L 366.808,866.188" /> + d="M 370.13,880.135 L 370.13,866.188" /> + d="M 373.432,880.135 L 373.432,866.188" /> + d="M 376.755,880.135 L 376.755,866.188" /> + d="M 380.057,880.135 L 380.057,866.188" /> + d="M 383.36,880.135 L 383.36,866.188" /> + d="M 389.985,880.135 L 389.985,866.714" /> + d="M 393.308,880.135 L 393.308,866.714" /> + d="M 396.609,880.135 L 396.609,866.714" /> + d="M 399.934,880.135 L 399.934,866.714" /> + d="M 403.235,880.135 L 403.235,866.714" /> + d="M 406.536,880.135 L 406.536,866.714" /> + d="M 409.86,880.135 L 409.86,866.714" /> + d="M 413.161,880.135 L 413.161,866.714" /> + d="M 416.485,880.135 L 416.485,866.714" /> + d="M 419.786,880.135 L 419.786,866.714" /> + d="M 423.089,880.135 L 423.089,866.714" /> + d="M 426.411,880.135 L 426.411,866.714" /> + d="M 429.714,880.135 L 429.714,866.714" /> + d="M 433.036,880.135 L 433.036,866.714" /> + d="M 436.339,880.135 L 436.339,866.714" /> + d="M 439.642,880.135 L 439.642,866.714" /> + d="M 442.964,880.135 L 442.964,866.714" /> + d="M 446.267,880.135 L 446.267,866.714" /> + d="M 449.589,880.135 L 449.589,866.714" /> + d="M 452.892,880.135 L 452.892,866.714" /> + d="M 456.194,880.135 L 456.194,866.714" /> + d="M 459.517,880.135 L 459.517,866.714" /> + d="M 462.817,880.135 L 462.817,866.714" /> + d="M 466.142,880.135 L 466.142,866.714" /> + d="M 469.444,880.135 L 469.444,866.714" /> + d="M 472.745,880.135 L 472.745,866.714" /> + d="M 476.067,880.135 L 476.067,866.714" /> + d="M 479.372,880.135 L 479.372,866.714" /> + d="M 386.179,880.135 L 386.179,863.506" /> + d="M 661.634,640.438 L 661.634,661.66" /> + d="M 657.063,640.438 L 657.063,661.66" /> + d="M 652.519,640.438 L 652.519,661.66" /> + d="M 647.948,640.438 L 647.948,661.66" /> + d="M 643.405,640.438 L 643.405,661.66" /> + d="M 638.86,640.438 L 638.86,661.66" /> + d="M 634.29,640.438 L 634.29,661.66" /> + d="M 629.747,640.438 L 629.747,661.66" /> + d="M 625.175,640.438 L 625.175,661.66" /> + d="M 620.632,640.438 L 620.632,661.66" /> + d="M 616.089,640.438 L 616.089,661.66" /> + d="M 611.517,640.438 L 611.517,661.66" /> + d="M 606.974,640.438 L 606.974,661.66" /> + d="M 602.403,640.438 L 602.403,661.66" /> + d="M 597.858,640.438 L 597.858,661.66" /> + d="M 593.315,640.438 L 593.315,661.66" /> + d="M 588.743,640.438 L 588.743,661.66" /> + d="M 584.2,640.438 L 584.2,661.66" /> + d="M 579.628,640.438 L 579.628,661.66" /> + d="M 575.087,640.438 L 575.087,661.66" /> + d="M 570.542,640.438 L 570.542,661.66" /> + d="M 561.427,641.241 L 561.427,661.657" /> + d="M 556.856,641.241 L 556.856,661.657" /> + d="M 552.313,641.241 L 552.313,661.657" /> + d="M 547.741,641.241 L 547.741,661.657" /> + d="M 543.198,641.241 L 543.198,661.657" /> + d="M 538.655,641.241 L 538.655,661.657" /> + d="M 534.083,641.241 L 534.083,661.657" /> + d="M 529.54,641.241 L 529.54,661.657" /> + d="M 524.968,641.241 L 524.968,661.657" /> + d="M 520.425,641.241 L 520.425,661.657" /> + d="M 515.882,641.241 L 515.882,661.657" /> + d="M 511.31,641.241 L 511.31,661.657" /> + d="M 506.767,641.241 L 506.767,661.657" /> + d="M 502.194,641.241 L 502.194,661.657" /> + d="M 497.651,641.241 L 497.651,661.657" /> + d="M 493.108,641.241 L 493.108,661.657" /> + d="M 488.536,641.241 L 488.536,661.657" /> + d="M 483.993,641.241 L 483.993,661.657" /> + d="M 479.423,641.241 L 479.423,661.657" /> + d="M 474.878,641.241 L 474.878,661.657" /> + d="M 470.335,641.241 L 470.335,661.657" /> + d="M 465.763,641.241 L 465.763,661.657" /> + d="M 461.22,641.241 L 461.22,661.657" /> + d="M 456.649,641.241 L 456.649,661.657" /> + d="M 452.106,641.241 L 452.106,661.657" /> + d="M 447.563,641.241 L 447.563,661.657" /> + d="M 442.991,641.241 L 442.991,661.657" /> + d="M 438.446,641.241 L 438.446,661.657" /> + d="M 566.663,636.359 L 566.663,661.657" /> + d="M 136.118,661.657 L 136.118,640.437" /> + d="M 140.689,661.657 L 140.689,640.437" /> + d="M 145.233,661.657 L 145.233,640.437" /> + d="M 149.804,661.657 L 149.804,640.437" /> + d="M 154.348,661.657 L 154.348,640.437" /> + d="M 158.892,661.657 L 158.892,640.437" /> + d="M 163.463,661.657 L 163.463,640.437" /> + d="M 168.006,661.657 L 168.006,640.437" /> + d="M 172.578,661.657 L 172.578,640.437" /> + d="M 177.12,661.657 L 177.12,640.437" /> + d="M 181.664,661.657 L 181.664,640.437" /> + d="M 186.235,661.657 L 186.235,640.437" /> + d="M 190.779,661.657 L 190.779,640.437" /> + d="M 195.35,661.657 L 195.35,640.437" /> + d="M 199.894,661.657 L 199.894,640.437" /> + d="M 204.438,661.657 L 204.438,640.437" /> + d="M 209.009,661.657 L 209.009,640.437" /> + d="M 213.552,661.657 L 213.552,640.437" /> + d="M 218.124,661.657 L 218.124,640.437" /> + d="M 222.666,661.657 L 222.666,640.437" /> + d="M 227.211,661.657 L 227.211,640.437" /> + d="M 236.325,661.657 L 236.325,641.241" /> + d="M 240.896,661.657 L 240.896,641.241" /> + d="M 245.439,661.657 L 245.439,641.241" /> + d="M 250.012,661.657 L 250.012,641.241" /> + d="M 254.555,661.657 L 254.555,641.241" /> + d="M 259.098,661.657 L 259.098,641.241" /> + d="M 263.67,661.657 L 263.67,641.241" /> + d="M 268.213,661.657 L 268.213,641.241" /> + d="M 272.784,661.657 L 272.784,641.241" /> + d="M 277.328,661.657 L 277.328,641.241" /> + d="M 281.871,661.657 L 281.871,641.241" /> + d="M 286.442,661.657 L 286.442,641.241" /> + d="M 290.986,661.657 L 290.986,641.241" /> + d="M 295.558,661.657 L 295.558,641.241" /> + d="M 300.101,661.657 L 300.101,641.241" /> + d="M 304.645,661.657 L 304.645,641.241" /> + d="M 309.216,661.657 L 309.216,641.241" /> + d="M 313.76,661.657 L 313.76,641.241" /> + d="M 318.33,661.657 L 318.33,641.241" /> + d="M 322.874,661.657 L 322.874,641.241" /> + d="M 327.417,661.657 L 327.417,641.241" /> + d="M 331.989,661.657 L 331.989,641.241" /> + d="M 336.532,661.657 L 336.532,641.241" /> + d="M 341.104,661.657 L 341.104,641.241" /> + d="M 345.646,661.657 L 345.646,641.241" /> + d="M 350.19,661.657 L 350.19,641.241" /> + d="M 354.762,661.657 L 354.762,641.241" /> + d="M 359.306,661.657 L 359.306,641.241" /> + d="M 231.089,661.657 L 231.089,636.359" /> @@ -65469,12 +65704,12 @@ id="g3869-7"> @@ -65530,12 +65765,12 @@ id="g3895-2"> @@ -65648,12 +65883,12 @@ transform="translate(40.63173,1364.5466)"> @@ -65755,25 +65990,25 @@ @@ -65822,7 +66057,7 @@ @@ -65861,23 +66096,23 @@ @@ -65993,19 +66228,19 @@ style="fill:#ffffff;fill-opacity:1"> @@ -66029,252 +66264,252 @@ transform="translate(0,1008)" id="aileron-elevator-raster"> @@ -66290,252 +66525,252 @@ transform="translate(0,1008)" id="aileron-right-raster"> @@ -66551,252 +66786,252 @@ transform="translate(0,1008)" id="aileron-left-raster"> @@ -66809,12 +67044,12 @@ id="g3831"> @@ -66901,12 +67136,12 @@ id="g3786"> @@ -67059,12 +67294,12 @@ id="g3869-2"> @@ -67120,12 +67355,12 @@ id="g3895"> @@ -67177,35 +67412,35 @@ + style="display:inline"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -67240,7 +68403,7 @@ sodipodi:nodetypes="zsccsccccssscccccz" inkscape:connector-curvature="0" id="path5603" - d="m 144.02118,1656.0501 c 3.77414,-8.3481 105.39994,38.0437 168.13768,38.0437 c 109.66668,0 180.1875,-31.2188 180.1875,-31.2188 l 17.75,41.625 c 0,0 -38.66032,43.6771 -45.90625,66.2188 c -7.29352,22.6896 -8.61792,35.8334 -10.73662,61.4578 l -11.4665,7.6984 l -74.98438,0 c 0,-6.5773 0.8907,-14.516 1.21875,-22.5625 c 2.07095,-4.3981 3.25,-9.3167 3.25,-14.5 c 0,-18.8129 -15.24963,-34.0625 -34.0625,-34.0625 c -18.81287,0 -34.0625,15.2496 -34.0625,34.0625 c 0,8.7478 3.299,16.7177 8.71875,22.75 c -3.86935,2.3982 -15.47186,-7.2139 -26.34375,-6.9687 c -9.52653,0.042 -15.23476,-5.189 -15.3125,-13.5938 c 0,-4.5232 2.21547,-8.5346 5.59375,-11.0312 c 0.3146,-13.0978 -1.24395,-29.7117 -14.9375,-45.6876 c -38.19915,-36.5555 -120.81807,-83.883 -117.04393,-92.2311 z" + d="M 144.02118,1656.0501 C 147.79532,1647.702 249.42112,1694.0938 312.15886,1694.0938 C 421.82554,1694.0938 492.34636,1662.875 492.34636,1662.875 L 510.09636,1704.5 C 510.09636,1704.5 471.43604,1748.1771 464.19011,1770.7188 C 456.89659,1793.4084 455.57219,1806.5522 453.45349,1832.1766 L 441.98699,1839.875 L 367.00261,1839.875 C 367.00261,1833.2977 367.89331,1825.359 368.22136,1817.3125 C 370.29231,1812.9144 371.47136,1807.9958 371.47136,1802.8125 C 371.47136,1783.9996 356.22173,1768.75 337.40886,1768.75 C 318.59599,1768.75 303.34636,1783.9996 303.34636,1802.8125 C 303.34636,1811.5603 306.64536,1819.5302 312.06511,1825.5625 C 308.19576,1827.9607 296.59325,1818.3486 285.72136,1818.5938 C 276.19483,1818.6358 270.4866,1813.4048 270.40886,1805 C 270.40886,1800.4768 272.62433,1796.4654 276.00261,1793.9688 C 276.31721,1780.871 274.75866,1764.2571 261.06511,1748.2812 C 222.86596,1711.7257 140.24704,1664.3982 144.02118,1656.0501 Z" style="display:inline;fill:url(#linearGradient11601);fill-opacity:1;stroke:none" /> @@ -67275,23 +68438,23 @@ @@ -67420,18 +68583,18 @@ id="g5479"> @@ -67518,12 +68681,12 @@ id="g3831-33"> @@ -67625,13 +68788,13 @@ id="g5490"> @@ -67644,7 +68807,7 @@ r="12.461923" /> @@ -67704,23 +68867,23 @@ style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:12px;line-height:125%;font-family:Arial;-inkscape-font-specification:'Arial Bold';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"> @@ -67729,11 +68892,11 @@ sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path19631-2-8-5" - d="m -15.116465,1673.5434 l 91.222621,-0.1041 l 51.576774,-65.0956 l 261.28532,-0.1041 l 63.42887,113.2472" + d="M -15.116465,1673.5434 L 76.106156,1673.4393 L 127.68293,1608.3437 L 388.96825,1608.2396 L 452.39712,1721.4868" style="display:inline;opacity:0.6;fill:none;stroke:#ff0000;stroke-width:2.99576831;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#Arrow2Send)" /> @@ -67766,7 +68929,7 @@ id="g7059"> @@ -68200,7 +69363,7 @@ sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path37299-4" - d="m 650.86221,478.82431 l 25.38194,0 l -0.0868,148.6877 l 89.22265,-0.1041" + d="M 650.86221,478.82431 L 676.24415,478.82431 L 676.15735,627.51201 L 765.38,627.40791" style="display:inline;opacity:0.6;fill:none;stroke:#ff0000;stroke-width:2.99576831;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#Arrow2Send)" /> @@ -68264,102 +69427,102 @@ @@ -68384,19 +69547,19 @@ sodipodi:nodetypes="ccscccccscccscccccccsccc" inkscape:connector-curvature="0" id="path7927-1" - d="m 111.54988,2583.5313 c -4.53767,0.1369 -7.59246,2.2108 -9.65625,6 c 0,-1e-4 -15.14302,37.105 -28.5625,51.375 c -2.54215,2.7033 -5.66419,6 -9.375,6 c 0,-1e-4 -190.375,0.3641 -190.375,5.1562 l -1,36.1562 l 1,36.125 c 0,4.7922 190.375,5.1876 190.375,5.1876 c 3.71081,0 6.83285,3.2967 9.375,6 c 13.41948,14.2699 28.5625,51.3437 28.5625,51.3437 c 2.20138,4.0418 5.54158,6.1302 10.59375,6 l 233.90625,0 c 5.81914,0.2902 7.2519,-4.3344 8.6875,-8 c 9.41689,-24.045 16.90625,-54.5312 16.90625,-54.5313 c 1.35486,-6.9702 5.71209,-7.9155 9.21875,-8 l 163.21875,0 l 0,-34.125 l 0,-34.125 l -163.21875,0 c -3.50666,-0.084 -7.86389,-1.0296 -9.21875,-8 c 0,1e-4 -7.48936,-30.5174 -16.90625,-54.5624 c -1.4356,-3.6656 -2.86836,-8.2902 -8.6875,-8 l -233.90625,0 c -0.31576,-0.01 -0.63499,-0.01 -0.9375,0 z" + d="M 111.54988,2583.5313 C 107.01221,2583.6682 103.95742,2585.7421 101.89363,2589.5313 C 101.89363,2589.5312 86.75061,2626.6363 73.33113,2640.9063 C 70.78898,2643.6096 67.66694,2646.9063 63.95613,2646.9063 C 63.95613,2646.9062 -126.41887,2647.2704 -126.41887,2652.0625 L -127.41887,2688.2187 L -126.41887,2724.3437 C -126.41887,2729.1359 63.95613,2729.5313 63.95613,2729.5313 C 67.66694,2729.5313 70.78898,2732.828 73.33113,2735.5313 C 86.75061,2749.8012 101.89363,2786.875 101.89363,2786.875 C 104.09501,2790.9168 107.43521,2793.0052 112.48738,2792.875 L 346.39363,2792.875 C 352.21277,2793.1652 353.64553,2788.5406 355.08113,2784.875 C 364.49802,2760.83 371.98738,2730.3438 371.98738,2730.3437 C 373.34224,2723.3735 377.69947,2722.4282 381.20613,2722.3437 L 544.42488,2722.3437 L 544.42488,2688.2187 L 544.42488,2654.0937 L 381.20613,2654.0937 C 377.69947,2654.0097 373.34224,2653.0641 371.98738,2646.0937 C 371.98738,2646.0938 364.49802,2615.5763 355.08113,2591.5313 C 353.64553,2587.8657 352.21277,2583.2411 346.39363,2583.5313 L 112.48738,2583.5313 C 112.17162,2583.5213 111.85239,2583.5213 111.54988,2583.5313 Z" style="display:inline;fill:url(#linearGradient19821);fill-opacity:1;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> @@ -68506,23 +69669,23 @@ id="text9459-1"> @@ -68564,12 +69727,12 @@ @@ -68679,7 +69842,7 @@ style="opacity:0.72250001"> @@ -68706,22 +69869,22 @@ @@ -68732,23 +69895,23 @@ @@ -68861,11 +70024,11 @@ sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path19631-2-8" - d="m 650.86221,463.39425 l 364.89049,-0.4164" + d="M 650.86221,463.39425 L 1015.7527,462.97785" style="display:inline;opacity:0.6;fill:none;stroke:#ff0000;stroke-width:2.99576831;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#DotS);marker-end:url(#Arrow2Send)" /> diff --git a/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard-no-numbers.svg b/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard-no-numbers.svg index 43e4306a9..a42a564b0 100644 --- a/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard-no-numbers.svg +++ b/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard-no-numbers.svg @@ -14,9 +14,9 @@ id="Layer_1" x="0px" y="0px" - width="755.96332" - height="1432.0494" - viewBox="0 0 755.96331 1432.0494" + width="874.33447" + height="2009.6093" + viewBox="0 0 874.33446 2009.6092" enable-background="new 0 0 792 1008" xml:space="preserve" inkscape:version="0.91 r13725" @@ -26,7 +26,7 @@ inkscape:export-ydpi="70.479134">image/svg+xml \ No newline at end of file diff --git a/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard.svg b/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard.svg index 3b0f53865..8cb3b63d7 100644 --- a/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard.svg +++ b/ground/gcs/src/plugins/setupwizard/resources/ground-shapes-wizard.svg @@ -14,9 +14,9 @@ id="Layer_1" x="0px" y="0px" - width="755.96332" - height="1769.0007" - viewBox="0 0 755.96331 1769.0007" + width="914.42419" + height="2819.6702" + viewBox="0 0 914.42418 2819.6701" enable-background="new 0 0 792 1008" xml:space="preserve" inkscape:version="0.91 r13725" @@ -26,7 +26,7 @@ inkscape:export-ydpi="70.479134">image/svg+xml4 + \ No newline at end of file diff --git a/ground/gcs/src/plugins/setupwizard/setupwizard.cpp b/ground/gcs/src/plugins/setupwizard/setupwizard.cpp index acfb1734e..5bb2f5833 100644 --- a/ground/gcs/src/plugins/setupwizard/setupwizard.cpp +++ b/ground/gcs/src/plugins/setupwizard/setupwizard.cpp @@ -2,7 +2,7 @@ ****************************************************************************** * * @file setupwizard.cpp - * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2010. * @addtogroup GCSPlugins GCS Plugins * @{ @@ -138,7 +138,8 @@ int SetupWizard::nextId() const case PAGE_FIXEDWING: case PAGE_SURFACE: - if (getVehicleSubType() == GROUNDVEHICLE_DIFFERENTIAL) { + if ((getVehicleSubType() == GROUNDVEHICLE_DIFFERENTIAL) || + (getVehicleSubType() == GROUNDVEHICLE_DIFFERENTIAL_BOAT)) { return PAGE_ESC; } else { return PAGE_SERVO; @@ -360,6 +361,12 @@ QString SetupWizard::getSummaryText() case SetupWizard::GROUNDVEHICLE_MOTORCYCLE: summary.append(tr("Motorcycle")); break; + case SetupWizard::GROUNDVEHICLE_BOAT: + summary.append(tr("Boat")); + break; + case SetupWizard::GROUNDVEHICLE_DIFFERENTIAL_BOAT: + summary.append(tr("Boat differential")); + break; default: summary.append(tr("Unknown")); break; @@ -422,7 +429,8 @@ QString SetupWizard::getSummaryText() // If Tricopter show tail servo speed if (getVehicleSubType() == MULTI_ROTOR_TRI_Y || getVehicleType() == VEHICLE_FIXEDWING - || getVehicleSubType() == GROUNDVEHICLE_MOTORCYCLE || getVehicleSubType() == GROUNDVEHICLE_CAR) { + || getVehicleSubType() == GROUNDVEHICLE_MOTORCYCLE || getVehicleSubType() == GROUNDVEHICLE_CAR + || getVehicleSubType() == GROUNDVEHICLE_BOAT) { summary.append("
"); summary.append("").append(tr("Servo type: ")).append(""); switch (getServoType()) { diff --git a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp index 71e73b264..dd266f6e3 100644 --- a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp +++ b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.cpp @@ -2,7 +2,7 @@ *********************************************************************************** * * @file vehicleconfigurationhelper.cpp - * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup * @{ @@ -304,11 +304,21 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() case VehicleConfigurationSource::GPS_UBX: gpsData.DataProtocol = GPSSettings::DATAPROTOCOL_UBX; gpsData.UbxAutoConfig = GPSSettings::UBXAUTOCONFIG_AUTOBAUDANDCONFIGURE; + if (m_configSource->getVehicleType() == VehicleConfigurationSource::VEHICLE_SURFACE) { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AUTOMOTIVE; + } else { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AIRBORNE1G; + } break; case VehicleConfigurationSource::GPS_PLATINUM: { gpsData.DataProtocol = GPSSettings::DATAPROTOCOL_UBX; gpsData.UbxAutoConfig = GPSSettings::UBXAUTOCONFIG_AUTOBAUDANDCONFIGURE; + if (m_configSource->getVehicleType() == VehicleConfigurationSource::VEHICLE_SURFACE) { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AUTOMOTIVE; + } else { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AIRBORNE1G; + } AuxMagSettings *magSettings = AuxMagSettings::GetInstance(m_uavoManager); Q_ASSERT(magSettings); AuxMagSettings::DataFields magsData = magSettings->getData(); @@ -339,6 +349,11 @@ void VehicleConfigurationHelper::applyHardwareConfiguration() gpsData.DataProtocol = GPSSettings::DATAPROTOCOL_UBX; gpsData.UbxAutoConfig = GPSSettings::UBXAUTOCONFIG_AUTOBAUDANDCONFIGURE; + if (m_configSource->getVehicleType() == VehicleConfigurationSource::VEHICLE_SURFACE) { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AUTOMOTIVE; + } else { + gpsData.UbxDynamicModel = GPSSettings::UBXDYNAMICMODEL_AIRBORNE1G; + } if (m_configSource->getControllerType() == VehicleConfigurationSource::CONTROLLER_SPARKY2) { data.SPK2_FlexiPort = HwSettings::SPK2_FLEXIPORT_I2C; } else { @@ -478,6 +493,12 @@ void VehicleConfigurationHelper::applyVehicleConfiguration() case VehicleConfigurationSource::GROUNDVEHICLE_MOTORCYCLE: setupMotorcycle(); break; + case VehicleConfigurationSource::GROUNDVEHICLE_BOAT: + setupBoat(); + break; + case VehicleConfigurationSource::GROUNDVEHICLE_DIFFERENTIAL_BOAT: + setupBoatDiff(); + break; default: break; } @@ -923,7 +944,6 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch mSettings->setMixerValueRoll((qint8)100); mSettings->setMixerValuePitch((qint8)100); mSettings->setMixerValueYaw((qint8)100); - maxThrottle = 1; break; case VehicleConfigurationSource::VEHICLE_HELI: break; @@ -934,14 +954,11 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch mSettings->setMixerValueRoll((qint8)100); mSettings->setMixerValuePitch((qint8)100); mSettings->setMixerValueYaw((qint8)100); - maxThrottle = 1; break; case VehicleConfigurationSource::GROUNDVEHICLE_CAR: mSettings->setMixerValueRoll((qint8)100); mSettings->setMixerValuePitch((qint8)100); mSettings->setMixerValueYaw((qint8)100); - maxThrottle = 1; - minThrottle = 0; break; case VehicleConfigurationSource::GROUNDVEHICLE_DIFFERENTIAL: mSettings->setMixerValueRoll((qint8)100); @@ -950,6 +967,18 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch maxThrottle = 0.8; minThrottle = 0; break; + case VehicleConfigurationSource::GROUNDVEHICLE_BOAT: + mSettings->setMixerValueRoll((qint8)100); + mSettings->setMixerValuePitch((qint8)100); + mSettings->setMixerValueYaw((qint8)100); + break; + case VehicleConfigurationSource::GROUNDVEHICLE_DIFFERENTIAL_BOAT: + mSettings->setMixerValueRoll((qint8)100); + mSettings->setMixerValuePitch((qint8)100); + mSettings->setMixerValueYaw((qint8)100); + maxThrottle = 0.8; + minThrottle = 0; + break; default: break; } @@ -960,7 +989,7 @@ void VehicleConfigurationHelper::applyMixerConfiguration(mixerChannelSettings ch break; } - // Apply Throttle curve max 90% for Multis, 100% for FixedWing/car/Motorbike, 80% for Tank + // Apply Throttle curve 0-100% for all vehicles except differential vehicles at 0-80% QString throttlePattern = "ThrottleCurve%1"; for (int i = 1; i <= 2; i++) { UAVObjectField *field = mSettings->getField(throttlePattern.arg(i)); @@ -1181,7 +1210,7 @@ void VehicleConfigurationHelper::resetVehicleConfig() for (int i = 1; i <= 2; i++) { UAVObjectField *field = mSettings->getField(throttlePattern.arg(i)); Q_ASSERT(field); - // Set default curve at 90% max for Multirotors + // Set default 0 -100% Throttle curve for (quint32 i = 0; i < field->getNumElements(); i++) { field->setValue(i * (1.0f / (field->getNumElements() - 1)), i); } @@ -2326,3 +2355,69 @@ void VehicleConfigurationHelper::setupMotorcycle() applyMixerConfiguration(channels); applyMultiGUISettings(SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEMOTORCYCLE, guiSettings); } + +void VehicleConfigurationHelper::setupBoat() +{ + // Typical vehicle setup + // 1. Setup mixer data + // 2. Setup GUI data + // 3. Apply changes + + mixerChannelSettings channels[ActuatorSettings::CHANNELADDR_NUMELEM]; + GUIConfigDataUnion guiSettings = getGUIConfigData(); + + // Rudder Servo (Chan 1) + channels[0].type = MIXER_TYPE_SERVO; + channels[0].throttle1 = 0; + channels[0].throttle2 = 0; + channels[0].roll = 0; + channels[0].pitch = 0; + channels[0].yaw = 100; + + // Motor (Chan 4) + channels[3].type = MIXER_TYPE_REVERSABLEMOTOR; + channels[3].throttle1 = 100; + channels[3].throttle2 = 0; + channels[3].roll = 0; + channels[3].pitch = 0; + channels[3].yaw = 0; + + guiSettings.ground.GroundVehicleSteering1 = 1; + guiSettings.ground.GroundVehicleThrottle2 = 4; + + applyMixerConfiguration(channels); + applyMultiGUISettings(SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEBOAT, guiSettings); +} + +void VehicleConfigurationHelper::setupBoatDiff() +{ + // Typical vehicle setup + // 1. Setup mixer data + // 2. Setup GUI data + // 3. Apply changes + + mixerChannelSettings channels[ActuatorSettings::CHANNELADDR_NUMELEM]; + GUIConfigDataUnion guiSettings = getGUIConfigData(); + + // Left Motor (Chan 1) + channels[0].type = MIXER_TYPE_REVERSABLEMOTOR; + channels[0].throttle1 = 100; + channels[0].throttle2 = 0; + channels[0].roll = 0; + channels[0].pitch = 0; + channels[0].yaw = 100; + + // Right Motor (Chan 2) + channels[1].type = MIXER_TYPE_REVERSABLEMOTOR; + channels[1].throttle1 = 100; + channels[1].throttle2 = 0; + channels[1].roll = 0; + channels[1].pitch = 0; + channels[1].yaw = -100; + + guiSettings.ground.GroundVehicleThrottle1 = 1; + guiSettings.ground.GroundVehicleThrottle2 = 2; + + applyMixerConfiguration(channels); + applyMultiGUISettings(SystemSettings::AIRFRAMETYPE_GROUNDVEHICLEDIFFERENTIALBOAT, guiSettings); +} diff --git a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.h b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.h index 757dbe646..31f7707ac 100644 --- a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.h +++ b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationhelper.h @@ -2,7 +2,8 @@ ****************************************************************************** * * @file vehicleconfigurationhelper.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup * @{ * @addtogroup VehicleConfigurationHelper @@ -121,6 +122,8 @@ private: void setupCar(); void setupTank(); void setupMotorcycle(); + void setupBoat(); + void setupBoatDiff(); private slots: void uAVOTransactionCompleted(UAVObject *object, bool success); diff --git a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationsource.h b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationsource.h index 00e2a88fb..c9e10f531 100644 --- a/ground/gcs/src/plugins/setupwizard/vehicleconfigurationsource.h +++ b/ground/gcs/src/plugins/setupwizard/vehicleconfigurationsource.h @@ -2,7 +2,8 @@ ****************************************************************************** * * @file vehicleconfigurationsource.h - * @author The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. + * @author The LibrePilot Project, http://www.librepilot.org Copyright (C) 2015-2016. + * The OpenPilot Team, http://www.openpilot.org Copyright (C) 2012. * @addtogroup * @{ * @addtogroup VehicleConfigurationSource @@ -63,7 +64,7 @@ public: MULTI_ROTOR_HEXA, MULTI_ROTOR_HEXA_H, MULTI_ROTOR_HEXA_X, MULTI_ROTOR_HEXA_COAX_Y, MULTI_ROTOR_OCTO, MULTI_ROTOR_OCTO_X, MULTI_ROTOR_OCTO_V, MULTI_ROTOR_OCTO_COAX_X, MULTI_ROTOR_OCTO_COAX_PLUS, FIXED_WING_DUAL_AILERON, FIXED_WING_AILERON, FIXED_WING_ELEVON, FIXED_WING_VTAIL, HELI_CCPM, - GROUNDVEHICLE_MOTORCYCLE, GROUNDVEHICLE_CAR, GROUNDVEHICLE_DIFFERENTIAL }; + GROUNDVEHICLE_MOTORCYCLE, GROUNDVEHICLE_CAR, GROUNDVEHICLE_DIFFERENTIAL, GROUNDVEHICLE_BOAT, GROUNDVEHICLE_DIFFERENTIAL_BOAT }; enum ESC_TYPE { ESC_ONESHOT, ESC_SYNCHED, ESC_RAPID, ESC_STANDARD, ESC_UNKNOWN }; enum SERVO_TYPE { SERVO_ANALOG, SERVO_DIGITAL, SERVO_UNKNOWN }; enum INPUT_TYPE { INPUT_PWM, INPUT_PPM, INPUT_SBUS, INPUT_DSM, INPUT_SRXL, INPUT_HOTT_SUMD, INPUT_EXBUS, INPUT_IBUS, INPUT_UNKNOWN }; diff --git a/ground/gcs/src/share/qml/js/uav.js b/ground/gcs/src/share/qml/js/uav.js index 967c5f8c7..789a9f52f 100644 --- a/ground/gcs/src/share/qml/js/uav.js +++ b/ground/gcs/src/share/qml/js/uav.js @@ -155,7 +155,7 @@ function isCC3D() { function frameType() { var frameTypeText = ["FixedWing", "FixedWingElevon", "FixedWingVtail", "VTOL", "HeliCP", "QuadX", "QuadP", "Hexa+", "Octo+", "Custom", "HexaX", "HexaH", "OctoV", "OctoCoaxP", "OctoCoaxX", "OctoX", "HexaCoax", - "Tricopter", "GroundVehicleCar", "GroundVehicleDiff", "GroundVehicleMoto"]; + "Tricopter", "GroundCar", "GroundDiff", "GroundMoto", "GroundBoat", "GroundDiffBoat"]; if (frameTypeText.length != SystemSettings.SystemSettingsConstants.AirframeTypeCount) { console.log("uav.js: frameType() do not match systemSettings.airframeType uavo"); diff --git a/shared/uavobjectdefinition/systemsettings.xml b/shared/uavobjectdefinition/systemsettings.xml index f4f4f540a..0e7279495 100644 --- a/shared/uavobjectdefinition/systemsettings.xml +++ b/shared/uavobjectdefinition/systemsettings.xml @@ -1,7 +1,7 @@ Select airframe type. Currently used by @ref ActuatorModule to choose mixing from @ref ActuatorDesired to @ref ActuatorCommand - +