From 2756c7661318d3ddf066b41775f390a68c9fc526 Mon Sep 17 00:00:00 2001 From: Daniel Agar Date: Thu, 11 Jan 2018 15:56:15 -0500 Subject: [PATCH] mixer lib delete old multi_tables.py and cleanup cmake (#8658) --- src/lib/mixer/CMakeLists.txt | 84 +++++----- src/lib/mixer/multi_tables.py | 284 ---------------------------------- 2 files changed, 37 insertions(+), 331 deletions(-) delete mode 100755 src/lib/mixer/multi_tables.py diff --git a/src/lib/mixer/CMakeLists.txt b/src/lib/mixer/CMakeLists.txt index cf5ca0ce98..e0432aa2e6 100644 --- a/src/lib/mixer/CMakeLists.txt +++ b/src/lib/mixer/CMakeLists.txt @@ -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 : diff --git a/src/lib/mixer/multi_tables.py b/src/lib/mixer/multi_tables.py deleted file mode 100755 index ecd69e2e27..0000000000 --- a/src/lib/mixer/multi_tables.py +++ /dev/null @@ -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("")