Trash Robotic Router Platform (TRRP)
-
Upload
navajanegra -
Category
Documents
-
view
431 -
download
1
Transcript of Trash Robotic Router Platform (TRRP)
Taiksonprojects.blogspot.com
David Meléndez CanoDavid Meléndez Cano@taiksontexas
Taiksonprojects.blogspot.com
Taiksonprojects.blogspot.com
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
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
Cuadricóptero ATROPOS:La Fonera 2201
Taiksonprojects.blogspot.com
Primer contacto: ROV Texas Ranger
Taiksonprojects.blogspot.com
Afinando: Cuadricóptero Atropos
➔Fonera 2201
➔OpenWRT
➔Programa de estabilización
➔Telemetría y control HTML5
Taiksonprojects.blogspot.com
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
Pines GPIO
Puerto serie
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
Plataforma router: Leyendo los sensores
#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);
ID único para cada sensor. Ej Wii Motion+: 0x52
•Petición de datos escribiendo al dispositivo•Lectura de datos en buffer
Taiksonprojects.blogspot.com
Imagen: “The Balance Filter” MIT
giroscopio
acelerómetro
Obteniendo ángulos absolutos con respecto a la Tierra
Taiksonprojects.blogspot.com
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 Velocidad angular.➔Ángulo absoluto: Resultado del filtro aplicado
Taiksonprojects.blogspot.com
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.com
Integralerror_acumulado=error_acumulado+(error*tiempo_entre_muestras)
Salida_integral=Ganancia_integral*error_acumulado
Taiksonprojects.blogspot.com
Derivativo
velocidad_error=(error-velocidad_error)/Tiempo_entre_muestras
• Salida_derivada=Ganancia_derivada*velocidad_error
Taiksonprojects.blogspot.com
PID anidado
Controlador P
Controlador PID
Ángulo
Velocidadangular
Salida al puertoserie
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
ESCMotores
Taiksonprojects.blogspot.com
Plataforma router: programa estabilización IMU
➔Programa crítico 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 (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);schedule.sched_priority=sched_get_priority_max(SCHED_FIFO);sched_setscheduler(pthread_self(), SCHED_FIFO,&schedule);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
Hardware de actuación
Controladora electrónica de velocidad (ESC)
Motores sin escobillas. “Outrunner”.
Taiksonprojects.blogspot.com
Control HTTP
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);
}[...]
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:
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
DEMO
Taiksonprojects.blogspot.com
Gracias!Gracias!
David Meléndez CanoDavid Meléndez Cano
@TaiksonTexas
Taiksonprojects.blogspot.com