Aller au contenu


Photo
- - - - -

UGV à base d'éléments de trottinette ou d'hoverboard


396 réponses à ce sujet

#101 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 05 novembre 2022 - 07:56

Cette nuit, j'ai un petit peu réfléchi au problème du positionnement du robot. :dash2:

 

Supposons que mon robot ait une boussole et un ou plusieurs télémètres à ultrason et qu'il se déplace librement dans un rectangle.

Son orientation n'est pas forcément parallèle aux côtés du rectangle.

Supposons même que la droite figurant son orientation coupe les 4 droites des côtés du rectangle.

Sur cette droite d'orientation, sa position peut être déterminée par 2 segments a et b coupant 2 côtés parallèles (ou pas) du rectangle, et par A, l'angle de la boussole.

 

J'ai l'intuition que le point marquant cette position, avec pour coordonnées a, b et A est un point unique dans le rectangle.



#102 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 05 novembre 2022 - 08:59

Je ne suis pas sûr de bien comprendre.

 

ORACID01.jpg

 

J'ai un peu tenté d'utiliser une boussole mais sans grand succès. Les indications varient très fort surtout à l'intérieur.

Mon robot utilise un smartphone et un Arduino Mega.

Ces problèmes d'instabilité de la mesure sont présents même avec la boussole du smartphone. :(

Les variations sont parfois de 30°



#103 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 05 novembre 2022 - 12:08

Je ne suis pas sûr de bien comprendre.

Au contraire, je pense que tu as bien compris.

 

Dans ton schéma, les segments b et d, et l'angle de 45° devraient déterminer de manière précise et unique le point de positionnement du robot dans le rectangle.

Je n'ai pas la compétence pour le démontrer, mais je pense que ce point est unique.

 

Evidemment, tout ceci est très théorique, et comme toi, je n'ai jamais vraiment réussi à mettre en oeuvre une boussole de manière précise.

Il y a quand même une solution. Pour cela, il faut s'intéresser au monde Ardupilot et à l'utilisation d'un contrôleur Pixhawk pour un Rover. https://ardupilot.org/rover/index.html

Quand je connecte mon drone à Mission Planner je peux voir l'effet de la boussole qui est très précise, lorsque je tourne le drone, sur place. 

Il ne faut pas rêver, un Pixhawk contient un STM32 et un code exceptionnel. Perso, je suis incapable de rivaliser, et de très loin.

Notre objectif ici, est de construire des robots. Pas forcément, d'être bon, voir excellent dans tous les domaines.

 

Voici une vidéo ou l'on peut voir comment initialiser une boussole (compas, en anglais) avec Mission Planner (mais là, c'est pour un drone).

La même chose est nécessaire pour l'accéléromètre.

Cette gesticulation peut paraitre bizarre, mais elle est indispensable.

 

A 2'50".

 

 

Pour faire la même chose, nul besoin d'un drone ou d'un Rover, ni même d'un GPS et d'une radiocommande. Il suffit de brancher un Pixhawk à Mission Planner et de l'orienter dans différentes directions.

Voici une autre vidéo, où on peut voir cet exercice, mais avec un GPS et une radiocommande.

A partir de 16'41".

 

 

Je n'en suis pas là, mais c'est sans doute l'orientation que je vais prendre pour mon robot.



#104 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 05 novembre 2022 - 10:36

 

Dans ton schéma, les segments b et d, et l'angle de 45° devraient déterminer de manière précise et unique le point de positionnement du robot dans le rectangle.

Je n'ai pas la compétence pour le démontrer, mais je pense que ce point est unique.

 

 

Si tu prends en compte seulement b et d et l'angle, il y a une multitude de points qui peuvent avoir les mêmes valeurs. Il faut aussi tenir compte de la distance a ou b.

ORACID02.jpg

 

Merci pour les liens. Je ne connaissais pas Pixhawk. :) Je vais analyser ça :)

 

 



#105 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 06 novembre 2022 - 08:13

 il y a une multitude de points qui peuvent avoir les mêmes valeurs

