Práctica 2: Montaje y calibración del vehículo



En esta práctica se realizará un montaje básico para un coche RC autónomo, así cómo todas las configuraciones de software pertinentes.
Este proyecto inicial permitirá una familirización de la arquitectura, componentes y metodología para el correcto desempeño y posterior avance hacia la siguiente fase del proyecto (Versión II).

Montaje del Rover:


Para el montaje del rover, se ha seguido el siguiente video: https://drive.google.com/drive/folders/1cz1kEKK3jaF2xay1wRyYYSnY_0WoKLUQ

En el centro colocaremos el ardupilot, con los acelerómetros. Alineados con estos y al frente, se colocará el receptor GPS con compás apuntando hacia delante cómo se indica en las instrucciones.
Por otro lado se distribuirán los otros componente aprovechando el espacio. haciendo especial hincapié en mantener las antenas receptoras del control remoto perpendiculares entre ellas.

Por otro lado conectaremos el módulo de alimentación Pixhawk power brick de tal forma que por la entrada esté conectado a la batería y por la salida tengamos una Y que prorciona un circuito paralelo. Conectando una de las salidas al BEC que ya viene por defecto con el coche.

Ahora solo queda enchufar los distintos componentes al ardupilot, teniendo en cuenta la polaridad de los cables (seguir el código de colores mostrado en la siguiente imagen):

  1. Receptor de la emisora RC Frsky X8R
  2. canal 3, acelerador (se conecta al ESC)
  3. canal 1, servo de dirección
  4. Salida del bloque de alimentación Pixhawk power brick
  5. Buzzer
  6. Antena de telemetría mRobotics Sik Telemetry Radio 433 MHz
  7. Conector del modulo GPS+Compás Here 2 RTK GPS receiver

A continuación se mostrará el resultado final:

Finalmente solo nos queda instalar el firmware, para ello tendremos que ir a Setup y luego en Install firmware seleccionar el rover. Importante recordar que el rover debe estar conectado en todo momento mediante USB al Mission Planener.



Calibración del Rover:

Antes de nada, es importante tener en mente que a diferencia del tutorial de la asignatura, nosotros usaremos el GPS y compás mediante un BUS CAN, para que todo funcione correctamente hay que seguir los siguientes pasos proporcionados en la Web Oficial

Una vez realizado el paso anterior, podemos proceder a la calibración de los acelerómetros y el compás ambos dentro del apartado de Setup, Accel Calibration y Compás, el proceso es sencillo solo hace falta seguir las instrucciones que van saliendo en los menús contextuales.



Configuración de la emisora


Configuración de la emisora:

Para la configuración de la emisora, utilizaremos OpenTX, alternativamente, también se podría configurar directamente la emisora, usando su interfaz y pantalla. Seguiremos el tutorial, optando por la primera solución, no obstante, es importante saber usar la interfaz de nuestra emisora y cómo programar esta directamente. Ya que no todas las emisoras soportan OpenTX, ni siempre podemos conectarnos a un PC para realizar cambios en ela configuración.

Una vez instalado el OpenTX compatible con la Versión del firmware de nuestra emisora, procederemos a crear un perfil para nuestra misión.
Al crear nuestro primer perfil, tener en cuenta que estamos trabajando con una Versión más moderna del firmware y que ciertas cosas se muestran algo distintas del tutorial de la asignatura. Una de ellas es cómo aparece la Taranis plus en la lista de emisoras.

Después de haber realizado el paso anterior, se nos mostrará una nueva entrada en la lista de modelos configurados por la emisora:

Ahora en este menú procederemos con un click derecho sobre nuestro nuevo modelo para poder modificar la configuración de este pulsando sobre edit.
Se nos mostrará la siguiente pantalla:

Seguidamente, iremos a Inputs para modificar los canales yendo a Mixes de tal forma que queden así:


Desde aquí, podremos modificar los canales, añadir entradas, crear mezclas...
Debería quedar un setup parecido al mostrado, importante remarcar que he añadido una funcionalidad en la emisora que no se menciona en los tutoriales:

Bloqueador del gas (canal 3):

