Comment explorer méthodiquement un espace restreint

Bonjour

La question est de comment explorer, avec un robot basique à roues, un espace grand comme une pièce (mon salon) de manière ordonnée et systématique. J'avais pensé à utiliser un GPS, mais la résolution est de 2,5 m, donc pas adapté. Alors je me suis demandé comment d'autres ont pu faire ça, avec ou sans GPS.

Je commence tout juste en arduino, j'ai des notions très limitées en électronique, mais j'ai une bonne maîtrise du C (j'ai été programmeur C)

Désolé si la question a déjà été posée, et dans ce cas, merci de m'envoyer sur le bon lien.

Merci par avance

bonjour,
tu entends quoi par explorer? savoir s'il y a des obstacles pour les cartographier?

pour le gpc, oublie, le signal dans une maison risque de ne pas passer du tout.

Puisque tu parles de résolution, t'es-tu posé la question de la résolution de la cartographie de ta pièce?
Parce que ce genre de chose nécessite une grosse quantité de mémoire et l'arduino n'en a pas beaucoup.

@infobarquee. Explorer méthodiquement consiste à arpenter méthodiquement la zone pour rechercher soit des obstacles, soit des zones intéressantes. En fait je souhaiterais faire un exercice purement formel consistant à cartographier par exemple des zones plus lumineuses, ou plus sombres, et qui varient. Sinon, oui, poru le GPS, j'ai "oublié". C'est bien l'objet de mes interrogations du moment. Comment me repérer sans que ça me coute un bras ?

@fdufnews. Pour cartographier, le compte utiliser un quadtree, justement parce qu'il n'y a pas beaucoup de mémoire, et qu'il faut pouvoir avoir une granularité adaptative. Et les 32k ne me font pas peur, j'ai déjà programmé des gros volumes de données dans des espaces assez restreints, le "pire" fut de l'analyse d'image sur un mac II CX (oui, il y a un peu longtemps, mais j'ai fait d'autres choses depuis). Alors une pièce avec un grain grossier avec 32K, même sans utiliser une mémoire auxilliaire, ça ne me semble pas être un problème.

Arduino Uno :
32Ko de flash (pour le programme)
2 Ko de RAM (mémoire volatile pour les variables de ton programme)
1 Ko d'EEPROM (mémoire durable mais à écritures limitées)

Où comptes-tu stocker ta cartographie ?

A mon avis, tu devrais penser à l'adjonction d'une carte SD...

Ce sujet risque de tourner en rond, stocker des données c'est pas le plus compliqué a faire, cartographier une pièce oui.

DamienRaczy:
Désolé si la question a déjà été posée, et dans ce cas, merci de m'envoyer sur le bon lien.

Oui cela a deja était fait de nombreuses fois, ici

Ou alors du genre roomba ?

cartographier par exemple des zones plus lumineuses, ou plus sombres, et qui varient

c'est pas la même chose de carto de la lumière et carto des obstacles.

après, il y a une autre chose a prendre en compte, la taille de la pièce.
un wc, un salon, une salle de sport.

déjà, outre le pseudo soucis de mémoire, il faut
un ou deux capteurs US
un capteur de lumière style LDR

à toi de voir après comment tu veux cartographier la pièce :
en laissant le robot faire son chemin et bouffer de la ram
lui imposer un quadrillage et en calculer les obstacles, faire le tour et reprendre son circuit

tu peux utiliser une SD pour stocker les données et utiliser un encodeur pour les moteurs afin d'avoir un trajet de X cm

La question n'est pas celle des capteurs ir, ultrasons ou autres, mais celle de l'exploration méthodique de la piece. Comment se repérer en l'absence de GPS. Pour la mémoire, c'est un problème secondaire puisque j'aurai toujours la possibilité de mettre de la rom, carte sd ou autre.

La seule suggestion que je lis pour le repérage, pour l'instant, est d'utiliser un encodeur, et j'imagine une boussole ou un gyroscope. D'autres suggestions ?

DamienRaczy:
...mais la résolution est de 2,5 m, donc pas adapté. Alors je me suis demandé comment d'autres ont pu faire ça, avec ou sans GPS.

Je commence tout juste en arduino,

Bonsoir
les "zarduinos" :grin: même si c'est un peu le cirque , c'est sympa , mais ça ne fait pas tout :sunglasses:
peut etre que dans ton cas , ce n'est pas du tout adapté à ton besoin

expose mieux ton probleme :
entre autre déjà , surface (geometrie) à parcourir et resolution demandée

Pour que tu prenne conscience de la complexité de ton projet ,il faut que tu fasse un robot qui envoie un feedback en 3D, c'est a dire représenter logiciellement le déplacement réel du robot en 3D.

  • Il faut connaitre la direction du robot.
  • Savoir de combien de X a t-il bouger.
  • De combien de Y a t'il tourner.
  • De combien de Z a t-il monter ou descendu.

Rien que d'interfacer avec les capteurs te demandera beaucoup de temps et encore plus si tu est débutant.

@-Standby. Si je comprends bien, en l'absence de GPS, je n'ai pas de système simple pour me repérer à partir d'un référentiel externe, et je suis obligé de partir des références internes déplacement et rotation. C'est bien ça?

Comment font les aspirateurs qui parcourent systématiquement une pièce ? Ils n'ont pas de système de repérage externes ? Se basent-ils uniquement sur leurs paramètres de déplacement en X et Y ?

Par contre, je ne comprends pas la notion de "qui envoie feedback en 3D". Envoyer à qui, et quel feedback ?

Les aspirateurs simples font des spirales, des trajets aléatoires, c'est efficace mais ce n'est pas très optimisé.

Christian_R:
Les aspirateurs simples font des spirales, des trajets aléatoires, c'est efficace mais ce n'est pas très optimisé.

Ah oui, pas optimisé, et il n'y a pas de représentation interne de l'espace environnant. Le but, pour moi, c'est surtout ça : construire une représentation de l'espace que je puisse utiliser par la suite.

@artouste. Ce que je veux, c'est comprendre comment je peux remplacer un positionnement par GPS par autre chose pour parcourir une pièce.

En fait, je me pose comme défi de parcourir une pièce qui contient quelques obstacles (tables, chaises, murs...) et de localiser des tâches lumineuses, et de trouver le centre ce ces tâches. Ces tâches lumineuses n'ont pas de fonction particulière que de matérialiser des zones à chercher, et dont les contours comme le centre sont imprécis.

Si je le faisais à l'échelle d'un terrain de foot, j'utiliserais un GPS. Mais là, en intérieur, ce n'est pas possible pour des problèmes de résolution du GPS et de signal.

Pour ce qui est de la résolution, comme il n'y a pas beaucoup de mémoire, je pense utiliser une résolution variable avec un quadtree. J'utilisais ça il y a quelques années en vision/analyse d'image pour économiser de la mémoire et du temps de calcul. Le quadtree permet d'utiliser un grain grossier quand on n'a pas besoin de résolution (par exemple quand l'espace est vide ou homogène), et on redécoupe la zone quand on a besoin de résolution (quand il y a des objets et/ou des détails).

