Búsqueda del punto mas cercano con el Kinect utilizando Processing y Simple-OpenNI

Introducción

El siguiente paso lógico consiste en identificar cual es el punto mas cercano al Kinect, presumiblemente el usuario que interactúa con el sketch, para utilizar este valor como coordenada de entrada.

Su implementación se reduce simplemente a recorrer el mapa de profundidad de alta resolución (context.depthMap()) que provee la cámara de profundidad y obtener de allí la coordenada cuyo valor sea menor pero mayor a cero ya que este corresponde a las áreas no medidas.  Para mayores detalles acerca de la implementación referirse a la función int[] findClosestPoint(int, int).

Para hacerlo un poco mas interesante se agregaron dos barras de desplazamiento en la parte inferior que sirven para limitar la profundidad de los objetos que van a ser realmente tenidos en cuenta en la determinación del punto mas cercano, esto con el fin de aislar otras zonas de acuerdo a su distancia que no quieran ser tenidas en cuenta y puedan estar produciendo interferencia.  Hacia la izquierda de las barras de desplazamiento la distancia es menor (mas cerca del Kinect) y hacia la derecha la distancia crece (se aleja del Kinect).

Basado en esta característica se agregó la funcionalidad de aislar las porciones de la imagen de los objetos que no se encuentran ubicados en el rango de profundidad válido.  Para conmutar entre imagen completa e imagen parcial sólo es necesario presionar la letra ‘t‘ (toggle) en el sketch.

Screenshot

Punto mas cercano al Kinect filtrado por un rango de distancia
Punto mas cercano al Kinect filtrado por un rango de distancia
Separación de la imagen mostrando sólo los objetos ubicados en la distancia válida
Separación de la imagen mostrando sólo los objetos ubicados en la distancia válida

Enlaces

Prueba de las cámaras del Kinect utilizando Processing

Introducción

Este sketch es una demostración simple del uso de las cámaras del Kinect utilizando Processing y la librería Simple-OpenNI.  Se incluyen las siguientes características.

  • Mostrar las imágenes provenientes de la cámara de profundidad
  • Mostrar las imágenes provenientes de la cámara RGB (video convencional)
  • Mostrar la información de color/brillo de un punto específico de una imagen
  • Calcular la distancia física entre la cámara y el punto elegido en el mundo real.

Requisitos

  1. Librería OpenNI
    http://blog.jorgeivanmeza.com/2011/12/instalacion-openni-sensor-kinect-y-nite-en-gnulinux-ubuntu-11-10-desde-fuentes/
  2. Librería Simple-OpenNI para Processing
    http://blog.jorgeivanmeza.com/2012/01/construccion-de-la-libreria-simple-openni-para-processing-bajo-ubuntu-de-32-bits/
  3. Processing
    http://www.processing.org/

Screenshot

Demostración imágenes de profundidad y RGB
Demostración imágenes de profundidad y RGB

Al hacer clic izquierdo sobre cualquiera de las imágenes se obtiene información del color/brillo del pixel seleccionado y en el caso de la imagen de profundidad se obtiene además el cálculo de la distancia física entre la cámara y el punto elegido en el mundo real.

Bright: r = 175
Distance: 2443 mm/96.18111 inches

Bright: r = 81
Distance: 2609 mm/102.71654 inches

Color: r = 49; g = 66; blue = 51

Color: r = 73; g = 53; blue = 11

Enlaces

Problema con la interfaz de red inalámbrica Broadcom en Ubuntu: eth1 en lugar de wlan0

Introducción

A diferencia de otros portátiles Dell que había configurado en el pasado, el mío tenía algo particular con su tarjeta de red inalámbrica.  Esta aparecía referenciada por la interfaz eth1 en lugar de la habitual wlan0.  

$ iwconfig


eth1
IEEE 802.11bg ESSID:off/any

Mode:Managed Access Point: Not-Associated Tx-Power=20 dBm
Retry long limit:7 RTS thr:off Fragment thr:off
Power Management:off

