Story Transcript
PFC: Localización de robots mediante filtro de Kalman 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.
Sergio Pereira Ruiz
Página 57
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Página 58
PFC: Localización de robots mediante filtro de Kalman •
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
Sergio Pereira Ruiz
Página 59
PFC: Localización de robots mediante filtro de Kalman 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.
Sergio Pereira Ruiz
Página 60
PFC: Localización de robots mediante filtro de Kalman 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)
Sergio Pereira Ruiz
Página 61
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Página 62
PFC: Localización de robots mediante filtro de Kalman 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 Sergio Pereira Ruiz
Página 63
PFC: Localización de robots mediante filtro de Kalman •
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
Valor Res
6
5
4
3
2
1
0
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)
Sergio Pereira Ruiz
Página 64
PFC: Localización de robots mediante filtro de Kalman
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]
Sergio Pereira Ruiz
Página 65
PFC: Localización de robots mediante filtro de Kalman •
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
Sergio Pereira Ruiz
Página 66
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 67
PFC: Localización de robots mediante filtro de Kalman 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. Sergio Pereira Ruiz
Página 68
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 69
PFC: Localización de robots mediante filtro de Kalman 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 Sergio Pereira Ruiz
Página 70
PFC: Localización de robots mediante filtro de Kalman 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.
Sergio Pereira Ruiz
Página 71
PFC: Localización de robots mediante filtro de Kalman 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. Sergio Pereira Ruiz
Página 72
PFC: Localización de robots mediante filtro de Kalman
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.
Sergio Pereira Ruiz
Página 73
PFC: Localización de robots mediante filtro de Kalman
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.
Sergio Pereira Ruiz
Página 74
PFC: Localización de robots mediante filtro de Kalman 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. Sergio Pereira Ruiz
Página 75
PFC: Localización de robots mediante filtro de Kalman 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. Sergio Pereira Ruiz
Página 76
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Página 77
PFC: Localización de robots mediante filtro de Kalman
Figura 33. Dock beam
•
Configuración Lighthouse beam
Figura 34. Lighthouse beam
Sergio Pereira Ruiz
Página 78
PFC: Localización de robots mediante filtro de Kalman
Tabla 15. Caracteres enviados por la Rommba Sergio Pereira Ruiz
Página 79
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Packet ID: 21
Data bytes:1, unsigned
Página 80
PFC: Localización de robots mediante filtro de Kalman 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 Sergio Pereira Ruiz
Página 81
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Packet ID: 29
Data bytes:2,unsigned
Página 82
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 83
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Página 84
PFC: Localización de robots mediante filtro de Kalman 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. Sergio Pereira Ruiz
Página 85
PFC: Localización de robots mediante filtro de Kalman
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
Sergio Pereira Ruiz
Página 86
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 87
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 88
PFC: Localización de robots mediante filtro de Kalman 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
Sergio Pereira Ruiz
Página 89