web-dev-qa-db-fra.com

A la recherche de moyens pour un robot de se situer dans la maison

Je pirate un robot aspirateur pour le contrôler avec un microcontrôleur (Arduino). Je veux le rendre plus efficace lors du nettoyage d'une pièce. Pour l'instant, il suffit d'aller droit et tourner quand il frappe quelque chose.

Mais j’ai du mal à trouver le meilleur algorithme ou méthode à utiliser pour connaître sa position dans la pièce. Je cherche une idée qui reste peu chère (moins de 100 $) et pas trop complexe (qui ne nécessite pas de thèse de doctorat en vision par ordinateur). Je peux ajouter des marqueurs discrets dans la salle si nécessaire.

En ce moment, mon robot a:

  • Une webcam
  • Trois capteurs de proximité (environ 1 mètre)
  • Boussole (non utilisé pour l'instant)
  • Wifi
  • Sa vitesse peut varier si la batterie est pleine ou presque vide
  • Un netbook Eee PC est intégré au robot

Avez-vous une idée pour faire cela? Existe-t-il une méthode standard pour ce type de problèmes?

Remarque: si cette question appartient à un autre site Web, déplacez-la, je ne pourrais pas trouver un meilleur endroit que Stack Overflow.

47
Matthieu Napoli

QR Code

Une affiche QR Code dans chaque pièce constituerait non seulement une œuvre d'art moderne intéressante, mais serait relativement facile à repérer avec la caméra!

8
Peaches491

Si vous pouvez placer des marqueurs dans la pièce, vous pouvez utiliser la caméra. Si 2 marqueurs connus ont un décalage angulaire (de gauche à droite), alors la caméra et les marqueurs se trouvent sur un cercle dont le rayon est lié à l'angle mesuré. Je ne me souviens pas de la formule, mais le segment d'arc (sur ce cercle) entre les marqueurs sera le double de l'angle que vous voyez. Si vous avez les marqueurs à une hauteur connue et que la caméra est à un angle d'inclinaison fixe, vous pouvez calculer la distance aux marqueurs. Chacune de ces méthodes à elle seule peut déterminer votre position avec suffisamment de marqueurs. L'utilisation des deux vous aidera à le faire avec moins de marqueurs.

Malheureusement, ces méthodes sont imparfaites à cause d’erreurs de mesure. Vous pouvez contourner ce problème en utilisant un estimateur de Kalman pour incorporer plusieurs mesures bruitées afin d’obtenir une bonne estimation de position. Vous pouvez ensuite alimenter certaines informations d’estimations mortes (qui sont également imparfaites) pour les affiner davantage. Cette partie va assez loin dans les mathématiques, mais je dirais que c'est une obligation de faire un excellent travail dans ce que vous essayez. Vous pouvez le faire sans problème, mais si vous voulez une solution optimale (en termes d'estimation de la meilleure position pour une entrée donnée), il n'y a pas de meilleur moyen. Si vous voulez réellement faire carrière dans la robotique autonome, cela jouera un rôle important dans votre avenir. (

Une fois que vous pouvez déterminer votre position, vous pouvez couvrir la pièce de la manière que vous souhaitez. Continuez à utiliser le capteur de relief pour vous aider à construire une carte des obstacles, puis vous devrez trouver un moyen de numériser en intégrant les obstacles.

Vous ne savez pas encore si vous avez déjà des connaissances en mathématiques, mais voici le livre: http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPPP0C

6
phkahler

Cela ne remplace pas la réponse acceptée (ce qui est formidable, merci!), Mais je recommanderais peut-être de choisir un Kinect et de l'utiliser à la place de votre webcam, soit par l'intermédiaire des pilotes officiels récemment publiés par Microsoft, soit en utilisant les pilotes piratés si votre EeePC ne possède Windows 7 (probablement pas).

De cette façon, le positionnement sera amélioré par la vision 3D. En observant les points de repère, vous pourrez maintenant savoir à quelle distance se trouve ce point de repère, et pas seulement où, dans le champ visuel, il se situe.


Quoi qu'il en soit, la réponse acceptée ne dit pas vraiment comment identifier les points de repère dans le champ visuel, mais suppose simplement que vous le pouvez. Même si la détection de fonctionnalités est déjà incluse dans les pilotes Kinect (je ne suis pas sûr), vous pouvez également utiliser OpenCV pour détecter les fonctionnalités dans l'image.

