David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]

1,545 views

Published on

En esta charla se presentará una plataforma robótica integral, basada en elementos que tenemos por casa, y de fácil y barata adquisición. Por eso, la elección como prueba de concepto, se apoya en dos robots que he realizado a lo largo de 3 años de forma casera, usando sendos routers Wifi. Se trata del WRT54GL y La Fonera 2201.

Uno es un ROV y el otro un cuadricóptero, ambos controlados mediante HTML5 ofrecido desde el servidor web de cada router. Los aspectos técnicos de la ponencia incluyen:

- Por qué el firmware OpenWRT.
- I2C bitbanging con La Fonera. Conexiones de los GPIO y cargas de los módulos Kernel necesarios. Entrada de mi blog
- Lectura de mandos Wii mediante el I2C emulado previamente.
- Extender funcionalidades a través del puerto serie, a un microcontrolador
- Procesos en background desde OpenWrt, manejo de prioridades fuera de espacio de usuario para procesos críticos.
- Manipulación de httpd en BusyBox para atender ciertas peticiones ajax más rápido, mediante memoria compartida
- Integración de técnicas AJAX y AJAX PUSH (COMET) para aceptar órdenes y transmitir datos de telemetría.
- Lectura de mandos de consola, PS2, Entrenadores de vuelo RC, etc mediante programa en C bajo GNU/Linux y envío de los datos a través de peticiones HTTP o paquetes UDP
- Compilación cruzada de programas para arquitecturas empotradas (MIPS, ARM..)

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,545
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]

  1. 1. David Meléndez Cano @taiksontexasTaiksonprojects.blogspot.com Taiksonprojects.blogspot.com
  2. 2. ¿Qué es TRRP? ➔ Plataforma de desarrollo de bajo o ningún coste ➔ “Internet de las cosas” ➔ Usa lo que tengas por casa ➔ Los trastos pueden ser útiles ➔ No tirar, no reciclar: ReutilizarTaiksonprojects.blogspot.com 2
  3. 3. Usa tu viejo router como plataforma domótica / robótica ➔ Inversión inicial cero. Ya dispones de él ➔ Cambia el firmware: Ej: Linux OpenWRT Pruebas de concepto: ROVER Texas Ranger: Linksys Cuadricóptero ATROPOS: WRT54GL La Fonera 2201Taiksonprojects.blogspot.com
  4. 4. Primer contacto: ROV Texas RangerTaiksonprojects.blogspot.com
  5. 5. ROV Texas Ranger - Software Interfaz WEB Cgi/Iframe_comet.bin ajax comet Libjpeg.h /dev/ttyS0 Target.c Placa camara i2cTaiksonprojects.blogspot.com Wii nunchuck
  6. 6. Afinando: Cuadricóptero Atropos➔ Fonera 2201➔ OpenWRT➔ Programa de estabilización➔ Telemetría y control HTML5 Taiksonprojects.blogspot.com
  7. 7. Taiksonprojects.blogspot.com
  8. 8. Plataforma router: Puertos I2C Buscar pines GPIO de la CPUTaiksonprojects.blogspot.com
  9. 9. Plataforma router: Puertos I2C y serie GPIO---> I2C / RS232Puerto serie Pines GPIO Taiksonprojects.blogspot.com
  10. 10. Plataforma router: Carga de módulos rm /etc/modules.d/59­i2c­gpio echo "i2c­gpio­custom bus0=0,4,7 bus1=1,3,1" >/etc/modules.d/59­i2c­gpio­custom echo "i2c­gpio" >/etc/modules.d/60­i2c­gpio [reboot] i2c­detect /dev/i2c0 Taiksonprojects.blogspot.com
  11. 11. Plataforma router: Puerto serie stty -F /dev/ttyS0 raw stty -F /dev/ttyS0 speed 115200Taiksonprojects.blogspot.com
  12. 12. Plataforma router: Sensores - Giroscopio Wii Motion Plus Giroscopio triaxial Puerto I2C • Nos dice a qué velocidad estamos girando en cada plano • No tan sencillo: DerivaTaiksonprojects.blogspot.com
  13. 13. Plataforma router: Sensores - Acelerómetro Wii Nunchuck Acelerómetro triaxial Puerto I2C Mide la aceleración (g) en cada plano.Taiksonprojects.blogspot.com
  14. 14. Plataforma router: Sensores - Magnetómetro -Magnetómetro triaxial HMC5881L -Gauss en cada plano -El acelerómetro sólo anula la deriva en los planos de cabeceo y alabeo. -El plano de guiñada (rumbo) se corrige obteniendo el rumbo actual en grados, con respecto al norte.Taiksonprojects.blogspot.com
  15. 15. acelerómetro giroscopio Imagen: “The Balance Filter” MITPro: “Filtro de Kalman”; “Matriz de Cosenos Directores”Taiksonprojects.blogspot.com
  16. 16. Plataforma router: Leyendo los sensores ID único para cada sensor. Ej Wii Motion+: 0x52 • Petición de datos escribiendo al dispositivo • Lectura de datos en buffer #include <linux/i2c­dev.h> f_i2c0=open(I2C0, O_RDWR); ioctl(f_i2c0, I2C_SLAVE, 0x52);      write(f_i2c0, buff_out, data_size);      ­­­      read(f_i2c0, buffer,size);Taiksonprojects.blogspot.com
  17. 17. Plataforma router: programa estabilización IMU ➔ Programa crítico que debe ejecutarse en intervalo de tiempo fijo setitimer(ITIMER_REAL,&i_int,NULL); (void)signal(SIGALRM ,timeout_real); ➔ Compite por el tiempo de CPU con el servidor web (telemetría y control) ➔ Cambiar la prioridad del proceso con nice no es suficiente: Real Time scheduling → FIFO, Round Robin #include <sched.h> schedule.sched_priority=sched_get_priority_max(SCHED_FIFO); sched_setscheduler(pthread_self(), SCHED_FIFO,&schedule);Taiksonprojects.blogspot.com
  18. 18. El proceso watchdog informa al kernel de que el sistema no está colgado. ● Consume su parte de CPU ● Si se cuelga el router en pleno vuelo: ➔ ioctl(“/dev/watchdog”, WDIOC_KEEPALIVE, &dummywd); Taiksonprojects.blogspot.com
  19. 19. Plataforma router: placa de control -Mínimos componentes externos: Sólo para generar señales PWM -Válido cualquier microcontrolador con UART y un par de timers Fonera PIC16f876A /dev/ttyS0 ESC MotoresTaiksonprojects.blogspot.com
  20. 20. Control HTTP Las órdenes se transmiten a través de peticiones HTTP GET -Desde eventos keydown keyup de javascript por AJAX -Desde el proceso que lee del mando USB http://atropos/cgi­bin/ajaxinput?QQZ[GAS]Z[ALABEO]Z[CABECEO]Z[GUIÑADA]Z Deben ser muy fluidas y baratas en tiempo de CPU: Httpd tweak: Httpd.c: [...] if (strncmp(tptr, "cgi­bin/ajaxinput", 17) == 0) { [...] strcpy((char *)shmat(shmget(9998, 30, IPC_CREAT | 0666), NULL, 0),g_query); exit(­1); } [...]Taiksonprojects.blogspot.com
  21. 21. Control UDP desde mando USB cat /dev/input/js0 ­­­­ pad=open(“/dev/input/js0”,O_RDONLY); reads=read(pad,msg,MSG);   (msg[7]==2)//gas       gas=((analog+127))*GAS_FACTOR;     [...]     (msg[7]==4)//guiñada       guinnada=­analog*GUINNADA_FACTOR;     [...]     (msg[7]==1)//cabeceo       cabeceo=­analog*CABECEO_FACTOR;     [...]     (msg[7]==0)//alabeo       alabeo=­analog*ALABEO_FACTOR;     [...]Taiksonprojects.blogspot.com
  22. 22. Video:Vuelo Atropos QuadrocopterTaiksonprojects.blogspot.com
  23. 23. Gracias! David Meléndez Cano @TaiksonTexas Taiksonprojects.blogspot.comTaiksonprojects.blogspot.com

×