A pesar de esto funcionaba aparentemente de manera correcta utilizando el driver STA, sin embargo empecé a tener problemas cuando quise hacer algunos ajustes a la interfaz así que tuve que darme a la tarea de solucionar este problema.

Como mencioné inicialmente, la tarjeta de red inalámbrica es una Broadcom BCM4312.

$ sudo lspci -vk

08:00.0 Network controller: Broadcom Corporation BCM4312 802.11b/g LP-PHY (rev 01)
Subsystem: Dell Wireless 1397 WLAN Mini-Card
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at f0600000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [40] Power Management version 3
Capabilities: [58] Vendor Specific Information: Len=78 <?>
Capabilities: [e8] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [d0] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Virtual Channel
Capabilities: [160] Device Serial Number df-3d-0d-fd-fd-dd-0d-2d
Capabilities: [16c] Power Budgeting <?>

La situación

Aparentemente esto se debe a la utilización del controlador incorrecto de la tarjeta de red inalámbrica.

La solución

Mediante la aplicación de Additional Drivers (/usr/bin/jockey-gtk) desactivar el controlador STA que se venía utilizando.

Remover los paquetes relacionados con el controlador STA (recomendado).

$ sudo aptitude remove broadcom-sta-common broadcom-sta-source bcmwl-kernel-source

Instalar el firmware apropiado para la tarjeta de red.

$ sudo aptitude install b43-fwcutter firmware-b43-installer

En mi caso resultó que la tarjeta era de bajo consumo –Low-Power (LP-PHY)– por lo cual recibí el siguiente mensaje de error.

An unsupported BCM4312 Low-Power (LP-PHY) device was found.
Use b43 LP-PHY firmware (firmware-b43-lpphy-installer package) instead.

Por este motivo se deben instalar los siguientes paquetes en cambio.

$ sudo aptitude install b43-fwcutter firmware-b43-lpphy-installer

Reiniciar el equipo para que sean tenidos en cuenta los cambios en la configuración recién hechos.

$ sudo reboot

La verificación

Contrario a lo que esperaba, el nuevo controlador (b43) no aparece listado en la aplicación de Additional Drivers, sin embargo la interfaz ya aparece con su nombre correcto y es posible realizar la conexión a redes inalámbricas cercanas (por ejemplo utilizando el NetworkManager).

 

 

Solucionando mis problemas con el modem Huawei HG530

Introducción

En el apartamento UNE me instaló un gateway Huawei HG530 ADSL.  Como es habitual en estos aparatos incluye cuatro puertos LAN para conectar mediante cable a un igual número de equipos, sin embargo los equipos que yo conectaba sólo funcionaban en el puerto #1, los demás obtenían una dirección IP del servicio DHCP pero no conseguían acceder a Internet.

El problema y la solución

Anoche le dí otra oportunidad al problema y estuve revisando las opciones de configuración web del dispositivo y encontré que bajo la opción Advanced > Port Mapping es posible crear una especie de VLANs entre los puertos.  Tal y como me lo entregaron los técnicos de UNE parecía contener la definición de dos VLANs, la primera incluía al puerto LAN #1 y la segunda a los demás siendo esto coherente con los síntomas analizados.

Para solucionar esta situación removí la segunda VLAN y agregué los puertos LAN faltantes a la primera para permitir la comunicación entre ellos, el puerto WAN y el puerto WLAN.  La configuración resultante se muestra a continuación.

También es conveniente verificar bajo la opción Basic > DHCP que este servicio se encuentre activo a través de todos los puertos LAN, de lo contrario los equipos conectados en ellos no obtendrán una dirección IP de manera automática.

Mejorando la seguridad

Con sorpresa encontré que el firewall también venía desactivado, permitiendo establecer conexiones web y telnet para la administración del router desde Internet.  Para impedir esto se activaron las opciones bajo Advanced > Security.


Así como las ubicadas bajo Advanced > Firewall.

Problemas de autenticación/autorización de un 3Com OfficeConnect Wireless Router

Introducción.

