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 casa Los trastos pueden ser útiles No tirar, no reciclar: Reutilizar

Taiksonprojects.blogspot.com

2

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 WRT54GL
Taiksonprojects.blogspot.com

Cuadricóptero ATROPOS: La Fonera 2201

Primer contacto: ROV Texas Ranger

Taiksonprojects.blogspot.com

ROV Texas Ranger - Software
Interfaz WEB ajax /dev/ttyS0 Cgi/Iframe_comet.bin comet Libjpeg.h Target.c

Placa

camara

i2c
Taiksonprojects.blogspot.com

Wii nunchuck

Afinando: Cuadricóptero Atropos

Fonera 2201 OpenWRT Programa de estabilización Telemetría y control HTML5

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/modules.d/59­i2c­gpio­custom echo "i2c­gpio" >/etc/modules.d/60­i2c­gpio [reboot] i2c­detect /dev/i2c0 
Taiksonprojects.blogspot.com

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 estamos girando en cada plano No tan sencillo: Deriva

Taiksonprojects.blogspot.com

Plataforma router: Sensores - Acelerómetro Wii Nunchuck Acelerómetro triaxial Puerto I2C

Mide la aceleración (g) en cada plano.

Taiksonprojects.blogspot.com

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

acelerómetro

giroscopio
Imagen: “The Balance Filter” MIT

Pro: “Filtro de Kalman”; “Matriz de Cosenos Directores”
Taiksonprojects.blogspot.com

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

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

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

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

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

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

Video: Vuelo Atropos Quadrocopter

Taiksonprojects.blogspot.com

Gracias!

David Meléndez Cano @TaiksonTexas

Taiksonprojects.blogspot.com

Taiksonprojects.blogspot.com

Sign up to vote on this title
UsefulNot useful