1
0
Fork 0
mirror of https://github.com/betaflight/betaflight-configurator.git synced 2025-07-17 21:35:33 +03:00

Add rates type

Add rates type selection with working graphs and max angular speed

Fix deadband

MSP changes and fix actual rates limit

Small style changes and fixes

Fixes

Fixed the code pointed out in the review
Various sonar fixes
Updated the values of actual rates setting
Reduced logo size
Added analytics to rates type

Minor fix + rounding by step value

Now the calculation of the angle rate takes into account the values rounded by the step value (especially visible with values that are in deg/s)

Various fixes

Angle rate calculation in different functions
Fix for value step validation
Sonar fixes (mostly variables)

Force refresh to prevent errors ...

... when changing rates type after saving to eeprom

Logos refinement + minor changes

Touch to trigger travis

Fix Raceflight rate
This commit is contained in:
fgiudice98 2020-03-07 12:50:54 +01:00
parent 94bd817aff
commit 70a8364e5c
12 changed files with 1089 additions and 46 deletions

View file

@ -5598,5 +5598,41 @@
},
"darkTheme": {
"message": "Enable dark theme"
},
"pidTuningRatesType": {
"message": "Rates Type"
},
"pidTuningRatesTypeTip": {
"message": "Changing rates type will change the rates curve and the way you can set it"
},
"pidTuningRcRateRaceflight": {
"message": "Rate"
},
"pidTuningRcExpoRaceflight": {
"message": "Expo"
},
"pidTuningRateRaceflight": {
"message": "Acro+"
},
"pidTuningRcExpoKISS": {
"message": "RC Curve"
},
"pidTuningRateQuickRates": {
"message": "Max Rate"
},
"pidTuningRcRateActual": {
"message": "Center Sensitivity"
},
"dialogRatesTypeTitle": {
"message": "Rates type change"
},
"dialogRatesTypeNote": {
"message": "<span class=\"message-negative\"><b>WARNING: You are changing the rates type.</b></span> Your rates will be set to a default curve.<br><br>Nothing is saved yet and you can still return to your previous values by setting the previous rates type.<br><br>Click the Save button to apply the changes."
},
"dialogRatesTypeConfirm": {
"message": "Change"
},
"dialogRatesTypeCancel": {
"message": "Return to saved values"
}
}

View file

@ -908,3 +908,26 @@
.tab-pid_tuning .pid_titlebar .name-helpicon-flex .helpicon {
margin-right: 0;
}
.tab-pid_tuning .cf .rates_logo_bg {
background-color: #ebeced;
}
.tab-pid_tuning .rates_logo_div {
margin-top: -10%;
text-align: center;
}
.tab-pid_tuning .rates_logo {
width: 80%;
height: 80%;
}
.tab-pid_tuning .rates-tab-warning {
display: flex;
flex-flow: row wrap;
}
.tab-pid_tuning .float-left {
float: left;
}

