Vous cherchez des moyens pour un robot de se localiser 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 tout droit et de tourner quand il frappe quelque chose.

Mais j’ai du mal à trouver le meilleur algorithme ou la meilleure méthode à utiliser pour connaître sa position dans la pièce . Je recherche une idée qui rest bon marché (moins de 100 dollars) et non pas complexe (celle qui ne nécessite pas de thèse de doctorat en vision par ordinateur). Je peux append des marqueurs discrets dans la pièce si nécessaire.

En ce moment, mon robot a:

  • Une webcam
  • Trois capteurs de proximité (environ 1 mètre de scope)
  • Compass (pas 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 ce faire? Existe-t-il une méthode standard pour ce type de problèmes?

Note: si cette question appartient à un autre site Web, déplacez-le, je n’ai pas trouvé de meilleur endroit que Stack Overflow.

Le problème de la détermination de la position d’un robot dans son environnement s’appelle la localisation . Les chercheurs en informatique tentent de résoudre ce problème depuis de nombreuses années, avec un succès limité. Un problème est que vous avez besoin d’une entrée sensorielle raisonnablement bonne pour déterminer où vous êtes, et les entrées sensorielles provenant des webcams (la vision par ordinateur) sont loin d’être un problème résolu.

Si cela ne vous a pas effrayé: l’une des approches de la localisation que je trouve la plus facile à comprendre est le filtrage de particules . L’idée va quelque chose comme ceci:

  1. Vous gardez une trace d’un tas de particules , chacune représentant un emplacement possible dans l’environnement.
  2. Chaque particule a également une probabilité associée qui vous indique à quel point vous êtes certain que la particule représente réellement votre véritable position dans l’environnement.
  3. Lorsque vous commencez, toutes ces particules peuvent être dissortingbuées uniformément dans votre environnement et avoir les mêmes probabilités. Ici, le robot est gris et les particules sont vertes. filtre à particules initial
  4. Lorsque votre robot se déplace, vous déplacez chaque particule . Vous pouvez également dégrader la probabilité de chaque particule pour représenter l’incertitude dans la façon dont les moteurs déplacent réellement le robot. particules après mouvement
  5. Lorsque votre robot observe quelque chose (par exemple un repère vu avec la webcam, un signal wifi, etc.), vous pouvez augmenter la probabilité que des particules correspondent à cette observation . particules après observation
  6. Vous pourriez également vouloir remplacer périodiquement les particules les moins probables par de nouvelles particules en fonction des observations.
  7. Pour décider où se trouve le robot, vous pouvez soit utiliser la particule avec la probabilité la plus élevée, le cluster à probabilité la plus élevée, la moyenne pondérée de toutes les particules, etc.

Si vous cherchez un peu, vous trouverez de nombreux exemples: par exemple, une vidéo d’un robot utilisant le filtrage de particules pour déterminer son emplacement dans une petite pièce .

Le filtrage des particules est intéressant car il est assez facile à comprendre. Cela rend la mise en œuvre et le peaufinage un peu moins difficile. Il existe d’autres techniques similaires (comme les filtres de Kalman ) qui sont sans doute plus théoriques, mais qui peuvent être plus difficiles à comprendre.

QR Code

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

Si vous pouvez placer des marqueurs dans la pièce, utiliser l’appareil pourrait être une option. Si 2 marqueurs connus ont un déplacement angular (de gauche à droite), la caméra et les marqueurs se trouvent sur un cercle dont le rayon est lié à l’angle mesuré entre les marqueurs. Je ne me souviens pas de la formule tout de suite, mais le segment d’arc (sur ce cercle) entre les marqueurs sera le double de l’angle que vous voyez. Si les repères sont à une hauteur connue et que la caméra se trouve à un angle d’inclinaison fixe, vous pouvez calculer la distance par rapport aux repères. Chacune de ces méthodes seule peut déterminer votre position avec suffisamment de marqueurs. Utiliser les deux aidera à le faire avec moins de marqueurs.

Malheureusement, ces méthodes sont imparfaites en raison 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 la position. Vous pouvez ensuite utiliser certaines informations sur les estimés morts (qui sont également imparfaites) pour les affiner davantage. Cette partie est assez profonde en mathématiques, mais je dirais que c’est une exigence pour faire un excellent travail dans ce que vous essayez. Vous pouvez le faire sans cela, mais si vous voulez une solution optimale (en termes de meilleure estimation de la 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 grand rôle dans votre avenir. (

Une fois que vous pouvez déterminer votre position, vous pouvez couvrir la pièce selon le motif 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 les connaissances mathématiques, mais voici le livre: http://books.google.com/books/about/Applied_optimal_estimation.html?id=KlFrn8lpPP0C

Cela ne remplace pas la réponse acceptée (ce qui est bien, merci!) Mais je recommanderais peut-être d’obtenir un Kinect et de l’utiliser à la place de votre webcam, via les pilotes officiels récemment publiés ou les pilotes piratés si votre EeePC n’a pas Windows 7 (probablement pas).

De cette façon, le positionnement sera amélioré par la vision 3D. L’observation des points de repère vous indiquera désormais à quelle distance se situe le sharepoint repère et pas seulement dans le champ visuel de ce repère.


Quoi qu’il en soit, la réponse acceptée ne traite pas vraiment de la manière de choisir les repères dans le champ visuel et suppose simplement que vous pouvez le faire. Bien que la détection des fonctionnalités soit déjà possible pour les pilotes Kinect (je n’en suis pas sûr), vous pouvez également utiliser OpenCV pour détecter des fonctionnalités dans l’image.

Une solution consisterait à utiliser une stratégie similaire à “inondation” ( wikipedia ). Pour que le contrôleur exécute avec précision des balayages, il faut une certaine distance. Vous pouvez calibrer votre bot en utilisant les capteurs de proximité: par exemple, faites tourner le moteur pendant 1 seconde = xx changement de proximité. Avec cette information, vous pouvez déplacer votre bot pour une distance exacte et continuer à balayer la pièce en utilisant le remplissage par jet.

En supposant que vous ne cherchiez pas une solution généralisée, vous pouvez effectivement connaître la forme, la taille, les emplacements d’obstacles potentiels, etc. Lorsque le robot existe, il n’y a pas d’informations sur son futur environnement d’exploitation, ce qui le force à être inefficace. dès le début. Si tel est votre cas, vous pouvez coder en dur ces informations, puis utiliser les mesures de base (c.-à-d. Encodeurs rotatifs sur roues + boussole) pour déterminer précisément leur emplacement dans la pièce ou la maison. Pas besoin de sortingangulation wifi ou de configurations de capteurs incroyables à mon avis. Au moins pour un début.

Avez-vous déjà considéré le GPS? Chaque position sur la terre a des coordonnées GPS uniques – avec une résolution de 1 à 3 mètres, et en faisant un GPS différentiel, vous pouvez descendre à une scope inférieure à 10 cm – plus d’infos 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 écrire la routine pour que l’arduino déplace le robot d’un point à un autre (tel que collecté ci-dessus).

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écifiquement pour votre cas: localisation Arduino + GPS +:

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

Je pensais à ce problème aussi. Mais je ne comprends pas pourquoi vous ne pouvez pas simplement sortinganguler? Avoir deux ou trois balises (par ex. LED IR de différentes fréquences) et un capteur rotatif IR «œil» sur un servo. Vous pourriez alors obtenir une correction presque constante de votre position. Je m’attends à ce que la précision soit dans la gamme de cm faible et ce serait bon marché. Vous pouvez ensuite mapper facilement tout ce que vous rencontrez.

Peut-être pourriez-vous également utiliser n’importe quelle interruption des faisceaux lumineux pour tracer des objects assez éloignés du robot.

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

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

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

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

Bonne chance !

Je travaille sur un projet de vision par ordinateur Python Raspberry Pi pour permettre à un robot sans encodeur de naviguer plus précisément grâce au suivi par caméra. Cela ne résout pas le problème de la navigation dans la pièce (ce qui m’intéresse également). Il existe de bons exemples d’utilisation de ROS et de LIDAR. En tout cas c’est ma petite consortingbution si vous êtes intéressé (Travaux en cours). Plus d’infos ci-dessous. https://github.com/pageauc/motion-track/tree/master/cam-track