Mes: agosto 2008

  • confianza mutua en el comercio electrónico

    Una de las características más interesantes de e-bay es la capacidad de generar confianza mutua entre el comprador y el vendedor. Tanto el comprador como el vendedor al finalizar una transacción comercial, pueden evaluarse mutuamente. Esto genera un historial de compras y ventas que es muy útil a la hora de elegir un producto (o aceptar la oferta de un comprador): un vendedor con un 99% de valoraciones positivas da más confianza que uno con un 10%. Incluso la evaluación forma parte del proceso de compra y está mal visto no hacer la evaluación. Este proceso es beneficioso tanto para el comprador como para el ya que genera prestigio para el vendedor y confianza para el comprador y ayuda a eliminar las dudas que surgen en una transacción: ¿me llegará el producto si compro a esta persona? ¿me pagará este cliente?

    La ventaja de ebay respecto a otras plataformas es que está integrado en el proceso de compra. Existen portales de evaluaciones como ciao, kelkoo ó wikio, pero al no estar integrados en el proceso de compra, lo normal es que los compradores opinen más frecuentemente cuando la transacción ha ido mal y no cuando ha ido bien.

    Ahora que estamos en el momento de la integración por medio de mashups, sería buena idea que los propietarios de tiendas electrónicas integraran algún mecanismo de evaluación en el proceso de compra. Pero para poder hacerlo necesitarían un api de evaluación (y si es común a todos los sitios y abierto al estilo open social, mejor). Así se instauraría un sistema de confianza mutua similar al que genera ebay, pero multivendedor.

  • falta de tiempo

    Hace tiempo que no he podido escribir nada por falta de tiempo. A partir de ahora voy a escribir de forma más esporádica, pero escribiré artículos con más contenido propio y ya no publicaré noticias. No sabría decir la periodicidad, simplemente según tenga tiempo, pero intentaré que no pase más de un mes entre cada entrada.
    En los enlaces podéis leer otros blogs que publican noticias de robótica de forma más constante y expuestas de forma muy interesante.

  • jugando con player/stage

    En la asignatura de robótica del posgrado de inteligencia artificial de la Uned me he puesto a trastear con Player/Stage, uno de los entornos de robótica propuestos para hacer las prácticas. De entre los entornos que nos han sugerido, este era el que me parecía más interesante: open source, basado en linux, con entorno de simulación y ejecución y muy usado en diferentes robots y concursos.

    En un primer momento, player/stage resulta un poco frustrante: la interfaz de usuario no es muy usable y la documentación no es demasiado completa. La curva de aprendizaje es un poco alta, pero con ponerse manos a la obra y hacer muchas pruebas se consegue que funcione.

    El sistema se compone de 3 partes:

    • player: es el controlador del robot, se trata de un servidor tcp que ejecuta sobre el robot y sirve interfaces para controlarlo. La tarea del desarrollador es hacer un cliente que interactúe con player.
    • stage: se trata de un simulador de robots en 2D. No es demasiado detallado, pero al ser simple puede incluir un número alto de robots simultáneamente.
    • gazebo: es un simulador en 3D más realista, lo que hace que sea más lento y no apto para un número alto de robots.

    Sólamente he tratado con el entorno player/stage para simulaciones en 2D, así que sólo comento estos módulos, nada sobre gazebo por ahora.

    En cuanto a player, es el módulo que define la arquitectura del sistema. Cómo arquitectura de desarrollo es muy interesante: por un lado hay un entorno servidor que se ejecuta sobre el robot (real o simulado) que recibe peticiones tcp. Por otro hay un cliente que accede a ese robot, para lo que nos dan unas librerías cliente que nos evitan trabajar a bajo nivel. Para controlar un robot a través del servidor player existen una serie de interfaces (por ejemplo position2d para mover un robot en 2 dimensiones) que son implementadas por unos drivers (por ejemplo, un driver para el robot pioneer que implemente la interfaz position2d).

    El desarrollador sólo necesita escribir un programa cliente que haga uso de los interfaces, normalmente a través de librerías cliente implementadas en diversos lenguajes de programación (C, C++, python, java). Las librerías se encargan del trabajo sucio de contactar con el servidor y enviar mensajes, y sólo necesitamos usar los interfaces para controlar nuestro robot. Con esta arquitectura, un mismo cliente que use unos interfaces, puede controlar diferentes robots que tengan los drivers apropiados para implementar los interfaces (incluso aunque el hardware sea muy diferente).

    El servidor se configura de forma bastante sencilla con unos ficheros que definen dispositivos (devices): son asociaciones entre interfaces y drivers. Por ejemplo, el interfaz laser define el api para interactuar con un medidor de distancia láser (laser ranger). Un programa cliente sólo usa ese interfaz. Sin embargo tenemos un robot equipado con un sensor SICK LMS 200 que implementa el interfaz laser a través del driver sicklms200. En nuestro fichero de configuración, debemos definir un dispositivo que asocie el interfaz laser y el driver sicklms200:

    driver
    (
    name "sicklms200" # The driver's name
    provides ["laser:0"] # The device address
    )

    Si tenemos un programa cliente, este accedería al dispositivo «laser:0» que implementa el interfaz «laser», usando el driver «sicklms200».

    Siguiendo esta sencilla arquitectura de drivers/interfaces/dispositivos podemos controlar nuestro robot. En mi caso, he hecho pruebas con python que, aunque no está totalmente documentado, se puede usar intuitivamente con la documentación de la librería cliente de C. Player se trata de una especie de sistema operativo para la robótica, definiendo los interfaces básicos para controlar un robot, pero que se ejecuta sobre tcp, lo que lo hace bastante flexible.

    Ahora vamos con stage. Se implementa cómo un driver para player, así que necesitamos configurar un servidor player con un driver stage que se encarga de simular el robot ó robots. Esto difiere de la arquitectura player para un robot físico: para cada robot, deberíamos tener un servidor player diferente. Sin embargo en un entorno simulado con stage, tenemos varios robots simulados en un sólo servidor player. Además el servidor ejecuta una interfaz gráfica para mostrar los resultados de la simulación. El modelo del mundo se define en un fichero de configuración del mundo, donde definimos los objetos y robots que hay en el mundo y el plano del mundo se define en un fichero de imagen (jpg por ejemplo). Al ejecutar la simulación, vemos el plano del mundo con los objetos definidos incluyendo los robots. Si ejecutamos nuestro cliente, se actualiza la posición del robot el plano del mundo. El mismo cliente nos sirve para interactuar con un entorno simulado o real, sin ningún cambio: siempre interactúa con un servidor player.

    El problema de esta arquitectura de simulación es que algunos drivers no están implementados en stage, como por ejemplo el driver amcl para localización (que devuelve una estimación de la posición en un mapa). Para usarlo es necesario definir un segundo servidor que utilice los interfaces del robot simulado. Hay ejemplos y es sencillo de realizar (aunque el algoritmo de localización no me terminó de funcionar) pero es enrevesado de configurar.

    El conjunto player/stage como entorno de simulación funciona bastante bien, es bastante rápido y creo que lo suficientemente detallado. Podemos acceder a casi todos los interfaces de los robots simulados y he trasteado con sensores láser y sónar para generar mapas a partir de ellos. Me ha faltado probarlo con un robot real, para comparar la calidad de la simulación, pero no tengo acceso a ninguno de los robots reales.

    En definitiva, se trata de un entorno bastante completo, con mucho código ya desarrollado y además open source. La parte negativa es que player ejecuta sobre linux, así que necesitaremos un hardware que ejecute el kernel y algunas dependencias, lo que nos limita a efectos prácticos a arquitecturas pc (esto significa robots caros). También hay que tener en cuenta que al ejecutar sobre tcp, la latencia puede darnos problemas.

    Por el tipo de módulos existentes (mapas, localización, etc) parece más indicado para sistemas deliberativos o híbridos, pero el el sistema es completamente agnóstico en este aspecto, sólo define interfaces que podemos usar cómo queramos. En este sentido sería interesante desarrollar las librerías cliente, que actualmente se limitan a ofrecer los interfaces sin profundizar en las estructuras de control reactivo o deliberativo.

    Por cierto, por falta de tiempo no podré terminar la asignatura a tiempo y probablemente repita el año que viene 🙁 lo bueno es que podré profundizar un poco más en ella.

  • el silencioso año linux

    Hace muchos años que se escucha va a ser el año del escritorio linux y que el imperio de microsoft va a estar amenzado, pero parece que todavía no ha sido así. Sin embargo, después de intentar colarse en el escritorio sin éxito, parece linux se cuela en los hogares sin hacer ruido: en casa tengo el popcorn hour (un disco duro multimedia HD), un asus eeepc y una tv panasonic 37PX70 (sorprendentemente con linux, al menos según parece en el manual y la licencia de usuario). Todos con linux de fábrica, sin tener que reinstalar nada. Sé que mi casa no es una muestra muy significativa, pero hay más indicios: Dell ya vende portátiles con Ubuntu preinstalado (después de hacer una encuesta a sus clientes) y Google prepara el camino a la telefonia móvil con android. Al final llegará el año de linux, pero sin hacer ruido, casi sin que sepamos que está ahí.

  • posible efecto de la serie eee de Asus

    Últimamente me ha llamado la atención la serie eee de Asus que se inició con el portátil de bajo coste eee PC y se ha ampliado con el eee box, que es una versión para escritorio. Ámbos son pc’s de pequeño tamaño no muy potentes pero completamente funcionales. Excepto para juegos 3D (aunque en el eee PC se puede jugar a tuxracer perfectamente)  y programas que requieran mucha potencia de cálculo, probablemente sean suficiente para la mayoría de usuarios, sobretodo para los usuarios que usan el ordenador para acceder a internet. Tengo un eee PC y resulta muy práctico para ver fotos, documentos o leer blogs sin encender el ordenador principal.

    Aunque por el momento los ordenadores de la serie eee están pensados como segundo ordenador, dado que su potencia es suficiente para acceder a internet y que muchas aplicaciones informáticas se han convertido en aplicaciones web (Google docs, por ejemplo), es posible que la familia eee modifique la forma de consumir ordenadores. Estos pequeños pc’s son dificilmente actualizables, pero en más menos un año se pueden renovar por otro más nuevo sin que el bolsillo se resienta demasiado, de forma parecida a cómo se hace con los teléfonos móviles.

    Es posible que se cree un nuevo hábito de cambiar de ordenador al estilo de cómo se hace con los móviles, pero esta nueva forma no será extensible a todos los usuarios, sólo a los que usan el ordenador como puerta de acceso a internet.