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

Trash Robotic Router Platform (TRRP)

Embed Size (px)

Citation preview

Page 1: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

David Meléndez CanoDavid Meléndez Cano@taiksontexas

Taiksonprojects.blogspot.com

Page 2: Trash Robotic Router Platform (TRRP)

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

Page 3: Trash Robotic Router Platform (TRRP)

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

Page 4: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Primer contacto: ROV Texas Ranger

Page 5: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Afinando: Cuadricóptero Atropos

➔Fonera 2201

➔OpenWRT

➔Programa de estabilización

➔Telemetría y control HTML5

Page 6: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Lo básico de un cuadricóptero

Page 7: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Page 8: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Plataforma router: Puertos I2C

Buscar pines GPIO de la CPU

Page 9: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Plataforma router: Puertos I2C y serie

GPIO---> I2C / RS232

Pines GPIO

Puerto serie

Page 10: Trash Robotic Router Platform (TRRP)

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

Page 11: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Plataforma router: Puerto serie

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

Page 12: Trash Robotic Router Platform (TRRP)

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

Page 13: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Plataforma router: Sensores - Acelerómetro

Wii Nunchuck

Acelerómetro triaxial

Puerto I2C

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

Page 14: Trash Robotic Router Platform (TRRP)

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.

Page 15: Trash Robotic Router Platform (TRRP)

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

Page 16: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Imagen: “The Balance Filter” MIT

giroscopio

acelerómetro

Obteniendo ángulos absolutos con respecto a la Tierra

Page 17: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Mejor: Matriz de Cosenos Directores (DCM)

Page 18: Trash Robotic Router Platform (TRRP)

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

Page 19: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Controlador Proporcional Integral Derivativo

Page 20: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Worst bedtime story EVER!

Page 21: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Proporcional

error=valor_actual-valor_anterior

Salida_proporcional=Ganancia_proporcional*error

Page 22: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Integralerror_acumulado=error_acumulado+(error*tiempo_entre_muestras)

Salida_integral=Ganancia_integral*error_acumulado

Page 23: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Derivativo

velocidad_error=(error-velocidad_error)/Tiempo_entre_muestras

• Salida_derivada=Ganancia_derivada*velocidad_error

Page 24: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

PID anidado

Controlador P

Controlador PID

Ángulo

Velocidadangular

Salida al puertoserie

Page 25: Trash Robotic Router Platform (TRRP)

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

Page 26: Trash Robotic Router Platform (TRRP)

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);

Page 27: Trash Robotic Router Platform (TRRP)

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);

Page 28: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Hardware de actuación

Controladora electrónica de velocidad (ESC)

Motores sin escobillas. “Outrunner”.

Page 29: Trash Robotic Router Platform (TRRP)

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:

Page 30: Trash Robotic Router Platform (TRRP)

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; [...]

Page 31: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

DEMO

Page 32: Trash Robotic Router Platform (TRRP)

Taiksonprojects.blogspot.com

Gracias!Gracias!

David Meléndez CanoDavid Meléndez Cano

@TaiksonTexas

Taiksonprojects.blogspot.com