aplicación de un sistema operativo de tiempo real (rtos) en un robot arduino

Post on 24-Jun-2015

1.045 Views

Category:

Education

5 Downloads

Preview:

Click to see full reader

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

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

¿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++.

Piezas del robot adquiridas

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

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

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.

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

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

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.

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.

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.

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)

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.

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.

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

Implementacion de las funcionalidades del robot

Figura : Diagrama de Clases

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.

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.

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

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.

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.

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

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.

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.

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

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.

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 }

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 }

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 }

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 }

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.

top related