Files
PX4-Autopilot/src/modules/systemlib/mixer/multi_tables
T
Anton Matosov 21b45ae86b Removed extension for multi_tables to not affect its users
Fixed dependencies for the mixer_multirotor.cpp from all the modules
2015-01-05 12:02:32 +02:00

160 lines
2.8 KiB
Python
Executable File

#!/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"