Download - Trash Robotic Router Platform (TRRP)[RootedCON 2013]

Transcript

David Melndez Cano @taiksontexasTaiksonprojects.blogspot.com

Taiksonprojects.blogspot.com

Qu es TRRP?

Plataforma de desarrollo de bajo o ningn 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 domtica / robtica

Inversin inicial cero. Ya dispones de l Cambia el firmware: Ej: Linux OpenWRT

Pruebas de concepto:

ROVER Texas Ranger: Linksys WRT54GLTaiksonprojects.blogspot.com

Cuadricptero ATROPOS: La Fonera 2201

Primer contacto: ROV Texas Ranger

Taiksonprojects.blogspot.com

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

Placa

camara

i2cTaiksonprojects.blogspot.com

Wii nunchuck

Afinando: Cuadricptero Atropos

Fonera 2201 OpenWRT Programa de estabilizacin Telemetra 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 GPIOTaiksonprojects.blogspot.com

Plataforma router: Carga de mdulos

rm/etc/modules.d/59i2cgpio echo"i2cgpiocustombus0=0,4,7bus1=1,3,1">/etc/modules.d/59i2cgpiocustom echo"i2cgpio">/etc/modules.d/60i2cgpio [reboot] i2cdetect/dev/i2c0Taiksonprojects.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 - Acelermetro Wii Nunchuck Acelermetro triaxial Puerto I2C

Mide la aceleracin (g) en cada plano.

Taiksonprojects.blogspot.com

Plataforma router: Sensores - Magnetmetro

-Magnetmetro triaxial HMC5881L -Gauss en cada plano

-El acelermetro slo anula la deriva en los planos de cabeceo y alabeo. -El plano de guiada (rumbo) se corrige obteniendo el rumbo actual en grados, con respecto al norte.

Taiksonprojects.blogspot.com

acelermetro

giroscopioImagen: The Balance Filter MIT

Pro: Filtro de Kalman; Matriz de Cosenos DirectoresTaiksonprojects.blogspot.com

Plataforma router: Leyendo los sensores ID nico para cada sensor. Ej Wii Motion+: 0x52 Peticin de datos escribiendo al dispositivo Lectura de datos en buffer

#include 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 estabilizacin IMU

Programa crtico que debe ejecutarse en intervalo de tiempo fijosetitimer(ITIMER_REAL,&i_int,NULL); (void)signal(SIGALRM,timeout_real);

Compite por el tiempo de CPU con el servidor web (telemetra y control)

Cambiar la prioridad del proceso con nice no es suficiente: Real Time scheduling FIFO, Round Robin

#include 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 -Mnimos componentes externos: Slo para generar seales PWM -Vlido 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 travs de peticiones HTTP GET -Desde eventos keydown keyup de javascript por AJAX -Desde el proceso que lee del mando USBhttp://atropos/cgibin/ajaxinput?QQZ[GAS]Z[ALABEO]Z[CABECEO]Z[GUIADA]Z

Deben ser muy fluidas y baratas en tiempo de CPU: Httpd tweak:

Httpd.c: [...] if(strncmp(tptr,"cgibin/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)//gasgas=((analog+127))*GAS_FACTOR; [...] (msg[7]==4)//guiada 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 Melndez Cano @TaiksonTexas

Taiksonprojects.blogspot.com

Taiksonprojects.blogspot.com