¿Qué algoritmo debo implementar para programar un robot de limpieza de habitaciones?

25

Para esta pregunta, suponga que se desconocen las siguientes cosas:

  • El tamaño y la forma de la habitación.
  • La ubicación del robot.
  • La presencia de cualquier obstáculo.

También suponga que las siguientes cosas son constantes:

  • El tamaño y la forma de la habitación.
  • El número, la forma y la ubicación de todos los obstáculos (si los hay)

Y suponga que el robot tiene las siguientes propiedades:

  • Solo puede avanzar en incrementos de unidades absolutas y girar en grados. Además, la operación que se mueve devolverá verdadero si tuvo éxito o falso si no pudo moverse debido a una obstrucción
  • Una fuente de energía razonablemente ilimitada (digamos que es un robot con energía solar colocado en una estación espacial que mira al sol en todo momento sin techo)
  • Cada movimiento y rotación se realiza con absoluta precisión cada vez (no se preocupe por datos poco confiables)

Finalmente, considere las siguientes propiedades del entorno del robot:

  • Al estar en una estación espacial sin techo, la habitación es una distancia segura pero frustrantemente cercana a los cometas que pasan, por lo que el polvo (y el hielo) están constantemente ensuciando el medio ambiente.

Me preguntaron una versión mucho más simple de esta pregunta (la habitación es un rectángulo y no hay obstáculos, ¿cómo se movería para garantizar que podría sobre cada parte al menos una vez) y después comencé a preguntarme cómo abordaría esto si no pudiera No garantice la forma o la presencia de obstáculos. He comenzado a ver esto con el algoritmo de Dijkstra , pero me fascina escuchar cómo otros abordan esto (o si hay una respuesta bien aceptada para esto (¿Cómo lo hace Roomba?)

Jason Sperske
fuente
etiquetas como + algoritmo y + teoría ayudarían a una pregunta como esta, pero todavía no tengo la reputación de agregarlas
Jason Sperske
definitivamente algo mejor que Roomba
Octopus
Interesante. Tengo bobsweep y está programado perfectamente. Momblogsociety.com/meet-newest-addition-family-bobsweep Lo sugiero a todos. ¡Saludos!
1
¿Es esto un anuncio publicitario? Si no, puede publicar información, en lugar de solo el enlace, explicando cómo se comporta el robot y por qué es perfecto.
Shahbaz

Respuestas:

18

Hasta donde yo sé, este problema no ha sido "resuelto".

Formalmente, este es un problema de cobertura en línea. Cobertura, porque debemos cubrir cada punto en el piso, y en línea porque no tenemos acceso fuera de línea al mapa. Si está interesado en los resultados más recientes, le sugiero que busque " algoritmos robóticos de cobertura en línea ", tal vez en Google Scholar (hay muchísimos resultados excelentes). Además de la (re) publicación muy colorida de @ embedded.kyle, agregaré algunos detalles (también intentaré encontrar rápidamente algunos resultados simples):

  • Dijkstra te dará un camino, pero no necesariamente una cobertura. Por ejemplo, ¿cómo especificas a Dijkstra que debes visitar cada punto del gráfico, en lugar de visitar un punto lo más rápido posible? Puede ejecutar los caminos más cortos de todos los pares, pero ¿cuáles son los puntos? No tienes un mapa.

  • Los algoritmos en línea como este a menudo se denominan algoritmos de "error" porque tienden a parecerse a un error que deambula por un área, choca con algo y luego deambula un poco.

  • Sin obstáculos, y una habitación rectangular, y suponiendo que comience en el límite, un camino de boustrofedon (camino del buey) es óptimo. ingrese la descripción de la imagen aquí

Es curioso que los agricultores hayan estado haciendo esto desde siempre, ¿verdad? http://en.wikipedia.org/wiki/Boustrophedon . Esto puede extenderse a habitaciones con obstáculos al encontrar un área aproximadamente rectangular que esté libre de obstáculos. Howie Choset trabajó un poco en esto .

  • πre2re
  • Esta es un área enorme y fascinante. Lo siento, no puedo proporcionar un mejor resumen!

El mayor problema es que no tienes un mapa. Sin un mapa, está limitado a acciones simples como el seguimiento del perímetro y el movimiento a lo largo de un camino (como la espiral mencionada). Por lo tanto, existen algunos robots que realmente construyen el mapa durante la limpieza, descomponen el área mapeada en formas y luego cubren cada forma para garantizar la cobertura. Ver: http://mintcleaner.com/

Josh Vander Hook
fuente
9

Roomba comienza en espiral hasta que golpea algo, luego realiza un barrido perimetral. Entonces simplemente rebota. Roomba es el estándar de facto en los aspiradores robóticos domésticos, creo que podría llamarse la "solución aceptada". Pero por experiencia personal (tengo dos), definitivamente hay margen de mejora.

De cómo funcionan las cosas :

algoritmo

De una entrevista con Nancy Dussault Smith, Vicepresidenta de Comunicaciones de Marketing en iRobot:

Cuando comience, notará un patrón en espiral, se extenderá en espiral sobre un área cada vez más grande hasta que golpee un objeto. Cuando encuentra un objeto, lo seguirá a lo largo del borde de ese objeto durante un período de tiempo, y luego comenzará a cruzarse, tratando de calcular la mayor distancia que puede recorrer sin golpear a otro objeto, y eso lo ayuda a figurar determinar qué tan grande es el espacio, pero si dura demasiado tiempo sin golpear una pared, comenzará a girar en espiral nuevamente, porque se da cuenta de que está en un espacio abierto y está constantemente calculando y descubriendo eso.

Es similar con los sensores de suciedad debajo, cuando uno de esos sensores se dispara, cambia su comportamiento para cubrir esa área. Luego se disparará en busca de otra área sucia en un camino recto. La forma en que estos diferentes patrones se acumulan entre sí a medida que avanzan, sabemos que esa es la forma más efectiva de cubrir una habitación.

Los patrones que elegimos y cómo se desarrolló originalmente el algoritmo se basaron en algoritmos basados ​​en el comportamiento nacidos del estudio de animales del MIT y cómo realizan la búsqueda de alimentos en las áreas. Cuando miras cómo salen las hormigas y las abejas y buscan áreas, este tipo de cobertura y de averiguar todo eso proviene de esa investigación. No es exacto, obviamente, no estoy diciendo que somos abejas melíferas, pero es esa comprensión de cómo buscar un área en la naturaleza que es la base detrás de cómo se desarrolla nuestra tecnología adaptativa.

Algunas fotos de larga exposición de Roombas con LED en ellas ilustran cómo funciona en la práctica:

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Embedded.kyle
fuente
¿Es este un contenido de copiar y pegar del enlace?
Josh Vander Hook
@ Josh El material relevante para responder la pregunta se ha copiado de los sitios vinculados y se ha colocado en una cita en bloque para evitar la pudrición del enlace.
embedded.kyle
7

Neato utiliza un enfoque organizado. Usando SLAM y parachoques, mapea la habitación 'actual', primero el perímetro, luego aplica algún algoritmo para limpiar de la manera más eficiente posible. Nunca he tenido un Roomba, pero dado lo que he leído sobre su algoritmo, nunca cambiaría de un neato.

El Laser Range Finder en el neato a menudo se puede utilizar para la robótica, ya que es un sensor rentable para algoritmos SLAM.

Si me dieran tu tarea, primero encontraría una implementación SLAM adecuada , basada en el hardware que tenía.

Entonces usaría un algoritmo de planificación de movimiento CNC ISLAND . Mi experiencia es que tienden a ser muy eficientes para cubrir un área arbitraria con la menor cantidad de movimiento.

Claveteado3
fuente
SLAM no es muy apropiado para este problema porque es una simulación en la que no hay incertidumbre en el posicionamiento. Para un robot real, tienes toda la razón.
Ian
Eché de menos eso (si está allí). En realidad dice que los siguientes son desconocidos; La ubicación del robot.
Spiked3
Estaba pensando que la ubicación comenzó como desconocida, pero a medida que se creaba una topología de la sala, podría darse a conocer.
Jason Sperske
Este es uno de esos problemas académicos extraños donde las simplificaciones producen implicaciones extrañas. Como no tiene un mapa, una ubicación inicial, un posicionamiento perfecto ni entidades externas para coordinar, la posición absoluta es irrelevante. Decide arbitrariamente que (0,0) es su punto de partida, luego construye su mapa en relación con ese punto. Esto no es realmente práctico en el mundo real, pero le da algo de práctica con algoritmos de cobertura.
Ian
Su respuesta es buena desde una perspectiva de sistemas. Sin embargo, creo que esta pregunta es una mejor teoría / algoritmos.
Josh Vander Hook
6

Lo primero que debe establecer es el objetivo del robot, algo que no queda del todo claro en su pregunta. Su robot debe realizar dos tareas principales: descubrir la forma del área que se puede limpiar y luego limpiarla.

¿Pero es constante la cantidad de suciedad? ¿Se agrega suciedad constantemente? ¿Es su objetivo minimizar el tiempo promedio que la suciedad permanece en el piso, o el tiempo medio? ¿El objetivo es mantener el piso igualmente limpio? ¿O es solo para limpiar una vez, lo más rápido posible? ¿Existen patrones en la acumulación de suciedad que pueda medir y utilizar para su ventaja en el logro de su objetivo?

La respuesta a estas preguntas ayudará a guiar el algoritmo que elija. En el caso del robot Roomba, puede que no tenga sentido aprender el diseño exacto de la habitación porque los muebles (como sillas alrededor de una mesa), las personas y otros obstáculos se mueven muy a menudo. Sin embargo, en su caso, podría ser mejor explorar el espacio para construir un mapa completo (alguna combinación de un patrón de cortacésped con encontrar bordes), luego usar ese mapa para calcular la ruta más corta a través del espacio (el término es "cobertura", y hay varias formas de hacerlo, por ejemplo , algoritmo de árbol de expansión ).

Una cosa más de la que tendrá que preocuparse es cómo discretizar el espacio en el que se encuentra. Debido a que puede moverse en cualquier dirección, incluso con cantidades de grados enteros y unidades enteras de distancia, sus posiciones X e Y pueden tener fracciones valores. Tendrá que decidir cómo representar los obstáculos en ese mapa sin que crezca hasta un número infinito de puntos de datos.

Ian
fuente
Bueno, ya que sádicamente estoy haciendo una pregunta de entrevista más difícil para mí, supongo que podría encontrar más información. Me gustan los puntos que estás planteando :)
Jason Sperske
2

