Aller au contenu


Photo

CR6VA1 et sa cinématique inversé

hexapode arduino ssc32 cinématique inverse

  • Veuillez vous connecter pour répondre
10 réponses à ce sujet

#1 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 11 juillet 2015 - 12:19

Bonjour à tous 

Je suis Vaelan mon niveau d'étude se limite à un CAP mécanique auto ,je travaille dans le batiment et j arrive du monde de l’aéromodélisme qui m as fais découvrir celui des microcontrôleur.J ai donc décidé de quitter la planète des hélicos pour partir à l'aventure à travers l'univers de la robotique.

 

Je me suis donc offert le châssis d'un hexapode sur lequel j'ai monté une Arduino un SSC32 et 18 servo a 180° le tout commandé avec ma radio aurora9.

 

 

Après quelque essaie les premier problème se son posé: trajectoire mal maîtrise ,les pattes glisse sur le sol,programmation patte par patte laborieuse..... je me suis donc lancé dans la programmation d'une cinématique inversé .Une petite recherche sur supergoogle et ..........WAOUH.....ça à l'air super compliqué et pour la plupart en anglais.

Donc j'ai décidé de me créer la mienne à moi perso ;))))

 

Je vais donc vous exposer mon travail (dans les jours, les semaines, les mois qui viennent) pour que les meilleur d'entre vous, puisse me donner des critiques constructive et ne connaissant pas les normes du langage mathématique,me corriger si je ne suis pas clair dans mes explication ou que je suis dans l erreur.Pour ceux,qui comme moi voudrais se lancer, leur donner peut être une orientation.

 

Pour commencer mon cahier des charge:

ma radio ne dois contrôler que le centre de mon hexapode.

la cinématique inversé dois pouvoir être contrôlé par un gyroscope 3 axes.

l hexapode dois gérer tout ses mouvements sans glissement et en respectant des trajectoire propre

 

  Voici les élément que je vais utiliser pour créer la cinématique inversé

1.png

pas grand chose donc mais pour l instant ça a l air de suffire.

les différente commandes à prendre en compte, notez que le roulis,tangage et lacet seront aussi géré ,a terme, par un gyroscope.

2.png

montage et course max des servos sur le robot.

config servo.png

Première étape, cinématique inverse vu de face:

J'ai définis un point d'origine (en gris sur le schéma) qui représente la position par défaut du centre de gravité de CR6VA1 quand toute mes commande de radio sont au neutre(position centrale pour les manche par exemple) et le centre de gravité réel (en violet sur le schéma)ainsi que l axe de roulis (en rouge) qui sont les seul valeur connu avec les mensuration du robot tout le reste dois être calculé par le programme.

lien dynamique,commande alti/lateral/roulis : 

4 définition des mouvement.png



#2 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 11 juillet 2015 - 01:48

Ce que je connais :

                                les variables constante

hauteur thorax : thha=2

largeur thorax:    thla=4

longueur thorax: thlo=6

coax                 : coax=1

femur               : femur=3

tibia                  : tibia=5

                                les variables

hauteur "d'origine" pour mon exemple je la définirais à 3 par défaut mais qui sera variable selon la posture choisi,

plus toute les commandes radio.

schéma dynamique: 

 

5 variable.png

Pour un meilleur compréhension je ne vais traiter que des pattes centrale droite et gauche vue de face et je ne prendrais pas en compte non plus les modification induite par les mouvement des autres axes pour l instant.Mais tout les principes de calcule sont deja dans cette premiere vue.



#3 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 11 juillet 2015 - 12:07

Les valeurs manquante avant le calcul des angle de servo :

6 legende.png

j ai déjà définis une hauteur par défaut =3 et je vais définir un empattement par défaut, j ai trouvé que (fémur+tibia)/2=4 était parfait.

