Aller au contenu


Photo
- - - - -

Moteur et position


22 réponses à ce sujet

#1 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 02 juin 2011 - 03:02

Bonjour,

Voila, quitte à refaire mon robot complétement, j'aimerais trouver une solution pour qu'il sache à tout moment ou il se trouve.
Donc il existe plusieurs techniques. Mais peut être que la solution de moteur à roues codeuses serait la plus économique.

Donc, avez vous des idées et éventuellement une solution à proposer.

Cdlt
Yves

#2 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 02 juin 2011 - 05:36

Les roues codeuse serait un bon choix ! Certes, c'est de l'odométrie et ça dérive, mais personnellement, j'ai eu l'occasion de faire de la localisation par odométrie et la dérive n'était pas énorme (<10cm pour 10 mètres parcouru avec des moteur vraiment dégueulasses plein de jeux dans les réducteurs, avec pas mal d'inertie (le robot faisait 15/20kg) et un mauvais placement des codeuses (après les réducteurs))

Fais juste attention de placer tes codeuses directement sur l'arbre moteur et non après le réducteur ! Tu auras alors une meilleures résolution.

Pour les autres systèmes de localisation, tu as la centrale inertielle (^^) mais c'est assez dur à mettre en oeuvre, ou alors des balises que tu places dans ton environnement (mais ça suppose que tu puisses modifier l'environnement pour y placer ces balises)

++
Black Templar

#3 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 02 juin 2011 - 09:14

je suis d'accord avec Black Templar, pour moi la roue codeuse sera vraiment bien pour toi.

surtout que c'est pas non plus un projet pour faire des kilomètre donc la dérive n'en sera pas trop grande

#4 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 03 juin 2011 - 05:40

Bon, vous me confortez donc dans cette direction.

Mais plusieurs choses restent à dire. Par exemple, la (ou les) roue folle. Ne sont-elles pas un blocage vers la précision du système ?
J'ai pour le moment des roues "tout terrain". Je suppose donc que je dois en changer pour des roues fines. Des roues fines me donneront une plus grande précision.
Des roues codeuses en sortie de moteur plutôt qu'en sortie de pignons réducteurs certes, mais je ne trouve rien me permettant de faire cela facilement. (si tu as un lien Black, je suis preneur).
La solution serait donc d'acheter des moteurs, des pignons réducteurs (mais je dois calculer le taux de réduction), une roue codeuse par roue (avec capteur).
Je n'ai jamais fait ça je vais donc avoir besoin de conseils/
Et puis , moteurs cc ou servos modifiés ? Les moteurs CC sont plus chers que les servos mais lesquels sont les plus précis ?
Savoir où le robot se trouve dans un espace défini implique donc un point de départ déterminé à l'avance (toujours le même). Mais j'ai vu Maximus (le robot de Jbot) il se recale de temps en temps pour remettre la dérive à ZERO. Cela implique donc que des repères disséminés dans son espace de déplacement pour comparer le point où il est et le point ou il est censé être non ?
Je m'engage dans une voie fort intéressante, mais sans aucune expérience. Je suis donc à la recherche un guide (genre exposé sur ce type de réalisation)

Avez-vous un ou deux liens à me proposer ou je pourrais trouver des idées et des reposes à ces questions. En plus, ce lancer dans un tel projet sans aucune expérience ne me rassure guère. C'est comme si je passerais directement de Cocotix à Maximus sans étape intermédiaire. Non non, j'exagère, mais à peine. Mais D'un autre côté, c'est en prenant des risques que l'on avance non ?

Donc pour conclure je vais avoir besoin d'aide si je me lance dans pareille entreprise. D'aide et de persévérance, pour l'aide je sais que vous ne me laisserez pas tomber. Pour la persévérance, ça va aussi aller. Mais j'ai besoin de lien assez rapidement pour faire mes emplettes (et donc de connaitre la solution vers laquelle je vais me diriger) avant d'être immobilisé.

Merci

Cdlt
Yves.

#5 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 03 juin 2011 - 10:07

Salut !

[quote"Astondb8"]Bon, vous me confortez donc dans cette direction.

