Localisation d’un robot à l’aide de Kinect et EMGU (wrapper OpenCV)

Je travaille sur une petite application de bureau WPF pour suivre un robot. J’ai un Kinect pour Windows sur mon bureau et j’ai pu créer les fonctions de base et exécuter le stream de caméras Profondeur et le stream de caméras RVB.

Ce dont j’ai besoin, c’est de suivre un robot au sol, mais je ne sais pas par où commencer. J’ai découvert que je devrais utiliser EMGU (OpenCV wrapper)

Ce que je veux faire, c’est suivre un robot et trouver son emplacement à l’aide de la caméra de profondeur. En gros, il s’agit de la localisation du robot à l’aide de la sortingangulation stéréo. Puis, en utilisant TCP et Wifi, envoyez au robot des commandes lui permettant de passer d’un endroit à l’autre à l’aide des caméras RVB et Profondeur. La caméra RVB sera également utilisée pour mapper l’object dans la zone afin que le robot puisse emprunter le meilleur chemin et éviter les objects.

Le problème est que je n’avais jamais travaillé avec Computer Vision auparavant et que c’est en fait le premier, je ne suis pas tenu à une échéance et je suis tout à fait disposé à apprendre tout ce qui se rapporte pour terminer ce projet.

Je cherche des détails, des explications, des astuces, des liens ou des tutoriels pour répondre à mes besoins.

Merci.

La localisation des robots est un problème très délicat et je me bats moi-même depuis des mois. Je peux vous dire ce que j’ai accompli. Mais vous avez plusieurs options:

  • Odomètre basé sur le stream optique : (également appelé odomésortinge visuelle):
    1. Extraire les points-clés d’une image ou d’une fonctionnalité (j’ai utilisé Shi-Tomashi ou cvGoodFeaturesToTrack)
    2. Faites la même chose pour une image consécutive
    3. Correspondre à ces fonctionnalités (j’ai utilisé Lucas-Kanade)
    4. Extraire les informations de profondeur de Kinect
    5. Calculer la transformation entre deux nuages ​​de points 3D.

L’algorithme ci-dessus essaie d’estimer le mouvement de la caméra entre deux images, ce qui vous indiquera la position du robot.

  • Localisation Monte Carlo : C’est un peu plus simple, mais vous devriez également utiliser l’odomètre à roue. Consultez ce document pour une approche basée sur AC #.

La méthode ci-dessus utilise des modèles probabilistes pour déterminer l’emplacement du robot.

La partie sortingste est que, même si les bibliothèques existent en C ++ pour faire ce dont vous avez besoin très facilement, les emballer pour C # est une tâche herculéenne. Si toutefois vous pouvez coder un wrapper, alors 90% de votre travail est terminé, les bibliothèques de clés à utiliser sont PCL et MRPT .

La dernière option (qui est de loin la plus simple mais la plus imprécise) consiste à utiliser KinectFusion intégré au kit de développement Kinect SDK 1.7. Mais mes expériences avec la localisation des robots ont été très mauvaises.

Vous devez lire Slam for Dummies , cela rendra très claire la localisation de Monte Carlo.

La dure réalité est que c’est très délicat et que vous finirez probablement par le faire vous-même. J’espère que vous plongerez dans ce vaste sujet et que vous apprendrez des trucs géniaux.

Pour plus d’informations, ou les enveloppes que j’ai écrites. Juste commentaire ci-dessous … 🙂

Meilleur

Je ne sais pas si cela vous aiderait ou non … mais j’ai mis en place un module Python qui pourrait vous aider.

http://letsmakerobots.com/node/38883#comments