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.
Aplicación de un Sistema Operativo de Tiempo Real (RTOS) en un robot Arduino
1. Aplicaci´n de un Sistema Operativo de Tiempo
o
Real (RTOS) en un robot Arduino
Charnelli, Mar´ Emilia
ıa
C´tedra: Dise˜o de Sistemas de Tiempo Real // Facultad de Inform´tica - UNLP
a
n
a
13 de noviembre de 2013
2. ¿Qu´ es Arduino?
e
Arduino es una plataforma electr´nica abierta y libre para la
o
creaci´n de prototipos basada en software y hardware flexibles y
o
f´ciles de usar.
a
El hardware consiste en una placa con un microcontrolador
Atmel AVR y puertos de E/S.
Los microcontroladores m´s usados son el
a
Atmega168,328,1280,8 por su sencillez y su bajo costo.
El microcontrolador en la placa Arduino se programa
mediante el lenguaje de programaci´n Arduino (basado en
o
Wiring) y el entorno de desarrollo Arduino (basado en
Processing).
El Lenguaje de programaci´n Arduino se basa en C/C++.
o
3. Piezas del robot adquiridas
El kit de piezas utilizadas para armar nuestro robot fue el 2WD
Ultrasonic Smart Car Kits.
4. Piezas del robot adquiridas
´
Este kit tra´ las siguientes piezas:
ıa
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 M´dulo ultras´nico. Sensor de Distancia HC-SR04
o
o
1 x Mini protoboard
1 x Soporte para bater´ ( AA y de 9V)
ıa
1 x Cable USB
Fuera del kit, se compr´ una placa JY-MCU Bluetooth Wireless
o
Serial
5. 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 anal´gicas
o
un cristal oscilador a 16Mhz
una cabecera ISCP
Se puede conectar a una computadora a trav´s del cable USB o
e
aliment´ndolo con un transformador o una bater´
a
ıa.
6. Funduino Keyes Duemilanove
Memorias
ATmega328 tiene 32KB (el ATmega168 tiene 16 KB) de
memoria flash
ATmega328 tiene 2 KB (Atmega168 1 KB) de memoria
SRAM
ATmega328 tiene 1KB (ATmega168 512 bytes) de EEPROM
7. Funduino Keyes Duemilanove
Entradas y Salidas
14 pines digitales como entradas o como salidas usando las
funciones pinMode(), digitalWrite(), y digitalRead()
Las E/S operan a 5 voltios
Cada pin puede proporcionar o recibir una intensidad m´xima
a
de 40mA y tiene una resistencia interna (desconectada por
defecto)de 20-50kOhms
8. Funduino Keyes Duemilanove
Entradas y Salidas
Adem´s, algunos pines tienen funciones especializadas:
a
Serie: 0 (RX) y 1 (TX). Usado para recibir (RX) y transmitir
(TX) datos a trav´s de puerto serie TTL.
e
Interrupciones Externas: 2 y 3. Estos pines se pueden
configurar para lanzar una interrupci´n en un valor LOW(0V),
o
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, modulaci´n de onda por pulsos) de
o
8 bits de resoluci´n (valores de 0 a 255).
o
LED: 13.
9. ATmega328
El ATmega328 es un chip microprocesador creado por Atmel y que
forma 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.
10. ATmega328
Componentes principales
32 KB de memoria flash ISP con capacidades de lectura y
escritura,
Una memoria no vol´til EEPROM de un 1KB,
a
Una memoria vol´til SRAM de 2KB,
a
23 l´
ıneas de E/S de prop´sito general,
o
32 registros de prop´sito general,
o
Tres temporizadoradores/contadores,
Interrupciones internas y externas,
Un m´dulo USART que recibe y transmite datos por el puerto
o
serie,
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.
11. M´dulo ultras´nico. Sensor de Distancia HC-SR04
o
o
Mide las distancias de alg´n objeto cercano desde 2cm hasta
u
450cm.
Angulo eficaz del sensor: no mas de 15o grados
Precisi´n: cerca de los 2mm
o
M´dulo de muy bajo costo
o
Compatible con Arduino y otras plataformas de
microcontroladores.
Pin trig (emite el pulso de ultrasonido)
Pin echo (captura el pulso reflejado por el objeto)
12. M´dulo JY-MCU Bluetooth Wireless Serial Port
o
Dispositivo puerto serie bluetooth inal´mbrico
a
Distancia m´xima de transmisi´n: 10 metros
a
o
Velocidad de transmisi´n: 9600bps (standard)
o
Barato y f´cil de usar.
a
13. C´mo armar el Robot con las piezas compradas
o
Armar el robot con las piezas compradas requiere un poco de
ingenio, ya que el kit comprado no trae un manual para armarlo.
Algunas problem´ticas encontradas fueron:
a
Conjunto de piezas que no encastraban.
Tornillos que no alcanzaban.
Cables dupont que s´lo eran hembra-hembra.
o
En internet se pueden ver diferentes estrategias de armado.
14. Implementaci´n de las funcionalidades del robot
o
Dise˜o orientado a objetos.
n
Clase Brillo representa al robot.
Compuesto por un Sensor, una instancia de SoftwareSerial y
dos instancias Motor
Provee m´todos de inicializaci´n y manipulaci´n del robot
e
o
o
Clase Sensor
Utiliza la librer´ Servo para controlar el rotor del sensor.
ıa
Utiliza la librer´ NewPing que permite la medici´n de
ıa
o
distancias
16. Instalar un SO de Tiempo Real. RTuinOS
¿Qu´ es RTuinOS?
e
RTuinOS es un peque˜o Sistema de Tiempo Real (RTOS en
n
ingl´s) para Arduino.
e
El funcionamiento del Arduino tradicional tiene dos puntos de
entrada:
funci´n de configuraci´n, que es el lugar para poner el
o
o
c´digo de inicializaci´n necesario para ejecutar el programa
o
o
bucle de la funci´n, que se llama peri´dicamente. La
o
o
frecuencia del bucle no es determinista sino que depende del
tiempo de ejecuci´n del c´digo dentro del bucle.
o
o
Usando RTuinOS, las dos funciones mencionadas arriba siguen
existiendo y siguen teniendo el mismo significado. Sin embargo,
como parte de la configuraci´n se pueden definir una serie de
o
tareas que tengan propiedades distintas.
17. Instalar un SO de Tiempo Real. RTuinOS
Las tareas se ejecutan de forma semiparalela
RTuinOS brinda primitivas de sincronizaci´n y exclusi´n
o
o
mutua.
Las tareas se ejecutan repetidamente dentro del bucle de la
funci´n principal.
o
La funci´n loop() se convierte en la tarea ociosa de RTOS.
o
Las tareas pueden ser:
comunes
controladas por tiempo
controladas por eventos
pueden tener diferentes prioridades
El scheduling puede ser preemptive o cooperativo, utilizando
slices de tiempo y/o un patr´n round robin.
o
18. Instalar un SO de Tiempo Real. RTuinOS
Por defecto, la distribuci´n se compila para Arduino 1.0.1, y solo
o
soporta el AtMega 2560. De forma que funcione en otros
microprocesadores se debe adaptar el c´digo, tal como
o
mostraremos en las siguientes diapositivas.
Este SO se puede descargar desde de
https://github.com/PeterVranken/RTuinOS
19. Instalar un SO de Tiempo Real. RTuinOS
Tareas de Tiempo Real
una tarea est´ representada por un objeto task
a
los objetos task se alocan est´ticamente, no hay creaci´n o
a
o
eliminaci´n din´mica
o
a
los objetos se configuran en la funci´n setup de Arduino.
o
las prioridades de las tareas se determinan en tiempo de
compilaci´n de la aplicaci´n.
o
o
20. Instalar un SO de Tiempo Real. RTuinOS
Implementaci´n de un Aplicaci´n RTuinOS
o
o
Para crear una aplicaci´n RTuinOS se debe crear una carpeta
o
vac´ en la carpeta /src/applications.
ıa
B´sicamente se tendr´n dos archivos:
a
a
programa.c que definir´ funciones:
a
setup,
loop,
y las tareas
Archivo rtos.config.c con las configuraci´nes de RTuinOS.
o
Se podr´n definir todas las clases que sean necesarias.
a
21. Instalar un SO de Tiempo Real. RTuinOS
Configuraci´n de RTuinOS
o
La creaci´n de una aplicaci´n RTuinOS comienza con la
o
o
configuraci´n del sistema.
o
Copiar plantilla rtos.config.template.h y cambiar el nombre a
rtos.config.h
Definir no de tareas (adem´s de la tarea ociosa)
a
Definir el no de clases de prioridad
Habilitar o no la estrategia round robin (por defecto
desactivada)
Establecer la resoluci´n del temporizador del sistema
o
Definir eventos
etc
22. Instalar un SO de Tiempo Real. RTuinOS
Inicializaci´n de RTuinOS: setup
o
La aplicaci´n RTuinOS comienza con una llamada a la funci´n
o
o
setup().
funci´n invocada desde el c´digo de inicio Arduino (y tambi´n
o
o
e
desde el c´digo de inicializaci´n de RTuinOS)
o
o
sin esta funci´n no se podr´ construir el ejecutable
o
a
definir´ todo el c´digo de inicializaci´n de las tareas.
a
o
o
por cada tarea definida se deber´ llamar a la funci´n
a
o
rtos initializeTask()
funci´n que especifica las propiedades de una tarea
o
no retorna nada.
recibe el conjunto de eventos por los que la tarea esperar´ para
a
ejecutarse la primera vez.
23. Instalar un SO de Tiempo Real. RTuinOS
La tarea de inactividad: loop
La tarea de inactividad de RTuinOS consiste en invocar
repetidamente a la funci´n void loop.
o
la ejecuci´n de ´ste c´digo se realiza solo si ninguna otra
o
e
o
tarea requiere utilizar la CPU.
tipicamente, contiene c´digo que no tiene restricciones de
o
tiempo real.
un uso t´
ıpico es la de realizar tareas diagn´sticas.
o
si no se requiere una tarea de inactividad, o no hay tiempo
inactivo simplemente se puede dejar la funci´n loop con un
o
cuerpo vac´
ıo.
24. Instalar un SO de Tiempo Real. RTuinOS
Compilar una aplicaci´n RTuinOS
o
El Makefile provisto por RTuinOS est´ realizado para Windows,
a
por lo que para poder compilarlo en Linux -distribuci´n utilizadao
se utiliz´ Inotool. Para ello, se debe:
o
Crear una carpeta vac´ e inicializar un proyecto ino (ino init)
ıa
Copiar en esta carpeta nuestra aplicaci´n ubicada en
o
RTuinOS/code/applications en la carpeta /src
Copiar en esta carpeta textbfRTuinOS/code/RTOS
Cambiar los path relativos
Cambiar los archivos con extensi´n .c por .cpp
o
Borrar sketch.ino, ya que los m´todos setup y loop est´n en el
e
a
programa realizado utilizando RTuinOS.
Tener en cuenta que cuando se trabaja con Linux ´ste es
e
case-sensitive
25. Instalar un SO de Tiempo Real. RTuinOS
Brillo. Caso de Estudio
Para que funcione para el ATmega328 se debieron hacer algunas
modificaciones:
Modificaci´n en la interface global de RTuinOS: rtos.c Lo que
o
var´ entre ambos microprocesadores es el manejo de las pilas,
ıa
ya que el atmega328p utiliza 8 bits y no 16 bits como el
ATmega2560. Esto se puede verificar viendo las hojas de
datos de ambas arquitecturas en la p´gina oficial de Atmel.
a
Por lo tanto se debe modificar la macro que prepara el ´rea de
a
la pila todav´ no utilizada de una nueva tarea.
ıa
26. Instalar un SO de Tiempo Real. RTuinOS
Brillo. Caso de Estudio
static void Ta reaMovil idad ( uint16_t initCondition )
1
2
{
3
do
{
switch ( estado ) {
case NORMAL :
b . setVelocidad (4) ;
break ;
case CUIDADO :
b . setVelocidad (0) ;
break ;
case FIN_BARRIDO :
if ( muestras [0] < muestras [2]) {
b . doblarDerecha () ;
} else {
b . d ob la rI z qu ie rd a () ;
}
estado = NORMAL ;
break ;
}
} while ( r t o s _ s u s p e n d T a s k T i l l T i m e ( TIME_IN_MS (100) ) ) ;
}
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
27. Instalar un SO de Tiempo Real. RTuinOS
Brillo. Caso de Estudio
static void TareaSensor ( uint16_t initCondition )
1
2
{
do {
switch ( estado ) {
case NORMAL :
if ( b . sensar (90) < m i n D i s t a n c i a F r e n t e ) {
estado = CUIDADO ;
}
break ;
case CUIDADO :
barrido () ;
estado = FIN_BARRIDO ;
break ;
}
} while ( r t o s _ s u s p e n d T a s k T i l l T i m e ( TIME_IN_MS (50) ) ) ;
3
4
5
6
7
8
9
10
11
12
13
14
15
16
}
28. Instalar un SO de Tiempo Real. RTuinOS
Brillo. Caso de Estudio
void setup ( void )
1
2
{
(...)
/* I n i c i a l i z a c i n de las tareas */
r t o s _ i n i t i a l i z e T a s k ( /* idxTask */
, /* taskFunction */
Tare aMovilid ad
, /* prioClass */
, /* pStackArea */
_ ta sk St a ck 00 _C 0 [0]
, /* stackSize */
_ ta sk St a ck 00 _C 0 )
, /* star tEventMa sk */
RTOS_EVT_DELAY_TIMER
, /* s t a r t B y A l l E ve n t s */
, /* startTimeout */
);
3
4
5
6
7
8
9
10
11
12
13
14
15
}
0
1
&
sizeof (
false
1
29. Instalar un SO de Tiempo Real. RTuinOS
Brillo. Caso de Estudio
void loop ( void )
1
2
{
switch ( estado )
{
case NORMAL :
b . es c r i b i r B l u e t o o t h ( " estado normal " ) ;
break ;
case CUIDADO :
b . es c r i b i r B l u e t o o t h ( " hay objetos cercanos " ) ;
break ;
case FIN_BARRIDO :
b . e s c r i b i r B l u e t o o t h ( " fin de barrido " ) ;
break ;
}
3
4
5
6
7
8
9
10
11
12
13
14
15
}
30. Documentaci´n
o
Toda la documentaci´n de ´ste trabajo se encuentra en:
o
e
https://drive.google.com/folderview?id=0B_
4zu6280L9fV0VpZzBuNHg4eHM&usp=sharing
Se encuentra el informe completo de ´ste trabajo, las
e
implementaciones, fotos con todo el armado del robot, y un video
que muestra su funcionamiento.