les valeur "utile" et "carrossage" vont me servir a corriger la modification induite par le roulis sur l'empattement.Ce principe devra etre mis en oeuvre pour chaque axe(je compléterais les équation par la suite).

 

Les hauteur sont facile a trouver:

                                                       hauteur_O=hauteurParDefaut+alti

                                                       hauteur_D=hauteur_O+roulis

 

mais vous remarquerez ,sur la vu dynamique ci-dessous, que le roulis entraîne des parasites sur la position de l’extrémité de la patte.Je vais résoudre ce petit soucis avec pythagore.

 

 

calcul de l'empatement_D:

                                           distance réel, du centre de gravite   => axe fémur:  

                                           utile= thla/2+coax

 

                                           distance du centre de gravite => aplomb axe femur

                                           carrossage=sqrt(utile²-roulis²)

                                           

                                           empatement_D=utile+empatementParDefaut-carrossage+lateral

et voila c'est réglé:

 

Les hauteurs sont défini, l’empattement aussi.Il me manque le vecteur de la patte:

                                            vecteur_D=sqrt(empatement_D²+hauteur_D²)

 

 

 

 

 

 

 

 

 

9 triangle composé.png

 

 

me voila avec tout mes triangle, y a plus qu'a trouver les angles de servo pour mettre cette premiere patte en route. Suivis de quelque fonction pour la distribution à travers les 6 pattes   ;))



#4 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 14 juillet 2015 - 02:01

Pour le calcul des angle de servo en plus d'Al-Kashi, je vais utiliser le principe de proportionnalité (je crois que c est comme ça que ça s'appel)

En gros si une droite "A" est parallèle à une droite "B" et qu elle sont coupées par une droite  "C" il y a égalité de tout les angles aigus ainsi que pour les obtus (merci aux matheux de corriger ma définition si elle est pas bonne).

https://tube.geogebr...mple/id/1411615

10 proportionnalité des angles.png

 

Le calcul d'angle étant répétitif je vais quand même créer une fonction "angle" pour ça:

         angle(adj_1,adj_2,opp)=arccos((adj_1² + adj_2² - opp²)/(2 x adj_1 x adj_2))

 

j'ai déjà vu les couses max de mes servo de 180° pour le sens de rotation je reprend mon schéma de depart:

11 sens servo.png

 

je calcul en premier lieu l'angle de mon vecteur:

        alpha_3 = angle(hauteur_D,vecteur_D,empatement_D)

https://tube.geogebr...mple/id/1412777

12 1er angle.png

 

je calcul ensuite la valeur de l'angle de roulis,je dis la valeur parce que la, je vais avoir besoin de connaitre sa position positive ou negative

        valeurAlpha_2=angle(utile,carrossage,roulis)

pour definir sa position j ai créé une fonction sens:

       sens(valeurAngle,commande)=-valeurAngle x (commande / |commande|)

       sens(valeurAngle,commande)=SI(commande<0,-valeurAngle,valeurAngle)

Ce qui multiplie la valeur de l angle par + ou - 1 selon la commande utilisé

Ce qui placera un signe negatif devant la valeurAngle si ma commande est en négatif

Le principe de proportionnalité me dit que l angle de mon servo est modifié de la même valeur que l angle induit par le roulis. 

 

Et j obtient :

        alpha_2=sens(valeurAlpha_2,roulis)

https://tube.geogebr...mple/id/1412809

13 correction roulis.png

 

je calcule maintenant l angle entre le vecteur et le femur:

        alpha_1=angle(vecteur_D,femur,tibia)

https://tube.geogebr...mple/id/1412847

14 angle femur.png

 

voila j'ai tout ce qu il faut pour connaitre l'angle réel de mon servo:

        angle servo: alpha=180°-(alpha_1+alpha_2+alpha_3)

https://tube.geogebr...mple/id/1412983

15 angle servo.png



#5 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 14 juillet 2015 - 11:35

Je vais m'occuper maintenant du servo du tibia.

