FlightCtrl Configuración de Multiwii con frames "asimétricos"

Tema en 'Arduino / Multiwii' iniciado por rortega, 24 Feb 2013.

  1. rortega Gurú FPV

    rortega
    Registrado:
    20 Abr 2012
    Mensajes:
    5.561
    Me Gusta recibidos:
    5
    Ya hace tiempo que configuré Multiwii para el frame tipo spider que compré a Marakato en su día. Me ha parecido interesante compartir como lo hice porque podría serle útil a alguien.

    La idea fundamentalmente la tomé de este link: Custom MultiWii Motor Mixes donde se explica la metodología a seguir para configurar Multiwii con frames donde los motores no están situados todos a la misma distancia del centro.

    Normalmente se tiende a poner la controladora en el centro, pero en en este tipo de frames el centro no es tan fácil de calcular. Habría que realizar algunos cálculos matemáticos, que podrían no ser tan sencillos, para determinar con exactitud ese centro. Y una vez calculado, nos podríamos ver obligados a situar la controladora de tal manera que podría condicionar la situación de otros componentes en lugares poco apropiados.

    En mi caso, mi frame tiene un lugar idóneo para situar la controladora, donde se encontrará perfectamente protegida y el resto de los componentes podrán orbitar alrededor de ella. Además, los agujeros para posibles anclajes parecen que estubieran realziados a conciencia para colocar allí la controladora. Pero este punto, si cogemos el metro y medimos, no está en el centro justo de los 4 motores.

    [​IMG]

    Con multiwii, este problema se resuelve con la función PIDMIX, que se encuentra definida en el archivo Output.ino. Se usa para decirle a Multiwii la fuerza que tiene que aplicar a cada motor en función de las coordenadas donde se encuentra situado con respecto a la controladora.

    Pues bien, nos ponemos manos a la obra y, metro en mano, tomamos las medidas, tomando como punto (0,0) el lugar en el que he puesto la controladora.

    [​IMG]

    Digamos que es un esquema de la posición de los motores con respecto al lugar donde tengo colocada la controladora (el punto rojo en la zona central).

    Nota: No hagáis casos a las anotaciones con bolígrafo de color azul, ese sería el centor exacto entre los 4 motores, que coincide con el centro de la circunferencia que pasa por todos ellos.

    Los motores los enumeré del 1 al 4. El 1 y el 2 son los delanteros (izquierdo y derecho respectivamente) y el 3 y el 4 los traseros (izquierdo y derecho respectivamente).

    El punto rojo del interior del esquema es el lugar donde tengo la controladora situada. Tomando ese punto como el punto (0,0) del sistema de referencias, he anotado las coordenadas de cada uno de los motores según la distancia real en centímetros.

    De todas las medidas, la mayor es 22,8 cm, así que todos los datos trasladados a la función PIDMIX están calculados proporcionalmente a dicha medida. Podría haber tomado cualquiera de las otras medidas como referencia.

    En el archivo Output.ino, esto es lo que tengo puesto:

    #ifdef QUADX
    motor[0] = PIDMIX(-17/22.8,1,-24/22.8); //REAR_R
    motor[1] = PIDMIX(-24/22.8,-13.7/22.8,24/22.8); //FRONT_R
    motor[2] = PIDMIX(17/22.8,1,17/22.8); // REAR_L
    motor[3] = PIDMIX(24/22.8,-13.7/22.8,-24/22.8); //FRONT_L
    #endif

    La correspondencia con lo que tengo anotado en mi cuaderno es:

    motor[0] = motor nº 4 (x4,y4)
    morot[1] = motor nº 2 (x2,y2)
    motor[2] = motor nº 3 (x3,y3)
    motor[4] = motor nº 1 (x1,y1)

    La función PIDMIX está definida de la siguiente forma:

    “motor['motor number'] = PIDMIX( ‘- X-Coordinate’, ‘- Y-Coordinate’, ‘Rotation (‘clockwise ‘-’, counter-clockwise’+')’);

    Siguiendo la correspondencia con el motor nº 1 de mi cuaderno:

    M = 22.8
    X1 = -24
    Y1 = 13,7

    motor[3] = PIDMIX( (-1)*X1/M , (-1)*Y1/M , X1/M) = (24/22.8, -13,7/22.8, -24/22.8)

    Nota: El asterisco * es el símbolo de multiplicación en programación. Lo que se está haciendo es en multiplicar por -1 el valor de la coordenada X1 e Y1. Si teníamos X1= -24 cm, entonces (-1)*X1 = 24, sencillamente estamos cambiando de signo el valor.

    En lugar de poner los resultados puse la operación de división, así el dato una vez truncado/redondeado y pasado al array de valores enteros axisPID, definido en Multiwii.ino, sería lo más exacto posible que si lo truncaba/redondeaba yo directamente.

    El parámetro counter-clockwise se utiliza para calcular la proporción de fuerza que se aplica a cada motor cuando pulsamos el botón del yaw. Este si que se calcula con el valor de X real.

    Espero que os sea útil. A mí me funcionó y mi quad vuela de maravilla.
     

    Adjuntos:

    • PIDMIX.jpg
      PIDMIX.jpg
      Tamaño de archivo:
      147,5 KB
      Visitas:
      416
  2. monzon Maestro FPV

    monzon
    Registrado:
    24 Feb 2011
    Mensajes:
    2.352
    Me Gusta recibidos:
    0
    hola hbaer que no consigo ajustar mi xspider y buscando te encotre...
    pues este tema era precisamente el que buscaba , pero no me claro , çhaber si es el trozo de codigo donde tendria que poner las medidas del mio
    #ifdef QUADX
    motor[0] = PIDMIX(-1,+1,-1); //REAR_R
    motor[1] = PIDMIX(-1,-1,+1); //FRONT_R
    motor[2] = PIDMIX(+1,+1,+1); //REAR_L
    motor[3] = PIDMIX(+1,-1,-1); //FRONT_L

    sistituyo los 1 por mis medidas segun tus indicaciones ??
    saludos
     
  3. rortega Gurú FPV

    rortega
    Registrado:
    20 Abr 2012
    Mensajes:
    5.561
    Me Gusta recibidos:
    5
    Sí, pero ojo con los signos...
     

Compartir esta página