Aller au contenu


Photo
- - - - -

parcourir une surface délimitée par un polygone

surface motorisation

17 réponses à ce sujet

#1 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 10 décembre 2021 - 02:14

Bonjour,

 
Je cherche des conseils pour un petit problème de robotique, et je m'adresse à vous à la recherche de pistes de prospection.
Si vous aviez des idées, ou des liens sur le sujet, je suis intéressé.
 
Il s'agit d'un robot motorisé d'extérieur (2 roues motorisées et deux roues libres) .
 
Le robot peut piloter ses 2 roues indépendamment, de 0 à 100% de la vitesse des moteurs (moteur de 300W, vitesse max 6 km/h, diamètre des roues de 26 cm).
Les commandes de bases sont :
- avancer à X % de la vitesse max. en ligne droite
- reculer à -X% de vitesse max. en ligne droite 
- tourner sur soi-même vers un cap fixé (le robot est équipé d'un GPS et d'un magnétomètre pour mesurer le cap). [0..359]
- lorsque le robot se déplace, on teste s'il est, sur une prochaine itération de mouvement, hors du polygone. S'il risque de sortir, on arrête le robot.
Le robot a une largeur (par exemple 0.7m) , correspondant à sa zone de travail.
 
Le robot doit évoluer dans un polygone (dont les sommets sont définis par des points en coordonnées GPS { lat, lng }. Le polygone est relativement simple, on évite les angles aigus entrant. 
Par opération simple, on peut convertir { lat, lng}, en coordonnées UTM, qui s'apparentent plus à des coordonnées { x, y } dans un repère orthonormé.
 
 
Le but est de parcourir toutes la surface du polygone, de manière optimale (vitesse, durée).
 
Actuellement, j'utilise un enchainement simpliste, où le robot avance en ligne droite, détecte sa sortie du polygone, recule à vitesse lente pendant 5 secondes, tourne aléatoirement à droite ou à gauche, avance en ligne droite, etc... mais les performances sont très faibles.
 
Le pilotage est réalisé depuis une Raspberry Pi 4 en NodeJs.
 
Cordialement.
 
 

Image(s) jointe(s)

  • robot.png
  • polygone.png


#2 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 10 décembre 2021 - 02:41

Bonjour,

sans prétendre être optimal, j'ai deux solutions assez simples et relativement optimisées à te proposer, à condition que ton polygone soit convexe (ie toutes les diagonales restent dans l'intérieur du polygone).

 

Solution 1 :

tu fais un tour complet en longeant le bord. Si tu exclus la zone traitée, tu obtiens un nouveau polygone plus petit : tu continue ainsi jusqu'à ce qu'il ne reste plus rien à traiter. Je penses que la distance parcourue sera en général très près du minimum. Par contre, à la fin, on tourne beaucoup (je sais pas si ton robot à besoin de beaucoup de temps ou pas pour tourner).

Si tu veux traiter le cas non convexe, je vois deux pistes :

A) tu fais de la même manière jusqu'à ce que la surface restante soit en deux parties : tu traites alors les deux parties l'une après l'autre

B) tu découpes dès le départ le polygone en 2 (ou plus) polygones convexes, que tu traites succéssivement

 

Solution 2 : tu commence en longeant un coté, puis tu fais des trajets toujours parallèles à ce trajet, en t'écartant progressivement du coté initial.

Si le polygone est non convexe, tu peux parfois t'en sortir en choisissant le bon coté auquel rester parallèle, de manière à pouvoir faire pareil. Dans le cas le plus défavorable, tu vas finir par couper la surface restante en 2 ou plus : dans ce cas, tu traites d'abord une partie, puis le reste


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#3 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 10 décembre 2021 - 02:50

Merci pour ces deux intéressantes suggestions. 

Le suivi des bords avec détermination d'un polygone me plait bien, car j'ai déjà codé le suivi de trajectoire en m'inspirant de "https://www.a1k0n.ne...ollowing.html".

 

Oui, le robot peut tourner sur lui même en pilotant les deux moteurs avec des vitesses opposées (positive/négative).

 

Au travail donc.

(sachant qu'il peut y avoir des obstacles ponctuels à l'intérieur de la surface, et donc des évitement intempestifs à traiter).



#4 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 11 décembre 2021 - 05:54

Le résultat de la première suggestion est le suivant.

Rapide et efficace.

 

Image(s) jointe(s)

  • suite.png


#5 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 262 messages
  • Gender:Male

Posté 11 décembre 2021 - 06:02

Oui, c'est ça. C'est juste à la fin qu'on tourne beaucoup (si ton robot est lent à tourner, alors ça ralentit pas mal)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#6 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 12 décembre 2021 - 02:53

Bonjour à tous,

Sujet passionnant, qui m'a beaucoup intéressé. Car j'y réfléchis (très fort) ces temps...

Il y a beaucoup de chose que je ne comprends pas encore, si vous pourriez m'aider.

Actuellement, mes robots arrive juste à s'arrêter lorsqu'ils ont atteint un points GPS avec une précision de 1 m ou 2. alors pour la suite, je suis encore trop ignorant.

(J'ai lu le lien fournis) mais surtout, pas très à l'aise avec les math "κ′=−Kp(ye+Kdsinψe)+κ"

Comment construire le polygone ?
Les angles du polygone sont des points GPS ?
Les lignes entre les points des distances ?
Les angles entre les lignes sont connus ?
Le robot est assez rapide pour s'arrêter ou tourner avant des dépasser ?

 

Vous allez me dire pourquoi tu construit des robots !!!!

 

Bonne après-midi



#7 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 12 décembre 2021 - 03:16

Bonjour,

 

"Comment construire le polygone ?" :

et

"Les angles du polygone sont des points GPS ?"

==> mon robot propose une interface web, sur laquelle je gère une carte (basée sur openstreetmap). 

En cliquant, je sélectionne des points (avec leurs coordonnées GPS). Cela constitue le polygone que je transmet au robot.

 

"Les lignes entre les points des distances ?"

==> Pour manipuler plus facilement les coordonnées pour des opérations de géométrie, je réalise une conversion { latitude, longitude} en coordonnée UTM { x, y }

On peut ainsi calculer des distances enter les points en mètres.

 

"Les angles entre les lignes sont connus ?"

==> A partir des coordonnées converties e,n {x, y}, on obtient des vecteurs. De là les angles si on le souhaite.

"Le robot est assez rapide pour s'arrêter ou tourner avant des dépasser ?"

==> c'est là qu'il faut ajuster les paramètres "K" pour corriger la trajectoire.

 

Mais j'ai travaillé sur ce sujet du suivi de trajectoire depuis quasiment un an. Mon robot n'étant pas disponible souvent pour les tests (robot à la campagne, résidence en appartement), j'ai dû réaliser un simulateur de moteur.

En bref :

- le robot connait sa position et son cap (sa direction). Attention, on oscille entre des coordonnées planétaires { latitude, longitude, cap par rapport au nord }, et les coordonnées utm { x, y, dans un repère orthonormé classique où l'angle 0 est l'axe des x}

- l'interface web transmet le polygone à suivre ;

- le robot ajoute un premier point au polygone qui est la position courante du robot ;

- le robot calcule une SPline qui passe par les sommets ; A partir de, par exemple, des 10 sommets du polygone, on définit 1000 points qui forment une courbe lisse.

On dispose des fonctions permettant de calculer, en tout point de la spline, la normale, la tangente, le rayon de courbure.

- le robot s'aligne sur la tangente du premier point de la "spline" (le vecteur reliant le premier point et le point suivant)

- le robot applique la même vitesse angulaire sur les deux moteurs;

- l'interface web intègre un simulateur qui calcule quelle va être la nouvelle position du robot après un petit écart de temps (100 ms) (calcul en coordonnées UTM, conversion ensuite en { lat, lon }), ainsi que son nouveau cap.

Chaque moteur tourne à sa vitesse propre (% de la vitesse max en tours par minute [RPM]), je connais le diamètre de la roue et donc le nombre de mètres parcourus par chaque par seconde, et donc la vitesse de chaque point correspondant aux roues).

Si les vitesses sont différentes, le robot aura légèrement pivoté, et donc son cap aura changé. 

- on transmet cette nouvelle position et ce nouveau cap au robot.

A partir de ces nouvelles coordonnées, le correcteur de courbe (l'article ci-dessus) détermine quel est l'écart de cap, et l'éloignement par rapport à la courbe au point le plus proche sur cette courbe.

 

Ce n'est que de la géométrie, mais quand on est étourdit comme moi, quand il faut respecter les unités, quand il faut le coder en traitant les erreurs et les cas limite (rayon de courbure infini...), ça occupe bien les week-end.

 

 

 

 



#8 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 12 décembre 2021 - 03:46

Merci de ta réponse,

 

Je vais devoir relire plusieurs fois tes informations.. et j'aurai d'autres questions.

 

J'avais essayé d'utiliser un Pixhawk, mais lorsque j'ai vu qu'il fallait pointé sur une carte pour définir un champs, puis il se guidait tout seul, j'avais abandonné.

 

Je voulais plutôt que le robot construise lui même sa carte en patrouillant dans le terrain et ça je ne sais toujours pas le faire. (créer une carte) je ne fais que stocker les coordonnées, GPS COMPAS et les distances.

 

Mais je vais étudier et chercher selon tes infos.

 

 

.



#9 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 12 décembre 2021 - 04:43

Bonsoir,

 

Cela fait parti de mes sujets.

- suivre un polygone définit par des coordonnées GPS

- parcourir l'intérieur d'un polygone (le sujet ci-dessus) 

- le suivi de ma personne : J'ai développé une petite application sur Android qui transmet ma géolocalisation sur mon robot via son hotspot wifi. Le robot me suit, et s'arrête à distance de sécurité. En fait, il cherche à rejoindre ma position courante, qui change par ailleurs en permanence puisque j'avance.

 

Le plus difficile est le suivi d'un trajet, surtout avec des courbures toujours dans le même sens (exemple de la spirale ci-dessus), car la divergence ne peut jamais se corriger.

 

J'ai essayé de faire de la reconnaissance de zone simplement, mais il faut s'arrêter souvent, reculer, tourner aléatoirement dans un sens ou dans l'autre, et cela semble peu optimum.



#10 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 12 décembre 2021 - 04:50

Voici un exemple de suivi de trajectoire, avec le simulateur de moteur.

 

 

Image(s) jointe(s)

  • Suivi de trajectoire.png


#11 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 12 décembre 2021 - 06:16

C'est toi qui a écrit ce logiciel ?



#12 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 12 décembre 2021 - 06:45

Oui.

 

- Application en NodeJs sur Raspberry Pi 4; éventuellement une deuxième Raspberry pour sous-traiter du traitement d'image (2 WebCam) avec opencv4. Mais je n'ai pas encore exploité cette détection

- L'application en NodeJs pilote tous les périphériques (2 moteurs en PWM, servos moteurs ou 2 vrai moteurs de 300 w avec une carte SaberBooth et deux batteries de 35 A), 3 sonars, 1 GPS, 1 magnétomètre.

- L'application fait aussi serveur http et serveur Websocket

- L'interface graphique est composée de plusieurs "fenêtres" pour chaque fonctionnalité, servi par le serveur http;

- la cartographie est basée sur OpenstreetMap, avec possibilité de sauvegarder les tuiles sur une petite base de donnée sur la Raspberry quand on est connecté à un internet, et les restituer en mode offline.

- je suis aussi en cours d'intégration d'un petit Lidar YX4, mais j'ai encore beaucoup de bruit.

NodeJs me propose beaucoup  de modules pour piloter les périphériques, et s'ils n'existent pas, on peut facilement porter du code python (ou même exploiter le résultat d'une exécution de code en python).

L'intérêt de ce langage est, comme il est écrit dans un tutoriel du site, quasi identique côté "moteur" et coté "interface utilisateur". On s'échange des données en json.

Ci-joint une petite présentation du projet (histoire de documenter un peu).

Fichier(s) joint(s)



#13 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 12 décembre 2021 - 07:00

Chapeau félicitations pour tes travaux,

 

J'ai de la lecture et de quoi améliorer mes robots pendant un moment...

 

Pour ma part, je débute tranquillement avec un Raspberry Pi4, un Jetson Nano et un LidarRP et caméra depuis peu, sur banc d'essai,pas du tout intégrer au robot, mais je ne peux pas tout assimiler en même temps.

 

J'essaye actuellement de changer mon Arduino Mega (5 capteurs, un Gps, une boussole et le Sabertooth) par un Teensy 4.1.



#14 Melmet

Melmet

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 521 messages
  • Gender:Male
  • Location:Saint-Sozy (46200)

Posté 13 décembre 2021 - 08:06

Trés beau travail :)


Ne demande jamais à un robot de faire ce que tu peux faire toi même. :nono: :laugh1:


#15 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 13 décembre 2021 - 12:27

Merci, c'est sympa.

Mais la réalité est moins "design" que la plaquette commerciale :laugh1:

Mais du moment que ça fonctionne.

 

Image(s) jointe(s)

  • IMG_20211002_205428.jpg


#16 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 13 décembre 2021 - 02:04

Tu as quelle précision avec ton GPS ?



#17 FPI

FPI

    Membre

  • Membres
  • 21 messages
  • Gender:Male
  • Location:Région Parisienne

Posté 13 décembre 2021 - 02:16

Bonjour,

 

Pour rappel, J'utilise un "SparkFun GPS Breakout - NEO-M9N"

Je pense être au environ du mètre, mais je ne sais comment l'évaluer avec précision.

Ci joint également les caractéristiques de cette carte qui évoque 1.5 m.

 

Il doit exister dans les différents types de trames une information sur l'erreur, mais je n'ai pas encore fouillé cet aspect.

J'ai juste utilisé l'utilitaire de U-BLOX (photo ci-joint) pour modifier la fréquence de capture et passer à 333 ms au lieu de la seconde standard.

Il y a des log abondant pour étudier ce qui se passe, mais navigant dans la campagne (avec de petits arbres), je n'ai pas encore besoin de plus de précision.

 

Il faut dire (voir la pres. de mon engin), que j'ai ajouté une bonne antenne, car celle de mon GPS précédent (GY-NEO6MV2) était minimaliste.

Cordialement.

Image(s) jointe(s)

  • ublox-tools.png
  • Sparkfun-NEO-M9N.png


#18 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 13 décembre 2021 - 02:23

Oui, et avec uBlox tu peux aussi ajouter 3 réseaux de satellites.





Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users