Quien no ha querido alguna vez hacerse un multicóptero que se salga de lo “normal”? (puede que no todos, pero alguno conocemos..)
Existen modelos con casi cualquier cantidad de motores; con formas de lo más variadas, desde las clásicas Y, X, +, pasando por H y V, y llegando a formas “raras” tipo Spider o con los motores en posiciones de lo más extrañas y variopintas.
Cómo podemos “crear” nuestro propio reparto de fuerzas de motores? es decir, como podemos configurar el firmware para que nuestro multicóptero pueda volar.
Teoría:
Independientemente de la posición de los motores, necesitamos que las fuerzas conjuntas de todos ellos, consigan mantener el multicóptero estable.
Cualquier mezcla de motores depende directamente de sus posiciones relativas al centro de gravedad del chasis. Dependiendo de su ubicación, cada motor necesitará aplicar una fuerza diferente de Pitch y Roll. En otras palabras, cuanto más alejado esté un motor de un eje, más fuerza deberá ejercer para trabajar y viceversa, cuanto más cerca esté un motor menos tendrá que trabajar.
Nota: Las fuerzas para cada motor se expresan en valores porcentuales que multiplicaran los valores de Pitch y Roll definiendo así su fuerza
Calculo por angulos y trigonometría:
Fuente (http://blog.oscarliang.net/custom-motor-output-mix-quadcopter/)
Con este método, todo lo que necesitamos saber son los ángulos entre motor-controladora con respecto al eje de roll y respecto al eje de pitch. No hay necesidad de medir ninguna distancia, por lo tanto, al ser todo cálculo, el resultado será más preciso.
Como ejemplo calculamos los valores de roll y pitch para el motor 0 en un ZMR250 (hay que tener en cuenta que el ZMR no es cuadrado, sino que entre los motores delanteros tenemos 20.25mm y entre los laterales 15.5mm, por eso obtenemos valores diferentes para ºA y ºB).
Primero necesitamos medir los ángulos usando un trasnportador o medidor de ángulos, y tomaremos como denominado el mayor de los dos.
ºA = 51.6
ºB = 38.2
En este caso el valor mayor es el del ángulo A.
Roll: sin(A) / sin(A) = 1
Pitch: sin(B) / sin(A) = 0.6184 / 0.7837 = 0.789
Vemos que los valores obtenidos con los dos sistemas, son muy parecidos.
Cómo sabemos que esto funciona? si miramos más en detalle, veremos que este segundo método se puede pasar al primero.
sin(A) = a / c
sin(B) = b / c
calculando pitch, tenemos sin(B) / sin(A) = (b / c) / (a / c) = b / a.
Para el roll, tenemos sin(A) / sin(A) = (a / c) / (a / c) = a / a.
Este método de cálculo por trigonometría, puede no ser el más sencillo, pero si el más preciso; para los que no se quieran complicar la vida con ángulos y cálculos trigonométricos, aquí va un segundo sistema, más simple y casi igual de eficaz:
Cálculo por distancias de motores a ejes (método usado en los ejemplos):
Para cada motor, mediremos las distancias con el eje de pitch y de roll, y tomaremos la mayor como denominador, por ejemplo en un ZMR250, las distancias serían:
Motor a eje Pitch = 7.75cm
Motor a eje Roll = 10.125cm
(hay que tener en cuenta que el ZMR no es cuadrado, sino que entre los motores delanteros tenemos 20.25mm y entre los laterales 15.5mm de ahi los valores obtenidos)
Vemos que el mayor valor es el de la distancia con el eje de roll, por tanto usaremos ese como denominador, para el motor delantero derecho, los valores serian:
Roll: 10.125/10.125 = 1
Pitch: (-) 7.75/10.125 = -0.765
Ejes Pitch(Cabeceo) y Roll (Alabeo):
Los ejes de Pitch y Roll, serán los que se usen para encontrar y calcular las fuerzas necesarias a aplicar a cada motor.
Para facilitar el entender y calcular los valores y sus signos para cada motor, podemos dibujar en un sistema de ejes:
Eje Yaw (Direccion):
El eje de Yaw es el más simple, ya que sólo depende de la dirección de rotación del motor
– Si el motor gira (CW) (ClockWise – En el sentido de las agujas del rejol), el valor de Yaw es Negativo
– Si el motor gira (CCW) (CounterClockWise – En el sentido inverso de las agujas del rejol), el valor de Yaw es Positivo
Intentaremos explicarlo con unos cuantos ejemplos con los formatos más comunes.
Nota: La numeración y sentido de giro de los motores puedes variar de una controladora a otra…
Quad modo +
Ok, empecemos por un simple quad en modo + .
Como los 4 motores están situados sobre los ejes, todos tendrán un valor de 100% o 0%, en detalle:
Motor | Pitch | Roll | Yaw | |
M0 | Right CCW | 0% | -100% | + |
M1 | Left CCW | 0% | 100% | + |
M2 | Front CW | 100% | 0% | – |
M3 | Back CW | -100% | 0% | – |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M0 = – (0 * Pitch) – (1 * Roll) + Yaw
M1 = + (0 * Pitch) + (1 * Roll) + Yaw
M2 = + (1 * Pitch) + (0 * Roll) – Yaw
M3 = – (1 * Pitch) – (0 * Roll) – Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 0 , 1.0, 0, -1.0, 1.0
mmix 1 , 1.0, 0, 1.0, 1.0
mmix 2 , 1.0, 1.0, 0, -1.0
mmix 3 , 1.0,-1.0, 0, -1.0
Quad modo X
Siguiente ejemplo, Quad en modo X:
NOTA: En este caso, si usamos el valor obtenido de 71% en todos los motores, estariamos reduciendo la potencia total al 71%, por lo que al ser todos iguales, podemos usar un valor del 100%.De esta manera, estaremos manteniendo las mismas proporciones de potencia entre motores, por lo que no tendremos diferencias en la estabilidad, pero estaremos obteniendo toda la potencia posible.
Ahora los motores estan rotados 45º respecto al quad +, rotamos los motores y obtenemos los nuevos valores. En este caso tendrán todos un valor de 71% para pitch y roll. En detalle:
Motor | Pitch | Roll | Yaw | |
M0 | F-Right CCW | +71% | -71% | + |
M1 | B-Left CCW | -71% | +71% | + |
M2 | F-Left CW | +71% | +71% | – |
M3 | B-Right CW | -71% | -71% | – |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M0 = +(0.71 * Pitch) – (0.71 * Roll) + Yaw
M1 = -(0.71 * Pitch) + (0.71 * Roll) + Yaw
M2= +(0.71 * Pitch) + (0.71 * Roll) – Yaw
M3= -(0.71 * Pitch) – (0.71 * Roll) – Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 0 , 1.0, 1.0, -1.0, 1.0
mmix 1 , 1.0,-1.0, 1.0, 1.0
mmix 2 , 1.0, 1.0, 1.0, -1.0
mmix 3 , 1.0,-1.0, -1.0, -1.0
Hexa + en modo clásico
Siguiente ejemplo, el hexa con todos los motores a la misma distancia del centro:
Podemos ver que los 2 motores de la derecha y la izquierda tienen un pitch del 50% y un roll del 87%, mientras que los motores forntal y trasero, sólo tendrán efecto en pitch del 100% y nada para roll.
En detalle:
Motor | Pitch | Roll | Yaw | |
M7 | Front CW | +100% | +0% | + |
M2 | F-Left CCW | +50% | +87% | – |
M1 | B-Left CW | -50% | +87% | + |
M4 | F-Right CCW | +50% | -87% | – |
M3 | B-Right CW | -50% | -87% | + |
M8 | Back CCW | -100% | -0% | – |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M7 = +( 1 * Pitch) + ( 0 * Roll) – Yaw
M2 = +(0.5 * Pitch) + (0.87 * Roll) + Yaw
M1 = -(0.5 * Pitch) + (0.87 * Roll) – Yaw
M4 = +(0.5 * Pitch) – (0.87 * Roll) + Yaw
M3 = -(0.5 * Pitch) – (0.87 * Roll) – Yaw
M8 = -( 1 * Pitch) – ( 0 * Roll) + Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 7 , 1.0, 1.0, 0, 1.0
mmix 2 , 1.0, 0.5, 0.87, -1.0
mmix 1 , 1.0,-0.5, 0.87, 1.0
mmix 4 , 1.0, 0.5,-0.87, -1.0
mmix 3 , 1.0,-0.5,-0.87, 1.0
mmix 8 , 1.0,-1.0, 0, -1.0
Hexa modo H
Siguiente, Hexa en modo H, con tres motores por lado en forma de «H»:
NOTA: Si los lados estuvieran más cercanos, tendríamos que añadir valores menores de roll, ya que tendrían que tener menos fuerza; y lo mismo aplicaria en pitch.
En detalle:
Motor | Pitch | Roll | Yaw | |
M1 | F-Left CW | +100% | +100% | – |
M6 | Left CCW | +0% | +100% | + |
M5 | B-Left CW | -100% | +100% | – |
M2 | F-Right CCW | +100% | -100% | + |
M3 | Right CW | -0% | -100% | – |
M4 | B-Righ CCW | -100% | -100% | + |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M1 = +(1 * Pitch) + (1 * Roll) – Yaw
M6 = +(0 * Pitch) + (1 * Roll) + Yaw
M5 = -(1 * Pitch) + (1 * Roll) – Yaw
M2 = +(1 * Pitch) – (1 * Roll) + Yaw
M3 = -(0 * Pitch) – (1 * Roll) – Yaw
M4 = -(1 * Pitch) – (1 * Roll) + Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 1 , 1.0, 1.0, 1.0, -1.0
mmix 6 , 1.0, 0, 1.0, 1.0
mmix 5 , 1.0,-1.0, 1.0, -1.0
mmix 2 , 1.0, 1.0, 1.0, 1.0
mmix 3 , 1.0, 0, 1.0, -1.0
mmix 4 , 1.0,-1.0, 1.0, 1.0
Octo modo clásico
Octo clásico con un motor delante y otro detrás:
En detalle:
Motor | Pitch | Roll | Yaw | |
M0 | Front CW | 100% | +0% | – |
M1 | F-Right CCW | +71% | -71% | + |
M2 | Right CW | +0% | -100% | – |
M3 | B-Right CCW | -71% | -71% | + |
M6 | Back CW | -0% | -0% | – |
M7 | B-Left CCW | -71% | +71% | + |
M9 | Left CCW | +0% | +100% | – |
M10 | F-Left CCW | +71% | +71% | + |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M0 = +(1 *Pitch) +(0 *Roll) -Yaw
M1 = +(0.71*Pitch) -(0.71*Roll) +Yaw
M2 = +(0 *Pitch) -(1 *Roll) -Yaw
M3 = -(0.71*Pitch) -(0.71*Roll) +Yaw
M6 = -(0 *Pitch) -(0 *Roll) -Yaw
M7 = -(0.71*Pitch) +(0.71*Roll) +Yaw
M9 = +(0 *Pitch) +(1 *Roll) -Yaw
M10= +(0.71*Pitch) +(0.71*Roll) +Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 0 , 1.0, 1.0 , 0, -1.0
mmix 1 , 1.0, 0.71, -0.71, 1.0
mmix 2 , 1.0, 0, -1.0 , -1.0
mmix 3 , 1.0,-0.71, -0.71, 1.0
mmix 6 , 1.0, 0, 0, -1.0
mmix 7 , 1.0,-0.71, 0.71, 1.0
mmix 9 , 1.0, 0, 1.0 , -1.0
mmix 10, 1.0, 0.71, 0.71, 1.0
Octo modo X
Octo en modo X, 2 motores delante, 2 detrás y 2 a cada lado.
Nota:Una vez más nos pasa como en el quad X, que una vez girado, ninguno de los motores tiene la potencia máxima, por lo que para poderla conseguir, deberemos escalar a 100.
Es decir que tendremos proporcionalmente: 92% = 100% y 38% = 42%, obteniendo:
En detalle:
Motor | Pitch | Roll | Yaw | |
M0 | F-Left CW | +92% | -38% | – |
M1 | F-Right CCW | +92% | -38% | + |
M2 | FM-Right CW | +38% | +92% | – |
M3 | FR-Right CCW | -38% | +92% | + |
M6 | B-Right CW | -38% | -92% | – |
M7 | B-Left CCW | +38% | -92% | + |
M9 | BR-Left CW | -92% | +38% | – |
M10 | FM-Left CCW | -92% | -38% | + |
Aplicando estos valores, las fuerzas de cada motor quedarían así:
M0 = +(1 *Pitch) – (0.42 * Roll) -Yaw
M1 = +(1 *Pitch) + (0.42 * Roll) +Yaw
M2 = +(0.42 *Pitch) + (1 * Roll) -Yaw
M3 = -(0.42 *Pitch) + (1 * Roll) +Yaw
M6 = -(0.42 *Pitch) – (1 * Roll) -Yaw
M7 = +(0.42 *Pitch) – (1 * Roll) +Yaw
M9 = -(1 *Pitch) + (0.42 * Roll) -Yaw
M10= -(1 *Pitch) – (0.42 * Roll) +Yaw
La configuración en CleanFlight sería:
mixer custom
mmix reset
mmix 0 , 1.0, 1.0 , -0.42, -1.0
mmix 1 , 1.0, 1.0 , 0.42, 1.0
mmix 2 , 1.0, 0.42, 1.0 , -1.0
mmix 3 , 1.0,-0.42, 1.0 , 1.0
mmix 6 , 1.0,-0.42, -1.0 , -1.0
mmix 7 , 1.0, 0.42, -1.0 , 1.0
mmix 9 , 1.0,-1.0 , 0.42, -1.0
mmix 10, 1.0,-1.0 , -0.42, 1.0
Hasta aquí el misterio de las mezclas de motores en multicópteros.
Esperamos haber aportado algo de luz al tema del mezclado de motores. Ahora ya podéis diseñar vuestro propio aparato con la distribución de motores que queráis.
Más info en https://github.com/cleanflight/cleanflight/blob/master/docs/Mixer.md
Muy buen trabajo
Demasiado y todo, para lerdos como yo,
que me pase todas las clases de trigonometría, castigado en el pasillo :-p
Un amigo y compañero del Club Racbasa, ha encontrado esto que mostrare a continuación…
No quiero dar a entender nada, ni malos entendidos, pues el trabajo de este articulo es ESPECTACULAR
Para todos aquellos que no sean tan buenos con las matemáticas, os adjunto un link en el cual se genera el resultado automáticamente, a partir de la introducción de nuestras medidas físicas del multi.
Ojo con el texto final donde dice:
For cleanflight v1.10 or later, replace ‘cmix’ with ‘mmix’ and number the motors starting from zero instead of one
Remember to also execute ‘save’ to keep the mixer settings!
Enlace:
http://www.iforce2d.net/mixercalc/
Video explicativo:
https://www.youtube.com/watch?v=9FvpT9jH0NA
Gracias Fran, por tu hallazgo.
Buen aporte Miguel. La idea de este artículo es simplemente intentar aclarar el «como» se hacen los cálculos y que hay detrás de una distribución de motores, además de dar una idea al personal de que no basta con montar 4 motores en un par de tubos, que hay algo más 😉 Y si además tenemos herramientas que nos faciliten el proceso, pues mucho mejor!
Pues si es asi, lo veo bien
Pues ya empiezan a vender DDC hasta en el Mediamark
Esta bien que la gente sepa que esto no son juguetes…
Vaya curro….10 puntos Dani….eres un crack
En mi caso, que tengo inutilizadas las salidas 1 y 2 de mi placa Naze, bastaria con realizar el mmixer custom, renumerando los MMix del 2 al 6 ?.
No sé si será tan facil, pero puedes probarlo y nos cuentas! 😉