Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

30
Aplicaci´ on de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino Charnelli, Mar´ ıa Emilia atedra: Dise˜ no de Sistemas de Tiempo Real // Facultad de Inform´ atica - UNLP 13 de noviembre de 2013

description

Trabajo Final para la cátedra Diseño de Sistemas de Tiempo Real. En este trabajo se muestra desde cómo armar el robot con las piezas compradas hasta cómo modificar y adaptar RTuinOS (un SO de Tiempo Real) para que funcione en nuestro Arduino.

Transcript of Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Page 1: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Aplicacion de un Sistema Operativo de TiempoReal (RTOS) en un robot Arduino

Charnelli, Marıa Emilia

Catedra: Diseno de Sistemas de Tiempo Real // Facultad de Informatica - UNLP

13 de noviembre de 2013

Page 2: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

¿Que es Arduino?

Arduino es una plataforma electronica abierta y libre para lacreacion de prototipos basada en software y hardware flexibles yfaciles de usar.

El hardware consiste en una placa con un microcontroladorAtmel AVR y puertos de E/S.

Los microcontroladores mas usados son elAtmega168,328,1280,8 por su sencillez y su bajo costo.

El microcontrolador en la placa Arduino se programamediante el lenguaje de programacion Arduino (basado enWiring) y el entorno de desarrollo Arduino (basado enProcessing).

El Lenguaje de programacion Arduino se basa en C/C++.

Page 3: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Piezas del robot adquiridas

El kit de piezas utilizadas para armar nuestro robot fue el 2WDUltrasonic Smart Car Kits.

Page 4: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Piezas del robot adquiridas

Este kit traıa las siguientes piezas:

2 x Motores

2 x Ruedas

1 x Rueda omni-direccional

1 x L298N motor driver

1 x Atmega328

1 x Funduino Keyes Duemilanove

1 x Modulo ultrasonico. Sensor de Distancia HC-SR04

1 x Mini protoboard

1 x Soporte para baterıa ( AA y de 9V)

1 x Cable USB

Fuera del kit, se compro una placa JY-MCU Bluetooth WirelessSerial

Page 5: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Funduino Keyes Duemilanove

clon del Arduino Duemilanove

basada en el ATmega168 o el ATmega328

14 pines con E/S digitales (6 pueden ser salidas PWM)

6 entradas analogicas

un cristal oscilador a 16Mhz

una cabecera ISCP

Se puede conectar a una computadora a traves del cable USB oalimentandolo con un transformador o una baterıa.

Page 6: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Funduino Keyes DuemilanoveMemorias

ATmega328 tiene 32KB (el ATmega168 tiene 16 KB) dememoria flash

ATmega328 tiene 2 KB (Atmega168 1 KB) de memoriaSRAM

ATmega328 tiene 1KB (ATmega168 512 bytes) de EEPROM

Page 7: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Funduino Keyes DuemilanoveEntradas y Salidas

14 pines digitales como entradas o como salidas usando lasfunciones pinMode(), digitalWrite(), y digitalRead()

Las E/S operan a 5 voltios

Cada pin puede proporcionar o recibir una intensidad maximade 40mA y tiene una resistencia interna (desconectada pordefecto)de 20-50kOhms

Page 8: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Funduino Keyes DuemilanoveEntradas y Salidas

Ademas, algunos pines tienen funciones especializadas:

Serie: 0 (RX) y 1 (TX). Usado para recibir (RX) y transmitir(TX) datos a traves de puerto serie TTL.

Interrupciones Externas: 2 y 3. Estos pines se puedenconfigurar para lanzar una interrupcion en un valor LOW(0V),en flancos de subida o bajada, o en cambios de valor.

PWM: 3, 5, 6, 9, 10, y 11. Proporciona una salida PWM(Pulse Wave Modulation, modulacion de onda por pulsos) de8 bits de resolucion (valores de 0 a 255).

LED: 13.

Page 9: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

ATmega328

El ATmega328 es un chip microprocesador creado por Atmel y queforma parte de la serie megaAVR.

Conjunto reducido de instrucciones (RISC)

Bus de datos de 8 bits.

Basado en la arquitectura AVR

Microcontrolador simple, de baja potencia y bajo costo.

Page 10: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

ATmega328Componentes principales

32 KB de memoria flash ISP con capacidades de lectura yescritura,

Una memoria no volatil EEPROM de un 1KB,

Una memoria volatil SRAM de 2KB,

23 lıneas de E/S de proposito general,

32 registros de proposito general,

Tres temporizadoradores/contadores,

Interrupciones internas y externas,

Un modulo USART que recibe y transmite datos por el puertoserie,

Una interfaz serie de 2 cables (TWI) orientada a bytes,

Un puerto serie SPI,

