Version 96 (modified by rafa, 7 years ago)

--

RoboTitos

Departamento de Ingenieria de Computadoras

Documentacion de "Frankestito", construido en nuestra facultad.

Fotos

http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9730.JPG http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9731.JPG http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9732.JPG http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9733.JPG http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9734.JPG http://oracle.uncoma.edu.ar/trac/chrome/site/IMG_9735.JPG

Introducción

En la Facultad de Informática estamos desarrollando un prototipo de robot (real) autónomo, compatible con  Myro. Además, a diferencia de la mayoría de los robots existentes compatibles con Myro, nuestra implementación cuenta con Linux embebido dentro del robot. Esto posibilita ejecutar, por ejemplo, python o prolog directamente dentro del robot.

Myro (My Robotics), es un proyecto open source que tiene como objetivo enseñar ciencias de la computación a través de la programación de robots con Python. Mas información en  Introduction_to_Computer_Science_via_Robots

Hardware

El prototipo actual utiliza un microcontrolador  AVR Atmega8 (en una board diseñada para nuestros fines, compatible con arduino uno) para controlar un L293D el cual tiene conectado ambos motores. También contamos con un prototipo utilizando un  AVR Atmega328, desde un arduino uno.

  • El prototipo con arduino cuenta con un shield bluetooth para arduino, el cual nos permite conectar y controlar el hardware de forma remota.
  • El prototipo con la board y Atmega8 diseñada en la Facultad se comunica con una placa TL-MR3020 de 5.7cm x 5.7cm, con wifi, usb host y Linux embebido.

Equematicos : POR SUBIR.

Hardware Linux embebido

Utilizamos la board TP Link 3020. Con uboot, kernel Linux, y OpenWRT instalado. Documentación de referencia :  http://wiki.openwrt.org/toh/tp-link/tl-mr3020

Wireless

Habilitamos la wifi con

root@OpenWrt:~# cat /etc/config/network
config interface 'wifi'
	option proto 'static'
	option ipaddr '192.168.2.100'
	option netmask '255.255.255.0'

root@OpenWrt:~# vi /etc/config/wireless
# option disabled 0
config wifi-iface
	option device   radio0
	option network  wifi
	option mode     ap
	option ssid     OpenWrt
	option encryption none

Software

Hay varios niveles de software.

http://oracle.uncoma.edu.ar/trac/chrome/site/myro.png

El software del robot (firmware) está escrito en C, y utilizamos el ambiente arduino para crosscompilar y flashear el AVR ATMEGA. Con el firmware actual podemos mover el robot libremente, aunque todavia esta cieguito. Ampliaremos el codigo fuente del robot con mayor funcionalidad, a medida que incorporemos sensores o camaras.

Utilizar un AVR Atmega, como microcontrolador para controlar los motores y sensores, permite desarrollar todo el software del robot utilizando las herramientas GNU GCC (the GNU Compiler Collection).

Flashing via Wireless

A través del Linux embebido con el que cuenta el robot podemos transferir el firmware desarrollado para el Atmega8 via wireless. Se logra a través de ser2net en el LInux embebido, y a través de socat en la PC origen.

En tplink:
# cat /etc/ser2net.conf
2000:raw:0:/dev/ttyATH0:19200 8DATABITS NONE -XONXOFF -RTSCTS
Iniciar ser2net.

Desde la PC :
socat pty,raw,echo=0 tcp:192.168.1.201:2000

Reiniciar el atmega8, y rapidamente desde PC (antes que el bootloader finalice la espera):
avrdude -C/etc/avrdude.conf -v -v -v -v -patmega8 -carduino -P/dev/pts/5 -b19200 -D -Uflash:w:eco_serial.hex:i

Controlando el Robot

Hay varias maneras posibles de controlar al robot por software (todas ellas via wireless o bluetooth). Tres formas que hemos testeado son :

  • a través de Myro y Python,
  • a través de sockets y un programa en cualquier lenguaje (se necesita ser2net),
  • utilizando un Gamepad y Myro

Ejemplo utilizando Python y Myro

El software Myro es utilizado desde la PC y controla el robot de forma remota a través de programas escritos en Python, Java o C++. Nuestro prototipo actual es compatible con Myro y robot Scribbler. Esto significa que con solo 3 líneas de código de programación en lenguaje Python ya puede controlar el robot.

# python
>> from myro import *
>> robotito = Scribbler("/dev/ttyACM0", 9600)
>> robotito.forward(1, 3)

En el ejemplo anterior el robot avanzaría a máxima velocidad durante tres segundos.

Ejemplo utilizando C

Si no queremos utilizar myro y python podemos utilizar simplemente ser2net con un programa que envie mensajes al robot a traves de sockets. El siguiente [Programa Ejemplo en lenguaje C] mueve el robot via sockets. Download :  http://oracle.uncoma.edu.ar/trac/chrome/site/getname-socket.c

Ejemplo utilizando un Gamepad

A traves de Myro y Python tambien se puede manejar el robot con un control de videojuegos (gamepad).

import time
from myro import *

robotito = Scribbler("/dev/rfcomm0", 9600)
time.sleep(5)
robotito.stop()
while 1: robotito.move(*getGamepad("robot"))

Downloads

Documentación

Próximas Tareas

Algunas tareas se dividiran en tareas mas pequeñas obviamente.

  • Gamepad : Funcionando
  • Placa MR3020 con Linux Embebido : Funcionando
  • Portar python a mips (mips: arquitectura de la board embebida) : Realizado
  • Portar prolog o ciao prolog : Pendiente
  • Documentar el prototipo y realizar esquematicos y boards finales : Pendiente
  • Sensores : Sólamente contamos con camara en la board con Linux embebido (funcionando). Faltarian sensores IR y de ultrasonidos?
  • Firmware del robot : En marcha (Tenemos solo implementado el control de los motores y bluetooth)
  • Ejemplos de código en C, C++ y Java para controlar el robot : Parcialmente. En esta wiki mostramos como utilizar C y sockets con ser2net y el robot. Uno puede tomar ese ejemplo para cualquier lenguaje.
  • Portar ser2net a la board Linux embebida : pendiente
  • Documentar como logramos que Myro pueda aceptar un dispositivo serial virtual (/dev/pts/#).
  • Documentar como enviamos

Detalles de Configuracion temporal

Wifi del tplink : "OpenWrt?" ip del tplink : 192.168.2.100

root@OpenWrt:/etc/config# cat /etc/config/network 

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config interface 'lan'
        option ifname 'eth0'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.1.201'
        option netmask '255.255.255.0'

config interface 'wifi'
        option proto 'static'
        option ipaddr '192.168.2.100'
        option netmask '255.255.255.0'

Iniciar el generador de fotos via web

mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 640x480 -f 25" -o "output_http.so -p 8080"

Tomar una foto desde la PC :

http://192.168.2.100:8080/?action=snapshot