De mi experiencia con el aeromodelismo, puedo afirmar que no tener bloqueado un motor brushless que mueve una élice es un peligro, ya que con un simple toque accidental sobre la radio en el acelerador o bien moverlo pensando que nuestro modelo se encuentra apagado, puede provocar graves heridas, laceraciones, pérdidas de miembros y daños materiales.
Con un coche se elimina el riesgo de la "turbo-mix" pero sigue siendo peligroso, también nos puede ahorrar tener que ir corriendo detrás de él en caso de que le hayamos dado gas sin querer o que la señal recibida no sea del todo limpia, ya que ante cualquier incidencia con un simple botón lo podemos parar.
Finalmente, podemos comprobar todos estos cambios en el emulador de la emisora, y ver la salida de los canales. Una vez estemos contentos con el resultado podemos pasar a la parte del emparejamiento entre el receptor y la emisora de radio control.

Primero de todo seleccionaremos nuestro modelo Rover1, en los tutoriales se explica la calibración del PWM, de todas formas de mi experiencia es una tema un poco irrelevante. Solo se ha calibrado el canal 3 ya que los demás se encontraban en un estado aceptable. Para una comprensión mayor, así cómo para un óptimo uso recomiendo descargar el manual de la emisora
Para el bindeo (emparejamiento) entre el receptor y la emisora, por un lado nos aseguraremos que esté activado la opción de módulo interno, seleccionaremos el modelo de receptor adecuado. desconectaremos el receptor del modelo, dejándolo de alimentar y pulsaremos un botón , sin dejar de presionar el botón volveremos a dar alimentación al receptor, esto provocará que el receptor entre en modo bindeo, Apareciendo así un parpadeo intermitente de una luz verde.
Por otro lado, le daremos a bindear a la emisora. El proceso debería tardar menos de un minuto, después de este, el patrón de las LEDs del receptor deberían cambiar.
Para terminar, iremos a Mission Planer para calibrar la radio y asignar a los botones las funcionalidades pertinentes.
Primeo de todo, con nuestro vehículo conectado a Mission Planer, iremos a SETUP Radio calibration:

Moveremos todos los ejes y botones asignados.
Ahora en Flight Modes, asignaremos a los botones que habíamos reservado para los modos del sistema autónomo un modo de vuelo determinado:

Para terminar, iremos a Basic Tuning y en RC7 seleccionaremos ArmDisamr y le daremos a Write Params

IMPORTANTE:

Ardupilot ha heredado de versiones anteriores el requerimiento de un Safety Switch, el cual hoy en dia no es necesario en las operaciones ya que para ello existe el botón de armado-desarmado.
Sin embargo, es necesario tenerlo en cuenta para poder armar el rover, para ello con el dron conectado, ir a CONFIG y en Full Parameter List poner a 0 (deshabilitar) el parámetro BRD_SAFETYENABLE



Pruebas

Una vez hemos llegado a este punto, Armamos el rover (alimentado por la batería) y dentro del laboratorio en modo manual probamos el correcto funcionamiento.
Comprobado que todo funciona correctamente, se procede al diseño de la primera misión que consistirá en un rectángulo para probar el correcto funcionamiento de los diferentes modos de ardupilot.
El primer intento salió satisfactorio, luego pasamos de 1 m/s a 3 m/s pero tube problemas ya que me falta familiarization con los modos de ardupilot así como con la precisión del rover al hacer giros cerrados.

Luego se pasó a una configuración de una velocidad de 1.5 m/s y este fué el resultado, en el wyp 4 se armó el RTL:

Análisis de la telemetría

"

Una vez realizado el primer test satisfactorio, podemos analizar la telemetría.
La telemetría se guarda en la mircro SD ubicada en el ardupilot en formato .bin o bien en formto .tlog dentro de una carpeta del repositorio de Mission Planner. Se trabajará con esta segunda opción, además puede ser más interesante que la prime ya que ante la pérdida de la aeronave o vehículo podemos analizar los datos intentar entender la causa del fallo e incluso optar a recuperar el vehículo, sabiendo su última posción.
Para ello iremos en la pestaña de DATA y luego en la seccón de Telemetry Logs donde pulsaremos Load Log, luego se abrirá un explorador de archivos dónde podremos seleccionar el .tlog en función de la fecha y hora en la que se realizó la misión.

Una vez cargado el fichero, se pueden realizar varias acciones: Podemos reproducir la misión pulsando Play o bien pulsar Tlog > Kml or Graph que nos permite realizar un análisis más profundo:

