Paparazzi UAS v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
motor_mixing_types.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2008-2015 The Paparazzi Team
3 *
4 * This file is part of Paparazzi.
5 *
6 * Paparazzi is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
9 * any later version.
10 *
11 * Paparazzi is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with Paparazzi; see the file COPYING. If not, write to
18 * the Free Software Foundation, 59 Temple Place - Suite 330,
19 * Boston, MA 02111-1307, USA.
20 */
21
26#ifndef MOTOR_MIXING_TYPES_H
27#define MOTOR_MIXING_TYPES_H
28
29#include "generated/airframe.h"
30
31/* already defined common configurations*/
32#define QUAD_PLUS 1
33#define QUAD_X 2
34#define HEXA_X 3
35#define HEXA_PLUS 4
36#define OCTO_X 5
37#define OCTO_PLUS 6
38
39/* set to TRUE to reverse the rotation direction of all motors */
40#if MOTOR_MIXING_REVERSE
41#define MOTOR_YAW_SIGN (-1)
42#else
43#define MOTOR_YAW_SIGN 1
44#endif
45
46#if MOTOR_MIXING_TYPE == QUAD_PLUS
47/*
48 * Quadrotor in plus (+) cross configuration with motor order:
49 * front (CW), right (CCW), back (CW), left (CCW)
50 */
51#define MOTOR_FRONT 0
52#define MOTOR_RIGHT 1
53#define MOTOR_BACK 2
54#define MOTOR_LEFT 3
55#define MOTOR_MIXING_NB_MOTOR 4
56#define MOTOR_MIXING_SCALE 256
57#define MOTOR_MIXING_ROLL_COEF { 0, -256, 0, 256 }
58#define MOTOR_MIXING_PITCH_COEF { 256, 0, -256, 0 }
59#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
60#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256 }
61
62#elif MOTOR_MIXING_TYPE == QUAD_X
63/*
64 * Quadrotor in time cross (X) configuration with motor order:
65 * front left (CW), front right (CCW), back right (CW), back left (CCW)
66 */
67#define MOTOR_FRONT_LEFT 0
68#define MOTOR_FRONT_RIGHT 1
69#define MOTOR_BACK_RIGHT 2
70#define MOTOR_BACK_LEFT 3
71#define MOTOR_MIXING_NB_MOTOR 4
72#define MOTOR_MIXING_SCALE 256
73#define MOTOR_MIXING_ROLL_COEF { 181, -181, -181, 181 }
74#define MOTOR_MIXING_PITCH_COEF { 181, 181, -181, -181 }
75#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
76#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256 }
77
78#elif MOTOR_MIXING_TYPE == HEXA_X
79/*
80 * Hexarotor in time cross (X) configuration with motor order:
81 * front left (CW), front right (CCW), right (CW), back right (CCW), back left (CW), left (CCW)
82 */
83#define MOTOR_FRONT_LEFT 0
84#define MOTOR_FRONT_RIGHT 1
85#define MOTOR_RIGHT 2
86#define MOTOR_BACK_RIGHT 3
87#define MOTOR_BACK_LEFT 4
88#define MOTOR_LEFT 5
89#define MOTOR_MIXING_NB_MOTOR 6
90#define MOTOR_MIXING_SCALE 256
91#define MOTOR_MIXING_ROLL_COEF { 128, -128, -256, -128, 128, 256 }
92#define MOTOR_MIXING_PITCH_COEF { 222, 222, 0, -222, -222, 0 }
93#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
94#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256, 256, 256 }
95
96#elif MOTOR_MIXING_TYPE == HEXA_PLUS
97/*
98 * Hexarotor in plus (+) configuration with motor order:
99 * front (CW), front right (CCW), back right (CW), back (CCW), back left (CW), front left (CCW)
100 */
101#define MOTOR_FRONT 0
102#define MOTOR_FRONT_RIGHT 1
103#define MOTOR_BACK_RIGHT 2
104#define MOTOR_BACK 3
105#define MOTOR_BACK_LEFT 4
106#define MOTOR_FRONT_LEFT 5
107#define MOTOR_MIXING_NB_MOTOR 6
108#define MOTOR_MIXING_SCALE 256
109#define MOTOR_MIXING_ROLL_COEF { 0, -222, -222, 0, 222, 222 }
110#define MOTOR_MIXING_PITCH_COEF { 256, 128, -128, -256, -128, 128 }
111#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
112#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256, 256, 256 }
113
114#elif MOTOR_MIXING_TYPE == OCTO_PLUS
115/*
116 * Hexarotor in plus cross (+) configuration with motor order:
117 * front (CW), front right (CCW), right (CW), back right (CCW),
118 * back (CW), back left (CCW), left (CW), front left (CCW)
119 */
120#define MOTOR_FRONT 0
121#define MOTOR_FRONT_RIGHT 1
122#define MOTOR_RIGHT 2
123#define MOTOR_BACK_RIGHT 3
124#define MOTOR_BACK 4
125#define MOTOR_BACK_LEFT 5
126#define MOTOR_LEFT 6
127#define MOTOR_FRONT_LEFT 7
128#define MOTOR_MIXING_NB_MOTOR 8
129#define MOTOR_MIXING_SCALE 256
130#define MOTOR_MIXING_ROLL_COEF { 0, -181, -256, -181, 0, 181, 256, 181 }
131#define MOTOR_MIXING_PITCH_COEF { 256, 181, 0, -181, -256, -181, 0, 181 }
132#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
133#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256, 256, 256, 256, 256 }
134
135#elif MOTOR_MIXING_TYPE == OCTO_X
136/*
137 * Hexarotor in time cross (X) configuration with motor order:
138 * front left1 (CW), front right1 (CCW), front right2 (CW), back right1 (CCW),
139 * back right2 (CW), back left1 (CCW), back left2 (CW), front left2 (CCW)
140 */
141#define MOTOR_FRONT_LEFT1 0
142#define MOTOR_FRONT_RIGHT1 1
143#define MOTOR_FRONT_RIGHT2 2
144#define MOTOR_BACK_RIGHT1 3
145#define MOTOR_BACK_RIGHT2 4
146#define MOTOR_BACK_LEFT1 5
147#define MOTOR_BACK_LEFT2 6
148#define MOTOR_FRONT_LEFT2 7
149#define MOTOR_MIXING_NB_MOTOR 8
150#define MOTOR_MIXING_SCALE 256
151#define MOTOR_MIXING_ROLL_COEF { 98, -98, -237, -237, -98, 98, 237, 237 }
152#define MOTOR_MIXING_PITCH_COEF { 237, 237, 98, -98, -237, -237, -98, 98 }
153#define MOTOR_MIXING_YAW_COEF { -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128, -MOTOR_YAW_SIGN*128, MOTOR_YAW_SIGN*128 }
154#define MOTOR_MIXING_THRUST_COEF { 256, 256, 256, 256, 256, 256, 256, 256 }
155
156#endif
157
158#endif /* MOTOR_MIXING_TYPES_H */