Un petit aperçu de mon objectif
Je suis en train de construire un robot mobile autonome qui doit naviguer dans une zone inconnue, doit éviter les obstacles et recevoir des entrées vocales pour effectuer diverses tâches. Il doit également reconnaître les visages, les objets, etc. J'utilise un capteur Kinect et des données d'odométrie de roue comme capteurs. J'ai choisi C # comme langue principale car les pilotes officiels et sdk sont facilement disponibles. J'ai terminé le module Vision et PNL et je travaille sur la partie Navigation.
Mon robot utilise actuellement l'Arduino comme module de communication et un processeur Intel i7 x64 bits sur un ordinateur portable comme processeur.
Voici l'aperçu du robot et de son électronique:
Le problème
J'ai implémenté un algorithme SLAM simple qui obtient la position du robot à partir des encodeurs et ajoute ce qu'il voit en utilisant le kinect (comme une tranche 2D du nuage de points 3D) à la carte.
Voici à quoi ressemblent actuellement les plans de ma chambre:
Ceci est une représentation approximative de ma chambre actuelle:
Comme vous pouvez le voir, ce sont des cartes très différentes et donc vraiment mauvaises.
- Est-ce attendu de l'utilisation d'un calcul juste mort?
- Je connais les filtres à particules qui l'affinent et je suis prêt à l'implémenter, mais comment améliorer ce résultat?
Mise à jour
J'ai oublié de mentionner mon approche actuelle (que j'avais auparavant à oublier mais). Mon programme fait à peu près ceci: (j'utilise une table de hachage pour stocker la carte dynamique)
- Prenez le nuage de points de Kinect
- Attendre les données d'odométrie en série entrantes
- Synchroniser à l'aide d'une méthode basée sur l'horodatage
- Estimer la pose du robot (x, y, thêta) en utilisant des équations sur Wikipedia et des données d'encodeur
- Obtenir une "tranche" du nuage de points
- Ma tranche est essentiellement un tableau des paramètres X et Z
- Tracez ensuite ces points en fonction de la pose du robot et des paramètres X et Z
- Répéter