View file

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="520"
height="120"
viewBox="0 0 390.00001 90"
version="1.1"
id="svg76"
sodipodi:docname="actual.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata82">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs80" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="745"
id="namedview78"
showgrid="false"
inkscape:pagecheckerboard="true"
units="px"
inkscape:zoom="1.6730769"
inkscape:cx="260"
inkscape:cy="60"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg76" />
<g
id="#272357ff"
transform="matrix(0.36024842,0,0,0.36024842,20.018351,-46.260408)">
<path
d="m 217.3,150.27 c 0.51,-2.73 2.78,0.68 3.35,1.61 29.48,46.14 58.89,92.31 88.3,138.49 4.94,0.43 9.95,0.28 14.91,0.11 2.04,-1.54 3.21,-4.87 6.21,-5.02 3.16,-0.27 7.1,-0.73 9.28,2.17 4.42,4.42 2.34,12.7 -3.46,14.81 -2.18,0.32 -4.44,0.3 -6.6,-0.14 -2.23,-0.98 -3.52,-3.12 -5.14,-4.8 -3.05,-0.28 -6.12,-0.16 -9.17,-0.09 l -0.76,1.34 c 8.33,12.44 16.15,25.22 24.23,37.82 3.37,0.56 6.87,0.44 10.26,0.1 1.61,-1.43 2.81,-3.58 5.02,-4.16 2.19,-0.25 4.44,-0.37 6.63,-0.01 3.46,1.42 5.28,4.98 5.94,8.49 -0.7,3.79 -3.02,7.99 -7.2,8.56 -2.32,0.13 -4.89,0.42 -6.93,-0.92 -2.38,-1.4 -3.18,-5.29 -6.47,-4.97 -3.05,0.21 -0.71,3.05 0,4.32 1.52,2.36 3.16,4.65 4.44,7.16 -4.36,0.51 -8.74,1.1 -13.14,0.97 -32.33,-0.02 -64.67,0 -97,-0.01 -3.2,-0.45 -6.44,-0.43 -9.63,-0.86 -7.62,-12.26 -15.24,-24.62 -22.36,-37.18 1.17,-3.02 3.19,-5.6 4.79,-8.39 2.21,-3.38 3.92,-7.12 6.58,-10.18 1.75,1.65 2.54,4.12 3.93,6.08 5.82,10.18 11.79,20.28 17.62,30.47 0.83,1.31 2.74,0.63 4.04,0.88 25.35,-0.06 50.69,0 76.03,-0.04 2.94,0.27 5.87,0.77 8.84,0.67 l 0.98,-1.23 c -7.86,-12.18 -15.68,-24.39 -23.38,-36.67 -0.75,-1.17 -1.65,-2.68 -3.32,-2.27 -16.21,-0.1 -32.44,0.13 -48.65,-0.11 -1.71,-1.89 -2.9,-4.17 -4.27,-6.3 -10.72,-16.83 -21.27,-33.76 -32.04,-50.56 -0.43,-0.02 -1.28,-0.05 -1.71,-0.07 -6.1,9.26 -11.52,18.98 -17.59,28.27 -12.75,20.34 -25.36,40.77 -38.01,61.17 -0.86,1.21 -0.16,4.43 -2.36,3.6 -2.05,3.37 -3.98,6.82 -6.15,10.13 -0.75,1.02 -1.83,2.24 -3.27,1.92 -13.18,-0.05 -26.37,0.04 -39.55,-0.04 -0.72,-2.34 0.95,-4.22 2.08,-6.06 18.54,-29.69 37.01,-59.42 55.51,-89.13 1.31,-2.29 3.2,-4.32 3.84,-6.93 -2.14,-0.15 -4.32,-0.3 -6.43,0.16 -20.84,33.15 -41.91,66.16 -62.76,99.31 -1.55,2.57 -3.54,4.89 -4.67,7.7 14.95,0.52 29.95,0.07 44.92,0.22 4.41,-0.13 8.86,0.29 13.24,-0.24 15.14,-24.23 30.12,-48.48 45.28,-72.69 1.26,-2.25 3.99,-4.63 2.68,-7.44 -1.08,-2.96 -1.43,-6.62 0.68,-9.21 2.17,-3.67 7.08,-4.15 10.83,-3.17 1.75,1.12 3.26,2.6 4.54,4.25 0.75,2.82 0.67,5.88 0.02,8.72 -2.13,3.25 -5.83,5.01 -9.68,4.81 -2.38,2.6 -3.95,5.84 -5.79,8.83 -15.23,24.13 -30.19,48.46 -45.29,72.68 -22.15,0.46 -44.35,0.03 -66.52,0.21 -1.65,-0.06 -3.36,0.17 -4.97,-0.27 0.07,-1.4 0.03,-2.89 0.69,-4.17 22.35,-35.08 44.44,-70.34 66.79,-105.42 0.96,-1.25 1.39,-2.76 1.52,-4.31 -6.35,-0.16 -12.72,-0.17 -19.07,-0.01 -1.43,-0.21 -1.84,1.37 -2.65,2.18 -3.46,4.99 -12.09,4.03 -14.76,-1.31 -0.49,-2.95 -0.65,-6.06 0.15,-8.96 1.17,-1.42 2.53,-2.69 4.09,-3.67 2.33,-0.37 4.72,-0.37 7.05,-0.02 2.99,-0.06 3.09,4.65 6.12,4.3 8.39,-0.05 16.83,0.4 25.18,-0.24 15.41,-24.6 31.01,-49.07 46.53,-73.59 2.06,-3.6 4.78,-6.81 6.25,-10.72 0.75,0.52 1.21,0.22 1.38,-0.93 m 0.23,11.99 c -1.32,0.38 -1.75,2 -2.5,3.02 -3.42,6.63 -8.74,12.22 -11.42,19.22 -0.82,0.87 -1.79,1.62 -2.45,2.63 -9.29,14.93 -18.73,29.77 -28.04,44.67 -1.04,1.06 -1,2.58 -1.09,3.95 3.77,0.16 7.53,-0.16 11.3,0.05 0.49,1.52 -0.71,2.8 -1.29,4.09 -6.53,10.57 -13.11,21.11 -19.73,31.63 -1.07,1.39 -0.77,3.6 -2.32,4.64 -2.48,1.71 -3.22,4.78 -4.34,7.38 -3.29,2.59 -4.52,6.78 -7.02,10.02 -1.45,1.76 -2.1,3.94 -3.02,5.97 -3.31,2.93 -4.77,7.26 -7.42,10.71 -1.73,1.92 -1.61,4.93 -3.79,6.48 -2.37,2.61 -3.56,6.06 -5.73,8.83 -2.07,2.3 -2.12,5.75 -4.65,7.68 -0.51,2.06 -1.98,3.54 -2.95,5.33 7.64,0.23 15.29,-0.02 22.93,0.1 1.65,-0.07 3.38,0.18 4.98,-0.35 20.98,-33.73 41.97,-67.54 62.96,-101.3 0.89,-3.85 4.27,-6.15 6.05,-9.56 2.12,2.11 3.79,4.6 5.24,7.21 11.54,18.55 23.52,36.83 34.89,55.48 1.12,0.71 2.59,0.32 3.85,0.47 12.95,-0.09 25.91,0.07 38.86,-0.07 -0.12,-0.47 -0.36,-1.42 -0.48,-1.89 -10.23,-16 -20.43,-32.02 -30.62,-48.05 -1.25,-2.51 -4.09,-3.9 -4.5,-6.85 -8.12,-13.14 -16.64,-26.1 -24.87,-39.2 -1.75,-1.47 -2.79,-3.38 -3.51,-5.53 -5.48,-8.49 -10.93,-17.02 -16.3,-25.58 -0.44,-1.31 -1.88,-1.47 -3.02,-1.18 m -91.23,74.16 c -1.86,0.81 -0.89,4.27 -0.89,6.13 2.26,0.42 4.61,0.4 6.82,-0.28 0.27,-1.94 0.49,-4.14 -1.1,-5.6 -1.54,-0.59 -3.23,-0.44 -4.83,-0.25 m 84.26,26.26 c -2.17,0.93 -1.36,4.77 -1.14,6.86 1.98,0.34 4.03,0.41 5.98,-0.16 0.5,-2.28 0.81,-5.11 -1.28,-6.72 -1.18,-0.17 -2.39,-0.12 -3.56,0.02 m 120.03,27.8 c -2.01,1.48 -1.88,5.57 0.2,6.97 1.97,0.35 4.08,0.28 5.46,-1.36 0.39,-1.42 0.39,-2.95 0.03,-4.37 -1.1,-2 -3.81,-1.38 -5.69,-1.24 m -112.24,22.84 c -2.34,1.33 -2.8,5.41 -1.36,7.74 5.53,9.12 11.08,18.25 16.51,27.42 1.47,0.3 2.99,0.23 4.49,0.26 33.31,-0.1 66.62,0.1 99.93,-0.1 -0.27,-2.01 -1.41,-4.8 -3.9,-4.38 -31.01,-0.02 -62.02,0.01 -93.03,0.06 -2.46,0.49 -3.75,-1.96 -4.78,-3.73 -5.03,-8.92 -10.36,-17.67 -15.32,-26.63 -0.64,-0.8 -1.49,-1.01 -2.54,-0.64 m 135.69,24.81 c -1.37,1.33 -0.6,3.64 -0.59,5.37 2.05,0.41 4.16,0.45 6.25,0.25 0.29,-2.09 0.27,-4.23 -0.25,-6.27 -1.75,0.03 -4.02,-0.75 -5.41,0.65 z"
id="path49"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
<path
d="m 214.27,185.82 c 2.76,-0.26 5.6,-0.33 8.36,0.09 1.95,2.62 4.78,4.96 5.11,8.44 -0.22,2.62 -1.07,5.37 -0.15,7.95 12.68,18.48 24.83,37.34 37.36,55.93 1.55,1.14 3.89,0.09 5.71,0.7 1.91,2.58 4.49,4.65 6.03,7.51 0.66,5.8 -4.76,11.84 -10.68,11.03 -3.36,-0.19 -5.25,-3.42 -8.07,-4.81 -0.28,-2.51 -0.32,-5.07 -0.03,-7.58 0.91,-1.6 1.29,-3.64 0.29,-5.31 -10.37,-15.95 -21.25,-31.56 -31.54,-47.56 -2.25,-2.23 -3.1,-5.46 -5.37,-7.67 -4.96,0.13 -9.9,-2.44 -11.85,-7.15 -1.61,-2.06 0.15,-4.47 0.63,-6.61 1.5,-1.57 3.14,-3.03 4.2,-4.96 m 3.1,5.58 c -2.75,-0.53 -1.93,2.86 -2.12,4.55 -0.4,3.44 3.94,2.8 6.08,2.34 0.68,-2.16 0.53,-4.48 0.06,-6.66 -1.33,-0.24 -2.68,-0.35 -4.02,-0.23 m 49.86,73.05 c -3.66,-0.58 -5.35,5.06 -2.65,7.04 1.85,0.48 3.89,0.53 5.66,-0.28 1.15,-2.6 0.62,-6.94 -3.01,-6.76 z"
id="path51"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
<path
d="m 393.21,255.18 c 24.25,-0.4 48.53,-0.03 72.8,-0.19 2.28,-0.34 4.11,1.05 5.91,2.22 3.3,-3.16 7.96,-2.07 12.09,-2.2 27.65,0.03 55.3,-0.03 82.94,0.03 2.14,-0.19 3.46,1.63 4.91,2.86 1.44,-1.4 2.93,-3.15 5.18,-2.88 6.3,-0.02 12.61,-0.07 18.91,0.03 2.32,-0.04 4.56,1.81 4.81,4.15 1.65,8.23 -0.25,16.53 0.13,24.8 -0.02,12.33 0.02,24.66 -0.02,36.99 0.08,1.47 -0.24,3.05 0.34,4.45 5.16,1.31 10.52,0.71 15.78,0.84 8.54,-0.18 17.14,0.36 25.64,-0.26 0.15,-22 -0.02,-44 0.09,-65.99 -0.05,-2.78 2.55,-5.21 5.32,-5 6.31,-0.04 12.62,-0.06 18.93,0 2.8,-0.15 5.16,2.31 5.25,5.04 0.57,8.63 0.24,17.28 0.33,25.92 -0.09,17 0.19,33.99 -0.14,50.98 -2.03,8.82 -9.66,16.26 -18.58,18.04 -2.9,0.62 -5.88,0.5 -8.81,0.53 -16.92,-0.05 -33.84,0.07 -50.75,-0.07 -11.85,-0.1 -22.46,-10.61 -22.54,-22.47 -0.06,-16.92 0.01,-33.84 -0.05,-50.76 -1.49,0.88 -2.85,2.32 -4.71,2.2 -10.08,0.2 -20.17,-0.25 -30.24,0.28 -0.17,21.79 0.03,43.59 -0.09,65.38 0.37,2.72 -2.16,5.43 -4.86,5.39 -6.61,0.11 -13.23,0 -19.83,-0.08 -2.43,0.1 -4.87,-2.05 -4.73,-4.54 -0.1,-19.29 -0.01,-38.58 -0.04,-57.87 -0.05,-2.84 0.22,-5.71 -0.31,-8.51 -9.95,-0.07 -19.9,0.03 -29.85,-0.11 -2,0.23 -3.5,-1.16 -5.14,-2 -1.6,0.91 -3.09,2.3 -5.07,2.08 -17.99,0.03 -35.99,0.02 -53.98,0 -3.53,-0.1 -6.96,0.88 -10.48,0.92 0,13.41 0.02,26.83 -0.01,40.24 3.83,0.88 7.77,0.63 11.66,0.66 17.66,0 35.31,-0.01 52.97,0 2.7,-0.34 5.38,1.98 5.33,4.72 0.37,6.34 0.32,12.7 0.27,19.05 0.48,3.12 -2.72,5.82 -5.71,5.47 -22.28,0.03 -44.55,0 -66.82,0 -3.86,-0.05 -7.81,0.15 -11.52,-1.07 -9.2,-2.8 -16.42,-11.74 -16.35,-21.5 -0.03,-18.62 -0.06,-37.23 0.02,-55.84 0.17,-11.22 9.92,-21.11 21.02,-21.93 m -0.93,5.01 c -8.39,1.3 -15.59,9.15 -15.23,17.81 -0.03,18.34 -0.02,36.68 0,55.03 -0.08,7.18 5.01,13.72 11.53,16.36 3.31,1.32 6.93,1.19 10.42,1.22 22.62,-0.04 45.25,0.05 67.87,-0.04 0.89,-1.72 0.48,-3.74 0.59,-5.6 -0.16,-4.63 0.24,-9.28 -0.22,-13.89 -23.61,-0.24 -47.23,0.11 -70.84,-0.17 0.04,-17.06 -0.02,-34.13 -0.01,-51.19 23.45,-0.45 46.92,0.02 70.37,-0.22 1.16,-1.58 0.53,-3.71 0.7,-5.52 -0.24,-4.63 0.37,-9.29 -0.29,-13.88 -24.96,-0.04 -49.94,-0.23 -74.89,0.09 m 84.1,-0.01 c -0.03,6.44 -0.14,12.88 0.07,19.31 11.83,0.25 23.68,-0.21 35.5,0.21 0.33,23.62 -0.18,47.26 0.25,70.87 6.42,0.05 12.85,0.14 19.27,-0.06 0.23,-23.62 -0.12,-47.25 0.16,-70.87 11.72,-0.27 23.46,0.03 35.18,-0.12 0.53,-6.44 0.15,-12.95 0.08,-19.41 -28.3,-0.19 -56.6,0.01 -84.89,-0.09 -1.88,-0.01 -3.76,-0.03 -5.62,0.16 m 100.41,-0.09 c -0.43,2.27 -0.28,4.6 -0.28,6.9 0.05,21.67 -0.03,43.34 0.04,65.01 -0.35,9.59 7.99,18.52 17.64,18.54 18.27,0.12 36.54,0.07 54.81,0.03 7.63,0.13 14.71,-5.28 17.28,-12.33 1.63,-4.93 0.64,-10.17 0.75,-15.24 0.7,-15 -0.04,-30.02 0.25,-45.02 -0.39,-5.95 0.48,-11.93 -0.16,-17.86 -6.43,-0.16 -12.88,-0.13 -19.32,-0.02 -0.67,6.6 -0.03,13.25 -0.06,19.86 -0.4,11.01 -0.07,22.03 -0.15,33.04 0.15,5.92 0.71,11.85 0.15,17.77 -4.56,0.52 -9.17,0.13 -13.75,0.24 -12.64,-0.08 -25.3,0.15 -37.94,-0.11 -0.34,-23.58 0.08,-47.18 -0.2,-70.76 -6.35,-0.21 -12.71,-0.14 -19.06,-0.05 z"
id="path53"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
<path
d="m 694.52,255.72 c 2.77,-0.63 5.63,-0.77 8.47,-0.73 17,0.08 34.01,-0.04 51.01,0.05 11.62,0.01 22,9.71 23.46,21.11 0.22,1.96 0.92,3.85 0.9,5.84 -0.02,21.67 -0.01,43.34 0,65.01 0.04,3.52 -1.46,8.16 -5.58,8.47 -6.6,0.18 -13.21,-0.02 -19.81,-0.03 -2.56,0.19 -5.17,-1.82 -5.18,-4.47 -0.21,-8.2 0.15,-16.41 -0.17,-24.6 -11.53,-0.12 -23.08,-0.02 -34.62,-0.04 -2.41,0.13 -5.28,-0.42 -7.06,1.63 -0.63,7.38 0.71,14.69 0.46,22.06 0.17,2.95 -2.68,5.63 -5.6,5.49 -6.57,0.04 -13.15,0.03 -19.71,-0.13 -2.66,-0.13 -4.74,-2.77 -4.41,-5.37 -0.22,-23.67 -0.06,-47.35 -0.12,-71.02 -0.46,-10.67 7.63,-20.85 17.96,-23.27 m 1.86,4.56 c -8.22,1.51 -14.91,9.25 -14.76,17.69 -0.1,14.35 -0.02,28.7 -0.05,43.04 0.17,7.99 0.34,15.98 -0.02,23.97 0.06,1.85 -0.32,3.88 0.6,5.59 6.21,0.07 12.43,0.08 18.64,-0.01 0.48,-9.74 -0.18,-19.51 0.31,-29.24 17.1,-0.45 34.23,0.68 51.33,-0.25 0.24,8.3 0.04,16.61 0.07,24.91 0.16,1.49 -0.38,3.34 0.71,4.58 6.2,0.1 12.43,0.07 18.64,0.01 0.71,-2.8 0.38,-5.72 0.44,-8.57 -0.02,-20.34 -0.01,-40.68 -0.01,-61.02 -0.05,-3.53 -0.12,-7.24 -1.75,-10.46 -3.11,-6.06 -9.53,-10.69 -16.51,-10.49 -16.34,0 -32.68,0.01 -49.01,0 -2.88,0.03 -5.78,-0.19 -8.63,0.25 z"
id="path55"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
<path
d="m 784.6,255.56 c 1.97,-0.95 4.27,-0.5 6.4,-0.62 5.56,0.18 11.15,-0.28 16.69,0.23 2.98,0.78 3.86,4.1 3.68,6.82 -0.21,3.07 1.16,5.95 1.01,9.02 -0.08,18.2 0.03,36.4 -0.06,54.61 2.51,0.52 5.08,0.69 7.65,0.66 18.69,-0.02 37.37,0.02 56.06,-0.02 1.55,0.07 3.37,-0.18 4.63,1.02 1.95,1.31 1.74,3.83 2.06,5.88 1.05,5.23 0.59,10.58 0.65,15.87 0.04,3.31 -2.79,6.97 -6.37,6.5 -29.33,-0.03 -58.67,0.07 -88,-0.06 -1.8,-0.06 -3.83,0.13 -5.25,-1.18 -2.18,-1.72 -1.91,-4.81 -1.96,-7.29 0.15,-29.52 -0.32,-59.06 0.52,-88.56 0.09,-1.33 1.24,-2.24 2.29,-2.88 m 2.53,4.42 c -0.26,28 -0.02,56.01 -0.11,84.02 -0.01,2.18 -0.06,4.38 0.17,6.57 30.13,0.04 60.28,0.09 90.41,-0.02 0.22,-6.46 0.11,-12.94 0.07,-19.4 -23.77,-0.42 -47.57,0.1 -71.34,-0.25 -0.15,-23.6 0.31,-47.23 -0.17,-70.82 -6.34,0 -12.7,-0.55 -19.03,-0.1 z"
id="path57"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
<path
d="m 701.03,279.7 c 17.11,-0.3 34.25,-0.17 51.37,-0.07 0.13,7.37 0.32,14.77 -0.09,22.13 -17.08,0.01 -34.17,-0.1 -51.25,0.02 -0.23,-7.35 -0.16,-14.73 -0.03,-22.08 m 5.59,4.96 c -0.13,3.92 -1.52,8.07 -0.33,11.88 7.2,0.79 14.47,0.38 21.71,0.48 6.56,-0.08 13.14,0.17 19.7,-0.11 0.08,-4.13 0.12,-8.28 -0.09,-12.4 -13.66,-0.01 -27.33,-0.22 -40.99,0.15 z"
id="path59"
inkscape:connector-curvature="0"
style="opacity:1;fill:#272357" />
</g>
<g
id="#ffffffff"
transform="matrix(0.36024842,0,0,0.36024842,20.018351,-46.260408)" />
<g
id="#55bce7ff"
transform="matrix(0.36024842,0,0,0.36024842,20.018351,-46.260408)">
<path
d="m 217.17,165.1 0.79,-1 c 3.39,3.23 5.27,7.58 7.75,11.48 12.9,20.09 25.81,40.17 38.54,60.37 6.68,10.04 13.1,20.25 19.43,30.5 4.1,5.17 6.86,11.21 10.73,16.54 1.02,1.69 2.9,3.33 2.13,5.53 -11.85,0.53 -23.75,0.12 -35.62,0.21 -1.73,0.37 -2.53,-1.43 -3.38,-2.52 -12.79,-20.61 -25.97,-40.98 -38.82,-61.53 -1.43,-0.51 -1.91,1.09 -2.6,1.98 -13.94,23.1 -28.38,45.89 -42.56,68.84 -4.17,6.2 -7.86,12.69 -11.7,19.08 -4.35,6.17 -8.27,12.62 -12,19.18 -0.88,1.3 -1.91,3.22 -3.78,2.95 -6.85,-0.07 -13.73,0.33 -20.55,-0.23 -0.96,-1.72 0.44,-3.3 1.26,-4.69 18.47,-29.51 36.73,-59.15 55.14,-88.7 1.62,-2.76 3.77,-5.27 4.71,-8.38 -3.7,-0.21 -7.41,0.15 -11.1,-0.19 l -1.14,-1.19 c 7.98,-14.07 17.42,-27.23 25.63,-41.15 5.65,-9.07 11.68,-17.9 17.14,-27.08 m -2.6,19.98 c -2.7,2.15 -5.99,4.49 -6.32,8.24 -1.55,4.76 1.84,9.25 5.59,11.79 1.8,1.38 4.24,0.89 6.33,1.43 2.75,3.02 4.59,6.72 7.07,9.94 4.13,5.19 6.87,11.3 10.96,16.51 4.43,5.77 7.73,12.28 12.04,18.12 2.36,3.11 4.47,6.42 6.35,9.85 0.98,3.8 -0.52,7.85 0.39,11.7 1.33,2.73 3.83,4.72 6.51,6.05 4.92,2.01 11.28,-0.36 13.4,-5.3 0.94,-2.93 1.02,-6.22 0.19,-9.19 -1.82,-3.98 -5.99,-6.41 -10.25,-6.83 -2.31,-2.36 -3.85,-5.34 -5.75,-8.01 -7.64,-11.31 -15.05,-22.76 -22.71,-34.06 -2.94,-5.3 -7.23,-9.78 -9.87,-15.24 0.34,-2.34 1.31,-4.67 0.76,-7.06 -0.57,-3.72 -3.75,-6.3 -6.89,-7.94 -2.54,-0.54 -5.25,-0.48 -7.8,0 z"
id="path63"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
<path
d="m 392.28,260.19 c 24.95,-0.32 49.93,-0.13 74.89,-0.09 0.66,4.59 0.05,9.25 0.29,13.88 -0.17,1.81 0.46,3.94 -0.7,5.52 -23.45,0.24 -46.92,-0.23 -70.37,0.22 -0.01,17.06 0.05,34.13 0.01,51.19 23.61,0.28 47.23,-0.07 70.84,0.17 0.46,4.61 0.06,9.26 0.22,13.89 -0.11,1.86 0.3,3.88 -0.59,5.6 -22.62,0.09 -45.25,0 -67.87,0.04 -3.49,-0.03 -7.11,0.1 -10.42,-1.22 -6.52,-2.64 -11.61,-9.18 -11.53,-16.36 -0.02,-18.35 -0.03,-36.69 0,-55.03 -0.36,-8.66 6.84,-16.51 15.23,-17.81 z"
id="path65"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
<path
d="m 476.38,260.18 c 1.86,-0.19 3.74,-0.17 5.62,-0.16 28.29,0.1 56.59,-0.1 84.89,0.09 0.07,6.46 0.45,12.97 -0.08,19.41 -11.72,0.15 -23.46,-0.15 -35.18,0.12 -0.28,23.62 0.07,47.25 -0.16,70.87 -6.42,0.2 -12.85,0.11 -19.27,0.06 -0.43,-23.61 0.08,-47.25 -0.25,-70.87 -11.82,-0.42 -23.67,0.04 -35.5,-0.21 -0.21,-6.43 -0.1,-12.87 -0.07,-19.31 z"
id="path67"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
<path
d="m 576.79,260.09 c 6.35,-0.09 12.71,-0.16 19.06,0.05 0.28,23.58 -0.14,47.18 0.2,70.76 12.64,0.26 25.3,0.03 37.94,0.11 4.58,-0.11 9.19,0.28 13.75,-0.24 0.56,-5.92 0,-11.85 -0.15,-17.77 0.08,-11.01 -0.25,-22.03 0.15,-33.04 0.03,-6.61 -0.61,-13.26 0.06,-19.86 6.44,-0.11 12.89,-0.14 19.32,0.02 0.64,5.93 -0.23,11.91 0.16,17.86 -0.29,15 0.45,30.02 -0.25,45.02 -0.11,5.07 0.88,10.31 -0.75,15.24 -2.57,7.05 -9.65,12.46 -17.28,12.33 -18.27,0.04 -36.54,0.09 -54.81,-0.03 -9.65,-0.02 -17.99,-8.95 -17.64,-18.54 -0.07,-21.67 0.01,-43.34 -0.04,-65.01 0,-2.3 -0.15,-4.63 0.28,-6.9 z"
id="path69"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
<path
d="m 696.38,260.28 c 2.85,-0.44 5.75,-0.22 8.63,-0.25 16.33,0.01 32.67,0 49.01,0 6.98,-0.2 13.4,4.43 16.51,10.49 1.63,3.22 1.7,6.93 1.75,10.46 0,20.34 -0.01,40.68 0.01,61.02 -0.06,2.85 0.27,5.77 -0.44,8.57 -6.21,0.06 -12.44,0.09 -18.64,-0.01 -1.09,-1.24 -0.55,-3.09 -0.71,-4.58 -0.03,-8.3 0.17,-16.61 -0.07,-24.91 -17.1,0.93 -34.23,-0.2 -51.33,0.25 -0.49,9.73 0.17,19.5 -0.31,29.24 -6.21,0.09 -12.43,0.08 -18.64,0.01 -0.92,-1.71 -0.54,-3.74 -0.6,-5.59 0.36,-7.99 0.19,-15.98 0.02,-23.97 0.03,-14.34 -0.05,-28.69 0.05,-43.04 -0.15,-8.44 6.54,-16.18 14.76,-17.69 m 4.65,19.42 c -0.13,7.35 -0.2,14.73 0.03,22.08 17.08,-0.12 34.17,-0.01 51.25,-0.02 0.41,-7.36 0.22,-14.76 0.09,-22.13 -17.12,-0.1 -34.26,-0.23 -51.37,0.07 z"
id="path71"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
<path
d="m 787.13,259.98 c 6.33,-0.45 12.69,0.1 19.03,0.1 0.48,23.59 0.02,47.22 0.17,70.82 23.77,0.35 47.57,-0.17 71.34,0.25 0.04,6.46 0.15,12.94 -0.07,19.4 -30.13,0.11 -60.28,0.06 -90.41,0.02 -0.23,-2.19 -0.18,-4.39 -0.17,-6.57 0.09,-28.01 -0.15,-56.02 0.11,-84.02 z"
id="path73"
inkscape:connector-curvature="0"
style="opacity:1;fill:#55bce7" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View file

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 19.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Ebene_1"
x="0px"
y="0px"
viewBox="-70 61.5 520.00001 119.99999"
xml:space="preserve"
sodipodi:docname="betaflight.svg"
width="520"
height="120"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata4741"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs4739" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="745"
id="namedview4737"
showgrid="false"
inkscape:pagecheckerboard="true"
inkscape:zoom="2.3288462"
inkscape:cx="260"
inkscape:cy="60"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Ebene_1" />
<style
type="text/css"
id="style4702">
.st0{fill:#FFBB00;}
.st1{fill:#424242;}
.st2{fill:#3A3A3A;}
</style>
<g
id="g4734"
transform="matrix(5.192108,0,0,5.192108,187.14434,-244.0279)">
<g
id="g4724">
<path
class="st0"
d="m -19.5,70.1 h 4.1 c 2,0 2,1.1 1.7,1.9 -0.3,0.8 -0.8,1.2 -1.4,1.5 0.6,0.2 1,0.8 0.6,1.9 -0.5,1.5 -2.1,2.3 -3.4,2.3 h -4.2 z m 0.3,5.7 h 1.4 c 0.5,0 0.9,-0.1 1.2,-0.7 0.2,-0.4 0,-0.7 -0.6,-0.7 h -1.4 z m 1,-2.8 h 1.2 c 0.5,0 0.8,-0.1 1,-0.6 0.1,-0.4 -0.1,-0.5 -0.6,-0.5 h -1.2 z"
id="path4704"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
<path
class="st0"
d="m -11.6,70.1 h 6.2 L -6.1,72 H -10 l -0.3,0.9 h 3.5 l -0.6,1.8 h -3.5 l -0.3,0.9 h 4 l -0.7,1.9 h -6.3 z"
id="path4706"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
<path
class="st0"
d="m -3.2,72 h -2.1 l 0.7,-1.9 H 1.9 L 1.2,72 h -2.1 l -2,5.6 h -2.3 z"
id="path4708"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
<path
class="st0"
d="m 4,70.1 h 2.3 l 0.1,7.5 H 3.9 L 4,76.5 H 1.6 l -0.7,1.1 h -2.3 z m 0.1,4.8 0.1,-2.3 v 0 l -1.5,2.3 z"
id="path4710"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
<path
class="st1"
d="m 9.6,70.1 h 5.8 L 14.7,72 h -3.5 l -0.3,0.9 h 3 l -0.6,1.8 h -3 l -1,2.9 H 7 Z"
id="path4712"
inkscape:connector-curvature="0"
style="fill:#424242" />
<path
class="st1"
d="m 16.3,70.1 h 2.3 l -2,5.6 h 3.3 l -0.7,1.9 h -5.6 z"
id="path4714"
inkscape:connector-curvature="0"
style="fill:#424242" />
<path
class="st1"
d="M 22.7,70.1 H 25 l -2.7,7.5 H 20 Z"
id="path4716"
inkscape:connector-curvature="0"
style="fill:#424242" />
<path
class="st1"
d="m 29.4,76.8 c -0.7,0.7 -1.6,0.9 -2.5,0.9 -2.2,0 -3,-1.7 -2.2,-3.8 1,-2.9 3.4,-4 5.1,-4 1.9,0 2.7,1 2.5,2.8 h -2.2 c 0.1,-0.5 -0.2,-0.9 -0.8,-0.9 -1.6,0 -2.1,1.7 -2.3,2.2 -0.2,0.7 -0.4,1.9 1,1.9 0.5,0 1.2,-0.3 1.5,-0.8 h -1 l 0.6,-1.6 h 3.1 l -1.5,4.1 h -1.5 z"
id="path4718"
inkscape:connector-curvature="0"
style="fill:#424242" />
<path
class="st1"
d="m 34.6,70.1 h 2.3 L 36,72.7 h 2.2 l 0.9,-2.6 h 2.3 l -2.7,7.5 h -2.3 l 1.1,-3 h -2.2 l -1.1,3 h -2.3 z"
id="path4720"
inkscape:connector-curvature="0"
style="fill:#424242" />
<path
class="st1"
d="m 43.6,72 h -2.1 l 0.7,-1.9 h 6.5 L 48,72 h -2.1 l -2,5.6 h -2.3 z"
id="path4722"
inkscape:connector-curvature="0"
style="fill:#424242" />
</g>
<g
id="g4732">
<path
class="st0"
d="m -36.4,73.5 c 0,0 -2.5,1.2 -1.7,3.5 0.9,2.6 5.3,2.3 7.9,1.2 2.2,-0.9 0.4,-1.6 0.4,-1.6 l -2.3,-1.3 -3.4,-2.1 z"
id="path4726"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
<path
class="st2"
d="m -30.3,75.5 c -1.7,-0.7 -2.9,-1.7 -4,-2.2 0.6,-0.3 1.2,-0.7 1.6,-1 0.4,-0.4 0.5,-0.8 0.5,-1.3 1.2,0.8 2.7,0.9 3.5,0.9 0.8,0 1.5,0.2 1.7,0.6 0,0 0.2,-4.2 -8.4,-7 0,0 2.6,1.2 3.4,2.1 0,0 -0.9,-0.1 -1.3,0.5 -0.2,0.3 -0.2,0.8 -0.1,1.3 -0.1,0 -0.3,0 -0.5,-0.1 l -13.7,-7.6 1.4,3.1 -1.4,-0.5 0.4,0.8 c 0,0 0.6,1.1 1.9,3.4 1,1.8 2.9,2.7 5.4,2.6 0.1,0 0.2,0 0.3,0 0.6,0 1.6,-0.1 2.5,-0.2 -0.1,0.3 -0.1,0.7 0,1.2 0.1,0.6 0.3,0.9 0.6,1.2 -0.7,0.3 -1.4,1 -1.7,1.8 0,0 0,0 0,0 0,0 0,0 0,0.1 0,0 0,0 0,0 -0.2,0.5 -0.3,1.1 0,1.8 0,0 0,0 0,0 0,0.1 0.1,0.3 0.2,0.4 0.1,0.1 0.2,0.3 0.3,0.4 1.5,1.8 5.3,1.5 7.6,0.5 0,0 0.1,0 0.1,0 0.2,-0.1 0.4,-0.2 0.6,-0.3 0,0 0.1,0 0.1,-0.1 0.2,-0.1 0.4,-0.2 0.6,-0.3 2.3,-1.4 3.1,-2.9 3.1,-2.9 0,0 -2.5,1.8 -4.7,0.8 z m 0.6,-6.2 c 0.7,0.3 1.7,1.9 1.7,1.9 -0.8,-0.1 -2.5,-0.7 -2.7,-1.3 -0.2,-0.6 0.3,-0.9 1,-0.6 z m -10.4,1.2 c -0.9,0 -1.7,-0.1 -2.4,-0.3 -1,-0.4 -1.8,-1 -2.3,-2 -0.7,-1.2 -1.2,-2 -1.5,-2.6 l 1.2,0.4 -1.2,-2.7 10.8,6 c -0.3,0 -0.6,0.1 -0.9,0.3 l -6.9,-2.8 6,3.4 c -1.1,0.2 -2.2,0.3 -2.8,0.3 z m 2,6.2 c -0.1,-0.5 -0.1,-0.9 0,-1.3 0.6,0.4 1.6,0.7 2.9,0.2 0.1,-0.1 -0.9,1.1 -2.9,1.1 z m 3.2,2.2 c -0.4,-0.1 -0.9,-0.2 -1.3,-0.3 -0.2,-0.1 -0.4,-0.2 -0.6,-0.3 0.9,-0.2 2,-0.7 3,-1.9 0,0 -0.1,1.3 -1.1,2.5 z m 3,-0.3 c -0.2,0.1 -0.5,0.1 -0.7,0.2 0.4,-0.3 0.8,-0.7 0.8,-1.4 0,0 0.2,0.8 -0.1,1.2 z m 3.2,-1.5 c -0.1,-0.3 -0.2,-0.9 -0.2,-0.9 0.7,0.1 1.6,-0.2 1.6,-0.2 -0.6,0.6 -1.4,1.1 -1.4,1.1 z"
id="path4728"
inkscape:connector-curvature="0"
style="fill:#3a3a3a" />
<path
class="st0"
d="m -34.1,69.8 c 0,0 -2.5,-0.6 -2.9,1.3 -0.1,0.8 0.2,1.5 0.6,1.8 0.2,-0.1 0.5,-0.2 1,-0.2 -0.1,0 -0.3,-0.3 -0.4,-0.6 0.2,0 0.4,0.1 0.6,0 0,0 -0.6,-0.2 -0.8,-0.9 0,0 0,0 0,0 0.1,0.1 0.2,0.1 0.3,0.1 0,0 -0.5,-0.4 -0.1,-0.9 0.3,-0.3 0.8,-0.6 1.7,-0.6 z"
id="path4730"
inkscape:connector-curvature="0"
style="fill:#ffbb00" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 6.1 KiB

View file

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="520"
height="120"
viewBox="0 0 137.58333 31.75"
version="1.1"
id="svg8"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="kiss.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.8307692"
inkscape:cx="156.4916"
inkscape:cy="-5.5462185"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:pagecheckerboard="true"
units="px"
inkscape:window-width="1366"
inkscape:window-height="745"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Livello 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-265.25)">
<g
aria-label="KISS"
transform="matrix(0.11316463,0,0,0.08777538,-46.578526,266.05819)"
style="font-style:normal;font-weight:normal;font-size:40px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none"
id="flowRoot815">
<path
d="m 786.67742,82.784613 v 72.395827 h 15.88541 l 59.11458,-72.395827 h 41.92709 l -71.74479,86.328117 79.29687,91.40625 h -43.22917 l -65.10416,-76.95312 h -16.14583 v 76.95312 H 752.95346 V 82.784613 Z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:266.66665649px;font-family:Eurostile;-inkscape-font-specification:Eurostile;text-align:center;text-anchor:middle"
id="path832"
inkscape:connector-curvature="0" />
<path
d="M 958.55242,82.784613 V 260.51898 H 924.82846 V 82.784613 Z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:266.66665649px;font-family:Eurostile;-inkscape-font-specification:Eurostile;text-align:center;text-anchor:middle"
id="path834"
inkscape:connector-curvature="0" />
<path
d="m 1121.8337,134.60753 h -32.9428 q -0.2604,-2.47396 -0.2604,-3.64584 -1.1718,-14.97395 -6.6406,-18.74999 -5.4687,-3.90625 -25.7812,-3.90625 -23.9584,0 -31.3803,4.42708 -7.2916,4.42708 -7.2916,18.61979 0,16.79687 5.9896,20.18229 5.9895,3.38542 39.5833,5.20833 39.7135,2.21355 51.3021,11.32813 11.7187,9.11458 11.7187,37.89062 0,35.41667 -13.6718,45.83333 -13.6719,10.28646 -60.2865,10.28646 -41.9271,0 -55.72917,-10.15625 -13.67187,-10.15625 -13.67187,-41.14583 l -0.13021,-6.51042 h 32.81245 l 0.1303,3.77604 q 0,18.6198 6.5104,22.78646 6.5104,4.16667 35.5468,4.16667 22.6563,0 28.9063,-4.81771 6.25,-4.81771 6.25,-22.26562 0,-12.89063 -4.8177,-17.05729 -4.6875,-4.29688 -20.4427,-5.20834 l -18.6198,-1.17187 q -42.1875,-2.47396 -53.90626,-11.71875 -11.71875,-9.24479 -11.71875,-39.71354 0,-31.11979 14.0625,-41.406251 14.19271,-10.416666 56.51041,-10.416666 40.1042,0 54.0365,9.505208 13.9323,9.505209 13.9323,37.109369 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:266.66665649px;font-family:Eurostile;-inkscape-font-specification:Eurostile;text-align:center;text-anchor:middle"
id="path836"
inkscape:connector-curvature="0" />
<path
d="m 1281.7295,134.60753 h -32.9427 q -0.2604,-2.47396 -0.2604,-3.64584 -1.1719,-14.97395 -6.6407,-18.74999 -5.4687,-3.90625 -25.7812,-3.90625 -23.9583,0 -31.3802,4.42708 -7.2917,4.42708 -7.2917,18.61979 0,16.79687 5.9896,20.18229 5.9896,3.38542 39.5833,5.20833 39.7136,2.21355 51.3021,11.32813 11.7188,9.11458 11.7188,37.89062 0,35.41667 -13.6719,45.83333 -13.6719,10.28646 -60.2865,10.28646 -41.927,0 -55.7291,-10.15625 -13.6719,-10.15625 -13.6719,-41.14583 l -0.1302,-6.51042 h 32.8125 l 0.1302,3.77604 q 0,18.6198 6.5104,22.78646 6.5104,4.16667 35.5469,4.16667 22.6562,0 28.9062,-4.81771 6.25,-4.81771 6.25,-22.26562 0,-12.89063 -4.8177,-17.05729 -4.6875,-4.29688 -20.4427,-5.20834 l -18.6198,-1.17187 q -42.1875,-2.47396 -53.9062,-11.71875 -11.7188,-9.24479 -11.7188,-39.71354 0,-31.11979 14.0625,-41.406251 14.1927,-10.416666 56.5104,-10.416666 40.1042,0 54.0365,9.505208 13.9323,9.505209 13.9323,37.109369 z"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:266.66665649px;font-family:Eurostile;-inkscape-font-specification:Eurostile;text-align:center;text-anchor:middle"
id="path838"
inkscape:connector-curvature="0" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

View file

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="520"
height="120"
viewBox="0 0 137.58333 31.750001"
version="1.1"
id="svg7771"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="raceflight.svg">
<defs
id="defs7765" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.6730769"
inkscape:cx="56.183903"
inkscape:cy="60"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:pagecheckerboard="true"
units="px"
inkscape:window-width="1366"
inkscape:window-height="745"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata7768">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Livello 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-265.24998)">
<path
id="FLIGHT_EXPAND_2_"
stroke-miterlimit="10"
d="m 77.347858,275.59724 -2.73443,2.87532 h -6.81962 l -0.24989,1.43766 h 8.40317 l -2.56749,2.69358 h -6.31921 l -0.71695,4.04892 h -3.46806 l 1.98413,-11.05569 h 12.48835 z m 10.09759,8.56865 -2.40721,2.48725 h -8.62222 l 1.73612,-9.67368 h 3.00537 l -1.28385,7.18643 z m 3.61791,2.48704 h -3.01996 l 1.73611,-9.67367 h 3.00538 z m 8.986732,-6.0443 h 6.24418 l -1.0796,6.0443 h -6.696442 c -0.75885,0 -1.45162,-0.10859 -2.07917,-0.32555 -0.62733,-0.21675 -1.16234,-0.51562 -1.60481,-0.89661 -0.44268,-0.38057 -0.78552,-0.83137 -1.02854,-1.35179 -0.24322,-0.52063 -0.36473,-1.0846 -0.36473,-1.69193 0,-0.79032 0.17987,-1.51832 0.5398,-2.18358 0.35994,-0.66527 0.84638,-1.23633 1.45892,-1.7134 0.61275,-0.47727 1.33262,-0.84826 2.1592,-1.11336 0.82658,-0.2649 1.70673,-0.39766 2.640652,-0.39766 h 6.98822 l -2.40722,2.51601 h -5.033272 c -0.44747,0 -0.87306,0.0675 -1.27655,0.20237 -0.40392,0.13505 -0.75635,0.32305 -1.05772,0.56398 -0.30158,0.24113 -0.5423,0.52542 -0.72216,0.85305 -0.18008,0.32784 -0.26991,0.68465 -0.26991,1.07001 0,0.60733 0.22614,1.0894 0.6784,1.446 0.45227,0.35681 1.05772,0.535 1.81636,0.535 h 3.705652 l 0.24781,-1.40264 h -5.062452 z m 18.74711,6.0443 h -3.00537 l 0.67111,-3.73066 h -5.82109 l -0.65651,3.73066 h -3.03456 l 1.73612,-9.67367 h 3.01996 l -0.62754,3.427 h 5.82129 l 0.61254,-3.427 h 3.01996 z m 15.71256,-9.67367 -2.4218,2.51601 h -3.47223 l -1.28385,7.15766 h -3.01975 l 1.26926,-7.15766 h -4.58101 l 2.42181,-2.51601 z"
style="fill:#000000;fill-opacity:1;stroke:#000001;stroke-width:0.41671875;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
<path
id="RACE_EXPAND_2_"
stroke-miterlimit="10"
d="m 18.812898,286.65272 h -4.61852 l -1.96724,-2.92513 H 6.9250078 l -0.51667,2.92513 h -3.4518 l 1.0004,-5.65164 h 9.7041102 c 0.28886,0 0.56397,-0.0331 0.82533,-0.0992 0.26114,-0.0661 0.48915,-0.15965 0.6836,-0.28095 0.19446,-0.12109 0.35014,-0.27282 0.46686,-0.45456 0.11671,-0.18174 0.17507,-0.38265 0.17507,-0.60315 0,-0.36369 -0.15027,-0.6363 -0.45018,-0.81804 -0.30012,-0.18195 -0.71696,-0.27282 -1.2505,-0.27282 H 4.4071178 l 2.76778,-2.87532 h 7.1695402 c 0.57774,0 1.16964,0.0496 1.77572,0.1486 0.60566,0.0992 1.15609,0.27845 1.65066,0.53709 0.49457,0.25906 0.89765,0.60316 1.20902,1.03292 0.31096,0.42975 0.46665,0.97497 0.46665,1.63607 0,0.49562 -0.0861,0.96956 -0.25823,1.4212 -0.17257,0.45184 -0.41683,0.8593 -0.73383,1.22299 -0.3168,0.36348 -0.69778,0.67214 -1.14192,0.92537 -0.44476,0.25364 -0.93371,0.42975 -1.46726,0.52896 0.15548,0.14339 0.33055,0.32513 0.52522,0.54522 0.19445,0.2205 0.44726,0.52354 0.75863,0.90891 z m 5.23127,0 2.27591,-2.48704 h 2.4364 c 0.30137,0 0.60774,0 0.91912,0 0.31116,0 0.58356,0.01 0.81699,0.029 -0.10713,-0.17361 -0.22863,-0.39286 -0.36473,-0.65797 -0.1363,-0.2649 -0.2626,-0.51333 -0.37932,-0.74467 l -1.29823,-2.55937 -5.71896,6.42008 h -3.57435 l 7.82001,-8.7483 c 0.25281,-0.27949 0.55439,-0.53001 0.90453,-0.75176 0.35035,-0.22155 0.76343,-0.33264 1.24008,-0.33264 0.45706,0 0.81929,0.1038 1.0869,0.31096 0.2674,0.20738 0.48373,0.46519 0.64922,0.77344 l 4.53744,8.7483 z m 23.78038,-2.48683 -2.37804,2.48704 h -4.90197 c -0.75885,0 -1.45162,-0.10859 -2.07917,-0.32555 -0.62733,-0.21675 -1.16234,-0.51541 -1.60481,-0.8964 -0.44268,-0.38057 -0.78552,-0.83158 -1.02853,-1.352 -0.24323,-0.52063 -0.36473,-1.08439 -0.36473,-1.69172 0,-0.79032 0.17986,-1.51832 0.5398,-2.18359 0.35993,-0.66526 0.84638,-1.23633 1.45891,-1.71339 0.61275,-0.47728 1.33262,-0.84826 2.1592,-1.11337 0.82659,-0.26489 1.70673,-0.39765 2.64065,-0.39765 h 6.84233 l -2.39263,2.51601 h -4.90197 c -0.44747,0 -0.87306,0.0675 -1.27655,0.20237 -0.40391,0.13505 -0.75635,0.32304 -1.05772,0.56397 -0.30158,0.24114 -0.5398,0.52292 -0.71487,0.84597 -0.17507,0.32305 -0.26281,0.67735 -0.26281,1.06272 0,0.29908 0.0607,0.57127 0.18236,0.81699 0.12151,0.24593 0.29179,0.4556 0.51063,0.629 0.21883,0.17341 0.47894,0.30867 0.78052,0.40496 0.30137,0.0965 0.63692,0.14464 1.00665,0.14464 z m 12.40081,0 -2.39263,2.48704 h -9.39544 l 1.73612,-9.67367 h 11.29203 l -2.40722,2.51601 h -6.31712 l -0.20425,1.15671 h 7.71769 l -2.10085,2.19796 h -6.01074 l -0.23343,1.31595 z"
style="fill:#de1b14;fill-opacity:1;stroke:#000000;stroke-width:0.417;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 6 KiB

View file

@ -56,7 +56,7 @@ var RateCurve = function (useLegacyCurve) {
context.moveTo(0, height);
context.quadraticCurveTo(width * 11 / 20, height - ((rateY / 2) * (1 - rcExpo)), width, height - rateY);
context.stroke();
}
};
this.drawStickPosition = function (rcData, rate, rcRate, rcExpo, superExpoActive, deadband, limit, maxAngularVel, context, stickColor) {
@ -76,20 +76,15 @@ var RateCurve = function (useLegacyCurve) {
context.restore();
}
return (Math.abs(currentValue)<0.5)?0:currentValue.toFixed(0); // The calculated value in deg/s is returned from the function call for further processing.
}
};
};
this.getBetaflightRates = function (rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo, superExpoActive, limit) {
let angularVel;
RateCurve.prototype.rcCommandRawToDegreesPerSecond = function (rcData, rate, rcRate, rcExpo, superExpoActive, deadband, limit) {
var angleRate;
if (rate !== undefined && rcRate !== undefined && rcExpo !== undefined) {
if (rcRate > 2) {
rcRate = rcRate + (rcRate - 2) * 14.54;
}
var maxRc = 500 * rcRate;
var rcCommandf = this.rcCommand(rcData, rcRate, deadband) / maxRc;
var rcCommandfAbs = Math.abs(rcCommandf);
var expoPower;
var rcRateConstant;
@ -107,13 +102,90 @@ RateCurve.prototype.rcCommandRawToDegreesPerSecond = function (rcData, rate, rcR
if (superExpoActive) {
var rcFactor = 1 / this.constrain(1 - rcCommandfAbs * rate, 0.01, 1);
angleRate = rcRateConstant * rcRate * rcCommandf; // 200 should be variable checked on version (older versions it's 205,9)
angleRate = angleRate * rcFactor;
angularVel = rcRateConstant * rcRate * rcCommandf; // 200 should be variable checked on version (older versions it's 205,9)
angularVel = angularVel * rcFactor;
} else {
angleRate = (((rate * 100) + 27) * rcCommandf / 16) / 4.1; // Only applies to old versions ?
angularVel = (((rate * 100) + 27) * rcCommandf / 16) / 4.1; // Only applies to old versions ?
}
angleRate = this.constrain(angleRate, -1 * limit, limit); // Rate limit from profile
angularVel = this.constrain(angularVel, -1 * limit, limit); // Rate limit from profile
return angularVel;
};
this.getRaceflightRates = function (rcCommandf, rate, rcRate, rcExpo) {
let angularVel = ((1 + 0.01 * rcExpo * (rcCommandf * rcCommandf - 1.0)) * rcCommandf);
angularVel = (angularVel * (rcRate + (Math.abs(angularVel) * rcRate * rate * 0.01)));
return angularVel;
};
this.getKISSRates = function (rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo) {
const kissRpy = 1 - rcCommandfAbs * rate;
const kissTempCurve = rcCommandf * rcCommandf;
rcCommandf = ((rcCommandf * kissTempCurve) * rcExpo + rcCommandf * (1 - rcExpo)) * (rcRate / 10);
return ((2000.0 * (1.0 / kissRpy)) * rcCommandf);
};
this.getActualRates = function (rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo) {
let angularVel;
const expof = rcCommandfAbs * ((Math.pow(rcCommandf, 5) * rcExpo) + (rcCommandf * (1 - rcExpo)));
angularVel = Math.max(0, rate-rcRate);
angularVel = (rcCommandf * rcRate) + (angularVel * expof);
return angularVel;
};
this.getQuickRates = function (rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo) {
rcRate = rcRate * 200;
rate = Math.max(rate, rcRate);
let angularVel;
const superExpoConfig = (((rate / rcRate) - 1) / (rate / rcRate));
const curve = Math.pow(rcCommandfAbs, 3) * rcExpo + rcCommandfAbs * (1 - rcExpo);
angularVel = 1.0 / (1.0 - (curve * superExpoConfig));
angularVel = rcCommandf * rcRate * angularVel;
return angularVel;
};
};
RateCurve.prototype.rcCommandRawToDegreesPerSecond = function (rcData, rate, rcRate, rcExpo, superExpoActive, deadband, limit) {
var angleRate;
if (rate !== undefined && rcRate !== undefined && rcExpo !== undefined) {
const rcCommandf = this.rcCommand(rcData, 1, deadband) / 500;
var rcCommandfAbs = Math.abs(rcCommandf);
switch(TABS.pid_tuning.currentRatesType) {
case TABS.pid_tuning.RATES_TYPE.RACEFLIGHT:
angleRate=this.getRaceflightRates(rcCommandf, rate, rcRate, rcExpo);
break;
case TABS.pid_tuning.RATES_TYPE.KISS:
angleRate=this.getKISSRates(rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo);
break;
case TABS.pid_tuning.RATES_TYPE.ACTUAL:
angleRate=this.getActualRates(rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo);
break;
case TABS.pid_tuning.RATES_TYPE.QUICKRATES:
angleRate=this.getQuickRates(rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo);
break;
// add future rates types here
default: // BetaFlight
angleRate=this.getBetaflightRates(rcCommandf, rcCommandfAbs, rate, rcRate, rcExpo, superExpoActive, limit);
break;
}
}
return angleRate;

View file

@ -357,6 +357,9 @@ MspHelper.prototype.process_data = function(dataHandler) {
RC_tuning.pitch_rate_limit = data.readU16();
RC_tuning.yaw_rate_limit = data.readU16();
}
if (semver.gte(CONFIG.apiVersion, "1.43.0")) {
RC_tuning.rates_type = data.readU8();
}
break;
case MSPCodes.MSP_PID:
// PID data arrived, we need to scale it and save to appropriate bank / array
@ -1689,6 +1692,9 @@ MspHelper.prototype.crunch = function(code) {
buffer.push16(RC_tuning.pitch_rate_limit);
buffer.push16(RC_tuning.yaw_rate_limit);
}
if (semver.gte(CONFIG.apiVersion, "1.43.0")) {
buffer.push8(RC_tuning.rates_type);
}
break;
case MSPCodes.MSP_SET_RX_MAP:
for (let i = 0; i < RC_MAP.length; i++) {

View file

@ -7,6 +7,14 @@ TABS.pid_tuning = {
dirty: false,
currentProfile: null,
currentRateProfile: null,
currentRatesType: null,
RATES_TYPE: {
BETAFLIGHT: 0,
RACEFLIGHT: 1,
KISS: 2,
ACTUAL: 3,
QUICKRATES: 4,
},
SETPOINT_WEIGHT_RANGE_LOW: 2.55,
SETPOINT_WEIGHT_RANGE_HIGH: 20,
SETPOINT_WEIGHT_RANGE_LEGACY: 2.54,
@ -399,6 +407,29 @@ TABS.pid_tuning.initialize = function (callback) {
$('.idleMinRpm').hide();
}
if (semver.gte(CONFIG.apiVersion, "1.43.0")) {
const ratesTypeListElement = $('select[id="ratesType"]'); // generates list
const ratesList = [
{name: "Betaflight"},
{name: "Raceflight"},
{name: "KISS"},
{name: "Actual"},
{name: "QuickRates"},
];
// add future rates types here with CONFIG.apiVersion check
for (let i = 0; i < ratesList.length; i++) {
ratesTypeListElement.append(`<option value="${i}">${ratesList[i].name}</option>`);
}
self.currentRatesType = RC_tuning.rates_type;
ratesTypeListElement.val(self.currentRatesType);
self.changeRatesType(self.currentRatesType); // update rate type code when updating the tab
} else {
$('.rates_type').hide();
}
$('input[id="useIntegratedYaw"]').change(function() {
var checked = $(this).is(':checked');
$('#pidTuningIntegratedYawCaution').toggle(checked);
@ -649,16 +680,65 @@ TABS.pid_tuning.initialize = function (callback) {
});
// catch RC_tuning changes
RC_tuning.RC_RATE = parseFloat($('.pid_tuning input[name="rc_rate"]').val());
const pitch_rate_e = $('.pid_tuning input[name="pitch_rate"]');
const roll_rate_e = $('.pid_tuning input[name="roll_rate"]');
const yaw_rate_e = $('.pid_tuning input[name="yaw_rate"]');
const rc_rate_pitch_e = $('.pid_tuning input[name="rc_rate_pitch"]');
const rc_rate_e = $('.pid_tuning input[name="rc_rate"]');
const rc_rate_yaw_e = $('.pid_tuning input[name="rc_rate_yaw"]');
const rc_pitch_expo_e = $('.pid_tuning input[name="rc_pitch_expo"]');
const rc_expo_e = $('.pid_tuning input[name="rc_expo"]');
const rc_yaw_expo_e = $('.pid_tuning input[name="rc_yaw_expo"]');
RC_tuning.roll_pitch_rate = parseFloat($('.pid_tuning input[name="roll_pitch_rate"]').val());
RC_tuning.roll_rate = parseFloat($('.pid_tuning input[name="roll_rate"]').val());
RC_tuning.pitch_rate = parseFloat($('.pid_tuning input[name="pitch_rate"]').val());
RC_tuning.yaw_rate = parseFloat($('.pid_tuning input[name="yaw_rate"]').val());
RC_tuning.RC_EXPO = parseFloat($('.pid_tuning input[name="rc_expo"]').val());
RC_tuning.RC_YAW_EXPO = parseFloat($('.pid_tuning input[name="rc_yaw_expo"]').val());
RC_tuning.rcYawRate = parseFloat($('.pid_tuning input[name="rc_rate_yaw"]').val());
RC_tuning.rcPitchRate = parseFloat($('.pid_tuning input[name="rc_rate_pitch"]').val());
RC_tuning.RC_PITCH_EXPO = parseFloat($('.pid_tuning input[name="rc_pitch_expo"]').val());
RC_tuning.RC_RATE = parseFloat(rc_rate_e.val());
RC_tuning.roll_rate = parseFloat(roll_rate_e.val());
RC_tuning.pitch_rate = parseFloat(pitch_rate_e.val());
RC_tuning.yaw_rate = parseFloat(yaw_rate_e.val());
RC_tuning.RC_EXPO = parseFloat(rc_expo_e.val());
RC_tuning.RC_YAW_EXPO = parseFloat(rc_yaw_expo_e.val());
RC_tuning.rcYawRate = parseFloat(rc_rate_yaw_e.val());
RC_tuning.rcPitchRate = parseFloat(rc_rate_pitch_e.val());
RC_tuning.RC_PITCH_EXPO = parseFloat(rc_pitch_expo_e.val());
if (semver.gte(CONFIG.apiVersion, "1.43.0")) {
switch(self.currentRatesType) {
case self.RATES_TYPE.RACEFLIGHT:
RC_tuning.pitch_rate = parseFloat(pitch_rate_e.val()) / 100;
RC_tuning.roll_rate = parseFloat(roll_rate_e.val()) / 100;
RC_tuning.yaw_rate = parseFloat(yaw_rate_e.val()) / 100;
RC_tuning.rcPitchRate = parseFloat(rc_rate_pitch_e.val()) / 1000;
RC_tuning.RC_RATE = parseFloat(rc_rate_e.val()) / 1000;
RC_tuning.rcYawRate = parseFloat(rc_rate_yaw_e.val()) / 1000;
RC_tuning.RC_PITCH_EXPO = parseFloat(rc_pitch_expo_e.val()) / 100;
RC_tuning.RC_EXPO = parseFloat(rc_expo_e.val()) / 100;
RC_tuning.RC_YAW_EXPO = parseFloat(rc_yaw_expo_e.val()) / 100;
break;
case self.RATES_TYPE.ACTUAL:
RC_tuning.pitch_rate = parseFloat(pitch_rate_e.val()) / 1000;
RC_tuning.roll_rate = parseFloat(roll_rate_e.val()) / 1000;
RC_tuning.yaw_rate = parseFloat(yaw_rate_e.val()) / 1000;
RC_tuning.rcPitchRate = parseFloat(rc_rate_pitch_e.val()) / 1000;
RC_tuning.RC_RATE = parseFloat(rc_rate_e.val()) / 1000;
RC_tuning.rcYawRate = parseFloat(rc_rate_yaw_e.val()) / 1000;
break;
case self.RATES_TYPE.QUICKRATES:
RC_tuning.pitch_rate = parseFloat(pitch_rate_e.val()) / 1000;
RC_tuning.roll_rate = parseFloat(roll_rate_e.val()) / 1000;
RC_tuning.yaw_rate = parseFloat(yaw_rate_e.val()) / 1000;
break;
// add future rates types here
default: // BetaFlight
break;
}
}
RC_tuning.throttle_MID = parseFloat($('.throttle input[name="mid"]').val());
RC_tuning.throttle_EXPO = parseFloat($('.throttle input[name="expo"]').val());
@ -779,6 +859,15 @@ TABS.pid_tuning.initialize = function (callback) {
ADVANCED_TUNING.motorOutputLimit = parseInt($('.pid_tuning input[name="motorLimit"]').val());
ADVANCED_TUNING.autoProfileCellCount = parseInt($('.pid_tuning input[name="cellCount"]').val());
ADVANCED_TUNING.idleMinRpm = parseInt($('input[name="idleMinRpm-number"]').val());
const selectedRatesType = $('select[id="ratesType"]').val(); // send analytics for rates type
let selectedRatesTypeName = null;
if (selectedRatesType !== RC_tuning.rates_type) {
selectedRatesTypeName = $('select[id="ratesType"]').find('option:selected').text();
}
self.analyticsChanges['RatesType'] = selectedRatesTypeName;
RC_tuning.rates_type = selectedRatesType;
}
}
@ -941,6 +1030,45 @@ TABS.pid_tuning.initialize = function (callback) {
self.currentRates.rc_expo_pitch = self.currentRates.rc_expo;
}
if (semver.gte(CONFIG.apiVersion, "1.43.0")) {
switch(RC_tuning.rates_type) {
case self.RATES_TYPE.RACEFLIGHT:
self.currentRates.roll_rate *= 100;
self.currentRates.pitch_rate *= 100;
self.currentRates.yaw_rate *= 100;
self.currentRates.rc_rate *= 1000;
self.currentRates.rc_rate_yaw *= 1000;
self.currentRates.rc_rate_pitch *= 1000;
self.currentRates.rc_expo *= 100;
self.currentRates.rc_yaw_expo *= 100;
self.currentRates.rc_pitch_expo *= 100;
break;
case self.RATES_TYPE.ACTUAL:
self.currentRates.roll_rate *= 1000;
self.currentRates.pitch_rate *= 1000;
self.currentRates.yaw_rate *= 1000;
self.currentRates.rc_rate *= 1000;
self.currentRates.rc_rate_yaw *= 1000;
self.currentRates.rc_rate_pitch *= 1000;
break;
case self.RATES_TYPE.QUICKRATES:
self.currentRates.roll_rate *= 1000;
self.currentRates.pitch_rate *= 1000;
self.currentRates.yaw_rate *= 1000;
break;
// add future rates types here
default: // BetaFlight
break;
}
}
$('.tab-pid_tuning .tab-container .pid').on('click', () => activateSubtab('pid'));
$('.tab-pid_tuning .tab-container .rates').on('click', () => activateSubtab('rates'));
@ -1265,6 +1393,11 @@ TABS.pid_tuning.initialize = function (callback) {
targetValue = checkInput(targetElement);
if (self.currentRates.hasOwnProperty(targetElement.attr('name')) && targetValue !== undefined) {
const stepValue = parseFloat(targetElement.prop('step')); // adjust value to match step (change only the result, not the the actual value)
if (stepValue != null) {
targetValue = Math.round(targetValue / stepValue) * stepValue;
}
self.currentRates[targetElement.attr('name')] = targetValue;
updateNeeded = true;
@ -1294,6 +1427,12 @@ TABS.pid_tuning.initialize = function (callback) {
if (targetElement.attr('name') === 'rc_expo' && semver.lt(CONFIG.apiVersion, "1.37.0")) {
self.currentRates.rc_pitch_expo = targetValue;
}
if (targetElement.attr('id') === 'ratesType' && semver.gte(CONFIG.apiVersion, "1.43.0")) {
self.changeRatesType(targetValue);
updateNeeded = true;
}
} else { // no event was passed, just force a graph update
updateNeeded = true;
}
@ -1752,6 +1891,8 @@ TABS.pid_tuning.initialize = function (callback) {
self.setDirty(false);
GUI.log(i18n.getMessage('pidTuningEepromSaved'));
self.refresh();
});
analytics.sendChangeEvents(analytics.EVENT_CATEGORIES.FLIGHT_CONTROLLER, self.analyticsChanges);
@ -1765,7 +1906,7 @@ TABS.pid_tuning.initialize = function (callback) {
self.updating = false;
// enable RC data pulling for rates preview
GUI.interval_add('receiver_pull', self.getRecieverData, true);
GUI.interval_add('receiver_pull', self.getReceiverData, true);
// status data pulled via separate timer with static speed
GUI.interval_add('status_pull', function status_pull() {
@ -1776,7 +1917,7 @@ TABS.pid_tuning.initialize = function (callback) {
}
};
TABS.pid_tuning.getRecieverData = function () {
TABS.pid_tuning.getReceiverData = function () {
MSP.send_message(MSPCodes.MSP_RC, false, false);
};
@ -2192,3 +2333,217 @@ TABS.pid_tuning.updatePIDColors = function(clear = false) {
setTuningElementColor($('.pid_tuning .PITCH input[name="f"]'), ADVANCED_TUNING_ACTIVE.feedforwardPitch, ADVANCED_TUNING.feedforwardPitch);
setTuningElementColor($('.pid_tuning .YAW input[name="f"]'), ADVANCED_TUNING_ACTIVE.feedforwardYaw, ADVANCED_TUNING.feedforwardYaw);
};
TABS.pid_tuning.changeRatesType = function(rateTypeID) {
let self = this;
const dialogRatesType = $('.dialogRatesType')[0];
let sameRatesType = true;
self.currentRatesType = rateTypeID;
if (self.currentRatesType !== RC_tuning.rates_type) {
sameRatesType = false;
dialogRatesType.showModal();
$('.dialogRatesType-cancelbtn').click(function() {
sameRatesType = true;
self.currentRatesType = RC_tuning.rates_type;
$('.rates_type select[id="ratesType"]').val(RC_tuning.rates_type);
self.changeRatesTypeLogo();
self.changeRatesSystem(sameRatesType);
dialogRatesType.close();
});
$('.dialogRatesType-confirmbtn').click(function() {
self.changeRatesTypeLogo();
self.changeRatesSystem(sameRatesType);
dialogRatesType.close();
});
} else {
self.changeRatesTypeLogo();
self.changeRatesSystem(sameRatesType);
}
};
TABS.pid_tuning.changeRatesSystem = function(sameType) {
let self = this;
let rcRateMax = 2.55, rcRateMin = 0.01, rcRateStep = 0.01;
let rateMax = 1.0, rateMin = 0, rateStep = 0.01;
let expoMax = 1.0, expoMin = 0, expoStep = 0.01;
const pitch_rate_e = $('.pid_tuning input[name="pitch_rate"]');
const roll_rate_e = $('.pid_tuning input[name="roll_rate"]');
const yaw_rate_e = $('.pid_tuning input[name="yaw_rate"]');
const rc_rate_pitch_e = $('.pid_tuning input[name="rc_rate_pitch"]');
const rc_rate_e = $('.pid_tuning input[name="rc_rate"]');
const rc_rate_yaw_e = $('.pid_tuning input[name="rc_rate_yaw"]');
const rc_pitch_expo_e = $('.pid_tuning input[name="rc_pitch_expo"]');
const rc_expo_e = $('.pid_tuning input[name="rc_expo"]');
const rc_yaw_expo_e = $('.pid_tuning input[name="rc_yaw_expo"]');
const rcRateLabel = $('#pid-tuning .pid_titlebar .rc_rate');
const rateLabel = $('#pid-tuning .pid_titlebar .rate');
const rcExpoLabel = $('#pid-tuning .pid_titlebar .rc_expo');
// default values for betaflight curve. all the default values produce the same betaflight default curve (or at least near enough)
let rcRateDefault = (1).toFixed(2), rateDefault = (0.7).toFixed(2), expoDefault = (0).toFixed(2);
if (sameType) { // if selected rates type is different from the saved one, set values to default instead of reading
pitch_rate_e.val(RC_tuning.pitch_rate.toFixed(2));
roll_rate_e.val(RC_tuning.roll_rate.toFixed(2));
yaw_rate_e.val(RC_tuning.yaw_rate.toFixed(2));
rc_rate_pitch_e.val(RC_tuning.rcPitchRate.toFixed(2));
rc_rate_e.val(RC_tuning.RC_RATE.toFixed(2));
rc_rate_yaw_e.val(RC_tuning.rcYawRate.toFixed(2));
rc_pitch_expo_e.val(RC_tuning.RC_PITCH_EXPO.toFixed(2));
rc_expo_e.val(RC_tuning.RC_EXPO.toFixed(2));
rc_yaw_expo_e.val(RC_tuning.RC_YAW_EXPO.toFixed(2));
}
switch(self.currentRatesType) {
case self.RATES_TYPE.RACEFLIGHT:
rcRateLabel.text(i18n.getMessage("pidTuningRcRateRaceflight"));
rateLabel.text(i18n.getMessage("pidTuningRateRaceflight"));
rcExpoLabel.text(i18n.getMessage("pidTuningRcExpoRaceflight"));
rcRateMax = 2000;
rcRateMin = 10;
rcRateStep = 10;
rateMax = 255;
rateStep = 1;
expoMax = 100;
expoStep = 1;
if (sameType) {
pitch_rate_e.val((RC_tuning.pitch_rate * 100).toFixed(0));
roll_rate_e.val((RC_tuning.roll_rate * 100).toFixed(0));
yaw_rate_e.val((RC_tuning.yaw_rate * 100).toFixed(0));
rc_rate_pitch_e.val((RC_tuning.rcPitchRate * 1000).toFixed(0));
rc_rate_e.val((RC_tuning.RC_RATE * 1000).toFixed(0));
rc_rate_yaw_e.val((RC_tuning.rcYawRate * 1000).toFixed(0));
rc_pitch_expo_e.val((RC_tuning.RC_PITCH_EXPO * 100).toFixed(0));
rc_expo_e.val((RC_tuning.RC_EXPO * 100).toFixed(0));
rc_yaw_expo_e.val((RC_tuning.RC_YAW_EXPO * 100).toFixed(0));
} else {
rcRateDefault = (370).toFixed(0);
rateDefault = (80).toFixed(0);
expoDefault = (50).toFixed(0);
}
break;
case self.RATES_TYPE.KISS:
rcRateLabel.text(i18n.getMessage("pidTuningRcRate"));
rateLabel.text(i18n.getMessage("pidTuningRcRateRaceflight"));
rcExpoLabel.text(i18n.getMessage("pidTuningRcExpoKISS"));
rateMax = 0.99;
break;
case self.RATES_TYPE.ACTUAL:
rcRateLabel.text(i18n.getMessage("pidTuningRcRateActual"));
rateLabel.text(i18n.getMessage("pidTuningRateQuickRates"));
rcExpoLabel.text(i18n.getMessage("pidTuningRcExpoRaceflight"));
rateMax = 2000;
rateStep = 10;
rcRateMax = 2000;
rcRateMin = 10;
rcRateStep = 10;
if (sameType) {
pitch_rate_e.val((RC_tuning.pitch_rate * 1000).toFixed(0));
roll_rate_e.val((RC_tuning.roll_rate * 1000).toFixed(0));
yaw_rate_e.val((RC_tuning.yaw_rate * 1000).toFixed(0));
rc_rate_pitch_e.val((RC_tuning.rcPitchRate * 1000).toFixed(0));
rc_rate_e.val((RC_tuning.RC_RATE * 1000).toFixed(0));
rc_rate_yaw_e.val((RC_tuning.rcYawRate * 1000).toFixed(0));
} else {
rcRateDefault = (200).toFixed(0);
rateDefault = (670).toFixed(0);
expoDefault = (0.54).toFixed(2);
}
break;
case self.RATES_TYPE.QUICKRATES:
rcRateLabel.text(i18n.getMessage("pidTuningRcRate"));
rateLabel.text(i18n.getMessage("pidTuningRateQuickRates"));
rcExpoLabel.text(i18n.getMessage("pidTuningRcExpoRaceflight"));
rateMax = 2000;
rateStep = 10;
if (sameType) {
pitch_rate_e.val((RC_tuning.pitch_rate * 1000).toFixed(0));
roll_rate_e.val((RC_tuning.roll_rate * 1000).toFixed(0));
yaw_rate_e.val((RC_tuning.yaw_rate * 1000).toFixed(0));
} else {
rateDefault = (670).toFixed(0);
}
break;
// add future rates types here
default: // BetaFlight
rcRateLabel.text(i18n.getMessage("pidTuningRcRate"));
rateLabel.text(i18n.getMessage("pidTuningRate"));
rcExpoLabel.text(i18n.getMessage("pidTuningRcExpo"));
break;
}
const rc_rate_input_c = $('#pid-tuning input[class="rc_rate_input"]');
const rate_input_c = $('#pid-tuning input[class="rate_input"]');
const expo_input_c = $('#pid-tuning input[class="expo_input"]');
if (!sameType) {
rate_input_c.val(rateDefault);
rc_rate_input_c.val(rcRateDefault);
expo_input_c.val(expoDefault);
}
rc_rate_input_c.attr({"max":rcRateMax, "min":rcRateMin, "step":rcRateStep}).change();
rate_input_c.attr({"max":rateMax, "min":rateMin, "step":rateStep}).change();
expo_input_c.attr({"max":expoMax, "min":expoMin, "step":expoStep}).change();
if (sameType) {
self.setDirty(false);
}
};
TABS.pid_tuning.changeRatesTypeLogo = function() {
let self = this;
const ratesLogoElement = $('.rates_type img[id="ratesLogo"]');
switch(self.currentRatesType) {
case self.RATES_TYPE.RACEFLIGHT:
ratesLogoElement.attr("src", "../images/rate_logos/raceflight.svg");
break;
case self.RATES_TYPE.KISS:
ratesLogoElement.attr("src", "../images/rate_logos/kiss.svg");
break;
case self.RATES_TYPE.ACTUAL:
ratesLogoElement.attr("src", "../images/rate_logos/actual.svg");
break;
case self.RATES_TYPE.QUICKRATES:
ratesLogoElement.attr("src", "../images/rate_logos/quickrates.svg");
break;
// add future rates types here
default: // BetaFlight
ratesLogoElement.attr("src", "../images/rate_logos/betaflight.svg");
break;
}
};

View file

@ -572,7 +572,7 @@ TABS.receiver.initialize = function (callback) {
tab.renderModel();
// TODO: Combine two polls together
GUI.interval_add('receiver_pull_for_model_preview', tab.getRecieverData, 33, false);
GUI.interval_add('receiver_pull_for_model_preview', tab.getReceiverData, 33, false);
// status data pulled via separate timer with static speed
GUI.interval_add('status_pull', function status_pull() {
@ -583,7 +583,7 @@ TABS.receiver.initialize = function (callback) {
}
};
TABS.receiver.getRecieverData = function () {
TABS.receiver.getReceiverData = function () {
MSP.send_message(MSPCodes.MSP_RC, false, false);
};

View file

@ -107,7 +107,7 @@
<tr class="pid_titlebar2">
<th colspan="6">
<div class="pid_mode">
<div i18n="pidTuningBasic" style="float:left;"></div>
<div i18n="pidTuningBasic" class="float-left"></div>
</div>
</th>
</tr>
@ -142,7 +142,7 @@
<tr class="YAW_JUMP_PREVENTION">
<td colspan="3">
<div>
<div i18n="pidTuningYawJumpPrevention" style="float:left;"></div>
<div i18n="pidTuningYawJumpPrevention" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningYawJumpPreventionHelp"></div>
</div>
</td>
@ -319,7 +319,7 @@
<tr class="needed_by_LEVEL">
<th colspan="3">
<div class="pid_mode">
<div i18n="pidTuningLevel" style="float:left;"></div>
<div i18n="pidTuningLevel" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningLevelHelp"></div>
</div>
</th>
@ -366,7 +366,7 @@
<tr>
<th colspan="3">
<div class="pid_mode">
<div i18n="pidTuningMotorOutputLimit" style="float:left;"></div>
<div i18n="pidTuningMotorOutputLimit" class="float-left"></div>
</div>
</th>
</tr>
@ -376,13 +376,13 @@
<th class="third"></th>
<th class="third" style="width: 33%;">
<div>
<div i18n="pidTuningMotorLimit" style="float:left;"></div>
<div i18n="pidTuningMotorLimit" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningMotorLimitHelp"></div>
</div>
</th>
<th class="third" style="width: 33%;">
<div>
<div i18n="pidTuningCellCount" style="float:left;"></div>
<div i18n="pidTuningCellCount" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningCellCountHelp"></div>
</div>
</th>
@ -656,7 +656,38 @@
<div class="subtab-rates" style="display: none;">
<div class="clear-both"></div>
<div class="cf_column">
<div class="note maxRateWarning">
<div class="gui_box rates_type pid_tuning">
<table class="cf">
<thead>
<tr>
<th>
<div>
<div i18n="pidTuningRatesType" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningRatesTypeTip"></div>
</div>
</th>
<th class="rates_logo_bg"></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<select id="ratesType">
<!-- list generated here -->
</select>
</td>
<td class="rates_logo_bg">
<div class="rates_logo_div">
<img id="ratesLogo" src="../images/rate_logos/betaflight.svg" class="rates_logo" alt="Rates logo"/>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<div class="note rates-tab-warning maxRateWarning">
<p i18n="pidTuningMaxRateWarning"></p>
</div>
<div class="gui_box grey rateSetup">
@ -671,7 +702,7 @@
<tr class="pid_titlebar2">
<th colspan="5">
<div class="pid_mode">
<div i18n="pidTuningRateSetup" style="float:left;"></div>
<div i18n="pidTuningRateSetup" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningRatesTuningHelp"></div>
</div>
</th>
@ -679,16 +710,16 @@
<tr class="ROLL">
<td class="pid_roll"></td>
<td class="rc_rate">
<input type="number" name="rc_rate" step="0.01" min="0.01" max="2.55" />
<input type="number" class="rc_rate_input" name="rc_rate" step="0.01" min="0.01" max="2.55" />
</td>
<td class="roll_rate">
<input type="number" name="roll_rate" step="0.01" min="0" max="1.00" />
<input type="number" class="rate_input" name="roll_rate" step="0.01" min="0" max="1.00" />
</td>
<td class="roll_pitch_rate" rowspan="2">
<input type="number" name="roll_pitch_rate" step="0.01" min="0" max="1.00" />
</td>
<td rowspan="2" class="inputBackground">
<input type="number" name="rc_expo" step="0.01" min="0" max="1" />
<input type="number" class="expo_input" name="rc_expo" step="0.01" min="0" max="1" />
<div class="bracket"></div>
</td>
<td class="new_rates maxAngularVelRoll"></td>
@ -696,26 +727,26 @@
<tr class="PITCH">
<td class="pid_pitch"></td>
<td>
<input type="number" name="rc_rate_pitch" step="0.01" min="0.01" max="2.55" />
<input type="number" class="rc_rate_input" name="rc_rate_pitch" step="0.01" min="0.01" max="2.55" />
</td>
<td class="pitch_rate">
<input type="number" name="pitch_rate" step="0.01" min="0" max="1.00" />
<input type="number" class="rate_input" name="pitch_rate" step="0.01" min="0" max="1.00" />
</td>
<td>
<input type="number" name="rc_pitch_expo" step="0.01" min="0" max="1" />
<input type="number" class="expo_input" name="rc_pitch_expo" step="0.01" min="0" max="1" />
</td>
<td class="new_rates maxAngularVelPitch"></td>
</tr>
<tr class="YAW">
<td class="pid_yaw"></td>
<td rowspan="1">
<input type="number" name="rc_rate_yaw" step="0.01" min="0.01" max="2.55" />
<input type="number" class="rc_rate_input" name="rc_rate_yaw" step="0.01" min="0.01" max="2.55" />
</td>
<td>
<input type="number" name="yaw_rate" step="0.01" min="0" max="2.55" />
<input type="number" class="rate_input" name="yaw_rate" step="0.01" min="0" max="2.55" />
</td>
<td>
<input type="number" name="rc_yaw_expo" step="0.01" min="0" max="1" />
<input type="number" class="expo_input" name="rc_yaw_expo" step="0.01" min="0" max="1" />
</td>
<td class="new_rates maxAngularVelYaw"></td>
</tr>
@ -729,7 +760,7 @@
<tr>
<th colspan="2">
<div>
<div i18n="pidTuningRatesCurve" style="float:left;"></div>
<div i18n="pidTuningRatesCurve" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningRatesTip"></div>
</div>
</th>
@ -775,13 +806,13 @@
<tr>
<th>
<div>
<div i18n="pidTuningThrottleLimitType" style="float:left;"></div>
<div i18n="pidTuningThrottleLimitType" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningThrottleLimitTypeTip"></div>
</div>
</th>
<th>
<div>
<div i18n="pidTuningThrottleLimitPercent" style="float:left;"></div>
<div i18n="pidTuningThrottleLimitPercent" class="float-left"></div>
<div class="helpicon cf_tip" i18n_title="pidTuningThrottleLimitPercentTip"></div>
</div>
</th>
@ -1469,4 +1500,16 @@
<a href="#" class="dialogCopyProfile-cancelbtn regular-button" i18n="dialogCopyProfileClose"></a>
</div>
</dialog>
<dialog class="dialogRatesType">
<h3 i18n="dialogRatesTypeTitle"></h3>
<div class="content">
<div i18n="dialogRatesTypeNote" style="margin-top: 10px"></div>
</div>
<div class="buttons">
<a href="#" class="dialogRatesType-confirmbtn regular-button" i18n="dialogRatesTypeConfirm"></a>
<a href="#" class="dialogRatesType-cancelbtn regular-button" i18n="dialogRatesTypeCancel"></a>
</div>
</dialog>
</div>