Mais plusieurs choses restent à dire. Par exemple, la (ou les) roue folle. Ne sont-elles pas un blocage vers la précision du système ?
J'ai pour le moment des roues "tout terrain". Je suppose donc que je dois en changer pour des roues fines. Des roues fines me donneront une plus grande précision.[/quote]

Les roues folles ne sont pas un problème du tout à part si elles font dérapé tes roues motrices.
Le principe pour être précis avec l'odométrie, c'est que tes roues ne doivent pas déraper une seule fois ! Si elles tournent dans le vide, tu auras inévitablement une erreur !
Donc à toi de voir quel type de roue est le moins susceptible de déraper ! Des roues tout terrain ou des roues lisses ...


[quote"Astondb8"]Des roues codeuses en sortie de moteur plutôt qu'en sortie de pignons réducteurs certes, mais je ne trouve rien me permettant de faire cela facilement. (si tu as un lien Black, je suis preneur). [/quote]
Non désolé, je ne sais pas comment faire... :/ Tu peux surement trouver des moteurs dont l'axe de rotation le traverse de part en part ! D'un coté tu met ton réducteur et de l'autre ta codeuse ?


++
Black Templar

#6 julkien

julkien

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 032 messages
  • Gender:Male

Posté 03 juin 2011 - 10:49

pour tes motoreducteur+encodeur, pourquoi pas prendre des EMG30 que tu trouveras sur cette page

bon c'est sur c'est assez cher mais avec des recherche tu peux trouver moin cher



slts



Julien



#7 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 03 juin 2011 - 03:22

Merci julienmus



@ Black



Mettre la roue codeuse avant le réducteur complique un peux le calcul, mais cette complication n'est pas insurmontable.



Par contre, comment calculer la position.



Preunon un exemple concret.

Déclarons les variables dont nous avons besoin (enfin c'est ce que j'imagine avoir besoin)

Donnons des valeurs à ces variables.

Ces valeurs n'ont rien de réaliste, mais elles ont l'avantage d'est simples à calculer



Les Variables

Nombre de tours avant réducteur = nbT1

Nombre de tours après réducteur = nbT2

Diamètre roue = Diam

Rapport de réduction = Nombre de tout moteur pour 1 tour après réducteur = réduction

Nombre de divisions par tout de roue codeuse = nbDivT

Sens de rotation moteur droit = RotMoteurD (1 = avant, 0 = arrière)

Sens de rotation motrice gauche = rotMoteurG (1 = avant, 0 = arrière)

Sens de rotation = rotation





Valeurs de ces variables

nbT1 = 10

nbT2 = 1

Diam = 10 (en cm)

reduction = 1/10

nbDivT = 100

rotMoteurG = 1

rotMoteurD = 1



Exemple 1 (très simple) Le robot avance tout droit.

Tous les 10 tours de moteur (avant réducteur soit pour chaque tour après réducteur soit tout les 1000 fronts montants) le robot parcoure 10 Cm



Exemple 2 (également simple, mais demande des explications)

Le Moteur droit fait 10 tours en avant

Le moteur gauche fait 10 tours en arrière

Le robot n'a pas changé de position, mais il à chagé de cap et donc de direction pour son futur mouvement.

Nous devons donc ajouter à mes variables, un cap en degres

Ce cap va donc dépendre du rayon de braquage du robot. Et donc par rapport à un point central, je dois connatre l'entra axe des roues.

Autre Constante

Donc, ajoutons 1 variable

cap = Cap en °

Cap = 0 (en position de départ)



Ajoutons 1 constante

entreAxe = Entre axe des roues

entreAxe = 20 (en cm)



Donc si

moteurD fait 10 tours

moteurG fait - 5 tours

cap = 180°



Mais je ne sais plus comment calculer la position du robot lorsque le robot avance avec des vitesses de roues différentes pour le faire tourner en marche avant et comment facilement trouver sa position...





Je sens que je vais devoir reviser mes cours de maths.



Une idée sur la méthode ?



Cdlt

Yves

#8 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 04 juin 2011 - 07:49

Bon, hier soir j'ai discuté avec webshinra, il m'a rappelé une idée que j'avais lu quelque part mais ou ?