d abort debut et fin de course:

16 sens servo2.png

 

calcul de l'angle du tibia:

           gamma_1=angle(femur,tibia,vecteur_D)

l'angle du 2em servo:

           gamma=180°-gamma_1

vous pouvez bouger les commandes des 3 axes résolu, dans tous les sens et vous verrez que les pattes suivent parfaitement les mouvement du robot.

https://tube.geogebra.org/material/simple/id/1413059 

16 angle servo2.png

 

 

et voila la cinématique vu de face fonctionnel.

Au meme titre que l'axe de roulis il ne restera plus qu'a apporter les corrections sur les parasite des autres axes.



#6 NorthMaker

NorthMaker

    Membre

  • Membres
  • 30 messages
  • Gender:Male

Posté 16 juillet 2015 - 01:54

Sympa le projet ! Tu utilises quoi comme Arduino ?

Il a l'air de se déplacer plutôt vite en tout cas :D



#7 Vaelan

Vaelan

    Membre

  • Membres
  • 45 messages

Posté 19 juillet 2015 - 08:07

Je tiens à préciser( l'ayant fait dans un autre post, j ai oublié dans celui-ci) que sur les vidéo CR6VA1 ne fonctionne pas avec une cinématique inversé mais des angle de servo programmé et renvoyé avec une fonction ma radio ne contrôle que la vitesse des servo et 3 séquence de marche pour avancer et tourner.En gros un prog de noobs fais à l'arache ;) ;)  Pour répondre à ta question Northmaker, le tout fonctionne avec une ARDUINO UNO R3.

 

Pour en revenir à ma cinématique, après test de la première partie, je suis tombé sur un os avec ma fonction:

 

" sens(valeurAngle,commande)=-valeurAngle x (commande / |commande|)"

 

qui ne marche pas. En effet si la fonction multiplie bien la valeurAngle par -1 ou 1 quand la commande est a 0

la valeur renvoyé est non défini..... donc j ai corrigé la fonction (j ai découvert que c’était possible avec geogebra) avec la logique SI.:

 

sens(commande,valeur)=SI(commande<0,-valeur,valeur)

 

et ça à l'air de bien marcher.

N’hésitez pas à me renvoyer les erreurs que j aurais raté ou pas vu pendant mes test.

 

je continue a travailler sur la suite de ma cinématique inversé ;)



#8 F6FCO

F6FCO

    Habitué

  • Membres
  • PipPip
  • 186 messages

Posté 20 juillet 2015 - 11:00

Je ne connais encore rien à la cinématique inversée mais je suis tes travaux avec intérêt. Bravo !



#9 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 959 messages
  • Gender:Male
  • Location:Anglet

Posté 07 juin 2016 - 01:29

Un super travail qui n'a pas été suffisamment encouragé et qui mérite d'être un peu déterré =) 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#10 Oliver17

Oliver17

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 2 758 messages
  • Gender:Male

Posté 27 juillet 2016 - 10:18

Vu, j'ai mis le lien de coté de ton post, ça me plairait bien un hexa, mais plus tard, chaque chose en sont temps ^^

 

Merci


signature_01.png -->

 

Mon Tipeee
 


#11 AlexBotMaker

AlexBotMaker

    Membre

  • Membres
  • 48 messages

Posté 28 juillet 2016 - 11:52

Pas mal ! j'avoue, il y a beaucoup de travail !

 

Moi mon problème n'est pas de reprendre ces calculs ou Al-kashi se que je comprend pas c'est comment ensuite je met tout en relation ? comment je fait bouger mes pattes comme je veux ? comment je réutilise ces angles et le reste de ces mesures pour pouvoir enfin voir mon robot marcher normalement et non comme Frankenstein ^^







Aussi étiqueté avec au moins un de ces mots-clés : hexapode, arduino, ssc32, cinématique inverse

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

0 members, 0 guests, 0 anonymous users