No estoy seguro de si todavía lo necesita, pero para aquellos que pasaron a google por este hilo, he creado una versión simple del algoritmo.

Básicamente, trata de construir el mapa del área mientras limpia, y usa el mapa para encontrar el nodo no visitado más cercano (parte de la habitación). Cuando no puede encontrar ninguno, eso significa que la habitación está limpia (o que el robot no puede acceder a las partes sin limpiar).

Puede ser más lento que otro algoritmo, pero puede garantizar la cobertura independientemente de la posición inicial, la dirección y los obstáculos.

https://github.com/dungba88/cleaner_robot

ACTUALIZACIÓN: Hice una demostración aquí y la comparé con un DFS de seguimiento. Entonces, aunque mi algoritmo es O (N ^ 2), está mucho más optimizado en términos de número de movimientos y giros.

http://jenova.dungba.org/cleaner/showdown

Anh Dũng Bùi
fuente
Interesante, por lo que divide la sala en una cuadrícula 2D, todavía estoy leyendo su código, ¿qué enfoque de búsqueda de ruta utiliza para llegar a sus regiones sin limpiar? Dijkstra?
Jason Sperske
Utilicé BFS para encontrar la posición sin limpiar más cercana.
Anh Dũng Bùi
-1

Mirando el problema más simple que le preguntaron: una habitación rectangular, sin obstáculos y limpie cada parte al menos una vez.

La solución es encontrar una esquina de la habitación, y encontrar una esquina no será un gran problema. Una vez que se haya logrado eso, simplemente siga un camino en espiral hacia el centro de la habitación.

usuario13259
fuente