El viernes pasado mientras aprendía acerca de Team Software Process se me ocurrió echar una mirada para intentar encontrar la dirección del filtro de contenido de la red que en la que estaba que la hacía prácticamente inútil bloqueando la mayoría de los sitios web de interés general.

Un traceroute de los sitios bloqueados no me mostró la ubicación que quería, sólo permitía llegar hasta el enrrutador inalámbrico que me estaba permitiendo acceder a la red LAN.  Decepcionado terminé saludándolo para darme cuenta de un problema de seguridad que ocultaba.

Conociendo al dispositivo.

Inicialmente no me dijo mucho, sólo que aparentemente era un dispositivo 3Com (o al menos su interfaz de red lo era).

$ sudo nmap -sA -O 192.168.2.1

Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-16 08:10 COT
All 1000 scanned ports on 192.168.2.1 are unfiltered
MAC Address:
00:FF:C1:4D:FF:EE (3com Europe)
Too many fingerprints match this host to give specific OS details
Network Distance: 1 hop

Posteriormente lo confirmé al ver que el dispositivo 3Com ejecutaba aparentemente una versión de Linux con el kernel 2.6 lo cual es relativamente reciente.

$ sudo nmap -sS -O 192.168.2.1

Starting Nmap 5.00 ( http://nmap.org ) at 2010-01-16 08:09 COT
Interesting ports on 192.168.2.1:
Not shown: 998 closed ports
PORT   STATE SERVICE
53/tcp open  domain
80/tcp open  http
MAC Address: 00:FF:C1:4D:FF:EE (3com Europe)
Device type: general purpose
Running: Linux 2.6.X
OS details: Linux 2.6.22

Network Distance: 1 hop

También se hizo evidente que el dispositivo permitía su administración a través de web (puerto 80).

Accediendo a el dispositivo utilizando un navegador web encontré que era finalmente un 3Com OfficeConnect Wireless 11g.  Sabiendo esto investigué un poco si había problemas conocidos con este dispositivo.

La vulnerabilidad.

Resulta que estos dispositivos manejan incorrectamente la autenticación/autorización de su módulo web de administración, protegiendo correctamente a las páginas pero permitiendo el acceso directo a los CGIs.  Esto unido a que el método de copia de seguridad de la configuración del router genera un archivo (config.bin) con esta información y lo almacena en su memoria interna para que el administrador lo descargue, termina convirtiéndose en un grave problema de seguridad.

El archivo puede descargarse mediante un CGI llamado SaveCfgFile así que para obtenerlo sólo es necesario acceder a él mediante un navegador web.

http://192.168.2.1/SaveCfgFile.cgi

El archivo contiene toda la configuración del enrrutador, incluyendo su información de red y contraseñas de administración!


httpd_username=admin
httpd_password=admin

mradius_username=admin
mradius_password=admin
mradius_secret=mradius1218
mradius_port=1812

http_username=admin
login_password=admin
http_passwd=admin

Conclusiones.

Esta vulnerabilidad fue reportada a 3Com por Luca Carettoni de ikkisoft.com en diciembre de 2008 y fue conocida por el público en general en febrero del 2009.

Supongo que desde hace tanto tiempo para acá 3Com ya ha solucionado esta vulnerabilidad y se encuentra disponible una actualización del firmware que la soluciona.

Debe tenerse especial cuidado en los dispositivos que tengan la opción de Remote Administration activa ya que esta vulnerabilidad podrá ser explotada desde Internet.

Enlaces.

Sonido a través de los parlantes en un Dell Vostro 1400 con Windows 7

Introducción.

Hoy, justo cuando lo necesitaba urgentemente descubrí que a mi portátil, un Dell Vostro 1400, con Windows 7 Release Candidate 1 no le estaban funcionando los parlantes.  Probé con audífonos y si funcionaron pero solamente conectados en uno de los dos conectores para este fin.

La mejor solución a este problema, ocasionado por los controladores de Windows 7 con los chips de SigmaTel,  que he encontrado hasta ahora es el de instalar los controladores de Windows Vista para este chipset.

Enlaces.