mirror of
https://gitee.com/xiaohuolufeihua/bizhang_-obav.git
synced 2026-05-22 01:12:31 +00:00
Automated generation of the Geometry enum to make addition of the new multirotor a really simple task
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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]
|
||||
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 "};"
|
||||
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 ""
|
||||
|
||||
Reference in New Issue
Block a user