Un pequeño trasfondo de mi puntería
Estoy en el proceso de construir un robot autónomo móvil que debe navegar por un área desconocida, debe evitar obstáculos y recibir información de voz para realizar diversas tareas. También debe reconocer caras, objetos, etc. Estoy usando un sensor Kinect y datos de odometría de rueda como sensores. Elegí C # como mi idioma principal ya que los controladores oficiales y SDK están disponibles. He completado el módulo Visión y PNL y estoy trabajando en la parte de Navegación.
Mi robot actualmente utiliza el Arduino como módulo de comunicación y un procesador Intel i7 x64 bit en una computadora portátil como CPU.
Esta es la descripción general del robot y su electrónica:
El problema
Implementé un algoritmo SLAM simple que obtiene la posición del robot de los codificadores y agrega todo lo que ve usando el kinect (como una porción 2D de la nube de puntos 3D) al mapa.
Así es como se ven actualmente los mapas de mi habitación:
Esta es una representación aproximada de mi habitación real:
Como puede ver, son mapas muy diferentes y muy malos.
- ¿Se espera esto del uso de un cálculo justo?
- Soy consciente de los filtros de partículas que lo refinan y estoy listo para implementar, pero ¿cuáles son las formas en que puedo mejorar este resultado?
Actualizar
Olvidé mencionar mi enfoque actual (que antes tenía que olvidar pero olvidé). Mi programa hace más o menos esto: (estoy usando una tabla hash para almacenar el mapa dinámico)
- Nube de puntos de agarre de Kinect
- Espere los datos entrantes de odometría en serie
- Sincronice utilizando un método basado en marca de tiempo
- Estime la pose del robot (x, y, theta) usando ecuaciones en Wikipedia y datos del codificador
- Obtenga un "corte" de la nube de puntos
- Mi segmento es básicamente una matriz de los parámetros X y Z
- Luego, trace estos puntos según la pose del robot y los parámetros X y Z
- Repetir