mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-15 07:03:34 +08:00
mixer lib delete old multi_tables.py and cleanup cmake (#8658)
This commit is contained in:
@@ -31,30 +31,28 @@
|
||||
#
|
||||
############################################################################
|
||||
|
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR})
|
||||
|
||||
set(geometry_files
|
||||
quad_x.toml
|
||||
quad_h.toml
|
||||
quad_plus.toml
|
||||
quad_wide.toml
|
||||
quad_deadcat.toml
|
||||
quad_vtail.toml
|
||||
quad_s250aq.toml
|
||||
quad_y.toml
|
||||
quad_x_pusher.toml
|
||||
hex_x.toml
|
||||
hex_plus.toml
|
||||
dodeca_bottom_cox.toml
|
||||
dodeca_top_cox.toml
|
||||
hex_cox.toml
|
||||
hex_plus.toml
|
||||
hex_t.toml
|
||||
octa_x.toml
|
||||
octa_plus.toml
|
||||
hex_x.toml
|
||||
octa_cox.toml
|
||||
octa_cox_wide.toml
|
||||
twin_engine.toml
|
||||
octa_plus.toml
|
||||
octa_x.toml
|
||||
quad_deadcat.toml
|
||||
quad_h.toml
|
||||
quad_plus.toml
|
||||
quad_s250aq.toml
|
||||
quad_vtail.toml
|
||||
quad_wide.toml
|
||||
quad_x.toml
|
||||
quad_x_pusher.toml
|
||||
quad_y.toml
|
||||
tri_y.toml
|
||||
dodeca_top_cox.toml
|
||||
dodeca_bottom_cox.toml
|
||||
twin_engine.toml
|
||||
)
|
||||
|
||||
set(geometries_list)
|
||||
@@ -62,39 +60,34 @@ foreach(geom_file ${geometry_files})
|
||||
list(APPEND geometries_list ${CMAKE_CURRENT_SOURCE_DIR}/geometries/${geom_file})
|
||||
endforeach()
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py -f ${geometries_list} -o ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor.generated.h
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py ${geometries_list}
|
||||
)
|
||||
add_custom_target(mixer_gen
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor.generated.h
|
||||
DEPENDS ${geometries_list})
|
||||
set(MIXER_TOOLS ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools)
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_normalized.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py --normalize -f ${geometries_list} -o ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_normalized.generated.h
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py ${geometries_list}
|
||||
# generate mixers and normalize
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${MIXER_TOOLS}/px_generate_mixers.py -f ${geometries_list} -o mixer_multirotor.generated.h
|
||||
DEPENDS ${MIXER_TOOLS}/px_generate_mixers.py ${geometries_list}
|
||||
)
|
||||
add_custom_target(mixer_gen_norm
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_normalized.generated.h
|
||||
DEPENDS ${geometries_list})
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_normalized.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${MIXER_TOOLS}/px_generate_mixers.py --normalize -f ${geometries_list} -o mixer_multirotor_normalized.generated.h
|
||||
DEPENDS ${MIXER_TOOLS}/px_generate_mixers.py ${geometries_list}
|
||||
)
|
||||
add_custom_target(mixer_gen DEPENDS mixer_multirotor.generated.h ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_normalized.generated.h)
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_6dof.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py --sixdof -f ${geometries_list} -o ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_6dof.generated.h
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/geometries/tools/px_generate_mixers.py ${geometries_list}
|
||||
# 6DOF mixers
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_6dof.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${MIXER_TOOLS}/px_generate_mixers.py --sixdof -f ${geometries_list} -o mixer_multirotor_6dof.generated.h
|
||||
DEPENDS ${MIXER_TOOLS}/px_generate_mixers.py ${geometries_list}
|
||||
)
|
||||
add_custom_target(mixer_gen_6dof
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_6dof.generated.h
|
||||
DEPENDS ${geometries_list})
|
||||
add_custom_target(mixer_gen_6dof DEPENDS mixer_multirotor_6dof.generated.h)
|
||||
|
||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_legacy.generated.h
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/multi_tables.py > ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_legacy.generated.h
|
||||
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/multi_tables.py
|
||||
)
|
||||
add_custom_target(mixer_gen_legacy
|
||||
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/mixer_multirotor_legacy.generated.h)
|
||||
|
||||
px4_add_module(
|
||||
MODULE lib__mixer
|
||||
INCLUDES
|
||||
${CMAKE_CURRENT_BINARY_DIR}
|
||||
SRCS
|
||||
mixer.cpp
|
||||
mixer_group.cpp
|
||||
@@ -103,10 +96,7 @@ px4_add_module(
|
||||
mixer_multirotor.cpp
|
||||
mixer_simple.cpp
|
||||
DEPENDS
|
||||
platforms__common
|
||||
mixer_gen
|
||||
mixer_gen_norm
|
||||
mixer_gen_6dof
|
||||
mixer_gen_legacy
|
||||
platforms__common
|
||||
)
|
||||
# vim: set noet ft=cmake fenc=utf-8 ff=unix :
|
||||
|
||||
@@ -1,284 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
############################################################################
|
||||
#
|
||||
# Copyright (c) 2013, 2014 PX4 Development Team. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in
|
||||
# the documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
# 3. Neither the name PX4 nor the names of its contributors may be
|
||||
# used to endorse or promote products derived from this software
|
||||
# without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
# POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
#
|
||||
# Generate multirotor mixer scale tables compatible with the ArduCopter layout
|
||||
#
|
||||
|
||||
# for python2.7 compatibility
|
||||
from __future__ import print_function
|
||||
|
||||
import math
|
||||
|
||||
print("/*")
|
||||
print("* This file is automatically generated by multi_tables - do not edit.")
|
||||
print("*/")
|
||||
print("")
|
||||
print("#ifndef _MIXER_MULTI_TABLES")
|
||||
print("#define _MIXER_MULTI_TABLES")
|
||||
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_h = [
|
||||
[ 45, CW],
|
||||
[-135, CW],
|
||||
[-45, CCW],
|
||||
[135, CCW],
|
||||
]
|
||||
|
||||
quad_plus = [
|
||||
[ 90, CCW],
|
||||
[ -90, CCW],
|
||||
[ 0, CW],
|
||||
[ 180, CW],
|
||||
]
|
||||
|
||||
quad_deadcat = [
|
||||
[ 60, CCW, 1.0],
|
||||
[-125, CCW, 0.92],
|
||||
[ -60, CW, 1.0],
|
||||
[ 125, CW, 0.92],
|
||||
]
|
||||
|
||||
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],
|
||||
]
|
||||
|
||||
quad_s250aq = [
|
||||
[ 59, CCW, 1.0 ],
|
||||
[ -139, CCW, 0.67],
|
||||
[ -59, CW, 1.0 ],
|
||||
[ 139, CW, 0.67],
|
||||
]
|
||||
|
||||
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],
|
||||
]
|
||||
|
||||
hex_t = [
|
||||
[ 43.21, CCW],
|
||||
[ 43.21, CW],
|
||||
[ 180, CW],
|
||||
[ 180, CCW],
|
||||
[ -43.21, CW],
|
||||
[ -43.21, 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],
|
||||
]
|
||||
|
||||
octa_cox_wide = [
|
||||
[ 68, CCW],
|
||||
[ -68, CW],
|
||||
[-129, CCW],
|
||||
[ 129, CW],
|
||||
[ -68, CCW],
|
||||
[ 68, CW],
|
||||
[ 129, CCW],
|
||||
[-129, CW],
|
||||
]
|
||||
|
||||
twin_engine = [
|
||||
[ 90, 0.0],
|
||||
[-90, 0.0],
|
||||
]
|
||||
|
||||
tri_y = [
|
||||
[ 60, 0.0],
|
||||
[ -60, 0.0],
|
||||
[ 180, 0.0],
|
||||
]
|
||||
|
||||
dodeca_top_cox = [
|
||||
[ 90, CW],
|
||||
[ -90, CCW],
|
||||
[ -30, CW],
|
||||
[ 150, CCW],
|
||||
[ 30, CCW],
|
||||
[-150, CW],
|
||||
]
|
||||
|
||||
dodeca_bottom_cox = [
|
||||
[ 90, CCW],
|
||||
[ -90, CW],
|
||||
[ -30, CCW],
|
||||
[ 150, CW],
|
||||
[ 30, CW],
|
||||
[-150, CCW],
|
||||
]
|
||||
|
||||
tables = [quad_x, quad_h, quad_plus, quad_v, quad_wide, quad_s250aq, quad_deadcat,
|
||||
hex_x, hex_plus, hex_cox, hex_t,
|
||||
octa_x, octa_plus, octa_cox, octa_cox_wide,
|
||||
twin_engine, tri_y,
|
||||
dodeca_top_cox, dodeca_bottom_cox]
|
||||
keys = ["4x", "4h", "4+", "4v", "4w", "4s", "4dc",
|
||||
"6x", "6+", "6c", "6t",
|
||||
"8x", "8+", "8c", "8cw",
|
||||
"2-", "3y",
|
||||
"6m", "6a"]
|
||||
|
||||
def variableName(variable):
|
||||
for variableName, value in list(globals().items()):
|
||||
if value is variable:
|
||||
return variableName
|
||||
|
||||
def unpackScales(scalesList):
|
||||
if len(scalesList) == 2:
|
||||
scalesList += [1.0] #Add thrust scale
|
||||
return scalesList
|
||||
|
||||
def printEnum():
|
||||
print("enum class MultirotorGeometry : MultirotorGeometryUnderlyingType {")
|
||||
for table in tables:
|
||||
print("\t{},".format(variableName(table).upper()))
|
||||
|
||||
print("\n\tMAX_GEOMETRY")
|
||||
print("}; // enum class MultirotorGeometry\n")
|
||||
|
||||
def printScaleTables():
|
||||
for table in tables:
|
||||
print("const MultirotorMixer::Rotor _config_{}[] = {{".format(variableName(table)))
|
||||
for row in table:
|
||||
angle, yawScale, thrustScale = unpackScales(row)
|
||||
rollScale = rcos(angle + 90)
|
||||
pitchScale = rcos(angle)
|
||||
print("\t{{ {:9f}, {:9f}, {:9f}, {:9f} }},".format(rollScale, pitchScale, yawScale, thrustScale))
|
||||
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")
|
||||
|
||||
def printScaleTablesKeys():
|
||||
print("const char* _config_key[] = {")
|
||||
for key, table in zip(keys, tables):
|
||||
print("\t\"{}\",\t/* {} */".format(key, variableName(table)))
|
||||
print("};\n")
|
||||
|
||||
printEnum()
|
||||
|
||||
print("namespace {")
|
||||
printScaleTables()
|
||||
printScaleTablesIndex()
|
||||
printScaleTablesCounts()
|
||||
printScaleTablesKeys()
|
||||
|
||||
print("} // anonymous namespace\n")
|
||||
print("#endif /* _MIXER_MULTI_TABLES */")
|
||||
print("")
|
||||
Reference in New Issue
Block a user