Buscando formas para que un robot se ubique en la casa


Estoy hackeando un robot aspirador para controlarlo con un microcontrolador (Arduino). Quiero hacerlo más eficiente al limpiar una habitación. Por ahora, solo sigue recto y gira cuando golpea algo.

Pero tengo problemas para encontrar el mejor algoritmo o método para usar para conocer su posición en la sala. Estoy buscando una idea que se mantenga barata (menos de $100) y no compleja (una que no requiera una tesis de doctorado en visión por computadora). Me puede agregar algunos marcadores discretos en la habitación si es necesario.

En este momento, mi robot tiene:

  • Una webcam
  • Tres sensores de proximidad (alrededor de un rango de 1 metro)
  • Brújula (no se utiliza por ahora)
  • Wi-Fi
  • Su velocidad puede variar si la batería está llena o casi vacía
  • Un netbook Eee PC {[27] } está incrustado en el robot

¿Tienes alguna idea para hacer esto? ¿Existe algún método estándar para este tipo de problemas?

Nota: si esta pregunta pertenece a otro sitio web, por favor muévela, no pude encontrar un lugar mejor que Stack Overflow.

Author: Peter Mortensen, 2011-06-29

11 answers

El problema de averiguar la posición de un robot en su entorno se llama localización. Los investigadores de ciencias de la computación han estado tratando de resolver este problema durante muchos años, con un éxito limitado. Un problema es que se necesita una entrada sensorial razonablemente buena para averiguar dónde se encuentra, y la entrada sensorial de las cámaras web (es decir, la visión por computadora) está lejos de ser un problema resuelto.

Si eso no te asustó: uno de los enfoques de localización que me parece más fácil de entender es filtrado de partículas. La idea es algo como esto:

  1. Se lleva un registro de un montón de partículas, cada una de las cuales representa una posible ubicación en el entorno.
  2. Cada partícula también tiene una probabilidad asociada que le dice lo seguro que está de que la partícula realmente representa su verdadera ubicación en el entorno.
  3. Cuando empiezas, todas estas partículas pueden ser distribuidas uniformemente a través de su entorno y se les da probabilidades iguales. Aquí el robot es gris y las partículas son verdes. filtro de partículas inicial
  4. Cuando tu robot se mueve, mueves cada partícula. También puede degradar la probabilidad de cada partícula para representar la incertidumbre en cómo los motores realmente mueven el robot. partículas después del movimiento
  5. Cuando su robot observa algo (por ejemplo, un punto de referencia visto con la cámara web, una señal wifi, etc.) se puede aumentar la probabilidad de partículas que de acuerdo con esa observación . partículas después de la observación
  6. También es posible que desee reemplazar periódicamente las partículas de menor probabilidad con nuevas partículas basadas en observaciones.
  7. Para decidir dónde está realmente el robot, puede usar la partícula con la mayor probabilidad, el clúster de mayor probabilidad, el promedio ponderado de todas las partículas, etc.

Si buscas un poco, encontrarás muchos ejemplos: por ejemplo, un video de un robot usando filtrado de partículas para determinar su ubicación en una habitación pequeña.

El filtrado de partículas es bueno porque es bastante fácil de entender. Eso hace que implementarlo y ajustarlo sea un poco menos difícil. Hay otras técnicas similares (como Kalman filters ) que podrían ser teóricamente más sólidas, pero pueden ser más difíciles de entender.

 32
Author: Nate Kohl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 14:09:28

Código QR

Un póster de código QR en cada habitación no solo haría una interesante pieza de arte moderno, sino que sería relativamente fácil de detectar con la cámara.

 7
Author: Peaches491,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 14:02:29

Si puede colocar algunos marcadores en la habitación, usar la cámara podría ser una opción. Si 2 marcadores conocidos tienen un desplazamiento angular (de izquierda a derecha), entonces la cámara y los marcadores se encuentran en un círculo cuyo radio está relacionado con el ángulo medido entre los marcadores. No recuerdo la fórmula de inmediato, pero el segmento de arco (en ese círculo) entre los marcadores será el doble del ángulo que ves. Si tiene los marcadores a una altura conocida y la cámara está en un ángulo de inclinación fijo, puede calcule la distancia a los marcadores. Cualquiera de estos métodos por sí solo puede clavar su posición con suficientes marcadores. Usar ambos ayudará a hacerlo con menos marcadores.