Là, tu as translaté le robot vers la gauche, mais tu as également translaté le petit trait noir qui a disparu.

Si ce petit trait noir pointe vers le Nord, alors, après la translation du robot, les 2 traits noirs ne seront plus parallèles et donc l'angle sera différent.

 

Sur ton premier schéma, le petit trait noir qui pointe vers le Nord est perpendiculaire au grand coté du rectangle, mais cette configuration est un pur hasard et peut induire en erreur.



#106 Sandro

Sandro

    Pilier du forum

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

Posté 06 novembre 2022 - 10:47

Bonjour,

@Oracid : soit je ne comprends pas bien ton dernier message, soit il y a une erreur : si le robot fait une translation (sans rotation), alors la direction du nord (vue par le robot) ne change pas (enfin, de manière infinitésimale, à moins que tu nous parles d'un avion qui parcourt des centaines de km).

 

Le robot a 3 degrés de liberté (translation en X et Y, et rotation autour de l'axe Z(verticale)), donc il faut 3 mesures indépendantes pour déterminer sa position.

 

Néanmoins, utiliser b, d et l'azimut ne nous donne que 2 mesures indépendantes : si on fixe l'azimut est b, alors on peut calculer d (en supposant que b et d rejoignent les grands cotés du rectangle) : d = (d+ b) - b = ( e/cos(azimut) ) - b

 

En revanche, si tu utilises a, b et l'azimut, alors tu devrais avoir une solution unique TANT QUE TU PEUX GARANTIR QUE A POINTE SUR LE PETIT COTÉ DU RECTANGLE. Si a ne pointe plus sur le petit coté du rectangle, mais sur le grand, alors c'est de nouveau raté (tu peux calculer a en fonction de b et l'azimut).

 

Avec un Lidar 2D, en revanche, tu peux être sur d'avoir des mesures sur au moins 2 cotés consécutifs : tu peux donc connaître ta position. La boussole devient "inutile". Le seul doute qui peut rester, c'est de savoir quel coin tu vois : si tu as un quadrilatère avec 4 angles tous différents, alors c'est "facile" de savoir lequel est le bon. Pour un rectangle, si tu connais ton orientation approximative, tu sais à l'avance quel coin tu vois, donc c'est bon. Si en revanche tu envisage le cas où tu ne connais pas ta position/orientation initiale (ou que tu la perd), alors la boussole peut t'aider à déterminer quel coin tu vois

 

Sauf erreur de ma part, peu importe quelle paire de mesures à orientation fixe que tu choisis en plus de l'azimut, tu trouvera toujours une position où les deux mesures pointent le même coté (ou 2 cotés opposés), donc tu ne pourra pas déduire ta position.


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.


#107 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 06 novembre 2022 - 02:21

de manière infinitésimale

Ah ! Alors, mon raisonnement est bon, mais son principe est inexploitable ?! Dommage.

 

Je vais bien étudier tout ce que tu as écrit.

Merci pour tes explications.



#108 Sandro

Sandro

    Pilier du forum

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

Posté 06 novembre 2022 - 09:05

Ah ! Alors, mon raisonnement est bon, mais son principe est inexploitable ?! Dommage.

En effet, en pratique, c'est complètement inexploitable. En gros, si tu vas du pôle nord au pôle sud, ton champ magnétique "tourne" de 180° (relativement à la gravité), donc un demi périmètre de la terre (6371km*3.1415=20 000km= 2*10^7 m) correspond à une changement de 180°.

 

Donc un déplacement de 10m correspond à un peu moins de 10^-5 degrés.  Il te faudrait donc un magnétomètre avec plus de 7 chiffres significatifs pour mesurer ce déplacement (je ne sais pas si ça existe, mais si oui tu peux probablement acheter une maison pour le prix du capteur). Et encore, les perturbations du champ magnétique sont plusieurs ordres de grandeur plus important : dans le meilleurs des cas (en excluant sous terre/sous l'eau/dans l'espace), tu aura au minimum les perturbations par les ondes radios et par les vents solaires. Dans la pratique, tu aura très souvent des perturbations encore bien pires : lignes électriques, tuyaux métalliques, béton armé ou tout autre masse ferreuse à proximité, ... Sans compter les moteurs de ton robot (aimants permanents et/ou électro-aimants). Bref, en robotique, en intérieur, tu peux déjà t'estimer heureux si tu parviens à rester dans les 10° d'erreur (selon le bâtiment, tu peux dépasser localement les 90° d'erreur). En extérieur, à la compagne, loin de tout bâtiment, tu arrivera peut-être à atteindre le degré (et encore, avec les moteurs, j'en doute).

 

A titre de comparaison, sur le "Disto-X2" (l'appareil de mesure utilisé pour faire la cartographie des grottes, soit un environnement quasi parfait), après une longue calibration (56 mesures, soit plus d'une demi-heure de calibration), on arrive à des précisions de l'ordre de 0.1-0.2° sur l'azimut. Mais pour atteindre cette précision, tout a été conçu spécialement pour réduite les perturbations : les vis sont des vis en laiton (les vis en acier perturbant le champ magnétique, car contenant du fer), la batterie Lipo est une batterie spéciale "amagnétique" (à ma connaissance, il existe un seul fabricant au monde en produisant) ou pour ceux qui décident de garder des piles, il y a une petite perte de précision et en plus il faut recalibrer à chaque changement de piles (et même juste si on a tourné la pile), ...

 

 

Donc globalement, le champ magnétique, en intérieur te donnera au mieux une vague orientation, au pire une valeur "aléatoire".

En extérieur, si ton robot lui-même ne le perturbe pas trop, tu peux obtenir une orientation à peu près correcte.

 

Si tu cherches quelque chose de vraiment précis, alors oublie le champ magnétique (en outdoor, tu peux utiliser des systèmes de GPS différentiel avec 2 GPS montés sur ton robot, ou dans le monde pro des gyro haut de gamme qui te permettent de connaitre précisément le nord à partir de la rotation terrestre). Ou alors, tu combine plusieurs capteurs : un système de localisation absolu (ex : GPS, carte+(lidar ou camera), ...) et un système de déplacement relatif précis sur le court terme (centrale inertielle, encodeurs, ...), et en combinant ton déplacement relatif et le changement de position absolue, tu en déduit ton orientation


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.


#109 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 07 novembre 2022 - 07:39

Merci Sandro, tu m'as convaincu.

 

Bon, de toute façon, je mets tout cela de côté pour l'instant. J'ai encore du boulot avec mes roues.

Dans un premier temps, je ferai un roulant radiocommandé. J'aimerais bien qu'il monte des escaliers, ou au moins un trottoir, grâce à ses grosses roues, mais ce n'est pas gagné d'avance.

Une autre idée serait de le faire déambuler au hasard, avec une caméra, et faire peur aux chats avec un aboiement ou un flash lumineux. Il y a trop de chats chez moi, c'est un vrai problème.

Puis, peut-être, un suiveur de personne, avec une caméra Huskylens. Dans la vraie vie, ce serait sans doute l'une des applications les plus utiles.



#110 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 08 novembre 2022 - 11:11

Cliquez moi.

 

                                 DSC_3869-L.jpg

 

Voilà, le montage des roues, avec les nouveaux pneus, est terminé.

Les moteurs ont été testés avec les nouveaux pneus. Cela était nécessaire, car il a fallu démonter les moteurs.

 

Cela fait une belle bête !

 

Prochaine étape, montage de la batterie et de l'électronique, puis mise en oeuvre de la radiocommande.

Volontairement, je n'ai pas coupé les longerons de manière à pouvoir ajuster la longueur pour monter des escaliers.



#111 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 08 novembre 2022 - 11:31

Oui en effet belle bête. Ca va grimper partout ! Et les chats n'ont qu'à bien se tenir :)

Ca a l'air pratique les profilés Bosch. Faudra que je teste. Comment as-tu fait l'attache des moteurs sur le profilé Bosch ?



#112 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 08 novembre 2022 - 03:25

Ca a l'air pratique les profilés Bosch. 

Je ne savais pas que cela s'appelait des "profilés Bosch".

Oui, c'est très pratique, c'est comme du Lego. On peut modifier la structure assez facilement, si on s'est donné une marge dans la découpe.

 

Voici quelques photos qui montrent le montage d'un moteur sur ces profilés.

La plaque du haut est faite à la main dans une tôle d'aluminium.

La pièce du bas doit être découpé dans un vieux Hoverboard. Parfois, on en trouve sur LeBonCoin, exemple : https://www.leboncoi.../2249834619.htm

 

DSC_3871-S.jpg DSC_3872-S.jpg DSC_3873-S.jpg DSC_3876-S.jpg



#113 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 08 novembre 2022 - 09:58

Merci Oracid.

Pour la pièce du dessous je l'ai faite en impression 3D.

Elle va sûrement s'écraser à la longue mais pour le moment ça tient.

 

Et concernant l'alimentation :

J'ai déjà eu des soucis avec des cartes Arduino et la conclusion était que j'avais connecté trop de périphériques 5v directement sur l'Arduino.

J'ai donc mis un convertisseur 18v > 5v pour la camera Husky et le Rlidar.

Tu as l'intention de faire une alim séparée aussi ?

 

20221108_215104.jpg



#114 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 09 novembre 2022 - 07:53

Pour la pièce du dessous je l'ai faite en impression 3D.

Tu as l'intention de faire une alim séparée aussi ?

Oui, je pense qu'une pièce en i3D devrait faire l'affaire. Les axes ne tournent pas, ils sont fixes, donc pas de souci.

J'avais imaginé également un arbre carré en bois reliant les deux axes. Grace au méplats, les axes étaient maintenus par plusieurs colliers de tube de plomberie, vissés sur l'arbre en bois.

Mais je suis assez content de mon montage avec des profilés. Actuellement, le montage est orienté vers le haut, mais je pense le "couché" pour avoir une symétrie verticale. Comme sur la photo où il y a écrit "vue de côté". 

 

Pour mon Arduino Nano, je n'ai jamais eu de souci. J'ai un bloc standard que j'utilise dans toutes mes réalisations, un Shield Nano Keyestudio avec une petite batterie 2S qui est de la même longueur, située juste en dessous. Bien entendu, je relierai les masses.

Si j'ai un problème, alors j'utiliserai un convertisseur de tension.

Mais pour commencer, je dois juste alimenter le récepteur de la radiocommande. Autant dire, pas grand-chose.

 

Par contre, as-tu prévu un gros bouton d'arrêt d'urgence et un fusible ? Cela me parait indispensable ! 



#115 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 09 novembre 2022 - 10:07

Pas encore de gros bouton mais c'est vrai que c'est indispensable.

Pour l'instant j'essaie de faire en sorte que les différents modes de guidage fonctionnent correctement : avec Lidar, camera, encodeurs et boussole.

Ce qui est un peu embêtant avec ces moteurs d'hoverboard c'est que les roues sont libres. Quand il démarre il ne part pas bien droit je ne sais pas trop pourquoi.

Il faudrait presque pouvoir bloquer les roues mécaniquement, mettre la puissance puis relâcher les frein....

 

Un autre point à mon avis très important est l'asservissement vitesse.

Quand on fait un analogWrite(E1,spd1g); pour faire tourner le moteur on lui envoie une consigne de puissance.

Si les roues doivent tourner très lentement on va lui envoyer une faible puissance. Mais dès que le robot va rencontrer un obstacle ou une pente, il faudra lui envoyer une puissance plus importante. C'est là qu'il faut contrôler en permanence la vitesse d'avancement effective avec les encodeurs.

Si la vitesse diminue, on augmente la puissance et vice versa...

Bref, c'est pas encore tout de suite qu'il va travailler. Il y a encore du boulot.



#116 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 10 novembre 2022 - 07:12

Quand il démarre il ne part pas bien droit je ne sais pas trop pourquoi.

Tu m'as dit plus haut que tu utilisais des filtres passe bas.

Les valeurs des composants de chaque filtre ont une marge d'erreur suffisamment importante pour qu'ils n'aient pas exactement la même réponse en tension de sortie.

Il faudrait donc peut-être pondérer le signal PWM en fonction de chaque moteur.

 

Pour le reste, il y a la vitesse de consigne donnée par le signal PWM et la vitesse réelle que tu peux mesurer, soit avec tes encodeurs, soit avec les capteurs Hall.

A mon avis, c'est le rapport entre ces deux vitesses qui devra déterminer la correction.



#117 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 732 messages
  • Gender:Male

Posté 10 novembre 2022 - 04:43

Cliquez moi.

UGV-01-L.jpg

 

Voici mon UGV, en situation.

Pour monter des escaliers, il faut que la longueur soit bien étudié.

Je dois dire que là, j'ai eu la main verte. En poussant, à la main, le robot monte bien les escaliers, sans accrocher le châssis et sans se planter sur un nez de marche entre les roues.

Il fait un total de 71cm, avec un entre axe de roues de 43cm. Il s'est donc, allongé de 13cm, par rapport à la vue précédente.

Malheureusement, il risque de s'allonger encore, car ce n'est pas tant la montée que la descente qui est délicate, dans un escalier.

Avec une estimation à 13kg, il va falloir beaucoup de puissance.



#118 Atmos

Atmos

    Membre occasionnel

  • Membres
  • Pip
  • 75 messages
  • Gender:Male

Posté 10 novembre 2022 - 11:16

Magnifique, joli rover, après mes élucubrations actuelles, j'en fabriquerai certainement un.

 

En tout cas bravo, continue.



#119 dakota99

dakota99

    Habitué

  • Membres
  • PipPip
  • 228 messages
  • Gender:Male
  • Interests:programmation Windev, Webdev, aviation, robotique, domotique, drones

Posté 11 novembre 2022 - 08:39

Super Oracid ça avance. Tu vas le guider avec une télécommande. C'est donc toi qui va doser la puissance pour le faire monter la marche. Si cette action devait être automatisée, ce serait nettement plus complexe....

 

Je fais quelques essais avec le mien et je me rends compte que le fait que les roues d'hoverboard tournent librement quand il n'y a pas de tension, est un problème à solutionner.

 

Par exemple quand il fait demi-tour, on mesure le nombre de tours de la roue extérieure au virage. Une fois le nombre de pulses atteint, il doit s'arrêter net.

A ce moment si le "courant" est coupé, les roues deviennent libres et il continue pendant quelques secondes sur sa lancée. Et donc il ne sort pas correctement dans l'axe prévu.

Idem en montée si à un moment donné le courant est coupé il va dévaler la pente en marche arrière.

Donc il faut prévoir soit un freinage électrique (dynamic breaking) ou un frein mécanique sur les roues pour l'immobiliser. Cela complexifie évidemment le projet.

 

Une piste ici mais il y a peut-être plus simple...

 

 

 



#120 Sandro

Sandro

    Pilier du forum

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

Posté 11 novembre 2022 - 10:08

@Dakota99 : tu comptes simplement les pulses sans aucun asservissement en vitesse?

 

Si tu fait un asservissement double (ie à tout instant tu calcules la vitesse nécessaire pour atteindre la position souhaitée, et ensuite tu asservis le PWM pour atteindre cette vitesse), alors tu devrais avoir très peu d'erreur. Et si tu viens à dépasser la position souhaitée, ton asservissement fera simplement repartir ta roue en arrière.

 

Si tu veux faire un simple asservissement en position, alors c'est la même chose : la vitesse de ta roue deviendra négative si tu es trop loin.

 

En gros, à partir du moment où tu asservis tes roues, tu as "gratuitement" une immobilisation électrique (nb : gratuitement en terme de code, ça consomme de la batterie s'il faut luter contre une force externe (par exemple pente))


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.




Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users