aboutsummaryrefslogtreecommitdiff
path: root/src/modules
diff options
context:
space:
mode:
authorAnton Matosov <anton.matosov@gmail.com>2015-01-05 02:39:13 +0200
committerAnton Matosov <anton.matosov@gmail.com>2015-01-05 12:02:32 +0200
commit2daf30fb251c7dc8d59f0302ecb444b116081931 (patch)
treef291b91c6b0f1adfaddab77f1571e455dcc838fa /src/modules
parent0e4268a80450c3cc9915bdf823fb78981149318b (diff)
downloadpx4-firmware-2daf30fb251c7dc8d59f0302ecb444b116081931.tar.gz
px4-firmware-2daf30fb251c7dc8d59f0302ecb444b116081931.tar.bz2
px4-firmware-2daf30fb251c7dc8d59f0302ecb444b116081931.zip
Rewrote multi_tables with python
Diffstat (limited to 'src/modules')
-rwxr-xr-xsrc/modules/systemlib/mixer/multi_tables156
-rwxr-xr-xsrc/modules/systemlib/mixer/multi_tables.py159
2 files changed, 159 insertions, 156 deletions
diff --git a/src/modules/systemlib/mixer/multi_tables b/src/modules/systemlib/mixer/multi_tables
deleted file mode 100755
index b29bf540a..000000000
--- a/src/modules/systemlib/mixer/multi_tables
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/bin/tclsh
-#
-# Generate multirotor mixer scale tables compatible with the ArduCopter layout
-#
-
-puts "/*"
-puts "* These file is automatically generated by multi_tables - do not edit."
-puts "*/"
-puts ""
-
-proc rad {a} { expr ($a / 360.0) * 2 * acos(-1) }
-proc rcos {a} { expr cos([rad $a])}
-
-
-set quad_x {
- 45 CCW
- -135 CCW
- -45 CW
- 135 CW
-}
-
-set quad_plus {
- 90 CCW
- -90 CCW
- 0 CW
- 180 CW
-}
-
-set quad_v {
- 18.8 0.4242
- -18.8 1.0
- -18.8 -0.4242
- 18.8 -1.0
-}
-
-set quad_wide {
- 68 CCW
- -129 CCW
- -68 CW
- 129 CW
-}
-
-set hex_x {
- 90 CW
- -90 CCW
- -30 CW
- 150 CCW
- 30 CCW
- -150 CW
-}
-
-set hex_plus {
- 0 CW
- 180 CCW
- -120 CW
- 60 CCW
- -60 CCW
- 120 CW
-}
-
-set hex_cox {
- 60 CW
- 60 CCW
- 180 CW
- 180 CCW
- -60 CW
- -60 CCW
-}
-
-set octa_x {
- 22.5 CW
- -157.5 CW
- 67.5 CCW
- 157.5 CCW
- -22.5 CCW
- -112.5 CCW
- -67.5 CW
- 112.5 CW
-}
-
-set octa_plus {
- 0 CW
- 180 CW
- 45 CCW
- 135 CCW
- -45 CCW
- -135 CCW
- -90 CW
- 90 CW
-}
-
-set octa_cox {
- 45 CCW
- -45 CW
- -135 CCW
- 135 CW
- -45 CCW
- 45 CW
- 135 CCW
- -135 CW
-}
-
-set twin_engine {
- 90 0.0
- -90 0.0
-}
-
-
-set tables {quad_x quad_plus quad_v quad_wide hex_x hex_plus hex_cox octa_x octa_plus octa_cox twin_engine}
-
-puts "enum MultirotorMixer::Geometry : unsigned int {"
-foreach table $tables {
- puts [format "\t%s," [string toupper $table]]
-}
-puts "\n\tMAX_GEOMETRY"
-puts "}; // enum MultirotorMixer::Geometry\n"
-
-
-puts "namespace {"
-
-proc factors {a d} { puts [format "\t{ %9.6f, %9.6f, %9.6f }," [rcos [expr $a + 90]] [rcos $a] [expr $d]]}
-
-foreach table $tables {
- puts [format "const MultirotorMixer::Rotor _config_%s\[\] = {" $table]
-
- upvar #0 $table angles
- foreach {angle dir} $angles {
- if {$dir == "CW"} {
- set dd -1.0
- } elseif {$dir == "CCW"} {
- set dd 1.0
- } else {
- set dd $dir
- }
- factors $angle $dd
- }
- puts "};\n"
-}
-
-puts "const MultirotorMixer::Rotor *_config_index\[\] = {"
-foreach table $tables {
- puts [format "\t&_config_%s\[0\]," $table]
-}
-puts "};\n"
-
-puts "const unsigned _config_rotor_count\[\] = {"
-foreach table $tables {
- upvar #0 $table angles
- puts [format "\t%u, /* %s */" [expr [llength $angles] / 2] $table]
-}
-puts "};\n"
-
-puts "} // anonymous namespace\n"
-
-# Newline at the end of file
-puts ""
diff --git a/src/modules/systemlib/mixer/multi_tables.py b/src/modules/systemlib/mixer/multi_tables.py
new file mode 100755
index 000000000..07594ee72
--- /dev/null
+++ b/src/modules/systemlib/mixer/multi_tables.py
@@ -0,0 +1,159 @@
+#!/usr/bin/python
+#
+# Generate multirotor mixer scale tables compatible with the ArduCopter layout
+#
+
+import math
+
+print "/*"
+print "* These file is automatically generated by multi_tables.py - do not edit."
+print "*/"
+print ""
+
+def rcos(angleInRadians):
+ return math.cos(math.radians(angleInRadians))
+
+CCW = 1.0
+CW = -CCW
+
+quad_x = [
+ [ 45, CCW],
+ [-135, CCW],
+ [-45, CW],
+ [135, CW],
+]
+
+quad_plus = [
+ [ 90, CCW],
+ [ -90, CCW],
+ [ 0, CW],
+ [ 180, CW],
+]
+
+quad_v = [
+ [ 18.8, 0.4242],
+ [ -18.8, 1.0],
+ [ -18.8, -0.4242],
+ [ 18.8, -1.0],
+]
+
+quad_wide = [
+ [ 68, CCW],
+ [ -129, CCW],
+ [ -68, CW],
+ [ 129, CW],
+]
+
+hex_x = [
+ [ 90, CW],
+ [ -90, CCW],
+ [ -30, CW],
+ [ 150, CCW],
+ [ 30, CCW],
+ [-150, CW],
+]
+
+hex_plus = [
+ [ 0, CW],
+ [ 180, CCW],
+ [-120, CW],
+ [ 60, CCW],
+ [ -60, CCW],
+ [ 120, CW],
+]
+
+hex_cox = [
+ [ 60, CW],
+ [ 60, CCW],
+ [ 180, CW],
+ [ 180, CCW],
+ [ -60, CW],
+ [ -60, CCW],
+]
+
+octa_x = [
+ [ 22.5, CW],
+ [-157.5, CW],
+ [ 67.5, CCW],
+ [ 157.5, CCW],
+ [ -22.5, CCW],
+ [-112.5, CCW],
+ [ -67.5, CW],
+ [ 112.5, CW],
+]
+
+octa_plus = [
+ [ 0, CW],
+ [ 180, CW],
+ [ 45, CCW],
+ [ 135, CCW],
+ [ -45, CCW],
+ [-135, CCW],
+ [ -90, CW],
+ [ 90, CW],
+]
+
+octa_cox = [
+ [ 45, CCW],
+ [ -45, CW],
+ [-135, CCW],
+ [ 135, CW],
+ [ -45, CCW],
+ [ 45, CW],
+ [ 135, CCW],
+ [-135, CW],
+]
+
+twin_engine = [
+ [ 90, 0.0],
+ [-90, 0.0],
+]
+
+def variableName(variable):
+ for variableName, value in list(globals().iteritems()):
+ if value is variable:
+ return variableName
+
+tables = [quad_x, quad_plus, quad_v, quad_wide, hex_x, hex_plus, hex_cox, octa_x, octa_plus, octa_cox, twin_engine]
+
+
+def printEnum():
+ print "enum MultirotorMixer::Geometry : unsigned int {"
+ for table in tables:
+ print "\t{},".format(variableName(table).upper())
+
+ print "\n\tMAX_GEOMETRY"
+ print "}; // enum MultirotorMixer::Geometry\n"
+
+def printScaleTables():
+ for table in tables:
+ print "const MultirotorMixer::Rotor _config_{}[] = {{".format(variableName(table))
+ for (angle, yawScale) in table:
+ rollScale = rcos(angle + 90)
+ pitchScale = rcos(angle)
+ print "\t{{ {:9f}, {:9f}, {:9f} }},".format(rollScale, pitchScale, yawScale)
+ print "};\n"
+
+def printScaleTablesIndex():
+ print "const MultirotorMixer::Rotor *_config_index[] = {"
+ for table in tables:
+ print "\t&_config_{}[0],".format(variableName(table))
+ print "};\n"
+
+
+def printScaleTablesCounts():
+ print "const unsigned _config_rotor_count[] = {"
+ for table in tables:
+ print "\t{}, /* {} */".format(len(table), variableName(table))
+ print "};\n"
+
+
+
+printEnum()
+
+print "namespace {"
+printScaleTables()
+printScaleTablesIndex()
+printScaleTablesCounts()
+
+print "} // anonymous namespace\n"