• No se han encontrado resultados

En este punto compararemos los resultados de la simulación en Simulink con la prueba HIL. El objetivo de este análisis es validar la implementación en el hardware real

mediante comparación directa de los resultados.

Para realizar este análisis se establecerá la siguiente ruta de waypoints a seguir por la aeronave:

122

A B C D E F

X 0 1000 1400 1000 400 -200

Y 0 0 600 1000 800 400

Z 1200 1300 1400 1300 1205 1400

COMPARACIÓN DE TRAYECTORIAS EN EL PLANO XY

En las siguientes figuras se muestran las trayectorias seguidas en el plano horizontal tanto en la simulación en Simulink, como en la prueba HIL.

Simulink:

Figura 79 Trayectoria seguida en Simulink

Simulación HIL:

123 Se puede apreciar como el error en trayectoria realizada con el hardware real es despreciable. Este error viene dado principalmente por el hecho de usar aritmética de punto flotante de 32bits, en lugar de los 64bit que emplea Simulink.

COMPARACIÓN DE TRAYECTORIAS EN EL EJE Z

Simulink:

Figura 81 Altura del UAV en la simulación con Simulink

Simulación HIL:

124 En estas gráficas también se observa que las trayectorias son prácticamente

coincidentes.

Con estos resultados podemos afirmar que la respuesta de la implementación en el microcontrolador LPC2148 con FreeRTOS es válida, cumpliendo los requisitos funcionales de más alto nivel al ser su respuesta muy próxima a la simulación.

En un entorno de producción real, este hardware ya sería integrable en un UAV. A este proceso le seguiría un proceso de refinamiento de los controladores, ya que con toda seguridad, la respuesta del avión real no se ajuste completamente al modelo

125

8 CONCLUSIÓN

Tras el estudio de la familia, las herramientas y recursos disponibles, y la

implementación de un sistema de control con las mismas, hemos comprobado cómo es viable el uso de herramientas libres para configurar un entorno de desarrollo fiable y de alta calidad y prestaciones. Hemos verificado la versatilidad de la arquitectura y la gran cantidad de recursos libres disponibles.

Este conjunto de características, hacen de esta familia una buena plataforma docente, ya que además de ser una arquitectura ampliamente implantada y en continua

evolución, disponemos de todas las herramientas necesarias de forma gratuita, y en el caso del hardware, a muy bajo coste.

Por otra parte se ha verificado la capacidad computacional de la misma, obteniendo resultados satisfactorios en la implementación de un sistema de control en tiempo real, cuya validez se ha probado mediante la realización de una prueba de tipo hardware in the loop. Adicionalmente se ha demostrado la utilidad de este tipo de pruebas, ya que permiten la verificación de un diseño de forma sencilla y fiable, ya que se centra en la comprobación de requisitos funcionales de alto nivel.

127

9 LÍNEAS FUTURAS

Como desarrollo adicional de este proyecto se propone el estudio de la integración de código generado automáticamente desde Simulink con la herramienta Realtime Workshop. La integración de código generado mediante herramientas de diseño basado en modelos puede presentar ventajas como la eliminación de errores de codificación y permitir que se puedan hacer modificaciones en los modelos sin que ello suponga una carga de trabajo adicional de codificación.

También resulta interesante el estudio de las familias Cortex-M3 y Cortex-R4,

especialmente indicadas para sistemas en tiempo real. Un desarrollo adicional podría ser la implementación de un port de FreeRTOS para Cortex-R4, ya que todavía está disponible.

Con respecto a la pruebas HIL, resulta interesante investigar este campo,

especialmente si se realizan con hardware especifico para tal propósito, como los equipos PXI para LabView Realtime. Esto equipos permiten la realización de estas pruebas en un verdadero entorno en tiempo real, contando con tarjetas de E/S mediante las cuales se podría interfasear el sistema de control a más bajo nivel, por ejemplo, se podría conectar la salida PWM de un controlador de servos directamente al equipo PXI, este realizaría la decodificación de esta señal PWM y la aplicaría a la modelo del sistema bajo control. De esta forma las pruebas HIL permiten probar no solo la funcionalidad en cuanto a cálculo, sino también la correcta implementación de los protocolos de E/S del sistema.