4
jhocking

En supposant que vous ne cherchiez pas une solution généralisée, vous pouvez en fait connaître la forme de la pièce, sa taille, les emplacements d'obstacles potentiels, etc. inefficace dès le départ ... Si c'est votre cas, vous pouvez coder cette information en dur, puis utiliser des mesures de base (codeurs rotatifs sur roues + compas) pour déterminer avec précision son emplacement dans la pièce. Pas besoin de triangulation wifi ou de configurations de capteurs loufoques à mon avis. Au moins pour commencer.

3
tmslnz

Une solution serait d'utiliser une stratégie similaire à celle de "remplissage par inondation" ( wikipedia ). Pour que le contrôleur effectue des balayages avec précision, il faut une sensation de distance. Vous pouvez calibrer votre bot à l’aide des capteurs de proximité: faire tourner le moteur pendant 1 seconde = xx changement de proximité. Avec ces informations, vous pouvez déplacer votre bot sur une distance exacte et continuer à balayer la pièce en utilisant un remplissage par inondation.

3
odrm

Jamais considéré GPS? Chaque position sur la terre possède des coordonnées GPS uniques - avec une résolution de 1 à 3 mètres, et en faisant du GPS différentiel, vous pouvez descendre à une distance inférieure à 10 cm - pour plus d'informations, cliquez ici:

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

Et Arduino a beaucoup d'options de modules GPS:

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

Une fois que vous avez collecté tous les points de coordonnées clés de la maison, vous pouvez ensuite écrire la routine permettant à l’arduino de déplacer le robot d’un point à l’autre (comme indiqué ci-dessus) - en supposant que cela évite tous les obstacles.

Plus d'informations peuvent être trouvées ici:

http://www.google.com/search?q=GPS+localization+robots&num=100

Et dans la liste, j'ai trouvé ceci - spécialement pour votre cas: Arduino + GPS + localisation:

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

1
Peter Teoh

Je pensais aussi à ce problème. Mais je ne comprends pas pourquoi vous ne pouvez pas simplement trianguler? Disposez de deux ou trois balises (par exemple, des LED infrarouges de fréquences différentes) et d'un capteur IR tournant de capteur sur un servo. Vous pourriez alors obtenir une position presque constante sur votre position. Je m'attends à ce que la précision soit de l'ordre du cm et qu'elle soit peu coûteuse. Vous pouvez ensuite mapper tout ce que vous rencontrez facilement.

Peut-être pourriez-vous également utiliser toute interruption des faisceaux de balises pour tracer des objets assez éloignés du robot.

1
user1671687

Utilisez le capteur Ultra Sonic HC-SR04 ou similaire ... Comme indiqué ci-dessus, mesurez la distance entre les murs et le robot avec les capteurs et la partie de la pièce avec le code QR.

Lorsque vous êtes près d’un mur, tournez à 90 degrés et déplacez-vous selon la largeur de votre robot, puis tournez à nouveau à 90 degrés (c’est-à-dire 90 degrés à gauche) et déplacez à nouveau votre robot.

1
Ravinder Payal

Vous avez une caméra vous avez dit? Avez-vous envisagé de regarder le plafond? Il y a peu de chance que deux pièces aient des dimensions identiques. Vous pouvez donc identifier votre pièce. La position dans la pièce peut être calculée à partir de la distance angulaire par rapport aux limites du plafond et la direction peut probablement être extraite par la position des portes.

Cela nécessitera un traitement d’image, mais l’aspirateur qui se déplace lentement pour un nettoyage efficace aura le temps de calculer.

Bonne chance !

0
MAC

Je travaille sur un projet de vision par ordinateur python Raspberry Pi afin de permettre à un robot sans encodeurs de naviguer plus précisément en utilisant le suivi par caméra. Cela ne résout pas le problème de la navigation dans les salles (ce qui m'intéresse également). Il existe de bons exemples utilisant ROS et LIDAR. Quoi qu'il en soit, ceci est ma petite contribution si vous êtes intéressé (travail en cours). Plus d'informations ci-dessous . https://github.com/pageauc/motion-track/tree/master/cam-track

0
Claude Pageau