aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modules/systemlib/mixer/mixer.h18
-rw-r--r--src/modules/systemlib/mixer/mixer_multirotor.cpp7
-rwxr-xr-xsrc/modules/systemlib/mixer/multi_tables166
3 files changed, 94 insertions, 97 deletions
diff --git a/src/modules/systemlib/mixer/mixer.h b/src/modules/systemlib/mixer/mixer.h
index 1fe4380ad..a0197df48 100644
--- a/src/modules/systemlib/mixer/mixer.h
+++ b/src/modules/systemlib/mixer/mixer.h
@@ -453,23 +453,9 @@ public:
/**
* Supported multirotor geometries.
*
- * XXX add more
+ * Values are generated by the multi_tables script and placed to mixer_multirotor.generated.h
*/
- enum Geometry {
- QUAD_X = 0, /**< quad in X configuration */
- QUAD_PLUS, /**< quad in + configuration */
- QUAD_V, /**< quad in V configuration */
- QUAD_WIDE, /**< quad in wide configuration */
- HEX_X, /**< hex in X configuration */
- HEX_PLUS, /**< hex in + configuration */
- HEX_COX,
- OCTA_X,
- OCTA_PLUS,
- OCTA_COX,
- TWIN_ENGINE, /**< VTOL: one engine on each wing */
-
- MAX_GEOMETRY
- };
+ enum Geometry : unsigned int;
/**
* Precalculated rotor mix.
diff --git a/src/modules/systemlib/mixer/mixer_multirotor.cpp b/src/modules/systemlib/mixer/mixer_multirotor.cpp
index bb3868c34..42e3513f4 100644
--- a/src/modules/systemlib/mixer/mixer_multirotor.cpp
+++ b/src/modules/systemlib/mixer/mixer_multirotor.cpp
@@ -55,6 +55,9 @@
#include "mixer.h"
+// This file is generated by the multi_tables script which is invoked during the build process
+#include "mixer_multirotor.generated.h"
+
#define debug(fmt, args...) do { } while(0)
//#define debug(fmt, args...) do { printf("[mixer] " fmt "\n", ##args); } while(0)
//#include <debug.h>
@@ -72,10 +75,6 @@ float constrain(float val, float min, float max)
{
return (val < min) ? min : ((val > max) ? max : val);
}
-
-// This file is generated by the multi_tables script which is invoked during the build process
-#include "mixer_multirotor.generated.h"
-
}
MultirotorMixer::MultirotorMixer(ControlCallback control_cb,
diff --git a/src/modules/systemlib/mixer/multi_tables b/src/modules/systemlib/mixer/multi_tables
index 1f47ca63d..b29bf540a 100755
--- a/src/modules/systemlib/mixer/multi_tables
+++ b/src/modules/systemlib/mixer/multi_tables
@@ -3,9 +3,8 @@
# Generate multirotor mixer scale tables compatible with the ArduCopter layout
#
-
puts "/*"
-puts "* These tables automatically generated by multi_tables - do not edit."
+puts "* These file is automatically generated by multi_tables - do not edit."
puts "*/"
puts ""
@@ -14,17 +13,17 @@ proc rcos {a} { expr cos([rad $a])}
set quad_x {
- 45 CCW
- -135 CCW
- -45 CW
- 135 CW
+ 45 CCW
+ -135 CCW
+ -45 CW
+ 135 CW
}
set quad_plus {
- 90 CCW
- -90 CCW
- 0 CW
- 180 CW
+ 90 CCW
+ -90 CCW
+ 0 CW
+ 180 CW
}
set quad_v {
@@ -35,70 +34,70 @@ set quad_v {
}
set quad_wide {
- 68 CCW
- -129 CCW
- -68 CW
- 129 CW
+ 68 CCW
+ -129 CCW
+ -68 CW
+ 129 CW
}
set hex_x {
- 90 CW
- -90 CCW
- -30 CW
- 150 CCW
- 30 CCW
- -150 CW
+ 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
+ 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
+ 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
+ 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
+ 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
+ 45 CCW
+ -45 CW
+ -135 CCW
+ 135 CW
+ -45 CCW
+ 45 CW
+ 135 CCW
+ -135 CW
}
set twin_engine {
@@ -106,39 +105,52 @@ set twin_engine {
-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 "};"
+ 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\[MultirotorMixer::MAX_GEOMETRY\] = {"
+puts "const MultirotorMixer::Rotor *_config_index\[\] = {"
foreach table $tables {
- puts [format "\t&_config_%s\[0\]," $table]
+ puts [format "\t&_config_%s\[0\]," $table]
}
-puts "};"
+puts "};\n"
-puts "const unsigned _config_rotor_count\[MultirotorMixer::MAX_GEOMETRY\] = {"
+puts "const unsigned _config_rotor_count\[\] = {"
foreach table $tables {
- upvar #0 $table angles
- puts [format "\t%u, /* %s */" [expr [llength $angles] / 2] $table]
+ upvar #0 $table angles
+ puts [format "\t%u, /* %s */" [expr [llength $angles] / 2] $table]
}
-puts "};"
+puts "};\n"
+
+puts "} // anonymous namespace\n"
# Newline at the end of file
puts ""