Cette idée, est l'éventuelle possibilité d'utiliser le capteur d'une sourie infrarouge pour positionner un Robot dans l'espace



Comme j'étais certain de l'avoir lu, j'ai fait une recherche (vous savez le champ "Recherche" en haut et a droite de cet écran ;-) )

Bon en fait c’était Esprit qui nous proposait un lien vers Pobot (ne soyons pas sectaire, surtout quand il s'agit d'un site de cette qualité).

Ce lien, le voila. vous y trouverez non seulement une réelle solution, mais également toute une liste d'autres liens (en différents langages) traitant du même sujet.



Oui mais voilà, je fais partie de ces gents qui ne prennent jamais pour argent comptant ce qu'on leur dit (ce qui n'est pas le cas de l'argent liquide).



En réfléchissant un peu à cette solution, (tout à fait utilisable) je me suis dit qu'une souris se promenait sur deux axes (X et Y) ce qui n'est pas le cas d'un robot.

Je m'explique, un robot ne vas jamais le long de l'axe X, il tourne autour d'un axe Z pour continuer à ce déplacer sur son axe Y.

Donc ce que je vais essayer de faire, n'est pas d'utiliser les axes X et Y, mais utiliser les capteurs de deux souris (l'une à droite et l'autre à gauche de mon robot) en n'utilisant que leur axe Y.

Je devrais pouvoir obtenir un cap en faisant un calcul entre l'axe Y droite et l'axe Y gauche.

L'autre solution serait d'utiliser une boussole, mais je ne sais pas comment fonctionne ce type de capteur. Je suppose que c'est assez simple, mais également onéreux.



Bien fini la théorie, passons à la pratique.

Je vous informerais de l'avancement de mes travaux. Mais je dois tout d'abord, trouver deux souris identiques. Je suppose que je simplifierais mas calculs si les deux souris me donnent des datas identiques pour un déplacement donné. Ce qui risque de ne pas être le cas si j'utilise des souris différentes.



Donc à bientôt pour le résultat de mes tests. Si vous avez déjà utilisé ce type de solution, donnez moi votre avis sur la question.



Cdlt

Yves

#9 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 04 juin 2011 - 12:09

Alors, personne pour une idée, un conseil, une ref, un lien ?

Cdlt
Yves

#10 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 05 juin 2011 - 11:01

Salut Aston, désolé pour mon manque de réactivité pour le moment. (Encore 8 examens à passer, ma tête chauffe! ;) )

Je ne suis pas d'accord avec ce que tu dis pour le capteur de souris. Tu as raison de dire que le robot se déplace selon l'axe x en tournant par rapport à l'axe z. Cependant, quelle que soit les mouvement de ton robot, ils se traduisent pas un déplacement sur le plan x-y. Il ne va pas monter en l'air. (Sauf si tu le portes... :D )

Du coup, un seul capteur de souris peut-être suffisant. Mais, si tu en mets deux, tu pourras certainement être plus précis. Par contre, je te conseille de bien choisir la souris que tu vas démonter parce qu'elles n'utilisent évidemment pas toutes le même capteur et certains sont plus facile à utiliser que d'autres. Essaye de voir ce qui a déjà été fait et ce qui a bien marché.


