From 9fbaa4410f7609515eefe32bcf52d5e0d494d33f Mon Sep 17 00:00:00 2001 From: chris pember Date: Wed, 12 Sep 2012 19:12:23 -0700 Subject: [PATCH 01/17] new quick gui fixes branch, changed input form so the checkbox for calibrate is now a button, resized that and the wizard button to not be ginormous. no new functionality added, just desing changes --- .../openpilotgcs/src/plugins/config/input.ui | 141 ++++++++++++------ 1 file changed, 99 insertions(+), 42 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 85d63b2f5..1e5ff4e4e 100755 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -6,8 +6,8 @@ 0 0 - 670 - 693 + 680 + 671 @@ -27,9 +27,6 @@ RC Input - - 6 - 0 @@ -110,17 +107,17 @@ 0 0 - 640 - 610 + 650 + 571 - - 12 - 6 + + 12 + @@ -150,20 +147,95 @@ 12 - - - Start Configuration Wizard - - - - - - - true - - - Run Calibration + + + Calibration and Configuration Options + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Start Configuration Wizard + + + false + + + false + + + false + + + false + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + + 210 + 0 + + + + false + + + Manual Calibration + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + @@ -187,9 +259,6 @@ 0 - - 0 - @@ -359,9 +428,6 @@ Flight Mode Switch Settings - - 6 - 0 @@ -442,17 +508,14 @@ 0 0 - 640 - 610 + 650 + 571 12 - - 6 - @@ -1057,9 +1120,6 @@ margin:1px; Arming Settings - - 6 - 0 @@ -1140,14 +1200,11 @@ margin:1px; 0 0 - 640 - 610 + 650 + 571 - - 6 - 12 From 556c8b4464d1c4227f98c913666ea781f906a32a Mon Sep 17 00:00:00 2001 From: chris pember Date: Sat, 15 Sep 2012 12:27:59 -0700 Subject: [PATCH 02/17] omg I think I fixed the mac spacing, just checking on windows build now --- .../src/plugins/config/camerastabilization.ui | 93 +++- .../openpilotgcs/src/plugins/config/input.ui | 491 +++++++++++------- .../src/plugins/config/stabilization.ui | 85 ++- 3 files changed, 404 insertions(+), 265 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index e71d0c5b4..14f2aa74a 100755 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -6,22 +6,37 @@ 0 0 - 789 - 615 + 942 + 692 + + + 0 + 0 + + + + + 0 + 0 + + Form - - 6 - 12 + + + 0 + 0 + + 0 @@ -35,6 +50,12 @@ + + + 0 + 0 + + QFrame::NoFrame @@ -46,19 +67,37 @@ 0 0 - 742 - 560 + 912 + 598 - 6 + 12 12 + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + Module Control @@ -86,7 +125,7 @@ - + 0 0 @@ -94,7 +133,13 @@ 0 - 131 + 130 + + + + + 16777215 + 16777215 @@ -340,7 +385,7 @@ margin:1px; - + 0 0 @@ -348,13 +393,22 @@ margin:1px; 0 - 266 + 250 + + + + + 16777215 + 16777215 Advanced Settings (Control) + + -1 + @@ -924,6 +978,18 @@ value. + + + 0 + 71 + + + + + 16777215 + 16777215 + + Messages @@ -946,6 +1012,9 @@ value. Qt::Vertical + + QSizePolicy::Expanding + 20 diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 1e5ff4e4e..212b33f5f 100755 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -6,8 +6,8 @@ 0 0 - 680 - 671 + 880 + 613 @@ -20,7 +20,7 @@ - 0 + 1 @@ -107,17 +107,17 @@ 0 0 - 650 - 571 + 824 + 513 - - 6 - 12 + + 6 + @@ -508,26 +508,297 @@ 0 0 - 650 - 571 + 852 + 521 - + 12 + + + + + + + Configure each stabilization mode for each axis + + + + 12 + + + 9 + + + + + Qt::Horizontal + + + QSizePolicy::Minimum + + + + 5 + 20 + + + + + + + + Qt::StrongFocus + + + + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + + + Yaw + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 5 + 20 + + + + + + + + Stabilized1 + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 5 + 20 + + + + + + + + Qt::StrongFocus + + + + + + + Stabilized2 + + + Qt::AlignCenter + + + + + + + Qt::StrongFocus + + + + + + + Qt::StrongFocus + + + + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + + + Pitch + + + Qt::AlignCenter + + + + + + + + 0 + 20 + + + + + 16777215 + 20 + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + + + Roll + + + Qt::AlignCenter + + + + + + + Qt::StrongFocus + + + + + + + + 102 + 0 + + + + Qt::StrongFocus + + + + + + + Qt::StrongFocus + + + + + + + + 102 + 0 + + + + Qt::StrongFocus + + + + + + + + 102 + 0 + + + + Qt::StrongFocus + + + + + + + Stabilized3 + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + 0 - 195 + 230 16777215 - 195 + 230 @@ -699,7 +970,7 @@ 16777215 - 140 + 160 @@ -742,6 +1013,9 @@ Setup the flight mode channel on the RC Input tab if you have not done so alread + + 3 + @@ -921,194 +1195,17 @@ channel value for each flight mode. Qt::Vertical + + QSizePolicy::Expanding + 20 - 100 + 20 - - - - - - - Configure each stabilization mode for each axis - - - - 0 - - - 12 - - - - - Stabilized3 - - - Qt::AlignCenter - - - - - - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; -font: bold 12px; -margin:1px; - - - Roll - - - Qt::AlignCenter - - - - - - - - 102 - 0 - - - - Qt::StrongFocus - - - - - - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; -font: bold 12px; -margin:1px; - - - Pitch - - - Qt::AlignCenter - - - - - - - Qt::StrongFocus - - - - - - - Qt::StrongFocus - - - - - - - Qt::StrongFocus - - - - - - - Stabilized1 - - - Qt::AlignCenter - - - - - - - background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); -color: rgb(255, 255, 255); -border-radius: 5; -font: bold 12px; -margin:1px; - - - Yaw - - - Qt::AlignCenter - - - - - - - Qt::StrongFocus - - - - - - - - 102 - 0 - - - - Qt::StrongFocus - - - - - - - Qt::StrongFocus - - - - - - - Qt::StrongFocus - - - - - - - Stabilized2 - - - Qt::AlignCenter - - - - - - - - 102 - 0 - - - - Qt::StrongFocus - - - - - - @@ -1200,8 +1297,8 @@ margin:1px; 0 0 - 650 - 571 + 824 + 513 diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index 6777d0800..f56c8348e 100755 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -7,7 +7,7 @@ 0 0 965 - 797 + 713 @@ -453,9 +453,6 @@ false - - 6 - 12 @@ -505,9 +502,6 @@ Basic - - 6 - 0 @@ -604,23 +598,14 @@ 0 0 935 - 714 + 619 12 - - 12 - - - 5 - - - 12 - - + 12 @@ -640,7 +625,7 @@ 16777215 - 181 + 195 @@ -653,12 +638,12 @@ false - - 12 - 6 + + 12 + @@ -3496,7 +3481,7 @@ value as the Kp. 16777215 - 181 + 195 @@ -4023,12 +4008,12 @@ value as the Kp. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - 12 - 6 + + 12 + @@ -6866,9 +6851,6 @@ border-radius: 5; Advanced - - 6 - 0 @@ -6952,17 +6934,14 @@ border-radius: 5; 0 0 - 935 - 714 + 920 + 644 true - - 6 - 12 @@ -6977,7 +6956,7 @@ border-radius: 5; 0 - 210 + 0 @@ -7510,12 +7489,12 @@ border-radius: 5; false - - 12 - 6 + + 12 + @@ -10299,7 +10278,7 @@ Then lower the value by 20% or so. 0 - 170 + 0 @@ -13429,7 +13408,7 @@ border-radius: 5; 0 - 195 + 0 @@ -13959,12 +13938,12 @@ border-radius: 5; Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - 12 - 6 + + 12 + @@ -16792,9 +16771,6 @@ border-radius: 5; Expert - - 6 - 0 @@ -16882,13 +16858,10 @@ border-radius: 5; 0 0 935 - 714 + 619 - - 6 - 12 @@ -16903,7 +16876,7 @@ border-radius: 5; 0 - 150 + 0 @@ -19508,19 +19481,19 @@ border-radius: 5; 0 - 180 + 0 Integral Limits - - 12 - 6 + + 12 + @@ -21916,7 +21889,7 @@ border-radius: 5; 0 - 150 + 0 From 80c86b0b268cfb5d604b6becb890b951d6d1d708 Mon Sep 17 00:00:00 2001 From: chris pember Date: Sat, 15 Sep 2012 12:59:16 -0700 Subject: [PATCH 03/17] omg I think I fixed the mac spacing,linux and windows tweak test --- .../src/plugins/config/airframe.ui | 33 ++--- .../src/plugins/config/ccattitude.ui | 124 ++++++++++++++---- .../openpilotgcs/src/plugins/config/input.ui | 22 ++-- 3 files changed, 120 insertions(+), 59 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index c5ee92452..4b1b44d07 100755 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -14,9 +14,6 @@ Form - - 6 - 12 @@ -132,7 +129,7 @@ 0 0 935 - 554 + 537 @@ -145,9 +142,6 @@ - - 6 - 12 @@ -705,12 +699,12 @@ margin:1px; - - 24 - 0 + + -1 + @@ -853,7 +847,7 @@ margin:1px; - + 0 0 @@ -1191,7 +1185,7 @@ margin:1px; - + 0 0 @@ -2820,7 +2814,7 @@ margin:1px; 0 0 935 - 554 + 537 @@ -2836,9 +2830,6 @@ margin:1px; 12 - - 6 - @@ -3206,14 +3197,14 @@ p, li { white-space: pre-wrap; } <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <table border="0" style="-qt-table-type: root; margin-top:4px; margin-bottom:4px; margin-left:4px; margin-right:4px;"> <tr> <td style="border: none;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</span></p> -<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</span></p></td></tr></table></body></html> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</p> +<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</p></td></tr></table></body></html> @@ -3264,7 +3255,7 @@ p, li { white-space: pre-wrap; } - + :/core/images/helpicon.svg:/core/images/helpicon.svg diff --git a/ground/openpilotgcs/src/plugins/config/ccattitude.ui b/ground/openpilotgcs/src/plugins/config/ccattitude.ui index cdef25670..16823c628 100755 --- a/ground/openpilotgcs/src/plugins/config/ccattitude.ui +++ b/ground/openpilotgcs/src/plugins/config/ccattitude.ui @@ -6,7 +6,7 @@ 0 0 - 666 + 780 566 @@ -110,14 +110,11 @@ 0 0 - 636 - 483 + 750 + 466 - - 6 - 12 @@ -126,18 +123,25 @@ Rotate virtual attitude relative to board - - + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + Roll - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignCenter - + -180 @@ -147,17 +151,77 @@ - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + -180 + + + 180 + + + + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + + + Yaw + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + background-color: qlineargradient(spread:reflect, x1:0.507, y1:0, x2:0.507, y2:0.772, stop:0.208955 rgba(74, 74, 74, 255), stop:0.78607 rgba(36, 36, 36, 255)); +color: rgb(255, 255, 255); +border-radius: 5; +font: bold 12px; +margin:1px; + Pitch - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignCenter - + -90 @@ -167,25 +231,31 @@ - - - - Yaw + + + + Qt::Horizontal - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + 40 + 20 + - + - - - - -180 + + + + Qt::Horizontal - - 180 + + + 40 + 20 + - + diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 212b33f5f..7e904bfe2 100755 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -20,7 +20,7 @@ - 1 + 0 @@ -107,17 +107,17 @@ 0 0 - 824 + 850 513 - - 12 - 6 + + 12 + @@ -508,8 +508,8 @@ 0 0 - 852 - 521 + 850 + 513 @@ -525,12 +525,12 @@ Configure each stabilization mode for each axis - - 12 - 9 + + 12 + @@ -1297,7 +1297,7 @@ channel value for each flight mode. 0 0 - 824 + 850 513 From d5661bec3e4140f1cb0e57d7bac3d21f13de1621 Mon Sep 17 00:00:00 2001 From: chris pember Date: Thu, 20 Sep 2012 22:19:40 -0700 Subject: [PATCH 04/17] adjusted the autotune page into 2 tabbed pages --- .../src/plugins/config/autotune.ui | 1705 +++++++---------- 1 file changed, 641 insertions(+), 1064 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index 4d7653c0b..5404a6e49 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -6,1079 +6,656 @@ 0 0 - 443 - 575 + 739 + 688 + + + 0 + 0 + + Form - - - - 20 - 10 - 401 - 131 - + + + -1 - - Tuning Aggressiveness - - - - - - Rate Tuning: - + + + + 0 + + + + Pre-autotune + + + + 12 + + + 12 + + + 12 + + + + + QFrame::StyledPanel + + + QFrame::Sunken + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is an experimental plugin for the GCS that is going to make your aircraft shake etc so test with lots of space and be <span style=" font-weight:600;">very very wary</span> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:</p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Go to the UAVOBrowser and under HwSettings.OptionalModules enable Autotune.  Click send then save.  Power cycle your board (disconnect battery AND usb).<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In Input configuration set one of your flight modes to &quot;Autotune&quot;<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, flip to autotune, keep it in the air while it's shaking<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out. <br /></li> +<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly then new settings</li> +<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, go to the next tab</li></ul></body></html> + + + + - - - - - Attitude Tuning: - + + + Autotune Setup + + + + 0 + + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 255 + 255 + 255 + + + + + + + 232 + 232 + 232 + + + + + + + + + 232 + 232 + 232 + + + + + + + 232 + 232 + 232 + + + + + + + + QFrame::NoFrame + + + QFrame::Plain + + + true + + + + + 0 + 0 + 709 + 588 + + + + + 0 + 0 + + + + true + + + + 12 + + + 12 + + + + + Tuning Aggressiveness + + + + + + Rate Tuning: + + + + + + + Attitude Tuning: + + + + + + + 100 + + + Qt::Horizontal + + + + objname:RelayTuningSettings + fieldname:RateGain + scale:0.01 + haslimits:no + + + + + + + + 100 + + + Qt::Horizontal + + + + objname:RelayTuningSettings + fieldname:AttitudeGain + scale:0.01 + haslimits:no + + + + + + + + + + + Measured Properties + + + + + + Roll: + + + + + + + 0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + objname:RelayTuning + fieldname:Period + element:Roll + + + + + + + + 0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + objname:RelayTuning + fieldname:Gain + element:Roll + + + + + + + + Period (ms) + + + + + + + Gain (deg/s) / output + + + + + + + Pitch + + + + + + + 0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + objname:RelayTuning + fieldname:Period + element:Pitch + + + + + + + + 0 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + objname:RelayTuning + fieldname:Gain + element:Pitch + + + + + + + + + + + Computed Values + + + + + + RateKi + + + + + + + AttitudeKp + + + + + + + 0 + + + + + + + Pitch + + + + + + + RateKp + + + + + + + 0 + + + + + + + AttitudeKi + + + + + + + Roll + + + + + + + 0 + + + + + + + 0 + + + + + + + 0 + + + + + + + 0 + + + + + + + 0 + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + Apply Computed Values + + + + + + + Step Size + + + Qt::AlignCenter + + + + + + + Qt::Horizontal + + + + objname:RelayTuningSettings + fieldname:Amplitude + scale:0.01 + haslimits:no + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + The Apply and Save buttons below save the autotuning settings which +will alter settings for the next autotuning flight + + + Qt::AlignCenter + + + + + + + + + + + + Qt::Vertical + + + + 20 + 77 + + + + + + + + + - - - - - 100 - - - Qt::Horizontal - - - - objname:RelayTuningSettings - fieldname:RateGain - scale:0.01 - haslimits:no - - - - - - - - 100 - - - Qt::Horizontal - - - - objname:RelayTuningSettings - fieldname:AttitudeGain - scale:0.01 - haslimits:no - - - - - - - - - - 20 - 250 - 401 - 121 - - - - Computed Values - - - - - - RateKp - - - - - - - Roll - - - - - - - RateKi - - - - - - - AttitudeKp - - - - - - - AttitudeKi - - - - - - - Pitch - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - 0 - - - - - - - - - 20 - 140 - 401 - 111 - - - - Measured Properties - - - - - - Roll: - - - - - - - 0 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - objname:RelayTuning - fieldname:Period - element:Roll - - - - - - - - 0 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - objname:RelayTuning - fieldname:Gain - element:Roll - - - - - - - - Period (ms) - - - - - - - Gain (deg/s) / output - - - - - - - Pitch - - - - - - - 0 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - objname:RelayTuning - fieldname:Period - element:Pitch - - - - - - - - 0 - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - objname:RelayTuning - fieldname:Gain - element:Pitch - - - - - - - - - - 20 - 480 - 401 - 79 - - - - - 0 - 0 - - - - - 0 - 79 - - - - - 16777215 - 79 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 0 - 0 - 0 - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 251 - 251 - 251 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 255 - 255 - 255 - - - - - - - 251 - 251 - 251 - - - - - - - 124 - 124 - 124 - - - - - - - 165 - 165 - 165 - - - - - - - 124 - 124 - 124 - - - - - - - 255 - 255 - 255 - - - - - - - 124 - 124 - 124 - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - - - 243 - 243 - 243 - - - - - 250 - 250 - 250 - - - - - - - - - 0 - 0 - 0 - - - - - - - 248 - 248 - 248 - - - - - - - 255 - 255 - 220 - - - - - - - 0 - 0 - 0 - - - - - - - - false - - - - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - - - - - Qt::Horizontal - - - - 111 - 10 - - - - - - - - - 120 - 28 - - - - Reloads the saved settings into GCS. + + + + + + 4 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 13 + 25 + + + + + + + + + 0 + 0 + + + + Reloads the saved settings into GCS. Useful if you have accidentally changed some settings. - - - QPushButton { -border: 1px outset #999; -border-radius: 5; -background-color: qlineargradient(spread:pad, x1:0.507, y1:0.869318, x2:0.507, y2:0.0965909, stop:0.28 rgba(236, 236, 236, 255), stop:1 rgba(252, 252, 252, 255)); -} - -QPushButton:pressed { - - border-style: inset; - background-color: qlineargradient(spread:pad, x1:0.502, y1:0.664864, x2:0.502, y2:0.034, stop:0.358209 rgba(250, 250, 250, 255), stop:0.626866 rgba(235, 235, 235, 255)); - -} - - -QPushButton:hover { - border: 1px outset #999; -border-color: rgb(83, 83, 83); -border-radius: 4; - } - - - Reload Board Data - - - - button:reload - buttongroup:10 - - - - - - - - - 60 - 28 - - - - Send settings to the board but do not save to the non-volatile memory - - - QPushButton { -border: 1px outset #999; -border-radius: 5; -background-color: qlineargradient(spread:pad, x1:0.507, y1:0.869318, x2:0.507, y2:0.0965909, stop:0.28 rgba(236, 236, 236, 255), stop:1 rgba(252, 252, 252, 255)); -} - -QPushButton:pressed { - - border-style: inset; - background-color: qlineargradient(spread:pad, x1:0.502, y1:0.664864, x2:0.502, y2:0.034, stop:0.358209 rgba(250, 250, 250, 255), stop:0.626866 rgba(235, 235, 235, 255)); - -} - - -QPushButton:hover { - border: 1px outset #999; -border-color: rgb(83, 83, 83); -border-radius: 4; - } - - - Apply - - - - button:apply - - - - - - - - - 60 - 28 - - - - Send settings to the board and save to the non-volatile memory - - - QPushButton { -border: 1px outset #999; -border-radius: 5; -background-color: qlineargradient(spread:pad, x1:0.507, y1:0.869318, x2:0.507, y2:0.0965909, stop:0.28 rgba(236, 236, 236, 255), stop:1 rgba(252, 252, 252, 255)); -} - -QPushButton:pressed { - - border-style: inset; - background-color: qlineargradient(spread:pad, x1:0.502, y1:0.664864, x2:0.502, y2:0.034, stop:0.358209 rgba(250, 250, 250, 255), stop:0.626866 rgba(235, 235, 235, 255)); - -} - - -QPushButton:hover { - border: 1px outset #999; -border-color: rgb(83, 83, 83); -border-radius: 4; - } - - - Save - - - - button:save - - - - - - - - - - 30 - 440 - 401 - 31 - - - - The buttons below change the autotuning settings which -will alter things for the next autotuning flight - - - - - - 250 - 380 - 171 - 31 - - - - QPushButton { -border: 1px outset #999; -border-radius: 5; -background-color: qlineargradient(spread:pad, x1:0.507, y1:0.869318, x2:0.507, y2:0.0965909, stop:0.28 rgba(236, 236, 236, 255), stop:1 rgba(252, 252, 252, 255)); -} - -QPushButton:pressed { - - border-style: inset; - background-color: qlineargradient(spread:pad, x1:0.502, y1:0.664864, x2:0.502, y2:0.034, stop:0.358209 rgba(250, 250, 250, 255), stop:0.626866 rgba(235, 235, 235, 255)); - -} - - -QPushButton:hover { - border: 1px outset #999; -border-color: rgb(83, 83, 83); -border-radius: 4; - } - - - Apply Computed Values - - - - - - 40 - 410 - 104 - 20 - - - - Step Size - - - - - - 149 - 410 - 266 - 20 - - - - Qt::Horizontal - - - - objname:RelayTuningSettings - fieldname:Amplitude - scale:0.01 - haslimits:no - - - + + + + + + Reload Board Data + + + + button:reload + buttongroup:10 + + + + + + + + + 0 + 0 + + + + Send settings to the board but do not save to the non-volatile memory + + + + + + Apply + + + + button:apply + + + + + + + + + 0 + 0 + + + + Send settings to the board and save to the non-volatile memory + + + + + + Save + + + + button:save + + + + + + + - + + + From 7d8c662aefe9e2e538ddb1921b88d68fb3aa9b61 Mon Sep 17 00:00:00 2001 From: chris pember Date: Sat, 22 Sep 2012 10:37:22 -0700 Subject: [PATCH 05/17] added the auto tune checkbox, changed the wording on the pre-autotune page --- .../src/plugins/config/autotune.ui | 44 +++++++++++++++++-- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index 5404a6e49..9625c1060 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -30,9 +30,9 @@ - Pre-autotune + Pre-Autotune - + 12 @@ -42,7 +42,33 @@ 12 - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + QFrame::StyledPanel @@ -64,7 +90,17 @@ p, li { white-space: pre-wrap; } <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> <li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out. <br /></li> <li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly then new settings</li> -<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, go to the next tab</li></ul></body></html> +<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the &quot;Enable Autotune Module&quot; checkbox below this text, and go to the next tab.</li></ul></body></html> + + + + + + + Enable Autotune Module + + + true From de924ccf5f8a1c565bb32dc5e7494c72b20714df Mon Sep 17 00:00:00 2001 From: chris pember Date: Sat, 22 Sep 2012 11:09:08 -0700 Subject: [PATCH 06/17] just doing local commits so I can grab it in my own branch, just spacing changes and a little rearrangement --- .../openpilotgcs/src/plugins/config/input.ui | 217 ++++++++---------- .../openpilotgcs/src/plugins/config/output.ui | 19 +- 2 files changed, 107 insertions(+), 129 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/input.ui b/ground/openpilotgcs/src/plugins/config/input.ui index 7e904bfe2..345b6f5fb 100755 --- a/ground/openpilotgcs/src/plugins/config/input.ui +++ b/ground/openpilotgcs/src/plugins/config/input.ui @@ -7,7 +7,7 @@ 0 0 880 - 613 + 672 @@ -27,6 +27,9 @@ RC Input + + 0 + 0 @@ -108,16 +111,16 @@ 0 0 850 - 513 + 572 - - 6 - 12 + + -1 + @@ -146,114 +149,6 @@ 12 - - - - Calibration and Configuration Options - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Start Configuration Wizard - - - false - - - false - - - false - - - false - - - false - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - true - - - - 210 - 0 - - - - false - - - Manual Calibration - - - true - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - Qt::Vertical - - - QSizePolicy::Fixed - - - - 20 - 12 - - - - @@ -417,6 +312,98 @@ + + + + Calibration and Configuration Options + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Start Configuration Wizard + + + false + + + false + + + false + + + false + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + true + + + + 210 + 0 + + + + false + + + Manual Calibration + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + @@ -509,7 +496,7 @@ 0 0 850 - 513 + 572 @@ -1298,7 +1285,7 @@ channel value for each flight mode. 0 0 850 - 513 + 572 diff --git a/ground/openpilotgcs/src/plugins/config/output.ui b/ground/openpilotgcs/src/plugins/config/output.ui index dc23ff7a4..e49f240c6 100755 --- a/ground/openpilotgcs/src/plugins/config/output.ui +++ b/ground/openpilotgcs/src/plugins/config/output.ui @@ -14,9 +14,6 @@ Form - - 6 - 12 @@ -120,12 +117,12 @@ 0 0 668 - 671 + 654 - 6 + -1 12 @@ -148,12 +145,12 @@ Output Update Speed - - 12 - 6 + + 12 + @@ -528,15 +525,9 @@ Leave at 50Hz for fixed wing. - - 6 - QLayout::SetDefaultConstraint - - 0 - From 4e1081179b25f81f6e5cdda2052c6fdf92209d90 Mon Sep 17 00:00:00 2001 From: PT_Dreamer Date: Sat, 22 Sep 2012 23:17:06 +0100 Subject: [PATCH 07/17] GCS-Auto Tuning Added code to allow module to be enabled using the checkbox --- .../plugins/config/configautotunewidget.cpp | 26 +++++++++++++++++++ .../src/plugins/config/configautotunewidget.h | 4 ++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/ground/openpilotgcs/src/plugins/config/configautotunewidget.cpp b/ground/openpilotgcs/src/plugins/config/configautotunewidget.cpp index 33106be4c..63de056ad 100644 --- a/ground/openpilotgcs/src/plugins/config/configautotunewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configautotunewidget.cpp @@ -13,6 +13,7 @@ #include "relaytuningsettings.h" #include "relaytuning.h" #include "stabilizationsettings.h" +#include "hwsettings.h" ConfigAutotuneWidget::ConfigAutotuneWidget(QWidget *parent) : ConfigTaskWidget(parent) @@ -28,6 +29,9 @@ ConfigAutotuneWidget::ConfigAutotuneWidget(QWidget *parent) : connect(m_autotune->rateTuning, SIGNAL(valueChanged(int)), this, SLOT(recomputeStabilization())); connect(m_autotune->attitudeTuning, SIGNAL(valueChanged(int)), this, SLOT(recomputeStabilization())); + addUAVObject("HwSettings"); + addWidget(m_autotune->enableAutoTune); + RelayTuning *relayTuning = RelayTuning::GetInstance(getObjectManager()); Q_ASSERT(relayTuning); if(relayTuning) @@ -134,3 +138,25 @@ void ConfigAutotuneWidget::recomputeStabilization() m_autotune->pitchAttitudeKp->setText(QString().number(stabSettings.PitchPI[StabilizationSettings::PITCHPI_KP])); m_autotune->pitchAttitudeKi->setText(QString().number(stabSettings.PitchPI[StabilizationSettings::PITCHPI_KI])); } +void ConfigAutotuneWidget::refreshWidgetsValues(UAVObject *obj) +{ + HwSettings *hwSettings = HwSettings::GetInstance(getObjectManager()); + if(obj==hwSettings) + { + bool dirtyBack=isDirty(); + HwSettings::DataFields hwSettingsData = hwSettings->getData(); + m_autotune->enableAutoTune->setChecked( + hwSettingsData.OptionalModules[HwSettings::OPTIONALMODULES_AUTOTUNE] == HwSettings::OPTIONALMODULES_ENABLED); + setDirty(dirtyBack); + } + ConfigTaskWidget::refreshWidgetsValues(obj); +} +void ConfigAutotuneWidget::updateObjectsFromWidgets() +{ + HwSettings *hwSettings = HwSettings::GetInstance(getObjectManager()); + HwSettings::DataFields hwSettingsData = hwSettings->getData(); + hwSettingsData.OptionalModules[HwSettings::OPTIONALMODULES_AUTOTUNE] = + m_autotune->enableAutoTune->isChecked() ? HwSettings::OPTIONALMODULES_ENABLED : HwSettings::OPTIONALMODULES_DISABLED; + hwSettings->setData(hwSettingsData); + ConfigTaskWidget::updateObjectsFromWidgets(); +} diff --git a/ground/openpilotgcs/src/plugins/config/configautotunewidget.h b/ground/openpilotgcs/src/plugins/config/configautotunewidget.h index 7a89ed373..c8ac2ba71 100644 --- a/ground/openpilotgcs/src/plugins/config/configautotunewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configautotunewidget.h @@ -51,10 +51,12 @@ private: signals: public slots: - + void refreshWidgetsValues(UAVObject *obj); + void updateObjectsFromWidgets(); private slots: void recomputeStabilization(); void saveStabilization(); + void refreshValues(); }; #endif // CONFIGAUTOTUNE_H From dc10917f70e8e3b19ff669500032e8c7d973b4fe Mon Sep 17 00:00:00 2001 From: PT_Dreamer Date: Sun, 23 Sep 2012 22:50:05 +0100 Subject: [PATCH 08/17] GCS-Yaw mixing level reverse button Changed the slider values from -100/+100 to 0/100 and wrote the code for the invert checkbox. NOT TESTED --- .../src/plugins/config/airframe.ui | 2 +- .../src/plugins/config/autotune.ui | 35 ++++++------ .../configmultirotorwidget.cpp | 56 ++++++++++++------- .../cfg_vehicletypes/configmultirotorwidget.h | 2 +- 4 files changed, 55 insertions(+), 40 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index 4b1b44d07..7171fcd2f 100755 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -1092,7 +1092,7 @@ margin:1px; Typical value is 50% for + or X configuration on quads. - -100 + 0 100 diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index 9625c1060..1969aa064 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -21,12 +21,12 @@ - -1 + 6 - 0 + 1 @@ -80,17 +80,18 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is an experimental plugin for the GCS that is going to make your aircraft shake etc so test with lots of space and be <span style=" font-weight:600;">very very wary</span> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:</p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Go to the UAVOBrowser and under HwSettings.OptionalModules enable Autotune.  Click send then save.  Power cycle your board (disconnect battery AND usb).<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In Input configuration set one of your flight modes to &quot;Autotune&quot;<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, flip to autotune, keep it in the air while it's shaking<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out. <br /></li> -<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly then new settings</li> -<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the &quot;Enable Autotune Module&quot; checkbox below this text, and go to the next tab.</li></ul></body></html> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">This is an experimental plugin for the GCS that is going to make your aircraft shake etc so test with lots of space and be </span><span style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:600;">very very wary</span><span style=" font-family:'Lucida Grande'; font-size:13pt;"> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:</span></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Go to the UAVOBrowser and under HwSettings.OptionalModules enable Autotune.  Click send then save.  Power cycle your board (disconnect battery AND usb).<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In Input configuration set one of your flight modes to &quot;Autotune&quot;<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, flip to autotune, keep it in the air while it's shaking<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out. <br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly then new settings</li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the &quot;Enable Autotune Module&quot; checkbox below this text, and go to the next tab.</li></ul></body></html> @@ -194,8 +195,8 @@ p, li { white-space: pre-wrap; } 0 0 - 709 - 588 + 717 + 602 @@ -690,8 +691,6 @@ Useful if you have accidentally changed some settings. - - - + diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp index 79df8ece7..3c796a142 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp @@ -94,7 +94,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(100); m_aircraft->mrPitchMixLevel->setValue(100); - m_aircraft->mrYawMixLevel->setValue(50); + setYawMixLevel(50); m_aircraft->triYawChannelBox->setEnabled(true); } @@ -108,7 +108,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) // init mixer levels m_aircraft->mrRollMixLevel->setValue(50); m_aircraft->mrPitchMixLevel->setValue(50); - m_aircraft->mrYawMixLevel->setValue(50); + setYawMixLevel(50); } else if (frameType == "QuadP" || frameType == "Quad +") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Quad +")); @@ -119,7 +119,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(100); m_aircraft->mrPitchMixLevel->setValue(100); - m_aircraft->mrYawMixLevel->setValue(50); + setYawMixLevel(50); } else if (frameType == "Hexa" || frameType == "Hexacopter") { @@ -131,7 +131,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(50); m_aircraft->mrPitchMixLevel->setValue(33); - m_aircraft->mrYawMixLevel->setValue(33); + setYawMixLevel(33); } else if (frameType == "HexaX" || frameType == "Hexacopter X" ) { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Hexacopter X")); @@ -142,7 +142,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(33); m_aircraft->mrPitchMixLevel->setValue(50); - m_aircraft->mrYawMixLevel->setValue(33); + setYawMixLevel(33); } else if (frameType == "HexaCoax" || frameType == "Hexacopter Y6") @@ -155,7 +155,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(100); m_aircraft->mrPitchMixLevel->setValue(50); - m_aircraft->mrYawMixLevel->setValue(66); + setYawMixLevel(66); } else if (frameType == "Octo" || frameType == "Octocopter") @@ -168,7 +168,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(33); m_aircraft->mrPitchMixLevel->setValue(33); - m_aircraft->mrYawMixLevel->setValue(25); + setYawMixLevel(25); } else if (frameType == "OctoV" || frameType == "Octocopter V") { @@ -180,7 +180,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(25); m_aircraft->mrPitchMixLevel->setValue(25); - m_aircraft->mrYawMixLevel->setValue(25); + setYawMixLevel(25); } else if (frameType == "OctoCoaxP" || frameType == "Octo Coax +") @@ -193,7 +193,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(100); m_aircraft->mrPitchMixLevel->setValue(100); - m_aircraft->mrYawMixLevel->setValue(50); + setYawMixLevel(50); } else if (frameType == "OctoCoaxX" || frameType == "Octo Coax X") @@ -205,7 +205,7 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) m_aircraft->mrRollMixLevel->setValue(50); m_aircraft->mrPitchMixLevel->setValue(50); - m_aircraft->mrYawMixLevel->setValue(50); + setYawMixLevel(50); } } @@ -259,6 +259,21 @@ QStringList ConfigMultiRotorWidget::getChannelDescriptions() return channelDesc; } +void ConfigMultiRotorWidget::setYawMixLevel(int value) +{ + if(value<0) + { + m_aircraft->mrYawMixLevel->setValue((-1)*value); + m_aircraft->TricopterRevMixercheckBox->setChecked(true); + } + else + { + m_aircraft->mrYawMixLevel->setValue(value); + m_aircraft->TricopterRevMixercheckBox->setChecked(false); + } + +} + @@ -500,7 +515,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( value/1.27 ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( 1-value/1.27 ); + setYawMixLevel( 1-value/1.27 ); channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL); @@ -526,7 +541,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( value/1.27 ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( 1-value/1.27 ); + setYawMixLevel( 1-value/1.27 ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL); m_aircraft->mrRollMixLevel->setValue( value/1.27); @@ -556,7 +571,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); //change channels channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; @@ -589,7 +604,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL); @@ -617,7 +632,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( value/1.27 ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( value/1.27 ); + setYawMixLevel( value/1.27 ); channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL); @@ -648,7 +663,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); //change channels channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; @@ -660,7 +675,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); //change channels channel = m_aircraft->multiMotorChannelBox2->currentIndex() - 1; @@ -672,7 +687,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); //change channels channel = m_aircraft->multiMotorChannelBox3->currentIndex() - 1; @@ -705,7 +720,7 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) m_aircraft->mrPitchMixLevel->setValue( floor(value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_YAW); - m_aircraft->mrYawMixLevel->setValue( floor(-value/1.27) ); + setYawMixLevel( floor(-value/1.27) ); value = getMixerVectorValue(mixer, channel, VehicleConfig::MIXERVECTOR_ROLL); m_aircraft->mrRollMixLevel->setValue( floor(value/1.27) ); @@ -959,7 +974,8 @@ bool ConfigMultiRotorWidget::setupMultiRotorMixer(double mixerFactors[8][3]) // and enable only the relevant channels: double pFactor = (double)m_aircraft->mrPitchMixLevel->value()/100; double rFactor = (double)m_aircraft->mrRollMixLevel->value()/100; - double yFactor = (double)m_aircraft->mrYawMixLevel->value()/100; + double invert=m_aircraft->TricopterRevMixercheckBox->isChecked() ? -1:1; + double yFactor =invert * (double)m_aircraft->mrYawMixLevel->value()/100; for (int i=0 ; i<8; i++) { if(mmList.at(i)->isEnabled()) { diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h index 085aab106..54873369b 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h @@ -67,7 +67,7 @@ private: virtual void ResetActuators(GUIConfigDataUnion* configData); static QStringList getChannelDescriptions(); static const QString CHANNELBOXNAME; - + void setYawMixLevel(int); private slots: virtual void setupUI(QString airframeType); virtual void refreshWidgetsValues(QString frameType); From 616a27ca824f7cefa230d1d2f64bd4b97cdbcdfd Mon Sep 17 00:00:00 2001 From: chris pember Date: Sun, 23 Sep 2012 22:34:40 -0700 Subject: [PATCH 09/17] fixed that path error PT brought up in forum i hope --- ground/openpilotgcs/src/plugins/config/airframe.ui | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index 4b1b44d07..60e578efb 100755 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -3202,7 +3202,8 @@ p, li { white-space: pre-wrap; } <tr> <td style="border: none;"> <p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:14pt; font-weight:600; color:#ff0000;">SETTING UP FEED FORWARD REQUIRES CAUTION</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"><br /></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Ubuntu'; font-size:11pt;"></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;"><br /></span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Beware: Feed Forward Tuning will launch all engines around mid-throttle, you have been warned!</p> <p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Remove your props initially, and for fine-tuning, make sure your airframe is safely held in place. Wear glasses and protect your face and body.</p></td></tr></table></body></html> @@ -3255,7 +3256,7 @@ p, li { white-space: pre-wrap; } - + :/core/images/helpicon.svg:/core/images/helpicon.svg @@ -3308,7 +3309,7 @@ p, li { white-space: pre-wrap; } - + From 85ed1c364dfc5c744242b56923d064d3c332a3e9 Mon Sep 17 00:00:00 2001 From: Laura Sebesta Date: Mon, 24 Sep 2012 10:24:37 +0200 Subject: [PATCH 10/17] Changed UAVO browser erase icon to reset icon. --- .../plugins/uavobjectbrowser/images/reset.png | Bin 0 -> 31001 bytes .../uavobjectbrowser/uavobjectbrowser.qrc | 1 + .../uavobjectbrowser/uavobjectbrowser.ui | 4 ++-- 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 ground/openpilotgcs/src/plugins/uavobjectbrowser/images/reset.png diff --git a/ground/openpilotgcs/src/plugins/uavobjectbrowser/images/reset.png b/ground/openpilotgcs/src/plugins/uavobjectbrowser/images/reset.png new file mode 100644 index 0000000000000000000000000000000000000000..231922279f847b071ed5995ce2fa842a2461181f GIT binary patch literal 31001 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/up_alt.png images/trash.png images/1343241276_eye.png + images/reset.png diff --git a/ground/openpilotgcs/src/plugins/uavobjectbrowser/uavobjectbrowser.ui b/ground/openpilotgcs/src/plugins/uavobjectbrowser/uavobjectbrowser.ui index 959df59cc..e08c80535 100644 --- a/ground/openpilotgcs/src/plugins/uavobjectbrowser/uavobjectbrowser.ui +++ b/ground/openpilotgcs/src/plugins/uavobjectbrowser/uavobjectbrowser.ui @@ -128,14 +128,14 @@ - Erase + Resets UAV object setting to default values at next boot ... - :/uavobjectbrowser/images/trash.png:/uavobjectbrowser/images/trash.png + :/uavobjectbrowser/images/reset.png:/uavobjectbrowser/images/reset.png From c04318493a3d125349cb56e8c15663c901c99861 Mon Sep 17 00:00:00 2001 From: PT_Dreamer Date: Mon, 24 Sep 2012 13:38:14 +0100 Subject: [PATCH 11/17] GCS- Fixes compile error --- ground/openpilotgcs/src/plugins/config/configautotunewidget.h | 1 - 1 file changed, 1 deletion(-) diff --git a/ground/openpilotgcs/src/plugins/config/configautotunewidget.h b/ground/openpilotgcs/src/plugins/config/configautotunewidget.h index c8ac2ba71..466335d04 100644 --- a/ground/openpilotgcs/src/plugins/config/configautotunewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configautotunewidget.h @@ -56,7 +56,6 @@ public slots: private slots: void recomputeStabilization(); void saveStabilization(); - void refreshValues(); }; #endif // CONFIGAUTOTUNE_H From 9d5d67a45a9343268cffceba74b63014f8472582 Mon Sep 17 00:00:00 2001 From: Laura Sebesta Date: Mon, 24 Sep 2012 22:01:19 +0200 Subject: [PATCH 12/17] Added swapping of artwork when multirotor direction reversed. --- .../src/plugins/config/airframe.ui | 6 +- .../configmultirotorwidget.cpp | 97 +- .../cfg_vehicletypes/configmultirotorwidget.h | 5 + .../config/configvehicletypewidget.cpp | 11 +- .../plugins/config/configvehicletypewidget.h | 1 + .../config/images/multirotor-shapes.svg | 5623 ++++++++++++++++- 6 files changed, 5527 insertions(+), 216 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/airframe.ui b/ground/openpilotgcs/src/plugins/config/airframe.ui index 7171fcd2f..b6006b569 100755 --- a/ground/openpilotgcs/src/plugins/config/airframe.ui +++ b/ground/openpilotgcs/src/plugins/config/airframe.ui @@ -1450,7 +1450,7 @@ font: bold 12px; margin:1px; - Multirotor Yaw Direction + Multirotor Motor Direction Qt::AlignCenter @@ -1506,9 +1506,9 @@ margin:1px; - + - Reverse Yaw Mix + Reverse all motors diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp index 3c796a142..be8ed83a1 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp @@ -49,7 +49,7 @@ const QString ConfigMultiRotorWidget::CHANNELBOXNAME = QString("multiMotorChanne /** Constructor */ -ConfigMultiRotorWidget::ConfigMultiRotorWidget(Ui_AircraftWidget *aircraft, QWidget *parent) : VehicleConfig(parent) +ConfigMultiRotorWidget::ConfigMultiRotorWidget(Ui_AircraftWidget *aircraft, QWidget *parent) : VehicleConfig(parent), invertMotors(1) { m_aircraft = aircraft; } @@ -87,7 +87,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) if (frameType == "Tri" || frameType == "Tricopter Y") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Tricopter Y")); - quad->setElementId("tri"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 3, true); @@ -100,7 +99,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) } else if (frameType == "QuadX" || frameType == "Quad X") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Quad X")); - quad->setElementId("quad-x"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 4, true); @@ -112,7 +110,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) } else if (frameType == "QuadP" || frameType == "Quad +") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Quad +")); - quad->setElementId("quad-plus"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 4, true); @@ -124,7 +121,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "Hexa" || frameType == "Hexacopter") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Hexacopter")); - quad->setElementId("quad-hexa"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 6, true); @@ -135,7 +131,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) } else if (frameType == "HexaX" || frameType == "Hexacopter X" ) { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Hexacopter X")); - quad->setElementId("quad-hexa-H"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 6, true); @@ -148,7 +143,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "HexaCoax" || frameType == "Hexacopter Y6") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Hexacopter Y6")); - quad->setElementId("hexa-coax"); //Enable all necessary motor channel boxes... enableComboBoxes(uiowner, CHANNELBOXNAME, 6, true); @@ -161,7 +155,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "Octo" || frameType == "Octocopter") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Octocopter")); - quad->setElementId("quad-octo"); //Enable all necessary motor channel boxes enableComboBoxes(uiowner, CHANNELBOXNAME, 8, true); @@ -173,7 +166,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "OctoV" || frameType == "Octocopter V") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Octocopter V")); - quad->setElementId("quad-octo-v"); //Enable all necessary motor channel boxes enableComboBoxes(uiowner, CHANNELBOXNAME, 8, true); @@ -186,7 +178,6 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "OctoCoaxP" || frameType == "Octo Coax +") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Octo Coax +")); - quad->setElementId("octo-coax-P"); //Enable all necessary motor channel boxes enableComboBoxes(uiowner, CHANNELBOXNAME, 8, true); @@ -199,13 +190,89 @@ void ConfigMultiRotorWidget::setupUI(QString frameType) else if (frameType == "OctoCoaxX" || frameType == "Octo Coax X") { setComboCurrentIndex( m_aircraft->multirotorFrameType, m_aircraft->multirotorFrameType->findText("Octo Coax X")); - quad->setElementId("octo-coax-X"); + //Enable all necessary motor channel boxes enableComboBoxes(uiowner, CHANNELBOXNAME, 8, true); m_aircraft->mrRollMixLevel->setValue(50); m_aircraft->mrPitchMixLevel->setValue(50); setYawMixLevel(50); + } + + //Draw the appropriate airframe + drawAirframe(frameType); +} + +void ConfigMultiRotorWidget::drawAirframe(QString frameType){ + + invertMotors = m_aircraft->MultirotorRevMixercheckBox->isChecked() ? -1:1; + + if (frameType == "Tri" || frameType == "Tricopter Y") { + if(invertMotors > 0) + quad->setElementId("tri"); + else + quad->setElementId("tri_reverse"); + } + else if (frameType == "QuadX" || frameType == "Quad X") { + if(invertMotors > 0) + quad->setElementId("quad-x"); + else + quad->setElementId("quad-x_reverse"); + } + else if (frameType == "QuadP" || frameType == "Quad +") { + if(invertMotors > 0) + quad->setElementId("quad-plus"); + else + quad->setElementId("quad-plus_reverse"); + } + else if (frameType == "Hexa" || frameType == "Hexacopter") + { + if(invertMotors > 0) + quad->setElementId("quad-hexa"); + else + quad->setElementId("quad-hexa_reverse"); + } + else if (frameType == "HexaX" || frameType == "Hexacopter X" ) { + if(invertMotors > 0) + quad->setElementId("quad-hexa-H"); + else + quad->setElementId("quad-hexa-H_reverse"); + } + else if (frameType == "HexaCoax" || frameType == "Hexacopter Y6") + { + if(invertMotors > 0) + quad->setElementId("hexa-coax"); + else + quad->setElementId("hexa-coax_reverse"); + } + else if (frameType == "Octo" || frameType == "Octocopter") + { + if(invertMotors > 0) + quad->setElementId("quad-octo"); + else + quad->setElementId("quad-octo_reverse"); + } + else if (frameType == "OctoV" || frameType == "Octocopter V") + { + if(invertMotors > 0) + quad->setElementId("quad-octo-v"); + else + quad->setElementId("quad-octo-v_reverse"); + } + else if (frameType == "OctoCoaxP" || frameType == "Octo Coax +") + { + if(invertMotors > 0) + quad->setElementId("octo-coax-P"); + else + quad->setElementId("octo-coax-P_reverse"); + + } + else if (frameType == "OctoCoaxX" || frameType == "Octo Coax X") + { + if(invertMotors > 0) + quad->setElementId("octo-coax-X"); + else + quad->setElementId("octo-coax-X_reverse"); } } @@ -264,12 +331,12 @@ void ConfigMultiRotorWidget::setYawMixLevel(int value) if(value<0) { m_aircraft->mrYawMixLevel->setValue((-1)*value); - m_aircraft->TricopterRevMixercheckBox->setChecked(true); + m_aircraft->MultirotorRevMixercheckBox->setChecked(true); } else { m_aircraft->mrYawMixLevel->setValue(value); - m_aircraft->TricopterRevMixercheckBox->setChecked(false); + m_aircraft->MultirotorRevMixercheckBox->setChecked(false); } } @@ -974,8 +1041,8 @@ bool ConfigMultiRotorWidget::setupMultiRotorMixer(double mixerFactors[8][3]) // and enable only the relevant channels: double pFactor = (double)m_aircraft->mrPitchMixLevel->value()/100; double rFactor = (double)m_aircraft->mrRollMixLevel->value()/100; - double invert=m_aircraft->TricopterRevMixercheckBox->isChecked() ? -1:1; - double yFactor =invert * (double)m_aircraft->mrYawMixLevel->value()/100; + invertMotors = m_aircraft->MultirotorRevMixercheckBox->isChecked() ? -1:1; + double yFactor =invertMotors * (double)m_aircraft->mrYawMixLevel->value()/100; for (int i=0 ; i<8; i++) { if(mmList.at(i)->isEnabled()) { diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h index 54873369b..4ce10aae3 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.h @@ -64,10 +64,15 @@ private: void setupMotors(QList motorList); void setupQuadMotor(int channel, double roll, double pitch, double yaw); + float invertMotors; + virtual void ResetActuators(GUIConfigDataUnion* configData); static QStringList getChannelDescriptions(); static const QString CHANNELBOXNAME; void setYawMixLevel(int); + + void drawAirframe(QString multiRotorType); + private slots: virtual void setupUI(QString airframeType); virtual void refreshWidgetsValues(QString frameType); diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp index 7055851ef..05d17271f 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.cpp @@ -215,6 +215,9 @@ ConfigVehicleTypeWidget::ConfigVehicleTypeWidget(QWidget *parent) : ConfigTaskWi connect(m_aircraft->ffTestBox2, SIGNAL(clicked(bool)), this, SLOT(enableFFTest())); connect(m_aircraft->ffTestBox3, SIGNAL(clicked(bool)), this, SLOT(enableFFTest())); + //Connect the multirotor motor reverse checkbox + connect(m_aircraft->MultirotorRevMixercheckBox, SIGNAL(clicked(bool)), this, SLOT(reverseMultirotorMotor())); + // Connect the help pushbutton connect(m_aircraft->airframeHelp, SIGNAL(clicked()), this, SLOT(openHelp())); enableControls(false); @@ -483,7 +486,7 @@ void ConfigVehicleTypeWidget::refreshWidgetsValues(UAVObject * o) UAVObjectField *field = system->getField(QString("AirframeType")); Q_ASSERT(field); // At this stage, we will need to have some hardcoded settings in this code, this - // is not ideal, but here you go. + // is not ideal, but there you go. QString frameType = field->getValue().toString(); setupAirframeUI(frameType); @@ -766,6 +769,12 @@ void ConfigVehicleTypeWidget::setComboCurrentIndex(QComboBox* box, int index) box->setCurrentIndex(index); } +void ConfigVehicleTypeWidget::reverseMultirotorMotor(){ + QString frameType = m_aircraft->multirotorFrameType->currentText(); + m_multirotor->drawAirframe(frameType); +} + + /** WHAT DOES THIS DO??? */ diff --git a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h index 60ef74fbe..e4cea4cc2 100644 --- a/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h +++ b/ground/openpilotgcs/src/plugins/config/configvehicletypewidget.h @@ -95,6 +95,7 @@ private slots: void enableFFTest(); void openHelp(); + void reverseMultirotorMotor(); protected: void showEvent(QShowEvent *event); diff --git a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg index de5f2bd64..8129d2746 100644 --- a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg +++ b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg @@ -14,12 +14,12 @@ version="1.1" inkscape:version="0.48.2 r9819" width="4065.2493" - height="1760.019" + height="3560.019" xml:space="preserve" sodipodi:docname="multirotor-shapes.svg">image/svg+xml \ No newline at end of file + inkscape:connector-curvature="0" /> \ No newline at end of file From 2caf635acdea534db217b7e29a6f32e7086dbce6 Mon Sep 17 00:00:00 2001 From: Laura Sebesta Date: Mon, 24 Sep 2012 22:36:39 +0200 Subject: [PATCH 13/17] A couple artwork fixes for reversed motors. --- .../configmultirotorwidget.cpp | 2 ++ .../config/images/multirotor-shapes.svg | 19 +++++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp index be8ed83a1..a390eca95 100644 --- a/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp +++ b/ground/openpilotgcs/src/plugins/config/cfg_vehicletypes/configmultirotorwidget.cpp @@ -814,6 +814,8 @@ void ConfigMultiRotorWidget::refreshWidgetsValues(QString frameType) } } + + drawAirframe(frameType); } diff --git a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg index 8129d2746..92ec0177e 100644 --- a/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg +++ b/ground/openpilotgcs/src/plugins/config/images/multirotor-shapes.svg @@ -19,7 +19,7 @@ sodipodi:docname="multirotor-shapes.svg">image/svg+xml Date: Mon, 24 Sep 2012 21:41:41 -0700 Subject: [PATCH 14/17] merged kens branches, changed the wording a little on the pre-autotune page, just need someone to look at one small bit of oddness with the save and apply buttons on autotune page --- .../src/plugins/config/autotune.ui | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index 1969aa064..c29cc6e11 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -26,7 +26,7 @@ - 1 + 0 @@ -80,18 +80,17 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;"><br /></span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">This is an experimental plugin for the GCS that is going to make your aircraft shake etc so test with lots of space and be </span><span style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:600;">very very wary</span><span style=" font-family:'Lucida Grande'; font-size:13pt;"> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:</span></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Go to the UAVOBrowser and under HwSettings.OptionalModules enable Autotune.  Click send then save.  Power cycle your board (disconnect battery AND usb).<br /></li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">In Input configuration set one of your flight modes to &quot;Autotune&quot;<br /></li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, flip to autotune, keep it in the air while it's shaking<br /></li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out. <br /></li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly then new settings</li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the &quot;Enable Autotune Module&quot; checkbox below this text, and go to the next tab.</li></ul></body></html> +</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is an experimental plugin for the GCS that is going to make your aircraft shake, etc, so test with lots of space and be <span style=" font-weight:600;">very very wary</span> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:<br /></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">On the <span style=" font-style:italic;">Input configuration</span> tab, <span style=" font-style:italic;">Flight Mode Switch Settings</span>, set one of your flight modes to &quot;Autotune&quot;.<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, change flight mode to autotune, keep it in the air while it's shaking.<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> +<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out (ie: compare to what you currently use, if they are VASTLY different, probably a good indication bad things will happen).<br /></li> +<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly the new settings.</li> +<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the <span style=" font-style:italic;">Enable Autotune Module</span> checkbox below this text, click <span style=" font-style:italic;">save</span> and go to the next tab.</li></ul></body></html> @@ -195,8 +194,8 @@ p, li { white-space: pre-wrap; } 0 0 - 717 - 602 + 709 + 598 From 36f830e4d386f494eedd0398ccc9e9113a54d931 Mon Sep 17 00:00:00 2001 From: chris pember Date: Mon, 24 Sep 2012 23:28:43 -0700 Subject: [PATCH 15/17] couple little tweaks, ys, this is endless --- .../openpilotgcs/src/plugins/config/autotune.ui | 6 +++--- .../src/plugins/config/camerastabilization.ui | 17 ++++++++++------- .../src/plugins/config/stabilization.ui | 11 +++++++---- 3 files changed, 20 insertions(+), 14 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index c29cc6e11..e264ca0c7 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -21,7 +21,7 @@ - 6 + -1 @@ -194,8 +194,8 @@ p, li { white-space: pre-wrap; } 0 0 - 709 - 598 + 498 + 503 diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index 14f2aa74a..300aa126a 100755 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -6,8 +6,8 @@ 0 0 - 942 - 692 + 786 + 566 @@ -26,8 +26,8 @@ Form - - 12 + + 14 @@ -45,6 +45,9 @@ Camera Stabilization + + -1 + 0 @@ -67,8 +70,8 @@ 0 0 - 912 - 598 + 741 + 559 @@ -1044,7 +1047,7 @@ value. 321 - 16 + 10 diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index f56c8348e..f930f53e0 100755 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -453,6 +453,9 @@ false + + 14 + 12 @@ -598,7 +601,7 @@ 0 0 935 - 619 + 615 @@ -6934,7 +6937,7 @@ border-radius: 5; 0 0 - 920 + 567 644 @@ -16857,8 +16860,8 @@ border-radius: 5; 0 0 - 935 - 619 + 830 + 571 From b4ac6a0b861544d515c5b71ce87429315b909488 Mon Sep 17 00:00:00 2001 From: chris pember Date: Mon, 24 Sep 2012 23:46:34 -0700 Subject: [PATCH 16/17] couple little tweaks, is perfect on linux and windows, close enough on osx --- .../src/plugins/config/autotune.ui | 31 +++++++------ .../src/plugins/config/camerastabilization.ui | 13 ++++-- .../src/plugins/config/stabilization.ui | 46 +++++++++---------- .../openpilotgcs/src/plugins/config/txpid.ui | 6 +-- 4 files changed, 51 insertions(+), 45 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index e264ca0c7..664e993b7 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -21,7 +21,10 @@ - -1 + 6 + + + 12 @@ -80,17 +83,17 @@ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">This is an experimental plugin for the GCS that is going to make your aircraft shake, etc, so test with lots of space and be <span style=" font-weight:600;">very very wary</span> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:<br /></p> -<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">On the <span style=" font-style:italic;">Input configuration</span> tab, <span style=" font-style:italic;">Flight Mode Switch Settings</span>, set one of your flight modes to &quot;Autotune&quot;.<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, change flight mode to autotune, keep it in the air while it's shaking.<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> -<li style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out (ie: compare to what you currently use, if they are VASTLY different, probably a good indication bad things will happen).<br /></li> -<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly the new settings.</li> -<li style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the <span style=" font-style:italic;">Enable Autotune Module</span> checkbox below this text, click <span style=" font-style:italic;">save</span> and go to the next tab.</li></ul></body></html> +</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;"> +<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:20pt; font-weight:600; color:#ff0000;">WARNING:</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Lucida Grande'; font-size:13pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;"><br /></span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Lucida Grande'; font-size:13pt;">This is an experimental plugin for the GCS that is going to make your aircraft shake, etc, so test with lots of space and be </span><span style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:600;">very very wary</span><span style=" font-family:'Lucida Grande'; font-size:13pt;"> for it creating bad tuning values.  Basically there is no reason to think this will work at all.<br /><br />To use autotuning, here are the steps:<br /></span></p> +<ul style="margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;"><li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">On the <span style=" font-style:italic;">Input configuration</span> tab, <span style=" font-style:italic;">Flight Mode Switch Settings</span>, set one of your flight modes to &quot;Autotune&quot;.<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Take off, change flight mode to autotune, keep it in the air while it's shaking.<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out (ie: compare to what you currently use, if they are VASTLY different, probably a good indication bad things will happen).<br /></li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly the new settings.</li> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the <span style=" font-style:italic;">Enable Autotune Module</span> checkbox below this text, click <span style=" font-style:italic;">save</span> and go to the next tab.</li></ul></body></html> @@ -194,8 +197,8 @@ p, li { white-space: pre-wrap; } 0 0 - 498 - 503 + 711 + 596 diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index 300aa126a..f0a8fb8a0 100755 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -27,7 +27,10 @@ - 14 + 6 + + + 12 @@ -46,7 +49,7 @@ - -1 + 6 0 @@ -70,8 +73,8 @@ 0 0 - 741 - 559 + 742 + 604 @@ -410,7 +413,7 @@ margin:1px; - -1 + 6 diff --git a/ground/openpilotgcs/src/plugins/config/stabilization.ui b/ground/openpilotgcs/src/plugins/config/stabilization.ui index f930f53e0..4ff6b33ff 100755 --- a/ground/openpilotgcs/src/plugins/config/stabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/stabilization.ui @@ -7,7 +7,7 @@ 0 0 965 - 713 + 687 @@ -454,7 +454,7 @@ - 14 + 6 12 @@ -600,8 +600,8 @@ 0 0 - 935 - 615 + 937 + 595 @@ -641,12 +641,12 @@ false - - 6 - 12 + + 6 + @@ -4011,12 +4011,12 @@ value as the Kp. Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - 6 - 12 + + 6 + @@ -6937,8 +6937,8 @@ border-radius: 5; 0 0 - 567 - 644 + 540 + 663 @@ -7492,12 +7492,12 @@ border-radius: 5; false - - 6 - 12 + + 6 + @@ -13941,12 +13941,12 @@ border-radius: 5; Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - - 6 - 12 + + 6 + @@ -16860,8 +16860,8 @@ border-radius: 5; 0 0 - 830 - 571 + 802 + 607 @@ -19491,12 +19491,12 @@ border-radius: 5; Integral Limits - - 6 - 12 + + 6 + diff --git a/ground/openpilotgcs/src/plugins/config/txpid.ui b/ground/openpilotgcs/src/plugins/config/txpid.ui index 9d4da0865..1c277d0fb 100755 --- a/ground/openpilotgcs/src/plugins/config/txpid.ui +++ b/ground/openpilotgcs/src/plugins/config/txpid.ui @@ -7,7 +7,7 @@ 0 0 789 - 615 + 484 @@ -113,8 +113,8 @@ 0 0 - 759 - 532 + 745 + 469 From b09041cb9f00bdaba9218e4cdf42d32c5cd8ee5e Mon Sep 17 00:00:00 2001 From: chris pember Date: Tue, 25 Sep 2012 00:16:31 -0700 Subject: [PATCH 17/17] moved the autotune checkbox up top like the other modules --- .../src/plugins/config/autotune.ui | 79 +++++++++---------- .../src/plugins/config/camerastabilization.ui | 33 +++----- 2 files changed, 49 insertions(+), 63 deletions(-) diff --git a/ground/openpilotgcs/src/plugins/config/autotune.ui b/ground/openpilotgcs/src/plugins/config/autotune.ui index 664e993b7..647e7b166 100644 --- a/ground/openpilotgcs/src/plugins/config/autotune.ui +++ b/ground/openpilotgcs/src/plugins/config/autotune.ui @@ -36,42 +36,10 @@ Pre-Autotune - + 12 - - 12 - - - 12 - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + QFrame::StyledPanel @@ -93,18 +61,45 @@ p, li { white-space: pre-wrap; } <li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Land and disarm.  (note - you <span style=" font-weight:600;">MUST</span> stay in autotune mode through this point, leaving autotune before disarming aborts the process)<br /></li> <li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">We'd recommend checking your stabilization settings before trying them out (ie: compare to what you currently use, if they are VASTLY different, probably a good indication bad things will happen).<br /></li> <li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Test fly the new settings.</li> -<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the <span style=" font-style:italic;">Enable Autotune Module</span> checkbox below this text, click <span style=" font-style:italic;">save</span> and go to the next tab.</li></ul></body></html> +<li style=" font-family:'Lucida Grande'; font-size:13pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If you're ready to proceed, click the <span style=" font-style:italic;">Enable Autotune Module</span> checkbox above this text, click <span style=" font-style:italic;">save</span> and go to the next tab.</li></ul></body></html> - - - - Enable Autotune Module - - - true + + + + Module Control + + + + + Enable Autotune Module + + + true + + + + + + + Qt::Horizontal + + + + 454 + 20 + + + + + + horizontalSpacer_5 + enableAutoTune + horizontalSpacer_4 + enableAutoTune + horizontalSpacer_5 diff --git a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui index f0a8fb8a0..b2b756ca4 100755 --- a/ground/openpilotgcs/src/plugins/config/camerastabilization.ui +++ b/ground/openpilotgcs/src/plugins/config/camerastabilization.ui @@ -26,12 +26,6 @@ Form - - 6 - - - 12 - @@ -48,9 +42,6 @@ Camera Stabilization - - 6 - 0 @@ -73,8 +64,8 @@ 0 0 - 742 - 604 + 741 + 559 @@ -1038,24 +1029,24 @@ value. - - + + 4 - + Qt::Horizontal - 321 - 10 + 288 + 18 - + @@ -1104,7 +1095,7 @@ value. - + @@ -1135,7 +1126,7 @@ Apply or Save button afterwards. - + @@ -1168,7 +1159,7 @@ Apply or Save button afterwards. - + @@ -1195,7 +1186,7 @@ Apply or Save button afterwards. - +