Una de las partes principales de los sistemas de navegacion de cualquier UAV (avion, multicoptero, autos, etc.) el sistema encargado de detectar la horientacion del UAV respecto de una referencia determinada. Generalmente la referencia tomada es La Tierra. Estos sistemas están cmpuestos por uno o varios sensores, entre los cuales se destacan los acelerómetros y gyróscopos. Estos pueden venir en unidades separadas o integrados en una sola placa. A dichas unidades se las conoce con el nombre de IMU (inertial measurement unit, unidad de medicion inercial). En my caso estoy trabajando con una IMU denominada por DealExtreme como GY-80. En concreto es esta:
GY-80Aparte de la IMU es necesario algun sistema programable (uC) en el cual se realizarán los cálculos necesarios para, interpretando las mediciones de los sensores, obtener la orientacion del UAV. Hay varios "algoritmos" para realizar esto, 2 o 3 de ellos muy estudiados y utilizados. Estos son:
La fusion de los datos con filtro Kalman- Los ángulos de Euler (Pitch o cabeceo,
Roll o giñada y Yaw o banqueo Roll o banqueo y Yaw o guiñada) - La matriz de cosenos directores
- Los quaterniones
El primero y el tercero desconozco por completo, sé que se utilizan como estrategia para obtener la orientacion del UAV, pero nunca los estudie.
Los ángulo de euler son ampliamente conocido: banqueo, cabeceo, guiñada.
La ventaja de este sistema es que es muy intuitivo y la representación de la actitud solo contiene 3 parámetros.
pero su desventaja es que tiene una singularidad por ejemplo para un angulo de cabeceo de +-90 grados, sucede el "bloqueo de cardan" o "gimbal lock"
Donde los ejes de banqueo y guiñada coinciden, provocando que el banqueo y guiñada se comporten igual. en este video se puede apreciar mejor.
Los cuaterniones tampoco presentan singularidad además la representación de la actitud solo contiene 4 parámetros, pero también no es intuitiva.
Gracias PCCMEn mi caso estoy trabajando en la implementacion de la Matriz de Cosenos Directores (DCM) en un uC ARM cortex M3 (LPC1769).
Sobre los sensores de mi IMU iré publicando informacion en los sub foros de cada tipo de sensor. Aquí ire tratando de poner, en un comienzo, todo lo relacionado con la DCM y su implementacion en el ARM.
Bien comencemos con la piedra fundamental del los sistemas de navegacion, la DCM.
Como punto de partida, estos son las dos "Biblias de la DCM" con las que luche durante el último mes (pueden ver mis comentarios en el blog de Starlino...):
DCM por StarlinoDCM por William PremerlaniEl primer link tiene mucha álgebra, esta muy bien explicado, con buenos gráficos. En el mismo blog podemos encontrar la implementacion de un sistema de control de un quad, hecho en base a un dsPic.
El segundo es de un groso total, arranco con ese "bosquejo" y hoy tiene un sistema de navegacion opensource super avanzado, MatrixPilot. Esta más pensado para aviones, pero es extensible a otros UAV's. menos álgebra que Starlino y quizás más fácil de leer.
Yo voy a intentar resumir un poco en español lo que de ellos aprendí.
Bueno, en el control de un UAV tenemos que tener presente que existen dos sistemas o marcos de referencia. Uno que podemos decir que es fijo y es con el que estamos acostumbrados a trabajar en física, La Tierra y otro, vinculado al cuerpo (body) del UAV, el cual se está rotando constantemente junto al UAV. Aquí cabe una aclaracion, la DCM está pensada para obtener la ORIENTACION, no la posicion del UAV. Debemos trabajar en como obtener la orientacion del sistema de referencia en el cuerpo del UAV visto desde el sistema de referencia de la tierra.
Notar que ambos marcos de referencia poseen el mismo origen O. En la imagen tambien se definen los vectores unidad (i, j, K) del marco del UAV así como I, J, K los vecotres unidad, codireccionales con los ejes X, Y y Z del marco de la Tierra.
La notacion vectorial en 3 dimensiones de estos versores (vectores con unidad 1) es I=[1 0 0], J=[0 1 0], k=[0 0 1]
El versor i en el marco de referencia global (la tierra) ig = [I.i, J.i, K.i] en este caso I.i es el
producto escalar entre el versor I y el versor i. Como el modulo de I y de i es 1, tambien podemos escribirlo como ig=[cos(I,i), cos(J,i), cos(K,i)]
De igual modo podemos decir que el versor j escrito en el marco de referencia de la tierra será jg = [J.i, J.j, J.k] y kg = [K.i, K.j, K.k]
uniendo esto podemos escribir lo siguiente:
Esa matriz (denominada Matriz de Cosenos Directores) posee una gran importancia ya que permite transformar un punto escrito en el marco de referncia del UAV, al marco de referncia global. Aparte es la que describe la rotacion de un marco de referencia relativo al otro. En otras palabras, con dicha matriz podemos conocer la horientacion del UAV respecto de la Tierra.
Un vector arbitrario expresado en el sistema de coordenadas del UAV, B, puede ser escrito en el sistema de referencia de La Tierra, G, (el cual está rotado, girado) de la siguiente forma:
En este punto es conveniente echarle una mirada a
Wikipedia - Matriz de rotacionesya que es un poco lo que hemos visto.
De ese artículo lo más interesante es esto:
Ahí se define una matriz de 3x3 (al igual que la DCM) con las rotaciones básicas, es decir las rotaciones alrededor de un solo eje.
Si tomamos los marcos de referencia, girados uno de otro, como en la siguiente figura:
la matriz de rotacion completa, combinando las tres rotaciones quedará así:
En teoría la matriz DCM se calcula computando todas esas funciones trigonométricas... por suerte alguien estudio un poco más el tema y buscó algunas simplificaciones.
Si bien la matriz DCM parece tener 9 parámetros, solo 3 son independientes. Esto es debido a que cada vector (fila) tiene longitud 1 y es perpendicular a las otras dos filas. Esto restringe a solo 3 parámetros independientes.
Otro punto importante es que si tenemos una matriz DCM1 que permite ir del punto A al punto B y tenemos otra matriz DCM2 que permite ir del punto B al punto C, entonces la matric DCM3 = DCM1 . DCM2. Esto es, se pueden componer rotaciones multiplicandolas unas a otras.
Lo que nos está faltando visualizar es como intervienen las mediciones de nuestros sensores en la construccion de la matríz DCM. Antes veamos unas propiedades de las operaciones con vectores.
producto escalar de vectores. El producto escalar (dot product) de los vectorea A y B, es un escalar calculado a partir de la multiplicacion matricial de los vectores:
A . B = [Ax Ay Az] . [Bx By Bz] = Ax.Bx + Ay.By + Az.Bz
También se puede escribir el producto escalar como
A . B = |A|.|B|.cos(AB)
esto es el producto entre las magnitudes (longitud) de los vetores y el coseno del ángulo entre ellos.
Producto vectorial de vectores. El producto vectorial (cross product) de losvectores Ay B, es un vector C dado por la siguiente forma:
Cx = Ay.Bz - Az.By
Cy = Az.Bx - Ax.Bz
Cz = Ax.By - Ay.Bx
El vector C será un vector perpendicular al plano formado por los vectores A y B.
Tambien podemos escribir: |C| = |A ^ B| = |A|.|B|.Sin(AB) Esto es, la longitud del vector C es igual al producto entre las longitudes del vector A, el B y el seno del ángulo entre ellos.
Teniendo en cuenta esto estamos en condiciones de incluir los datos obtenidos de los gyróscopos para el cálculo de la DCM.
Por cuestiones de orden, el funcionamiento de los giróscopos estará
Aquí