Este documento describe cómo utilizar un router viejo como plataforma para proyectos de domótica y robótica de bajo coste. Explica cómo cambiar el firmware del router para usarlo como controlador y cómo crear robots como un rover y un cuadricóptero utilizando sensores como acelerómetros, giroscopios y magnetómetros conectados a través de puertos I2C y serie. También describe cómo implementar controles de vuelo mediante protocolos HTTP y UDP y algoritmos como PID.
David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]RootedCON
En esta charla se presentará una plataforma robótica integral, basada en elementos que tenemos por casa, y de fácil y barata adquisición. Por eso, la elección como prueba de concepto, se apoya en dos robots que he realizado a lo largo de 3 años de forma casera, usando sendos routers Wifi. Se trata del WRT54GL y La Fonera 2201.
Uno es un ROV y el otro un cuadricóptero, ambos controlados mediante HTML5 ofrecido desde el servidor web de cada router. Los aspectos técnicos de la ponencia incluyen:
- Por qué el firmware OpenWRT.
- I2C bitbanging con La Fonera. Conexiones de los GPIO y cargas de los módulos Kernel necesarios. Entrada de mi blog
- Lectura de mandos Wii mediante el I2C emulado previamente.
- Extender funcionalidades a través del puerto serie, a un microcontrolador
- Procesos en background desde OpenWrt, manejo de prioridades fuera de espacio de usuario para procesos críticos.
- Manipulación de httpd en BusyBox para atender ciertas peticiones ajax más rápido, mediante memoria compartida
- Integración de técnicas AJAX y AJAX PUSH (COMET) para aceptar órdenes y transmitir datos de telemetría.
- Lectura de mandos de consola, PS2, Entrenadores de vuelo RC, etc mediante programa en C bajo GNU/Linux y envío de los datos a través de peticiones HTTP o paquetes UDP
- Compilación cruzada de programas para arquitecturas empotradas (MIPS, ARM..)
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Gustavo Arjones
Compartimos nuestra experiencia migrando de 100+ VMs a un cluster de Docker Swarm, los componentes y prácticas que brindaron estabilidad, control y cuales son nuestro planes futuros basado en ese aprendizaje.
Video: https://www.youtube.com/watch?v=q93vmO47iJ0
David Meléndez Cano - Trash Robotic Router Platform (TRRP) [Rooted CON 2013]RootedCON
En esta charla se presentará una plataforma robótica integral, basada en elementos que tenemos por casa, y de fácil y barata adquisición. Por eso, la elección como prueba de concepto, se apoya en dos robots que he realizado a lo largo de 3 años de forma casera, usando sendos routers Wifi. Se trata del WRT54GL y La Fonera 2201.
Uno es un ROV y el otro un cuadricóptero, ambos controlados mediante HTML5 ofrecido desde el servidor web de cada router. Los aspectos técnicos de la ponencia incluyen:
- Por qué el firmware OpenWRT.
- I2C bitbanging con La Fonera. Conexiones de los GPIO y cargas de los módulos Kernel necesarios. Entrada de mi blog
- Lectura de mandos Wii mediante el I2C emulado previamente.
- Extender funcionalidades a través del puerto serie, a un microcontrolador
- Procesos en background desde OpenWrt, manejo de prioridades fuera de espacio de usuario para procesos críticos.
- Manipulación de httpd en BusyBox para atender ciertas peticiones ajax más rápido, mediante memoria compartida
- Integración de técnicas AJAX y AJAX PUSH (COMET) para aceptar órdenes y transmitir datos de telemetría.
- Lectura de mandos de consola, PS2, Entrenadores de vuelo RC, etc mediante programa en C bajo GNU/Linux y envío de los datos a través de peticiones HTTP o paquetes UDP
- Compilación cruzada de programas para arquitecturas empotradas (MIPS, ARM..)
Nerdear.la 2018 | Journey to Stability - Cómo reducimos costos y aumentamos l...Gustavo Arjones
Compartimos nuestra experiencia migrando de 100+ VMs a un cluster de Docker Swarm, los componentes y prácticas que brindaron estabilidad, control y cuales son nuestro planes futuros basado en ese aprendizaje.
Video: https://www.youtube.com/watch?v=q93vmO47iJ0
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
Workshop realitzat per l'equip uLab UPC de l'inLab FIB, després de realitzar una prova de concepte de la tecnologia. Més informació:
http://inlab.fib.upc.edu/ca/blog/meteorjs-getting-started
Taller: Exploración de redes con Nmap.
Exploración de redes.
○ Conceptos.
○ Fundamentos básicos de Nmap
○ Técnicas de descubrimiento de hosts
○ Identificación de sistemas operativos
Descubrimiento de servicios.
○ Técnicas de escaneo de puertos
○ Identificación de servicios
Detección de vulnerabilidades.
○ Recolección de información
○ Ataques de fuerza bruta
○ Detectando vulnerabilidades en servidores web
Cobertura de código con test funcionales para superhéroesatSistemas
Víctor Madrid, especialista en QA y Testing de la Oficina Técnica de atSistemas presentó su ponencia y demo sobre "Cobertura de código con test funcionales para superhéroes de hoy en día" durante el evento ExpoQA16, celebrado en Madrid.
Automatizando el aprendizaje basado en datosManuel Martín
En los últimos años ha habido un creciente interés en extraer información útil de grandes cantidades
de datos. Esta información se puede usar para hacer predicciones a futuro o inferir valores
desconocidos. Existen una gran variedad de modelos predictivos para problemas de clasificación y
regresión. Sin embargo, en muchas investigaciones se asume a menudo que los datos están limpios
y se presta poca atención al preprocesamiento de los datos. A pesar de que hay muchos métodos
para solventar tareas de preprocesamiento específicas (por ejemplo, detección de valores extremos o
selección de atributos), el esfuerzo para realizar el preprocesamiento y limpiado de los datos puede
llevar entre el 60% y el 80% de todo el tiempo empleado en el proceso de minería de datos. Se hace por tanto muy necesario automatizar todo o parte de este proceso. En esta charla se da un introducción a la automatización de la selección y optimización de múltiples
métodos de preprocesamiento y predicción.
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
Workshop realitzat per l'equip uLab UPC de l'inLab FIB, després de realitzar una prova de concepte de la tecnologia. Més informació:
http://inlab.fib.upc.edu/ca/blog/meteorjs-getting-started
Taller: Exploración de redes con Nmap.
Exploración de redes.
○ Conceptos.
○ Fundamentos básicos de Nmap
○ Técnicas de descubrimiento de hosts
○ Identificación de sistemas operativos
Descubrimiento de servicios.
○ Técnicas de escaneo de puertos
○ Identificación de servicios
Detección de vulnerabilidades.
○ Recolección de información
○ Ataques de fuerza bruta
○ Detectando vulnerabilidades en servidores web
Cobertura de código con test funcionales para superhéroesatSistemas
Víctor Madrid, especialista en QA y Testing de la Oficina Técnica de atSistemas presentó su ponencia y demo sobre "Cobertura de código con test funcionales para superhéroes de hoy en día" durante el evento ExpoQA16, celebrado en Madrid.
Automatizando el aprendizaje basado en datosManuel Martín
En los últimos años ha habido un creciente interés en extraer información útil de grandes cantidades
de datos. Esta información se puede usar para hacer predicciones a futuro o inferir valores
desconocidos. Existen una gran variedad de modelos predictivos para problemas de clasificación y
regresión. Sin embargo, en muchas investigaciones se asume a menudo que los datos están limpios
y se presta poca atención al preprocesamiento de los datos. A pesar de que hay muchos métodos
para solventar tareas de preprocesamiento específicas (por ejemplo, detección de valores extremos o
selección de atributos), el esfuerzo para realizar el preprocesamiento y limpiado de los datos puede
llevar entre el 60% y el 80% de todo el tiempo empleado en el proceso de minería de datos. Se hace por tanto muy necesario automatizar todo o parte de este proceso. En esta charla se da un introducción a la automatización de la selección y optimización de múltiples
métodos de preprocesamiento y predicción.
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
2
3. 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
Taiksonprojects.blogspot.com
Cuadricóptero ATROPOS:
La Fonera 2201
9. Plataforma router: Puertos I2C y serie
GPIO---> I2C / RS232
Puerto serie
Pines GPIO
Taiksonprojects.blogspot.com
10. 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
11. Plataforma router: Puerto serie
stty -F /dev/ttyS0 raw
stty -F /dev/ttyS0 speed 115200
Taiksonprojects.blogspot.com
12. 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
13. Plataforma router: Sensores - Acelerómetro
Wii Nunchuck
Acelerómetro triaxial
Puerto I2C
Mide la aceleración (g) en cada plano.
Taiksonprojects.blogspot.com
14. 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
15. 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
16. Obteniendo ángulos absolutos con respecto a la Tierra
acelerómetro
giroscopio
Imagen: “The Balance Filter” MIT
Taiksonprojects.blogspot.com
17. Mejor: Matriz de Cosenos Directores (DCM)
Taiksonprojects.blogspot.com
18. 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
25. 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
26. 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
27. 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
29. 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
30. 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