Pour la résolution pour ce cas précis, on va dire qu'on part d'un maillage de l'ordre du mètre ou plus, et qu'il faut pouvoir descendre au niveau de quelques cm pour les résolutions maximales. En comptant une 100aine d'octets par noeud (ce qui est énorme, j'en conviens), en gardant de la mémoire pour la récursivité (quasi obligé avec les structures d'arbre), je pourrai stocker 1000 ou 2000 points, ce qui me semble tout à fait suffisant avec un quadtree pour un espace aussi restreint et simple d'une pièce, et suffisant aussi pour un simple programme d'essai.

Et de toute façon, s'il n'y a pas assez de mémoire, il est toujours possible d'écrire dans une carte sd. Donc la mémoire n'est pas un problème.

La question est donc moins celle de la mémoire et de la résolution de l'image, que de quelle stratégie générale utiliser pour explorer l'espace quand on a pas de GPS. Quoi mesurer ? Des déplacements avec un encodeur ? Ou existe-t-il des moyens simples et pas chers de faire une triangulation ou de simuler un GPS?

il y a une solution pour avoir une très bonne représentation d'une pièce, mais certaines pièces ne sont pas données.
faire un robot avec une kinnect, mais on oublie l'arduino dans ce cas.

Le magnétomètre permet de connaitre l'orientation absolue du mobile mais il peut être perturbé localement par des masses métalliques.
Les encodeurs s'ils sont sur les roues peuvent retourner des informations erronées si les roues patines. Si tu utilises un capteur type boule de souris comme ball caster la boule peut glisser au lieu de rouler sur certaines surfaces.
Tu peux faire une triangulation simple en plaçant un capteur sur une plateforme pilotée par des servos mais , pour faire une triangulation il faut avoir en vue trois balises ce qui n'est pas toujours compatible avec un lieu où il y a des obstacles.
Tu peux placer des balises à des positions connues du mobile et envoyant un code afin de réaliser un recalage local

En fait il n'y a pas de solution miracle. Il faut utiliser plusieurs méthodes et recouper/recaler leurs résultats.

Du point de vue hardware, il y a l'ATmega1284 qui possède 128ko de Flash et 16ko de SRAM qui serait mieux adapté à ton besoin. Quelques cartes dans le commerce utilisent ce composant, autrement il est facile de se faire sa propre carte pour quelques euros. Parcourir un arbre en RAM est quand même plus rapide que dans une carte mémoire. Surtout que l'exploitation de plusieurs capteurs demande aussi des ressources.

Je profite du sujet pour poser une question qui me taraude : n'est-il pas possible d'utiliser une solution de type GPS différentiel ?

L'idée serait d'avoir deux modules GPS identiques : un sur le robot, et un autre à une position fixe dans la pièce.

L'erreur de relevé de position n'est-elle pas la même sur les deux modules à un instant t ?
Je me demande avec quelle précision le robot pourrait déterminer sa position relative, par rapport au GPS fixe.

fdufnews:
Tu peux faire une triangulation simple en plaçant un capteur sur une plateforme pilotée par des servos mais , pour faire une triangulation il faut avoir en vue trois balises ce qui n'est pas toujours compatible avec un lieu où il y a des obstacles.
Tu peux placer des balises à des positions connues du mobile et envoyant un code afin de réaliser un recalage local

Je pensais aussi à une solution avec des réflecteurs (genre catadioptres) installés sur des points connus (coins de la pièce par ex) et une tourelle tournant en continu sur le robot et qui envoie un faisceau lumineux (genre spot laser) et avec un phototransistor (au fond d'un tube noir) calé sur la même direction qui détectera l'azimut du réflecteur.

La triangulation ne nécessite que 2 balises visibles si on connait l'orientation du robot (avec un gyroscope), avec 3, pas besoin de référence, le pb revient à trouver l'intersection ente 2 cercles ..

Il y a tout de même un peu de quoi se prendre la tête :slight_smile:

Michel

surtout que le cahier des charges prévoit des meubles comme obstacles.