Lectura de los sensores mediante XML

xml parser Roomba Wi-fi RemoteXML o eXtensible Markup Language es un lenguaje de etiquetas enfocado a la estandarización de intercambio de información estructurada entre diferentes plataformas de forma sencilla, intuitiva y fácil (by Wikipedia). Por este motivo el embebido Roomba Wi-fi Remote dispone de un fichero accesible desde el exterior que permite a los programadores la posibilidad de realizar una  lectura de los diferentes sensores del robot mediante un intérprete/parser XML estándar.

En estos ficheros XML se incluyen diferentes campos o tags, relacionados cada uno de ellos con cada sensor del iRobot Roomba que forman la trama de respuesta al comando [142][0] (lectura bloque 0 de sensores o lo que es lo mismo, lectura de todos los sensores).  Los ficheros en cuestión son roomba.xml y rwr.xml que son accesibles mediante la URL  http://IP_de_tu_Roomba_Wi-fi_Remote/roomba.xmlhttp://IP_de_tu_Roomba_Wi-fi_Remote/rwr.xml respectivamente

 Como dato importante, hay que tener en cuenta que por defecto las URLs de Roomba Wi-fi Remote son accesibles mediante usuario y password, de manera que si lo que se quiere es tener acceso sin problemas de autenticación al fichero roomba.xml es recomendable dejar los campos usuario y password en blanco durante la configuración para evitar complicados algoritmos de acceso al fichero XML y se pueda, así, realizar una lectura rápida de la estructura XML.

Dado que la actualización de este fichero se realiza a la vez que se ejecuta una lectura de este, sólo se permiten dos conexiones simultaneas a roomba.xml y/o rwr.xml, tal y como pasa con la interfaz web del Roomba Wi-fi Remote.

Como último dato importante a tener en cuenta: Para poder balancear el funcionamiento del embebido y poder ser eficiente en las conexiones por TCP/IP, cuando el módulo detecta una conexión al puerto 9001 (Modo transparente o Gateway) la actualización de estos ficheros deja de realizarse, así como ya se explica en el Modo transparente.

roomba.xml

El fichero roomba.xml es únicamente de lectura y tiene una estructura que no se modifica con el tiempo y en el que se actualiza única y exclusivamente el valor numérico relacionado con los sensores del robot. La actualización del valor de los sensores se realiza caad 500ms independientemente del acceso al fichero o lectura de este, pues se actualizan los valores de forma periódica. Este dato es importante si os fijáis en el apartado dedicado a los sensores de Angle y Distance del manual SCI de iRobot.

La estructura fija de este fichero XML es la siguiente:

<response>
  <r0>
    <name>'Bumps Wheeldrops'</name>
    <value>VALOR</value>
  </r0>
  <r1>
    <name>'Wall'</name>
    <value>VALOR</value>
  </r1>
  <r2>
    <name>'Cliff Left'</name>
    <value>VALOR</value>
  </r2>
  <r3>
    <name>'Cliff Front Left'</name>
    <value>VALOR</value>
  </r3>
  <r4>
    <name>'Cliff Front Right'</name>
    <value>VALOR</value>
  </r4>
  <r5>
    <name>'Cliff Right'</name>
    <value>VALOR</value>
  </r5>
  <r6>
    <name>'Virtual Wall'</name>
    <value>VALOR</value>
  </r6>
  <r7>
    <name>'Motor Overcurrents'</name>
    <value>VALOR</value>
  </r7>
  <r8>
    <name>'Dirt Detector - Left'</name>
    <value>VALOR</value>
  </r8>
  <r9>
    <name>'Dirt Detector - Right'</name>
    <value>VALOR</value>
  </r9>
  <r10>
    <name>'Remote Opcode'</name>
    <value>VALOR</value>
  </r10>
  <r11>
    <name>'Buttons'</name>
    <value>VALOR</value>
  </r11>
  <r12>
    <name>'Distance'</name>
    <value>VALOR</value>
  </r12>
  <r13>
    <name>'Angle'</name>
    <value>VALOR</value>
  </r13>
  <r14>
    <name>'Charging State'</name>
    <value>VALOR</value>
  </r14>
  <r15>
    <name>'Voltage'</name>
    <value>VALOR</value>
  </r15>
  <r16>
    <name>'Current'</name>
    <value>VALOR</value>
  </r16>
  <r17>
    <name>'Temperature'</name>
    <value>VALOR</value>
  </r17>
  <r18>
    <name>'Charge'</name>
    <value>VALOR</value>
  </r18>
  <r19>
    <name>'Capacity'</name>
    <value>VALOR</value>
  </r19>
</response>

El campo principal de cada sensor es <rX> donde X corresponde al número de sensor que se está monitorizando y dentro de cada tag <rX> se especifican el nombre del sensor desde un punto de vista del fabricante mediante el tag <name> y el valor numérico mediante el tag <value>. De esta manera el usuario evita el tener que memorizar de forma hardcodeada el nombre de cada sensor del robot, obteniendo la información desde el propio fichero XML.

Todos los sensores <rX> se encuentran dentro del tag <response>, pues no deja de ser que Roomba Wi-fi Remote traduce la respuesta a una trama de lectura de sensores bloque 0 (todos los sensores a la vez)

rwr.xml

En este fichero encontraréis de la misma forma que en el fichero descrito anteriormente, los valores numéricos extraidos de una petición de información de los sensores al robot iRobot Roomba. Pero en este caso la lectura es mucho más directa pues los campos <name> y <value> desaparecen y el contenido de los tags <rX> que corresponden a cada sensor del robot. Para que quede mas claro, a continuación os dejamos las estructura para que comparándola con la anterior veáis a que nos refererimos.

<response>
  <r0>VALOR</r0>
  <r1>VALOR</r1>
  <r2>VALOR</r2>
  <r3>VALOR</r3>
  <r4>VALOR</r4>
  <r5>VALOR</r5>
  <r6>VALOR</r6>
  <r7>VALOR</r7>
  <r8>VALOR</r8>
  <r9>VALOR</r9>
  <r10>VALOR</r10>
  <r11>VALOR</r11>
  <r12>VALOR</r12>
  <r13>VALOR</r13>
  <r14>VALOR</r14>
  <r15>VALOR</r15>
  <r16>VALOR</r16>
  <r17>VALOR</r17>
  <r18>VALOR</r18>
  <r19>VALOR</r19>
</response>
Tagged with: , , ,
Posted in Desarrolladores, RooWifi: Roomba Wi-Fi Remote