129

BIBLIOGRAFÍA

ARM7TDMI Technical Reference Manual , ARM Limited

The insider’s guide to the Philips ARM7 based microcontrollers, Trevor Martin, Hitex Ltd., ISBM: 0-9549988 1

Using Open Source Tools for AT91SAM7S Cross Development, James P. Lynch LPC214x User Manual, Koninklijke Philips Electronics

FreeRTOS reference manual, Richard Barry, Real Time Engineers Ltd.

Using the FreeRTOS Real Time Kernel – A Practical Guide, Richard Barry, Real Time Engineers Ltd.

131 REFERENCIAS WEB www.nxp.com/ http://www.arm.com/ http://www.freertos.org/ http://www.embeddedrelated.com/groups/lpc2000/1.php http://openocd.berlios.de/web/ http://www.eclipse.org/ http://www.highintegritysystems.com/ http://www.mathworks.com/matlabcentral/ http://forum.sparkfun.com/

133

ANEXO A: FAMILIAS SOPORTADAS POR FREERTOS

Altera: Nios II

Atmel: CortexM3, ARM7, ARM9, AVR Cortus: APS 3

Energy Micro: EFM32, Cortex M3 Freescale: HCS12, Coldfire, PowerPC Fujitsu: MB91460, MB96340

Luminary Micro (adquirida por TI): Cortex M3 Microchip: PIC32, PIC24, dsPIC, PIC18

NEC: V850ES, 78K0R NXP: Cortex M3, ARM7 Renesas: SuperH, H8S Silicon Labs: 8051

ST: Cortex M3, ARM7, ARM9 TI: MSP430

Xilinx: Microblaze, PowerPC Intel/AMD/Otros: x86

135

ANEXO B: CÓDIGO PARA EL CÁLCULO DE REFERENCIAS DE TRAYECTORIAS

function k = track(u)

global I_ANT

global J_ANT

%Sacar los valores de la entrada.

long = (length(u)-4)/3; x_camino = u(1:long); y_camino = u(long+1:2*long); h_camino = u(2*long+1:3*long); x_v = u(3*long+1); y_v = u(3*long+2); reset=u(3*long+3); tipo=u(3*long+4);

%Valores de los indices correspondientes al camino.

i=I_ANT; j=J_ANT; %Calculamos variables. x_dif=x_camino(i)-x_camino(j); y_dif=y_camino(i)-y_camino(j); ang=atan2(x_dif,y_dif); modulo=sqrt(((x_camino(i)-x_camino(j))^2)+((y_camino(i)- y_camino(j))^2)); x_track=-(x_v*(cos(ang-pi/2))-(y_v*(sin(ang- pi/2))))+(x_camino(j)*(cos(ang-pi/2)))-(y_camino(j)*(sin(ang- pi/2)))+modulo;

%Calculo el ángulo siguiente.

m=i+1; if (m==long+1) m=1; end xd2=x_camino(m)-x_camino(i); yd2=y_camino(m)-y_camino(i); angsig=atan2(xd2,yd2);

%Calculo la magnitud del giro siguiente.

angtot=abs(angsig-ang); if (angtot>pi) angtot=(2*pi)-angtot; end %Selección de ganancias if (tipo==1) k=-(500/modulo)*0.002; else k=-(500/modulo)*0.002e7; end

%Calculamos cuándo se realizará el giro

136 error2=modulo*error/100; %logica de guiado. if (x_track<error2) j=i; i=i+1; if i==long+1 j=long; i=1; end end if (reset==1) i=2; j=1; end %Salidas. k=[x_camino(j),y_camino(j),x_camino(i),y_camino(i),k,h_camino(i)]; I_ANT=i; J_ANT=j;

Documento similar