David Meléndez Cano
@taiksontexas
Taiksonprojects.blogspot.com

Taiksonprojects.blogspot.com
¿Qué es TRRP?
➔

Plataforma de desarrollo de bajo o ningún coste

➔

“Internet de las cosas”

➔

Usa lo que tengas por cas...
Usa tu viejo router como plataforma domótica / robótica

Inversión inicial cero. Ya dispones de él
➔
Cambia el firmware: E...
Primer contacto: ROV Texas Ranger

Taiksonprojects.blogspot.com
Afinando: Cuadricóptero Atropos

➔

Fonera 2201

➔

OpenWRT

➔

Programa de estabilización

➔

Telemetría y control HTML5
...
Lo básico de un cuadricóptero

Taiksonprojects.blogspot.com
Taiksonprojects.blogspot.com
Plataforma router: Puertos I2C
Buscar pines GPIO de la CPU

Taiksonprojects.blogspot.com
Plataforma router: Puertos I2C y serie
GPIO---> I2C / RS232

Puerto serie

Pines GPIO
Taiksonprojects.blogspot.com
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/modu...
Plataforma router: Puerto serie

stty -F /dev/ttyS0 raw
stty -F /dev/ttyS0 speed 115200

Taiksonprojects.blogspot.com
Plataforma router: Sensores - Giroscopio
Wii Motion Plus
Giroscopio triaxial
Puerto I2C

•

Nos dice a qué velocidad estam...
Plataforma router: Sensores - Acelerómetro
Wii Nunchuck
Acelerómetro triaxial
Puerto I2C

Mide la aceleración (g) en cada ...
Plataforma router: Sensores - Magnetómetro

-Magnetómetro triaxial HMC5881L
-Gauss en cada plano

-El acelerómetro sólo an...
Plataforma router: Leyendo los sensores
ID único para cada sensor. Ej Wii Motion+: 0x52
Petición de datos escribiendo al d...
Obteniendo ángulos absolutos con respecto a la Tierra

acelerómetro

giroscopio
Imagen: “The Balance Filter” MIT

Taiksonp...
Mejor: Matriz de Cosenos Directores (DCM)

Taiksonprojects.blogspot.com
Con qué datos vamos a trabajar:

Velocidad angular : Directo de los giroscopios
➔
Aceleración angular: Derivada de la Velo...
Controlador Proporcional Integral Derivativo

Taiksonprojects.blogspot.com
Worst bedtime story EVER!

Taiksonprojects.blogspot.com
Proporcional
error=valor_actual-valor_anterior
Salida_proporcional=Ganancia_proporcional*error

Taiksonprojects.blogspot.c...
Integral
error_acumulado=error_acumulado+
(error*tiempo_entre_muestras)
Salida_integral=Ganancia_integral
*error_acumulado...
Derivativo
velocidad_error=(errorvelocidad_error)/Tiempo_entre_muestras
• Salida_derivada=Ganancia_derivada*velo
cidad_err...
PID anidado
Ángulo

Controlador P

Velocidad
angular

Controlador PID

Salida al puerto
serie
Taiksonprojects.blogspot.com
Plataforma router: placa de control
-Mínimos componentes externos: Sólo para generar señales PWM
-Válido cualquier microco...
Plataforma router: programa estabilización IMU
Programa crítico que debe ejecutarse en intervalo de tiempo fijo

➔

setiti...
El proceso watchdog informa al kernel de que el sistema no está colgado.

Consume su parte de CPU
●
Si se cuelga el router...
Hardware de actuación
Controladora electrónica de velocidad (ESC)

Motores sin escobillas. “Outrunner”.

Taiksonprojects.b...
Control HTTP
Las órdenes se transmiten a través de peticiones HTTP GET
-Desde eventos keydown keyup de javascript por AJAX...
Control UDP desde mando USB
cat /dev/input/js0
---pad=open(“/dev/input/js0”,O_RDONLY);
reads=read(pad,msg,MSG);
(msg[7]==2...
DEMO
Taiksonprojects.blogspot.com
Gracias!

David Meléndez Cano
@TaiksonTexas

Taiksonprojects.blogspot.com

Taiksonprojects.blogspot.com
Upcoming SlideShare
Loading in …5
×

Trash Robotic Router Platform (TRRP)

816 views
616 views

Published on

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

  • Be the first to like this

No Downloads
Views
Total views
816
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Trash Robotic Router Platform (TRRP)

  1. 1. David Meléndez Cano @taiksontexas Taiksonprojects.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: Reutilizar Taiksonprojects.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 ➔ Robots creados: ROVER Texas Ranger: Linksys WRT54GL Taiksonprojects.blogspot.com Cuadricóptero ATROPOS: La Fonera 2201
  4. 4. Primer contacto: ROV Texas Ranger Taiksonprojects.blogspot.com
  5. 5. Afinando: Cuadricóptero Atropos ➔ Fonera 2201 ➔ OpenWRT ➔ Programa de estabilización ➔ Telemetría y control HTML5 Taiksonprojects.blogspot.com
  6. 6. Lo básico de un cuadricóptero Taiksonprojects.blogspot.com
  7. 7. Taiksonprojects.blogspot.com
  8. 8. Plataforma router: Puertos I2C Buscar pines GPIO de la CPU Taiksonprojects.blogspot.com
  9. 9. Plataforma router: Puertos I2C y serie GPIO---> I2C / RS232 Puerto 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 115200 Taiksonprojects.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: Deriva Taiksonprojects.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. 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
  16. 16. Obteniendo ángulos absolutos con respecto a la Tierra acelerómetro giroscopio Imagen: “The Balance Filter” MIT Taiksonprojects.blogspot.com
  17. 17. Mejor: Matriz de Cosenos Directores (DCM) Taiksonprojects.blogspot.com
  18. 18. Con qué datos vamos a trabajar: Velocidad angular : Directo de los giroscopios ➔ Aceleración angular: Derivada de la Velocidad angular. ➔ Ángulo absoluto: Resultado del filtro aplicado ➔ Taiksonprojects.blogspot.com
  19. 19. Controlador Proporcional Integral Derivativo Taiksonprojects.blogspot.com
  20. 20. Worst bedtime story EVER! Taiksonprojects.blogspot.com
  21. 21. Proporcional error=valor_actual-valor_anterior Salida_proporcional=Ganancia_proporcional*error Taiksonprojects.blogspot.com
  22. 22. Integral error_acumulado=error_acumulado+ (error*tiempo_entre_muestras) Salida_integral=Ganancia_integral *error_acumulado Taiksonprojects.blogspot.com
  23. 23. Derivativo velocidad_error=(errorvelocidad_error)/Tiempo_entre_muestras • Salida_derivada=Ganancia_derivada*velo cidad_error Taiksonprojects.blogspot.com
  24. 24. PID anidado Ángulo Controlador P Velocidad angular Controlador PID Salida al puerto serie Taiksonprojects.blogspot.com
  25. 25. 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 /dev/ttyS0 PIC16f876A ESC Motores Taiksonprojects.blogspot.com
  26. 26. 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
  27. 27. 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
  28. 28. Hardware de actuación Controladora electrónica de velocidad (ESC) Motores sin escobillas. “Outrunner”. Taiksonprojects.blogspot.com
  29. 29. 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
  30. 30. 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
  31. 31. DEMO Taiksonprojects.blogspot.com
  32. 32. Gracias! David Meléndez Cano @TaiksonTexas Taiksonprojects.blogspot.com Taiksonprojects.blogspot.com

×