Desafortunadamente, esos métodos son imperfectos debido a errores de medición. Se puede evitar esto mediante el uso de un estimador Kalman para incorporar múltiples mediciones ruidosas para llegar a una buena estimación de la posición - a continuación, se puede alimentar en alguna información de cálculo muerto (que también es imperfecta) para refinarlo aún más. Esta parte se va bastante profundo en matemáticas, pero yo diría que es un requisito para hacer un gran trabajo en lo que estás intentando. Puede hacerlo bien sin él, pero si desea una solución óptima (en términos de la mejor estimación de posición para una entrada dada) no hay mejor manera. Si realmente quieres una carrera en robótica autónoma, esto jugará a lo grande en tu futuro. (

Una vez que pueda determinar su posición, puede cubrir la habitación en cualquier patrón que desee. Seguir usando el sensor de bump para ayudar a construir un mapa de obstáculos y a continuación, tendrá que idear una manera de escanear la incorporación de los obstáculos.

No estoy seguro de si tienes el fondo de matemáticas todavía, pero aquí está el libro: http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C

 6
Author: phkahler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 13:58:37

Esto no reemplaza la respuesta aceptada (lo cual es genial, ¡gracias!) pero yo podría recomendar obtener un Kinect y utilizar que en lugar de su cámara web, ya sea a través de los controladores oficiales de Microsoft recientemente lanzado o el uso de los controladores hackeados si su EeePC no tiene Windows 7 (presumiblemente no lo hace).

De esa manera el posicionamiento será mejorado por la visión 3D. Observar puntos de referencia ahora le dirá qué tan lejos está el punto de referencia, y no solo en qué parte del campo visual se encuentra ese punto de referencia encontrar.


De todos modos, la respuesta aceptada realmente no aborda cómo seleccionar puntos de referencia en el campo visual, y simplemente asume que puede. Si bien es posible que los controladores de Kinect ya tengan incluida la detección de características (no estoy seguro), también puede usar OpenCV para detectar características en la imagen.

 4
Author: jhocking,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-30 11:37:42

Una solución sería usar una estrategia similar a "flood fill" (wikipedia). Para que el controlador realice barridos con precisión, necesita una sensación de distancia. Puede calibrar su bot utilizando los sensores de proximidad: por ejemplo, ejecutar el motor durante 1 seg = xx cambio de proximidad. Con esa información, puede mover su bot para una distancia exacta, y continuar barriendo la habitación utilizando relleno de inundación.

 3
Author: odrm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 12:35:45

Suponiendo que no esté buscando una solución generalizada, puede que en realidad conozca la forma, el tamaño, las posibles ubicaciones de obstáculos, etc. de la habitación. Cuando el bot existe la fábrica no hay información sobre su entorno operativo futuro, lo que lo obliga a ser ineficiente desde el principio. Si ese es tu caso, puedes codificar esa información y luego usar medidas básicas (es decir. codificadores rotativos sobre ruedas + brújula) para averiguar con precisión su ubicación en la habitación/casa. No hay necesidad de wifi triangulación o locas configuraciones de sensores en mi opinión. Al menos para empezar.

 3
Author: tmslnz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-29 12:50:57

¿Alguna vez has considerado el GPS? Cada posición en la tierra tiene unas coordenadas GPS únicas-con una resolución de 1 a 3 metros, y haciendo GPS diferencial se puede bajar a un rango inferior a 10 cm-más información aquí:

Http://en.wikipedia.org/wiki/Global_Positioning_System

Y Arduino tiene muchas opciones de módulos GPS:

Http://www.arduino.cc/playground/Tutorials/GPS

Después de haber recogido todos los puntos de coordenadas clave de la casa, puede luego escriba la rutina para que el arduino mueva el robot de un punto a otro (como se recopiló anteriormente), asumiendo que hará todas esas cosas de evitación de obstáculos.

Puede encontrar más información aquí:

Http://www.google.com/search?q=GPS + localización + robots & num=100

Y dentro de la lista encontré esto-específicamente para su caso: Arduino + GPS + localización:

Http://www.youtube.com/watch?v=u7evnfTAVyM

 1
Author: Peter Teoh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-01 01:03:11

Yo también estaba pensando en este problema. Pero no entiendo por qué no puedes triangular. Tener dos o tres balizas (por ejemplo, LED IR de diferentes frecuencias) y un sensor giratorio IR 'ojo' en un servo. Usted podría entonces conseguir una fijación casi constante en su posición. Espero que la precisión sería en el rango de cm bajo y sería barato. Luego puede mapear cualquier cosa con la que se encuentre fácilmente.

Tal vez también podría utilizar cualquier interrupción en los haces de baliza para trazar objetos que están bastante lejos del robot también.

 1
Author: user1671687,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-22 11:55:09

Utilice el sensor ultrasónico HC-SR04 o similar. Como se dijo anteriormente, sienta la distancia de las paredes del robot con sensores y la parte de la habitación con el código QR.

Cuando esté cerca de una pared gire 90 grados y muévase como ancho de su robot y vuelva a girar 90 grados (es decir, 90 grados a la izquierda) y vuelva a mover su robot Creo que le ayudará:)

 1
Author: Ravinder Payal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-03-29 21:08:32

¿Tienes una cámara que dijiste? Consideró mirando el techo ? Hay pocas posibilidades de que dos habitaciones tengan dimensiones idénticas, por lo que puede identificar en qué habitación se encuentra, la posición en la habitación se puede calcular desde la distancia angular hasta los bordes del techo y la dirección probablemente se puede extraer por la posición de las puertas.

Esto requerirá un poco de procesamiento de imágenes, pero la aspiradora que se mueve lentamente para limpiar de manera eficiente tendrá tiempo suficiente para calcular.

¡Buena suerte !

 0
Author: MAC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-12 20:37:03

Estoy trabajando en un proyecto de visión computacional python de Raspberry Pi para permitir que un robot sin codificadores navegue con mayor precisión utilizando el seguimiento de la cámara. Esto no resuelve el problema de la navegación de la sala (que también me interesa) Hay algunos buenos ejemplos usando ROS y LIDAR. De todos modos esta es mi pequeña contribución si usted está interesado (Trabajo en progreso). Más información a continuación. https://github.com/pageauc/motion-track/tree/master/cam-track

 0
Author: Claude Pageau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-06 13:52:10