Un conversor A/D de 10 bits,

Un timer programable con oscilador interno.

Page 11: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Modulo ultrasonico. Sensor de Distancia HC-SR04

Mide las distancias de algun objeto cercano desde 2cm hasta450cm.Angulo eficaz del sensor: no mas de 15o gradosPrecision: cerca de los 2mmModulo de muy bajo costoCompatible con Arduino y otras plataformas demicrocontroladores.Pin trig (emite el pulso de ultrasonido)Pin echo (captura el pulso reflejado por el objeto)

Page 12: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Modulo JY-MCU Bluetooth Wireless Serial Port

Dispositivo puerto serie bluetooth inalambrico

Distancia maxima de transmision: 10 metros

Velocidad de transmision: 9600bps (standard)

Barato y facil de usar.

Page 13: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Como armar el Robot con las piezas compradas

Armar el robot con las piezas compradas requiere un poco deingenio, ya que el kit comprado no trae un manual para armarlo.Algunas problematicas encontradas fueron:

Conjunto de piezas que no encastraban.

Tornillos que no alcanzaban.

Cables dupont que solo eran hembra-hembra.

En internet se pueden ver diferentes estrategias de armado.

Page 14: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Implementacion de las funcionalidades del robot

Diseno orientado a objetos.

Clase Brillo representa al robot.

Compuesto por un Sensor, una instancia de SoftwareSerial ydos instancias MotorProvee metodos de inicializacion y manipulacion del robot

Clase SensorUtiliza la librerıa Servo para controlar el rotor del sensor.Utiliza la librerıa NewPing que permite la medicion dedistancias

Page 15: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Implementacion de las funcionalidades del robot

Figura : Diagrama de Clases

Page 16: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOS¿Que es RTuinOS?

RTuinOS es un pequeno Sistema de Tiempo Real (RTOS eningles) para Arduino.El funcionamiento del Arduino tradicional tiene dos puntos deentrada:

funcion de configuracion, que es el lugar para poner elcodigo de inicializacion necesario para ejecutar el programa

bucle de la funcion, que se llama periodicamente. Lafrecuencia del bucle no es determinista sino que depende deltiempo de ejecucion del codigo dentro del bucle.

Usando RTuinOS, las dos funciones mencionadas arriba siguenexistiendo y siguen teniendo el mismo significado. Sin embargo,como parte de la configuracion se pueden definir una serie detareas que tengan propiedades distintas.

Page 17: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOS

Las tareas se ejecutan de forma semiparalela

RTuinOS brinda primitivas de sincronizacion y exclusionmutua.

Las tareas se ejecutan repetidamente dentro del bucle de lafuncion principal.

La funcion loop() se convierte en la tarea ociosa de RTOS.

Las tareas pueden ser:

comunescontroladas por tiempocontroladas por eventospueden tener diferentes prioridades

El scheduling puede ser preemptive o cooperativo, utilizandoslices de tiempo y/o un patron round robin.

Page 18: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOS

Por defecto, la distribucion se compila para Arduino 1.0.1, y solosoporta el AtMega 2560. De forma que funcione en otrosmicroprocesadores se debe adaptar el codigo, tal comomostraremos en las siguientes diapositivas.

Este SO se puede descargar desde dehttps://github.com/PeterVranken/RTuinOS

Page 19: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSTareas de Tiempo Real

una tarea esta representada por un objeto task

los objetos task se alocan estaticamente, no hay creacion oeliminacion dinamica

los objetos se configuran en la funcion setup de Arduino.

las prioridades de las tareas se determinan en tiempo decompilacion de la aplicacion.

Page 20: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSImplementacion de un Aplicacion RTuinOS

Para crear una aplicacion RTuinOS se debe crear una carpetavacıa en la carpeta /src/applications.

Basicamente se tendran dos archivos:programa.c que definira funciones:

setup,loop,y las tareas

Archivo rtos.config.c con las configuraciones de RTuinOS.

Se podran definir todas las clases que sean necesarias.

Page 21: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSConfiguracion de RTuinOS

La creacion de una aplicacion RTuinOS comienza con laconfiguracion del sistema.

Copiar plantilla rtos.config.template.h y cambiar el nombre artos.config.h

Definir no de tareas (ademas de la tarea ociosa)

Definir el no de clases de prioridad

Habilitar o no la estrategia round robin (por defectodesactivada)

Establecer la resolucion del temporizador del sistema

Definir eventos

etc

Page 22: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSInicializacion de RTuinOS: setup

La aplicacion RTuinOS comienza con una llamada a la funcionsetup().

funcion invocada desde el codigo de inicio Arduino (y tambiendesde el codigo de inicializacion de RTuinOS)

sin esta funcion no se podra construir el ejecutable

