5. - irobot roomba open interface (roi) 5.1.-...
TRANSCRIPT
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 57
5. - IROBOT ROOMBA OPEN INTERFACE (ROI)
5.1.- INTRODUCCIÓN
El Roomba Open Interface (OI) es un software para controlar y manipular el
comportamiento de la Roomba. Este software te permite manipular el
comportamiento de la Romba y leer sus sensores a través de una serie de
comandos, como son comandos de de modo, comandos de actuación, comandos
de sonidos y comandos de sensores, que se envían a través del puerto serie de la
Roomba conectando un PC o un micro controlador al conector Mini-Din de la
aspiradora.
5.2.- CONEXIONES FÍSICAS
Para usar el OI, un procesador como un PC o un micro controlador capaces de
generar comandos series, debe ser conectado a la conexión Mini-Din de la
Roomba. El conector también proporciona una conexión directa a la batería de la
aspiradora, la cual se puede usar para aplicaciones de OI de Power y está
localizado en la parte superior tras la carcasa de adorno.
5.3.- PINES DEL CONECTOR PUERTO SERIE MINI-DIN
La figura muestras los pines vistos desde arriba del conector hembra en la
Roomba.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 58
Figura 32. Pines del conector Mini-Din
Los pines de TX y RX usan voltajes de 0-5V y el puerto serie del PC usa diferentes
niveles de tensión (niveles RS232), por lo que es necesario cambiarlos. Para ello
es necesario un cable serie DB-9, un adaptador para la Roomba (ya sea de puerto
serie del PC a puerto de la Roomba, o puerto usb del PC al puerto Roomba) y un
cable que va del adaptador al conector Mini-Din.
5.4.- CARACTERÍSTICAS DEL PUERTO SERIE
• Baudios: 115200 ó 19200
• Bit de datos: 8
• Paridad: Ninguna
• Bits de stop: 1
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 59
• Control de flujo: Ninguno
Por defecto la Roomba se comunica a 115200 baudios. En nuestro caso los motes
van a trabajar a 19200 baudios, por lo que para forzar la Rommba hay 2 métodos:
• Método 1:
Cuando se enciende la Roomba mantener pulsado el botón Clean/Power.
Después de 10 segundos se escuchará un sonido descendente. La Roomba ya se
comunicará a 19200 baudios hasta que se apague, se gaste la batería o se
cambie específicamente con el OI.
• Método 2:
Usando el pin 5 del conector Mini-Din. Una vez encendida la Roomba esperar 2
segundos y darle 3 pulsos bajos de entre 50 y 500 ms y la aspiradora se
comunicará a 19200 baudios.
5.5.- MODOS DE FUNCIONAMIENTO DEL ROOMBA OPEN INTERFACE
El OI de la Roomba tiene 4 modos de funcionamiento: Off, Passive, Safe y Full.
Después de un cambio de batería o cuando se enciende por primera vez, el OI
estará en modo “Off”. Al estar en modo “Off” el OI escucha por defecto a 115200 o
19200 según se ha configurado previamente. Una vez que la aspiradora recibe el
comando “Start” se pude cambiar de modo de operación mandando comandos OI.
Vamos a describir los modos.
• Modo Passive
Después de mandar el comando “Start” o algún comando de limpieza (por ejemplo
Spot, Clean, Seek Dook) el OI entra en modo Passive. En este modo se puede
solicitar y recibir datos de los sensores, pero no se pueden cambiar los parámetros
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 60
actuales de los comandos de actuación (motores.luces, etc). Para poder hacerlo
se debe cambiar a modo “Full” o modo “Safe”.
• Modo Safe
Este modo te da control total de la aspiradora, excepto en las siguientes
condiciones de seguridad:
• Detección de un acantilado cuando va hacia delante
• Detección de la caída de una rueda
• Cargador conectado y la aspiradora cargando
Si alguna de las condiciones anteriores se produce mientras la aspiradora está en
modo Safe, la Roomba se detiene y vuelve al modo Passive.
Si no se envían comandos al IO en el modo Safe, Roomba espera con todos los
motores y los LEDs de apagados y no responde a las pulsaciones de botón o la
entrada de otros sensores.
• Modo Full
El modo Full te da control total de la aspiradora, la totalidad de sus actuadores y
todas las condiciones de seguridad que restringen cuando se está en modo Safe
(como la detección de acantilados), el modo Full las quita. Para volver al modo
Safe, se tiene que enviar un comando Safe.
Si no se envían comandos al IO en el modo Full, Roomba espera con todos los
motores y los LEDs de apagados y no responde a las pulsaciones de botón o la
entrada de otros sensores.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 61
5.6.- REFERENCIA DE COMANDOS DEL OPEN INTERFACE
La siguiente lista son los comandos del OI, cada comando empieza con un código
(1 byte)., Algunos comandos llevan bytes de datos. Pasamos a describirlos.
Comandos de inicio
Los siguientes comandos arrancan el OI y lo dejan listo para usar.
Start Opcode: 128 Data bytes: 0
Este comando arranca el OI. Se debe mandar antes de cualquier otro comando.
• Secuencia: [128]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive. Cuando se recibe la Rommba da un bepp para
saber que está en modo “Off”.
Baud Opcode: 129 Data bytes: 1
Este comando establece la tasa en bits/seg a la cual se envían los comandos y los
datos. Por defecto la comunicación es a 115200 baudios, pero manteniendo
pulsado el botón de Clean durante 10 segundos se cambia a 19200 baudios.
• Secuencia: [129][Baud Code]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Baudios Data Byte: Código de baudios (0-11)
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 62
Tabla 6. Tasas envío en bps
Comandos de modo
La Roomba tiene 4 modos de funcionamiento: Off, Passive, Safe y Full. Cuando se
enciende la aspiradora estará en modo Off. Los siguientes comandos cambian el
modo de funcionamiento.
Safe Opcode: 131 Data bytes: 0
Este comando pone el OI en modo Safe, permitiendo al usuario el control de la
aspiradora. Apaga todos los LEDs. Para aceptar este comando el OI puede estar
en modo Passive, Safe o Full.
• Secuencia: [131]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Safe.
Full Opcode: 132 Data bytes: 0
Este comando pone el OI en modo Full, permitiendo al usuario el control total, la
aspiradora hace caso a cualquier comando que se le envíe, sin las restricciones
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 63
de seguridad que hay el modo Safe. Si se le envía el comando [128] pasará a
modo Passive.
• Secuencia: [132]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Full.
Comandos de limpieza
Clean Opcode: 135 Data bytes: 0
Este comando arranca el modo de limpieza por defecto
• Secuencia: [135]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive.
Max Opcode: 136 Data bytes: 0
Este comando arranca el modo de limpieza Max.
• Secuencia: [136]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive.
Spot Opcode: 134 Data bytes: 0
Este comando arranca el modo de limpieza Spot
• Secuencia: [134]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive.
Seek Dock Opcode: 143 Data bytes: 0
Este comando manda la Roomba a su base
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 64
• Secuencia: [143]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive.
Schedule Opcode: 167 Data bytes: 15
Este comando manda a la Roomba un nuevo horario de limpieza. Para
deshabilitarlo se manda todo ceros.
• Secuencia: [167][Días][Domingos horas][Domingos minutos]……[Sábado
Horas][Sábado minutos]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Formato de horas (0-23) y minutos (0-59)
Días
Bit 7 6 5 4 3 2 1 0
Valor Res S V J X M L D
Set Día/hora Opcode: 168 Data bytes: 3
Este comando configura el reloj de la aspiradora
• Secuencia: [168][Día][Hora][Minuto]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Formato de horas (0-23) y minutos (0-59)
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 65
Tabla 7. Código de los días
Power Opcode: 133 Data bytes: 0
Este comando apaga la Roomba
• Secuencia: [133]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Passive.
Comandos de actuación
Los siguientes comandos actúan sobre las ruedas, la aspiradora, los cepillos, los
altavoces, los LEDs y los botones.
Drive Opcode: 147 Data bytes: 4
Este comando controla las ruedas motrices de la Roomba. Lleva 4 bytes de datos
interpretados como 2 cadenas de 16 bits en complemento A2. Los primeros 2
bytes indican la velocidad y los otros 2 el radio en milímetros con que gira la
Roomba. Un valor positivo de velocidad y radio hace que la aspiradora vaya hacia
delante y girando a la izquierda. Si se le da un valr de radio negativo girará hacia
la derecha.
• Secuencia: [147][Velocidad high byte][Velocidad low byte][Radio high
][Radio low]
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 66
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Velocidad (-500 – 500mm/s)
• Radio (-2000 – 2000 mm/s)
• Casos especiales:
o Recto: 32768 ó 32767=hex 8000 ó 7FFF
o Girar a la derecha sobre si mismo = -1
o Girar a la izquierda sobre sí mismo = 1
Drive Direct Opcode: 145 Data bytes: 4
Este comando permite controlar el movimiento hacia delante o hacia atrás las
ruedas motrices de la aspiradora de forma independiente. Lleva 4 bytes de datos
interpretados como 2 cadenas de 16 bits en complemento A2. Los primeros 2
bytes indican la velocidad de la rueda derecha en mm/s y los otros 2 bytes
especifican la velocidad de la rueda izquierda. Un valor positivo hace que la rueda
gire hacia delante y un valor negativo hace que gire hacia atrás.
• Secuencia: [145][Velocidad derecha high byte][Velocidad derecha low
byte][Velocidad izquierda high byte ][Velocidad izquierda low byte]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Velocidad rueda derecha(-500 – 500mm/s)
• Velocidad rueda izquierda (-500 - 500 mm/s)
Drive PWM Opcode: 146 Data bytes: 4
Este comando permite controlar el movimiento primario hacia delante o hacia atrás
las ruedas motrices de la aspiradora con independencia. Lleva 4 bytes de datos
interpretados como 2 cadenas de 16 bits en complemento A2. Los primeros 2
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 67
bytes indican el PWM de la rueda derecha y los otros 2 bytes especifican el PWM
de la rueda izquierda. Un valor positivo de PWM hace que la rueda gire hacia
delante y un valor negativo hace que gire hacia atrás.
• Secuencia: [146][Right PWM high byte][Right PWM low byte][Left PWM high
byte ][Left PWM low byte]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Rueda derecha PWM (-255 – 255)
• Rueda izquierda PWM (-255 -255)
Motors Opcode: 138 Data bytes: 1
Este comando permite el control de la velocidad del cepillo principal, el lateral y la
aspiradora de forma independiente. La velocidad del motor no puede ser
controlado con este comando, todos los motores arrancarán a la máxima
velocidad cuando se activen. El cepillo principal y el lateral pueden girar en
cualquier dirección, pero la aspiradora sólo gira hacia delante.
• Secuencia: [138][Motors]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Bits 0-2: 0=OFF, 1=ON ( a la maxima velocidad).
• Bits 3 y 4: 0 = Dirección por defecto de los motores, 1= Dirección contraria.
La dirección por defecto de los cepillos es la de las manillas del reloj.
Tabla 8. Bits que activan los motores de la Roomba
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 68
PWM Motors Opcode: 144 Data bytes: 3
Este comando controla el movimiento hacia delante o hacia atrás del cepillo
principal de la Roomba, del cepillo lateral y de la aspiradora. Con cada byte de
datos, se especifica el ciclo de trabajo del lado del conductor baja (máx. 128). Por
ejemplo, si se quiere controlar un motor con un 25% del voltaje de la batería, se
elije un ciclo de trabajo de 128 * 25% = 32. El cepillo principal y cepillo lateral
pueden girar en cualquier dirección. La aspiradora sólo corre hacia adelante.
Velocidades positivas del motor hace que giren en su dirección por defecto
(limpieza). La dirección por defecto para el cepillo lateral es a la izquierda.
Dirección por defecto para el cepillo principal / trampa es hacia dentro.
• Secuencia: [144][Cepillo principal PWM][Cepillo lateral PWM][Aspiradora
PWM]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Ciclo de trabajo del cepillo principal y lateral (-127 - 127)
• Ciclo de trabajo de la aspiradora (0 – 127)
LED´s Opcode: 139 Data bytes: 3
Este comando controla los LED´s de la Roomba. El LED Claen/Power se
especifica por 2 bytes, uno para el color y otro para la intensidad.
• Secuencia: [139][LED bits][Clean/Power Color][Clean/Power Intensidad]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• LED bits (0-255)
Home and Spot usa LEDs verdes: 0 = off, 1 = on
Check Robot usa un LED naranja.
Debris usa un LED azul.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 69
Clean/Power usa un LED bicolor (rojo/verde) . La intensidad y el color de
este LED puede ser controlado con 8 bits.
LED bits (0-255)
Tabla 9. Bits que activan los led´s de la Roomba
Clean/Power LED Color (0-255)
0=verde, 1=rojo. Valores intermedios dan colores intermedios (naranja, amarillo,
etc).
Clean/Power LED Intensidad (0-255)
0=OFF, 1=intensidad completa. Valores intermedios dan intensidades intermedias.
Botones Opcode: 165 Data bytes: 1
Este comando permite pulsar los botones de la Rommba. El botón dejará de estar
pulsado después de 1/6 de segundo.
• Secuencia: [165][Buttons]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Buttons (0-255). 1=botón pulsado, 0= botón libre
Buttons
Tabla 10. Bits que activan los botones de la Roomba
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 70
Song Opcode: 140 Data bytes: 2N+2 (N número de notas )
Este comando permite definir 4 canciones, que el OI usará más adelante en la
Roomba. Cada canción se asocia a un número. El comando Play usa el número
para hacer sonar la canción. Cada canción puede contener 16 notas.
• Secuencia: [140][Song Number][Song lenght][Nota 1][Duración Nota 1], etc
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Song number (0-4)
• Song Lenght (1-16). Longitud de la canción.
• Bytes de datos 3, 5, 7, etc. Indican el número de la nota (31-127)
• Bytes de datos 4, 6 , 8, etc. Indican la duración de la nota (0-255)
Tabla 11. Códigos de las notas que sonará en la Roomba
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 71
Play Opcode: 141 Data bytes: 1
Este comando permite seleccionar una canción de las definidas con el comando
Song y que suene en la Roomba.
• Secuencia: [141][Song number]
• Disponible en modos: Safe o Full.
• Cambia el modo a: Ninguno.
• Song number (0-4)
Comandos de entrada
Los siguientes comandos permiten leer el estado de los sensores de la Roomba y
de algunas variables internas. LA Roomba actualiza estas variables internas cada
15 ms. No enviar estos comandos con una frecuencia mayor que la indicada
anteriormente.
Sensors Opcode: 142 Data bytes: 1
Este comando solicita al OI que envíe un paquete de datos con el valor de los
sensore. Hay 58 paquetes de sensores diferentes. Cada paquete proporciona un
valor específico del sensor o grupo de sensores.
• Secuencia: [142][Packet ID]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Packet ID: Identifica cual de los 58 paquetes de sensores que pueden ser
enviados por el OI. Un valor de 100 indica un paquete con todos los
sensores. Valores de 0 a 6 o de 101 a 107 indican subgrupos de sensores.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 72
Query list Opcode: 148 Data bytes: N+1 (N paquete solicitado)
Este comando permite preguntar por un conjunto de paquetes de sensores. El
robot devuelve los sensores en el orden especificado
• Secuencia: [149][Number of packet][Packet ID 1]Packet ID 2[]…[Packet ID
N]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Song number (0-4)
Stream Opcode: 149 Data bytes: N+1 (N paquete solicitado)
Este comando comienza una cadena de paquetes de datos. La lista de paquetes
solicitados se envía cada 15 ms, en los cuales la Roomba actualiza los datos. Este
método de solicitar los paquetes es mejor si se está controlando la Roomba en
una red inalámbrica, con software ejecutándose en el PC.
• Secuencia: [148][Number of packets][Packet ID 1]Packet ID 2[]…[Packet ID
N]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Song number (0-4)
El formato de los datos devueltos es:
[19][N- Bytes][Packet ID 1][Packet 1 datos][Packet ID 2] [Packet 2
datos][Checksum]
N- bytes es el número de bytes entre N-bytes y el Checksum.
El Checksum es el valor de 1 bit. Es el complemento 8-bit de todos los bits entre la
cabecera y el checksum.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 73
Ejemplo: Para tomar los datos de la Roomba de señal de acantilado izquierdo
(packet 29) y de sensor de muralla virtual (packet 13), se manda lo siguiente al
robot: [148][2][29][13]. Y la Roomba manda un flujo de datos tal que:
Pause/Resume Sream Opcode: 150 Data bytes: 1
Este comando permite parar y reanudar el flujo de datos que devuelve la
Rommba, sin borrar la lista de los paquetes solicitados.
• Secuencia: [150][Stream state]
• Disponible en modos: Passive, Safe o Full.
• Cambia el modo a: Ninguno.
• Rango: 0- 1. Cero para el flujo de los datos y 1 lo reanuda.
Paquetes de sensores del Roomba Open Interface
La Roomba devuelve uno de los 58 paquetes de sensores. Dependiendo del valor
del byte del paquete, respondiendo a un comando Sensor, Query list, o un
comando Stream para la solicitud de un paquete de datos de sensores.
La mayoría de los paquetes (los números 7 - 58) contienen el valor de un solo
sensor o variable, que puede ser de 1 byte o 2 bytes. Paquetes de 2 bytes
corresponden a valores de 16 bits, enviando en primer lugar el byte alto.
Algunos de los paquetes (0-6, 100-107) contienen grupos de los paquetes de valor
único.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 74
Tabla 12. Paquetes de sensores del ROI
Golpes y rueda suelta Packet ID:7 Data bytes: 1, unsigned
El estado de choque (0= no bump, 1=bump) y de sensor de rueda suelta (0= rueda
levantada, 1= rueda caida), son enviados como bits individuales.
Rango: 0-15
Tabla 13. Bits indicadores de golpes y rueda suelta
Wall Packet ID: 8 Data bytes: 1, unsigned
El estado del sensor de pared es enviado como 1 bit (0= no pared, 1= pared vista).
Rango: 0 – 1.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 75
Acantilado izquierdo Packet ID:9 Data bytes: 1, unsigned
El estado del sensor de acantilado del lado izquierdo de la Roomba se envía con 1
bit (0= no Cliff, 1 = Cliff)
Rango: 0 – 1
Acantilado frontal izquierdo Packet ID: 10 Data bytes: 1, unsigned
El estado del sensor de acantilado del frontal izquierdo de la Roomba se envía con
1 bit (0= no Cliff, 1 = Cliff)
Rango : 0 – 1
Acantilado frontal derecho Packet ID: 11 Data bytes: 1, unsigned
El estado del sensor de acantilado del frontal derecho de la Roomba se envía con
1 bit (0= no Cliff, 1 = Cliff)
Rango : 0 – 1
Acantilado derecho Packet ID: 12 Data bytes: 1, unsigned
El estado del sensor de acantilado del lado derecho de la Roomba se envía con 1
bit (0= no Cliff, 1 = Cliff)
Rango : 0 – 1
Virtual Wall Packet ID: 13 Data bytes: 1, unsigned
El estado del detector de pared virtual es enviado como 1 bit (0= pared virtual no
detectada, 1= pared virtual detectada).
Rango: 0 – 1.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 76
Whell Overcurrent Packet ID: 14 Data bytes: 1, unsigned
El sensor de sobrecorriente en las ruedas no está disponible en la Roomba 500.
Rango: 0 – 31.
Tabla 14. Bits que indican sobrecorriente en las ruedas
Detector de suciedad Packet ID: 15 Data bytes: 1
El sensor detecta el nivel de suciedad.
Rango: 0 – 255.
Byte sin usar Packet ID: 16 Data bytes: 1
Byte sin uso: un byte sin uso es enviado después del byte de detección de
suciedad cuando el paquete solicitado es el 0, 1 o 6. El valor de este byte sin uso
es siempre cero.
Rango: 0
Caracter infrarojo Omnidireccional Packet ID: 17 Data bytes: 1, unsigned
Este valor identifica el carácter de 8 bits de IR que se está recibiendo por el
receptor omnidireccional Roomba.
Un valor de 0 indica que ningún carácter está siendo recibido. Estos caracteres
son los enviados por la distancia Roomba, el Dock, Roomba 500 Virtual Paredes,
crear robots utilizando el comando Enviar-IR, y los dispositivos de usuario
Created.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 77
Rango: 0 – 255.
Caracter infrarojo izquierdo Packet ID: 18 Data bytes: 1, unsigned
Este valor identifica el carácter de 8 bits de IR que se está recibiendo por el
receptor izquierdo Roomba.
Un valor de 0 indica que ningún carácter está siendo recibido. Estos caracteres
son los enviados por la distancia Roomba, el Dock, Roomba 500 Virtual Paredes,
crear robots utilizando el comando Enviar-IR, y los dispositivos de usuario
Created.
Rango: 0 – 255.
Caracter infrarojo derecho Packet ID: 19 Data bytes: 1, unsigned
Este valor identifica el carácter de 8 bits de IR que se está recibiendo por el
receptor derecho Roomba.
Un valor de 0 indica que ningún carácter está siendo recibido. Estos caracteres
son los enviados por la distancia Roomba, el Dock, Roomba 500 Virtual Paredes,
crear robots utilizando el comando Enviar-IR, y los dispositivos de usuario
Created.
Rango: 0 – 255.
Caracteres enviados por dispositivos iRobot:
• Configuración Dock beam
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 78
Figura 33. Dock beam
• Configuración Lighthouse beam
Figura 34. Lighthouse beam
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 79
Tabla 15. Caracteres enviados por la Rommba
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 80
Botones Packet ID: 18 Data bytes: 1, unsigned
El estado de los botones de la Roomba es enviado en bits individuales ( 0= botón
no presionado, 1= botón presionado). El día, hora, minutos, reloj y botones de
programación sólo están disponibles en la Roomba 560 y 570, en el resto
devuelve siempre cero.
Rango: 0 – 255
Distancia Packet ID: 19 Data bytes:2, signed
La distancia que la Roomba ha recorrido desde que se solicita al robot, se envía
en 16 bits. Es lo mismo que la distancia recorrida por ambas ruedas dividida entre
dos. Valores positivos indican que ha andado hacia delante y valores negativos
que ha ido en dirección contraria.
Rango: -32768 – 32767
Ángulo Packet ID: 20 Data bytes:2, signed
El ángulo en grados que la Roomba ha girado desde que se solicita el valor al
robot, se envía en 16 bits. Valores positivos cuando el giro es contrario a las
agujas del reloj y valores de ángulo negativos cuando se gira en el sentido de las
agujas del reloj.
Rango: -32768 – 32767
Estado de carga Packet ID: 21 Data bytes:1, unsigned
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 81
Este código indica el estado actual de carga de la Roomba.
Rango: 0 – 5
Tabla 16. Código indicador del estado de carga
Voltaje Packet ID: 22 Data bytes:2, unsigned
Este código indica el voltaje de la batería de la Roomba en mV
Rango: 0 – 65535
Corriente Packet ID: 23 Data bytes:2, signed
La corriente en miliamperios (mA) que fluye hacia dentro o hacia fuera de la
batería de la Roomba. Corrientes negativas indican que la corriente fluye de la
batería hacia fuera (funcionamiento normal). Corrientes positivas indican que la
corriente circula hacia dentro de la batería, como durante la carga.
Rango: -32768 – 32767
Temperatura Packet ID: 24 Data bytes:1, signed
La temperatura de la batería de la Roomba en grados Celsius.
Rango: -128 – 127
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 82
Carga de la batería Packet ID: 25 Data bytes:2, unsigned
La carga actual de la batería de la Roomba en miliamperios/ hora (mAh). El valor
de la carga se decrementa cuando la batería se agota (Roomba en
funcionamiento) y aumenta cuando se está cargando.
Rango: 0 – 65535 mAh
Capacidad de la batería Packet ID: 26 Data bytes:2, unsigned
La capacidad estimada de carga de la batería de la Roomba en mAh.
Rango: 0 – 65535 mAh
Señal de pared Packet ID: 27 Data bytes:2,unsigned
La fuerza de la señal de pared es devuelta en 16 bits, el byte alto primero.
Rango: 0 - 1023
Señal de acantilado izquierdo Packet ID: 28 Data bytes:2,unsigned
La fuerza de la señal de acantilado a la izquierda es devuelta en 16 bits, el byte
alto primero.
Rango: 0 – 1023
Señal de acantilado frontal izquierdo Packet ID: 29 Data bytes:2,unsigned
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 83
La fuerza de la señal de acantilado frontal a la izquierda es devuelta en 16 bits, el
byte alto primero.
Rango: 0 – 4095
Señal de acantilado frontal derecho Packet ID: 30 Data bytes:2,unsigned
La fuerza de la señal de acantilado a la derecha es devuelta en 16 bits, el byte alto
primero.
Rango: 0 – 4095
Señal de acantilado derecho Packet ID: 31 Data bytes:2,unsigned
La fuerza de la señal de acantilado a la derecha es devuelta en 16 bits, el byte alto
primero.
Rango: 0 – 1023
Sin uso Packet ID: 32 - 33 Data bytes:3
Rango: 0
Fuentes de carga disponibles Packet ID: 34 Data bytes: 1,unsigned
Las conexiones de la Roomba a la “Home base” y al cargador interno son
devueltas en bits individuales tal y como se muestra abajo
Rango: 0 – 3
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 84
Tabla 17. Bits que indican donde se está cargando la Roomba
Modos del OI Packet ID: 35 Data bytes:1, unsigned
El modo actual del Open Interface en que está la Roomba se devuelve.
Rango: 0 – 3
Tabla 18. Modos de funcionamiento
Número de canción Packet ID: 36 Data bytes:1, unsigned
Se devuelve la actual canción del OI seleccionado.
Rango: 0 – 15
Canción sonando Packet ID: 37 Data bytes:1, unsigned
Devuelve el estado de reproducción de la canción del OI. 1=sonando, 0= sin
sonar.
Rango: 0 – 1
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 85
Número cadena de paquetes Packet ID: 38 Data bytes:1, unsigned
Devuelve el número de datos en la cadena de paquetes.
Rango: 0 – 108
Velocidad solicitada Packet ID: 39 Data bytes:2, signed
La velocidad más recientemente solicitada con un comando Drive se devuelve en
16 bits.
Rango: -500 – 500 mm/s
Radio solicitado Packet ID: 40 Data bytes: 2, signed
El radio más recientemente solicitado con un comando Drive se devuelve en 16
bits
Rango: -32768 – 32767 mm
Solicitud velociad derecha Packet ID: 41 Data bytes:2, signed
La velocidad de la rueda derecha solicitada con el comando DriveDirect se
devuelve en 16 bits.
Rango: -500 – 500 mm/s
Solicitud velociad izquierda Packet ID: 42 Data bytes:2, signed
La velocidad de la rueda izquierda solicitada con el comando DriveDirect se
devuelve en 16 bits.
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 86
Rango: -500 – 500 mm/s
Cuentas codificador derecho Packet ID: 43 Data bytes:2, unsigned
El número acumulado de cuentas en bruto del codificador derecho se devuelve en
16 bits. Cuando pasa de 65535 vuelve a 0.
Rango: 0 – 65535
Cuentas codificador izquierdo Packet ID: 44 Data bytes:2, unsigned
El número acumulado de cuentas en bruto del codificador izquierdo se devuelve
en 16 bits. Cuando pasa de 65535 vuelve a 0.
Rango: 0- 65535
Luz de choque Packet ID: 45 Data bytes:1, unsigned
Las detecciones de la luz de choque se devuelven en bits individuales.
Rango: 0 – 127
Tabla 19. Bits de luz de choque
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 87
Señal luz de choque izquierda Packet ID: 46 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque izquierda se devuelve en 16 bits.
Rango: 0 – 4095
Señal luz de choque frontal izquierda Packet ID: 47 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque frontal izquierda se devuelve en 16 bits.
Rango: 0 – 4095
Señal luz de choque central izquierda Packet ID: 48 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque central izquierda se devuelve en 16 bits.
Rango: 0 – 4095
Señal luz de choque central derecha Packet ID:49 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque central derecha se devuelve en 16 bits.
Rango: 0 – 4095
Señal luz de choque frontal derecha Packet ID: 50 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque frontal derecha se devuelve en 16 bits.
Rango: 0 – 4095
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 88
Señal luz de choque derecha Packet ID: 51 Data bytes:2, unsigned
La fuerza de la señal de la luz de choque derecha se devuelve en 16 bits.
Rango: 0 – 4095
Corriente del motor izquierdo Packet ID: 54 Data bytes:2, signed
Devuelve la corriente que el motor de la rueda izquierda esta usando en 16 bits.
Rango: -32768 – 32767 mA
Corriente del motor derecho Packet ID: 55 Data bytes:2, signed
Devuelve la corriente que el motor de la rueda derecha esta usando en 16 bits.
Rango: -32768 – 32767 mA
Corriente del motor del cepillo principal Packet ID: 56 Data bytes:2, signed
Devuelve la corriente que el motor del cepillo principal esta usando en 16 bits.
Rango: -32768 – 32767 mA
Corriente del motor del cepillo lateral Packet ID: 57 Data bytes:2, signed
Devuelve la corriente que el motor del cepillo laterall esta usando en 16 bits.
Rango: -32768 – 32767 mA
PFC: Localización de robots mediante filtro de Kalman
Sergio Pereira Ruiz Página 89
Stasis Packet ID: 58 Data bytes: 1
El sensor devuelve 1 cuando está progresando hacia delante y 0 si no. Devuelve
siempre 0 cuando el robot está girando, yendo hacia atrás o no está anandando.
Rango : 0 – 1