De aquí podemos destacar las siguientes opciones más destacables:

  • Generate KML + GPX: Como su nombre indica generan un fichero que es legible por equipos GPS y Google Earth, lo que permite una visualización 3D de la misión
  • Convert to Text, Convert to CSV: Generan un resultado prácticamente idéntico, donde se guarda en cada linea un paquete recibido por la telemetría, al contrario de lo que se pensaria con el CSV, no hay una estructura de tabla.
    Es por ello que se necesita procesar el archivo cosa que hablaré de ello más adelante.
  • Graph Log: Es la forma más fácil de analizar los datos. Tiene el inconveniente de estar ligado a Mission Planner y que el eje x siempre muestra la fecha y ningún otro parámetro será valido pare este eje.
  • Create a Matlab File:Para algunos quizás es más conveniente, genera un archivo .mat que se puede exportar como una variable. Los campos de este objeto son una tabla de 2 columnas con la relación valor : fecha

Generate KML + GPX:

Graph Log

Este método nos permite seleccionar los valores que deseamos dentro de cada clase del mavlog para plotearlos:

Aquí se puede ver un ejemplo con el yaw, roll y pitch de la clase AHRS2:

Trabajar con el log directamente:

Podemos trabajar con el .tlog directamente usando el proyecto pymavlink. El log exportado a csv se mostraría así:

python mavlogdump.py mav.tlog --t AHRS2 --format CSV -o file > file.txt

Después del comando anterior el log queda filtrado:

El script nos genera un .txt donde se filtra por clase (por ejemplo AHRS2, en el caso anterior) donde cada linia sigue siendo un mensaje enviado.
Haciendo un tratado adecuado podemos procesar la información, es importante tener en cuenta que el txt se guarda en utf-16 y por tanto o bien cambiamos la codificación del .txt o debemos agregar encoding='utf-16-le' como parámetro al abrir el fichero para así leerlo correctamente:

import datetime
import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# encoding='utf-16-le'

fichero = open('file.txt', 'r')
linia =fichero.readline()
lat = []
lon = []
alt = []
roll = []
pitch =[]
yaw = []
time = []

while linia != '':
    cachos = linia.split(' ')
    latitude = float(cachos[17].replace(',',''))/1e7
    longitude = float(cachos[20].replace('}',''))/1e7
    altitude = float(cachos[14].replace(',',''))
    date_time = datetime.datetime.strptime(cachos[0]+ ' '+ cachos[1][:-1], '%Y-%m-%d %H:%M:%S.%f')
    Roll =  float(cachos[5].replace(',','')) *180/math.pi
    Pitch =  float(cachos[8].replace(',',''))*180/math.pi
    Yaw =  float(cachos[11].replace(',',''))*180/math.pi
    lat.append(latitude)
    lon.append(longitude)
    alt.append(altitude)
    pitch.append(Pitch)
    roll.append(Roll)
    yaw.append(Yaw)
    time.append(date_time)
    linia=fichero.readline()

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')
ax.plot(lat,lon, alt)
plt.show()
plt.plot(lat,lon)
plt.show()

plt.plot(time,pitch)
plt.plot(time,roll)
plt.plot(time,yaw)
plt.show()
                
El cual nos muestra las siguiente gráficas muy parecidas a las ya mostradas anteriormente:

Ajuste del PID y resultados:

El primer intento para probar el los ajustes del PID se tuvo que cancelar debido a condiciones meteorológicas adversas.
El objetivo de ajustar el controlador es mejorar el resultado en su control (ya sea en respuesta, valor final y oscilaciones durante la respuesta impulsional).
Los parámetros a variar son:

Campo:Valor:
Trhottel PID P = 0.02, I = 0.25, D=0
CUISE_THROTTLE 20%
ATC_ACC_MAX 1 m/s
Steering PID P=0.4, I=0.4, D=0
NAVL1_PERIOD 6s
NAVL1_DAMP 0.85
FF 1.1
TURN_RADIUS 0.67m
TURN_MAX_G 0.6G
WP_RADIUIS 1m
WP_OVERSHOOT 1.6m

Al probar esta nueva configuración he tenido varios problemas, principalmente con el armado del rover, debido a errores con el compás y el GPS, deduzco que era debido a un fallo con el bus de datos.
Otro ítem importante a tener en cuenta es que este variador tiene diferentes modos y es imprescindible configurar el modo cada vez que alimentamos el vehículo, ya que no tiene memoria persistente.
Al cabo de 1,5h intentando solventar los problemas logré armar el rover, repitiendo el primer caso, los resultados salieron bastante aceptables. Sin embargo, cunado realicé los cambios el comportamiento del rover fué algo extraño.
El rover realizaba los tramos zig-zagueando y se iba chocando con los obstáculos (arboles). Ya con la batería dando lecturas de voltaje bajo decidí abandonar los intentos.
A continuación se mostrarán algunos videos de su comportamiento: