Aller au contenu


FPI

Inscrit(e) (le) 10 déc. 2021
Déconnecté Dernière activité déc. 27 2021 02:37
-----

#114937 Utiliser les informations du Lidar pour gérer les obstacles

Posté par FPI - 19 décembre 2021 - 03:09

Bonjour,

Je vais essayer de te fournir de quoi faire, mais il faudra que tu te penches un peu sur le code.

Je ne sais pas ce que tu connais en programmation, donc j'espère ne pas t'offenser avec des évidences si tu connais déjà la suite ...

 

1) je te fourni un ensemble de sources en html/js que j'ai en partie écrit (vite fait) pour des ballades avec des amis. Le but était de décrire des points d'intérêt (POI) sur une carte, sans la complexité de Google Map.

On choisit le type de carte, on clique pour ajouter des POI, on peut les commenter (clic droit) et les supprimer, et sauvegarder l'ensemble dans un fichier que l'on peut recharger.

J'ai juste ajouter pour toi le "tracé" d'un polygone reliant les POI.

Le principe des données manipulée est toujours le format JSON. Le contenu du fichier est chargé comme une chaine, la fonction JSON.parse le convertit en une structure json. On le sauvegarde en convertissant le json en chaine avec la fonction JSON.stringify.

Il te faudra donc que ton tableau de structure soit plutôt au format JSON. Si tu ne connais pas, c'est vraiment simple à faire :

- accolade-ouvrante,

- mot-clé, deux-point,

--> soit valeur-chaine (entre double quote), soit numérique telle-quelle,

--> soit une sous-structure (accolade, etc...), soit un tableau ( crochet ouvrant, valeur, virgule, valeur... crocher-fermant)

--> soit un tableau

- accolade-fermante.

 

2) Pour utiliser le tout, il faut :

- dezipper MapWalker dans un répertoire

- lancer le mini serveur http depuis une fenêtre console et contenu dans ce même répertoire (maintSmallHttpServer.cmd , qui lance lui-même miniweb.exe avec les bons paramètres)

- lancer ensuite, depuis chrome, "http://127.0.0.1:8000/MapWalker.html"(en 127.0.0.1 puisque le serveur web vient d'être lancé sur ta machine).

- tu peux tester l'outil en chargeant le fichier "MapWalker\MapWalker-2021-12-19 11_06_24.json" donné en exemple.

 

Ensuite, à toi d'adapter le code pour tes propres données.

- la fonction "processLoadParcoursFile()",

- elle même appelant MWParcours.loadFromData pour ajouter tous les points à l'objet parcours

- qui lui-meme crée des MWPoint "accroché à la carte (this.marker = L.marker( this.pos, ... ).addTo( this.mapView)

 

Si tu ne sais pas comment debugger du js :

- tu modifies le code avec un éditeur de texte quelconque. 

- sous chrome, tu appuie sur F12 pour afficher le debugger

- tu sélectionne l'onglet "Sources" pour choisir le fichier à inspecter (le html principal ou un sous-module en .js)

- tu accède au fichier, 

- tu pose un point d'arrêt en cliquant à gauche du n° de ligne

- tu recharges la page avec F5

- tu avance pas-à-pas avec F0, tu entres dans une fonction avec F11

- tu poursuis l'exécution avec F8.

 

Ce code est utilisable pour analyser tes données.

Tu pourrais utiliser quasiment le même si tu étais connecté en Websocket à ton robot, et que celui-ci t'envoyais en temps-réel les nouveaux points découvert.

 

NB : Pour indication, le mini serveur web est : MiniWeb (build 300, built on Feb 28 2013) ©2005-2013 Written by Stanley Huang <stanleyhuangyc@gmail.com>

 

J'espère ne pas avoir été trop à côté de la plaque.

 

Bonsoir.

Fichier(s) joint(s)




#114933 superviser l'énergie de sa batterie

Posté par FPI - 18 décembre 2021 - 03:19

Merci beaucoup pour ce conseil précis.

J'ai trouvé le "M5Stack : Voltmètre – mesure de tension ~36V (ADS1115), Grove", 

Il me semble bien adapté à mes deux batteries en série (avoir 24V sur les moteurs pour diminuer le courant par 2).

Sachant que la carte Saberbooth peut délivrer 32 A aux moteurs, je vais éviter la mesure du courant pour l'instant ;)

 

Image(s) jointe(s)

  • principe mesure tension, transmission en I2C.png



#114876 parcourir une surface délimitée par un polygone

Posté par FPI - 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)




#114870 parcourir une surface délimitée par un polygone

Posté par FPI - 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.

 

 

 

 




#114861 parcourir une surface délimitée par un polygone

Posté par FPI - 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