definira todo el codigo de inicializacion de las tareas.

por cada tarea definida se debera llamar a la funcionrtos initializeTask()

funcion que especifica las propiedades de una tareano retorna nada.recibe el conjunto de eventos por los que la tarea esperara paraejecutarse la primera vez.

Page 23: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSLa tarea de inactividad: loop

La tarea de inactividad de RTuinOS consiste en invocarrepetidamente a la funcion void loop.

la ejecucion de este codigo se realiza solo si ninguna otratarea requiere utilizar la CPU.

tipicamente, contiene codigo que no tiene restricciones detiempo real.

un uso tıpico es la de realizar tareas diagnosticas.

si no se requiere una tarea de inactividad, o no hay tiempoinactivo simplemente se puede dejar la funcion loop con uncuerpo vacıo.

Page 24: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSCompilar una aplicacion RTuinOS

El Makefile provisto por RTuinOS esta realizado para Windows,por lo que para poder compilarlo en Linux -distribucion utilizada-se utilizo Inotool. Para ello, se debe:

Crear una carpeta vacıa e inicializar un proyecto ino (ino init)

Copiar en esta carpeta nuestra aplicacion ubicada enRTuinOS/code/applications en la carpeta /src

Copiar en esta carpeta textbfRTuinOS/code/RTOS

Cambiar los path relativos

Cambiar los archivos con extension .c por .cpp

Borrar sketch.ino, ya que los metodos setup y loop estan en elprograma realizado utilizando RTuinOS.

Tener en cuenta que cuando se trabaja con Linux este escase-sensitive

Page 25: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSBrillo. Caso de Estudio

Para que funcione para el ATmega328 se debieron hacer algunasmodificaciones:

Modificacion en la interface global de RTuinOS: rtos.c Lo quevarıa entre ambos microprocesadores es el manejo de las pilas,ya que el atmega328p utiliza 8 bits y no 16 bits como elATmega2560. Esto se puede verificar viendo las hojas dedatos de ambas arquitecturas en la pagina oficial de Atmel.Por lo tanto se debe modificar la macro que prepara el area dela pila todavıa no utilizada de una nueva tarea.

Page 26: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSBrillo. Caso de Estudio

1 static void TareaMovilidad(uint16_t initCondition)

2 {

3 do {

4 switch(estado) {

5 case NORMAL:

6 b.setVelocidad (4);

7 break;

8 case CUIDADO:

9 b.setVelocidad (0);

10 break;

11 case FIN_BARRIDO:

12 if (muestras [0] < muestras [2]) {

13 b.doblarDerecha ();

14 } else {

15 b.doblarIzquierda ();

16 }

17 estado = NORMAL;

18 break;

19 }

20 } while(rtos_suspendTaskTillTime(TIME_IN_MS (100)));

21 }

Page 27: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSBrillo. Caso de Estudio

1 static void TareaSensor(uint16_t initCondition)

2 {

3 do {

4 switch (estado) {

5 case NORMAL:

6 if ( b.sensar (90) < minDistanciaFrente ) {

7 estado = CUIDADO;

8 }

9 break;

10 case CUIDADO:

11 barrido ();

12 estado = FIN_BARRIDO;

13 break;

14 }

15 } while(rtos_suspendTaskTillTime(TIME_IN_MS (50)));

16 }

Page 28: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSBrillo. Caso de Estudio

1 void setup(void)

2 {

3 (...)

4 /* Inicializaci n de las tareas */

5 rtos_initializeTask( /* idxTask */ 0

6 , /* taskFunction */

TareaMovilidad

7 , /* prioClass */ 1

8 , /* pStackArea */ &

_taskStack00_C0 [0]

9 , /* stackSize */ sizeof(

_taskStack00_C0)

10 , /* startEventMask */

RTOS_EVT_DELAY_TIMER

11 , /* startByAllEvents */ false

12 , /* startTimeout */ 1

13 );

14

15 }

Page 29: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Instalar un SO de Tiempo Real. RTuinOSBrillo. Caso de Estudio

1 void loop(void)

2 {

3 switch(estado)

4 {

5 case NORMAL:

6 b.escribirBluetooth("estado normal");

7 break;

8 case CUIDADO:

9 b.escribirBluetooth("hay objetos cercanos");

10 break;

11 case FIN_BARRIDO:

12 b.escribirBluetooth("fin de barrido");

13 break;

14 }

15 }

Page 30: Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino

Documentacion

Toda la documentacion de este trabajo se encuentra en:https://drive.google.com/folderview?id=0B_

4zu6280L9fV0VpZzBuNHg4eHM&usp=sharing

Se encuentra el informe completo de este trabajo, lasimplementaciones, fotos con todo el armado del robot, y un videoque muestra su funcionamiento.