Et sinon, pour revenir à l'odométrie, il est également possible d'utiliser des servomoteurs modifiés. J'ai vu à Paris une réalisation de Ricky, un membre de l'association Caliban, spécialiste de servomoteurs, qui a intégré un capteur de rotation dans la partie réduction du servomoteur. (En peignant la moitié d'un des pignons blanc en noir et en intégrant un capteur IR). Il se retrouve donc avec un moteur de la taille et de la force d'un servomoteur modifié avec "la roue codeuse" intégrée dans le servomoteur. Bien sûr, il a plus de fils qui sortent du servo, mais ça n'est pas un problème. ;) Malheureusement, je n'ai pas de photos... Je vais essayer de demander.

#11 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 05 juin 2011 - 12:13

Merci pour cette réponse Esprit

En fait je réfléchi à des solutions mais sans aucune expérience. Donc parfois les idées ne sont pas faisables.
Je vais essayer de réaliser le Tuto assez bien fait de Pobot.
De plus, ils y ont mis pas mal de liens donnant d'autre solutions et d'autres vision de ce même problème.

Pour la modification de Servos dont tu parles, si tu as un lien se serait parfait.
En tout cas je vais trouver une solution c'est sur. Mais laquelle ?

En tout cas, j'ai pas mal de recherches et de tests à faire. (mais c'est ce qu'il y a de passionnant dans la robotique non ?

Cdlt
Yves

#12 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 05 juin 2011 - 08:56

Bonsoir (oui c'est déjà le soir)



Toujours dans la série de mes recherches pour positionner un Robot dans l'espace, j'ai lu en article proposant l'utilisation d'un accéléromètre 3 axes.



J'ai donc trouvé ça à un prix raisonnable pour (22€)



Oui mais ils n’expliquent pas comment faire. Alors sans doute avez vous une réponse?



Cdlt

Yves

#13 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 06 juin 2011 - 09:11

Bonjour !!



Pour calculer l'angle de rotation, voici comment procéder :



angle = (distance_roue_droite - distance_roue_gauche) / longueur_entre_roues



On peut ainsi en déduire la position en x et en y :

x = cosinus(angle) . (distance_roue_droite + distance_roue_gauche) / 2

y = sinus(angle) . (distance_roue_droite + distance_roue_gauche) / 2



Avec :

distance_roue_droite = nombre_de_tours_moteur_droit * réduction * 2 * pi * rayon_roue

distance_roue_gauche = nombre_de_tours_moteur_gauche * réduction * 2 * pi * rayon_roue





Ainsi, dans ton exemple 2 :



Le Moteur droit fait 10 tours en avant => La roue à fait un tour (soit pi*10 = 31.4cm)

Le moteur gauche fait 10 tours en arrière => La roue à fait moins un tour (soit -1*pi*10 = -31.4cm)

Le cap vaut donc (31.4 - -31.4)/20 = 3.14 radians soit 180°

La position du robot (x,y) vaut (0,0)



Le robot à donc fait un demi tour sur lui-même.





Pour ton exemple 1, attention, le robot ne parcourt pas 10cm (diamètre des roues), mais pi*10cm (périmètre de la roue)



En ce qui concerne l'accéléromètre :

Tu obtiens une accélération selon x et y (en supposant que ton robot est dans le plan). Pour obtenir la vitesse du robot, il faut que tu intègres ces accélération. (tu sommes toutes les petites accélérations détectés les unes aux autres).

Pour obtenir la position, il faut que tu intègres les vitesses (pareil, tu sommes toutes les vitesses obtenues)



Le problème d'une telle méthode, c'est qu'à chaque sommation, tu vas aussi sommer des erreurs (erreurs de discrétisation et erreurs du aux bruits du capteur ! (les accéléromètres sont très bruités en hautes fréquences)

Du coup, ta position va très vite dériver et te donner des résultats incohérents. Je ne te conseille pas cette méthode !



++

Black Templar

#14 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 06 juin 2011 - 10:01

Merci pour ces infos.

A cogiter et à me mettre à ma planche de travail.



Pour les accéléromètres, je suis de ton avis pour les modelés analogiques.

Les modèles numériques sont beaucoup moins bruités (aux dires des plaquettes commerciales) et donc plus précis.



De plus, les modèles numériques ont des solutions de communications SPI ou I2C ce qui facilite énormément leurs utilisations.

En fait, depuis mon message, j'ai pas mal avancé. Il s’avère que oui les accéléromètres ne sont pas parfaits.

Par contre, les Gyroscopes semblent mieux coller à ce que je veux faire.

voila un lien comparatif entre tous les accéléromètres et gyroscopes assez bien faits.

Il donne les avantages et les inconvenants de chaque modèle.



Tu as pas mal bossé sur les IMU. Tu peux me dire ce que tu en penses et éventuellement m'aider à mettre ma solution en place ?



Cdlt

Yves

#15 Black Templar

Black Templar

    Membre

  • Membres
  • PipPipPipPipPip
  • 1 430 messages
  • Gender:Male
  • Location:Lille

Posté 06 juin 2011 - 10:28

Bonjour.

Le gyroscope ne te donneras pas la position, mais l'angle du robot (après intégration de la vitesse angulaire)
Sinon, le problème de la dérive est toujours présent, même si le capteur te fournis des valeurs directement en numérique.
Intégrer une fois, passe encore, mais intégré deux fois, la dérive sera très rapide.

Pour minimiser la dérive, tu peux : soit opter pour des capteurs plus précis (mais ce n'est pas ça qui fait tout, loin de là), soit augmenter au maximum la fréquence d'échantillonnage afin de réduire l'erreur introduite par la discrétisation et l’échantillonnage, soit fusionner les données de tes différents capteurs, mais c'est assez complexe à faire. (ou une combinaison des trois ^^)

Perso, je te conseillerais l'odométrie. Même si ça dérive aussi, le phénomène est moins marquant car tu n'as pas à intégrer deux fois.

P.S. : si tu considère que ton robot évolue en 2D seulement, tu n'as besoin que d'un gyroscope selonl'ace Z et d'un accéléromètre double axes selon X et Y

#16 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 06 juin 2011 - 01:26

Chez Sparkfun il y a le même capteur ( voir ADXL345) mais interfacé en I²C à la place de SPI. C'est au choix.

#17 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 06 juin 2011 - 02:12

Pour positionner ton robot, tu peux aussi développer des balises et faire de la triangulation. Mais ca devient un peu compliqué ^^

Sinon je t'avais deja montré tout mon code pour l'odométrie donc tu as deja les sources pour le faire et c'est en gros les calculs qu'a donné BlackTemplar.

#18 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique

Posté 06 juin 2011 - 03:31

[quote"Astondb8"]Pour la modification de Servos dont tu parles, si tu as un lien se serait parfait.[/quote]

J'ai pas, mais je vais essayer de demander. ;)

#19 Jbot

Jbot

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 801 messages
  • Gender:Male
  • Location:Paris

Posté 06 juin 2011 - 03:53

[quote"Esprit"][quote"Astondb8"]Pour la modification de Servos dont tu parles, si tu as un lien se serait parfait.[/quote]

J'ai pas, mais je vais essayer de demander. ;) [/quote]

A mon avis, tu ne dois pas avoir beaucoup de ticks/tour. De plus ton codeur ne verra pas les dérapages (bon ok avec un servo moteur ca ne va pas trop déraper tu me diras ;) ).

#20 Astondb8-RX

Astondb8-RX

    Habitué

  • Membres
  • PipPip
  • 295 messages

Posté 06 juin 2011 - 04:59

[quote"Jbot"]Pour positionner ton robot, tu peux aussi développer des balises et faire de la triangulation. Mais ca devient un peu compliqué ^^

Sinon je t'avais deja montré tout mon code pour l'odométrie donc tu as deja les sources pour le faire et c'est en gros les calculs qu'a donné BlackTemplar.[/quote]

Oui Jbot, tu me l'as montré. Mais c’était un BeerWare ( :o ) je ne l'ai donc pas concerné. Pas à cause du prix de la bière...

En fait, pour les balises j'y ai pensé. J'ai lu en article très intéressant à ce sujet. Mais il fallait un capteur rotatif pour trouver les balises.
J'en ai trouvé un autre qui ne mettait pas trop de matériel en œuvre. Mais il me semblait bien complexe pour moi.
J'ai également trouvé un article sur un Robot pompier (qui se dirigeait à la lumière d'une bougie (pour aller la souffler) mais là aussi le code dépassait mes capacités du moment.

Je suis passé par tout ce qui peut se faire en matière de positionnement. Mais j'en suis encore au stade des recherches.
De toute façon, j'ai repris le travail pour ma dernière semaine avant mon immobilisation.
Je vais donc je pense rester à ce stade jusqu'à mon retour à la maison.

Je resterais donc au stade de l'étude. Mais peut-être est-il possible de tout de même avancer.

Cdlt
Yves



Répondre à ce sujet



  


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

0 members, 0 guests, 0 anonymous users