algorithm - name - seo html
Buscando formas para que un robot se ubique en la casa (11)
Estoy pirateando un robot aspirador para controlarlo con un microcontrolador (Arduino). Quiero hacerlo más eficiente cuando limpie una habitación . Por ahora, simplemente sigue derecho y gira cuando golpea algo.
Pero tengo problemas para encontrar el mejor algoritmo o método 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 doctoral en visión artificial). Puedo agregar algunos marcadores discretos en la sala si es necesario.
En este momento, mi robot tiene:
- Una webcam
- Tres sensores de proximidad (alrededor de 1 metro de alcance)
- Brújula (no se usa por ahora)
- Wifi
- Su velocidad puede variar si la batería está llena o casi vacía
- Un netbook Eee PC 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, muévela, no podría encontrar un lugar mejor que Stack Overflow.
Asumiendo que no está buscando una solución generalizada, puede conocer la forma, el tamaño, las posibles ubicaciones de obstáculos, etc. Cuando el robot existe, no hay información sobre su futuro entorno operativo, lo que lo fuerza a ser ineficiente. desde el comienzo. 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 determinar con precisión su ubicación en la habitación / casa. No hay necesidad de triangulación wifi o locas configuraciones de sensores en mi opinión. Al menos para empezar.
El problema de determinar la posición de un robot en su entorno se denomina localización . Los investigadores en informática han estado tratando de resolver este problema durante muchos años, con un éxito limitado. Un problema es que necesita una entrada sensorial razonablemente buena para saber dónde se encuentra, y la información sensorial de las cámaras web (es decir, la visión de la computadora) está lejos de ser un problema resuelto.
Si eso no lo asustó: uno de los enfoques de localización que encuentro más fácil de entender es el filtrado de partículas . La idea es algo como esto:
- Mantiene un registro de un montón de partículas , cada una de las cuales representa una ubicación posible en el entorno.
- Cada partícula también tiene una probabilidad asociada que te dice qué tan seguro estás de que la partícula realmente represente tu verdadera ubicación en el entorno.
- Cuando comiences, todas estas partículas se distribuirán uniformemente en tu entorno y se te darán las mismas probabilidades. Aquí el robot es gris y las partículas son verdes.
- Cuando tu robot se mueve, mueves cada partícula . También puede degradar la probabilidad de cada partícula para representar la incertidumbre en la forma en que los motores realmente mueven al robot.
- Cuando su robot observa algo (por ejemplo, un hito visto con la cámara web, una señal wifi, etc.) puede aumentar la probabilidad de partículas que concuerden con esa observación .
- También es posible que desee reemplazar periódicamente las partículas de menor probabilidad con nuevas partículas en función de las observaciones.
- Para decidir dónde está realmente el robot, puede usar la partícula con la probabilidad más alta, el conglomerado de mayor probabilidad, el promedio ponderado de todas las partículas, etc.
Si busca un poco, encontrará muchos ejemplos: por ejemplo, un video de un robot que usa 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 modificarlo sea un poco menos difícil. Existen otras técnicas similares (como los filtros de Kalman ) que son posiblemente más sólidas desde el punto de vista teórico, pero que pueden ser más difíciles de manejar.
Si puede colocar algunos marcadores en la sala, 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 tiene un ángulo de inclinación fijo, puede calcular la distancia a los marcadores. Cualquiera de estos métodos por sí solo puede determinar 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 soluciona esto utilizando un estimador de Kalman para incorporar múltiples mediciones ruidosas para llegar a una buena estimación de posición: a continuación, puede ingresar información de cálculo irrelevante (que también es imperfecta) para perfeccionarla aún más. Esta parte es bastante profunda en matemáticas, pero yo diría que es un requisito 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 la entrada determinada) no hay mejor manera. Si realmente quieres una carrera en robótica autónoma, esto jugará grande en tu futuro. (
Una vez que pueda determinar su posición, puede cubrir la habitación en cualquier patrón que desee. Sigue usando el sensor de golpes para ayudar a construir un mapa de obstáculos y luego tendrás que idear una forma de escanear incorporando los obstáculos.
No estoy seguro de si ya tienes los conocimientos de matemática, pero aquí está el libro: http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C
Una solución sería usar una estrategia similar a "relleno de inundación" ( 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 segundo = xx cambiar en la proximidad. Con esa información, puedes mover tu bot a una distancia exacta y continuar barriendo la sala usando el relleno de inundación.
Un póster de código QR en cada habitación no solo sería una pieza de arte moderno interesante, ¡sino que sería relativamente fácil de detectar con la cámara!
Esto no reemplaza la respuesta aceptada (lo cual es genial, ¡gracias!) Pero podría recomendar obtener un Kinect y usarlo en lugar de su cámara web, ya sea a través de los controladores oficiales recientemente lanzados de Microsoft o utilizando los controladores pirateados si su EeePC no tiene Windows 7 (presumiblemente no).
De esa forma, la visión 3D mejorará el posicionamiento. Observar los puntos de referencia ahora le indicará qué tan lejos está el punto de referencia, y no solo en qué parte del campo visual se encuentra ese punto de referencia.
De todos modos, la respuesta aceptada en realidad no aborda cómo seleccionar puntos de referencia en el campo visual, y simplemente asume que usted puede. Si bien es posible que los controladores Kinect ya tengan incluida la detección de características (no estoy seguro), también puede usar OpenCV para detectar funciones en la imagen.
Alguna vez considerado GPS? Cada posición en la tierra tiene unas coordenadas de GPS únicas, con una resolución de 1 a 3 metros, y haciendo un GPS diferencial, puedes bajar al rango de menos de 10 cm, más información aquí:
http://en.wikipedia.org/wiki/Global_Positioning_System
Y Arduino tiene muchas opciones de módulos de GPS:
http://www.arduino.cc/playground/Tutorials/GPS
Después de haber recogido todos los puntos de coordenadas clave de la casa, puede escribir la rutina para que el arduino mueva el robot de un punto a otro (como se recoge arriba), suponiendo que hará todos esos obstáculos para evitar cosas.
Más información se puede encontrar aquí:
http://www.google.com/search?q=GPS+localization+robots&num=100
Y dentro de la lista encontré esto: específicamente para su caso: localización Arduino + GPS +:
Estaba pensando en este problema también. Pero no entiendo por qué no puedes triangular? Tenga dos o tres balizas (por ejemplo, LED IR de diferentes frecuencias) y un "sensor" de rotación IR en un servo. A continuación, puede obtener una solución casi constante en su posición. Espero que la precisión esté en un rango bajo de centímetros y sería económico. A continuación, puede asignar un mapa de todo lo que 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.
¿Tienes una cámara que dijiste? ¿Consideraste mirar el techo? Hay pocas posibilidades de que dos salas tengan dimensiones idénticas, por lo que puede identificar en qué habitación se encuentra, la posición en la sala puede calcularse desde la distancia angular hasta los bordes del techo y la dirección probablemente pueda extraerse por la posición de las puertas.
Esto requerirá un poco de procesamiento de imagen, pero la aspiradora que se mueve lentamente para una limpieza eficiente tendrá suficiente tiempo para computar.
Buena suerte !
Utilice el Ultra Sonic Sensor HC-SR04 o similar. Como se mencionó anteriormente, detecta la distancia de las paredes del robot con los sensores y la parte de la sala con el código QR.
Cuando estés cerca de una pared, gira 90 grados y muévete como el ancho de tu robot y vuelve a girar 90 grados (es decir, 90 grados girando a la izquierda) y mueve nuevamente tu robot, creo que te ayudará :)
Estoy trabajando en un proyecto de visión por computadora de python Raspberry Pi para permitir que un robot sin codificadores navegue de forma más precisa utilizando el seguimiento de la cámara. Esto no resuelve el problema de la navegación de la sala (lo cual también me interesa). Hay algunos buenos ejemplos que usan ROS y LIDAR. De todas formas esta es mi pequeña contribución si estás interesado (Work in progress). Más información a continuación. https://github.com/pageauc/motion-track/tree/master/cam-track