trash robotic router platform (trrp)[rootedcon 2013]
Post on 12-Aug-2015
71 Views
Preview:
DESCRIPTION
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
top related