Aller au contenu


Contenu de Vaelan

Il y a 45 élément(s) pour Vaelan (recherche limitée depuis 10-juin 13)



#73726 Oracid - Mon imprimante 3D Dagoma Discovery 200

Posté par Vaelan sur 13 septembre 2016 - 06:48 dans Impression 3D et Imprimantes 3D

Le tube PFTE n a t il pas un defaut ?



#73046 Oracid - Mon imprimante 3D Dagoma Discovery 200

Posté par Vaelan sur 20 août 2016 - 04:27 dans Impression 3D et Imprimantes 3D

Ça fais bien longtemps que je rêve d'une imprimante 3D et ton sujet va peut être me faire sauter le pas en me faisant découvrir la 

Discovery200. Elle a l'air d'avoir tout ce qui me manquait , le prix , la simplicité , un SAV français.... Il me manque juste un avis objectif sur le bruit qu'elle émet. Je suis en appartement (pas de sous sol et encore moins d atelier pour la mettre, elle devra rester dans mon bureau) du coup je me pose la question niveau vibration pour les voisins et niveau bruit dans l appartement (si elle doit tourner plusieurs heure il faudrait quand même qu'elle soit relativement discrète surtout si elle doit tourner la nuit ;)



#72390 Robot Quadrupède intelligent.

Posté par Vaelan sur 24 juillet 2016 - 01:54 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Impressionnant!!!

bravo ;)




#72884 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 11 août 2016 - 09:03 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

 

Voir mon petit tutoriel ici  Si tu as des questions hésites pas !

Super le tuto ;) je connaissais pas . Tu viens de me réconcilier avec arduino et du coup on peux optimiser le code que j ai fournis plus haut ;) ;)

 

 

Concernant la "règle" qui dis qu'on ne soustrait jamais une commande, c'est juste le fameux théorème de vaelan qui s applique à sa cinématique inversé qui dis : Si -(commande) alors démonte ton robot et remonte le comme il faut ;)) Blague a part , les commandes définissent un vecteur d'origine 0,0,0 (le centre du robot), sur (x,y ou z) , de direction - ou + et de longueur la valeur de la commande.

Donc si tu as un latéral de -1  c est un vecteur sur x vers la gauche de longueur 1 maintenant si tu fais -vecteur tu inverse le vecteur du coup si tu dis a un offset de droite +vecteur et a un offset de gauche -vecteur tu vas casser quelque chose ;)) J ai voulu faire une explication simple mais je me rends compte qu avec un langage plus matheux ça aurais était peut-être un peu plus clair, désole.

 

alors t en ai ou AlexBot? ca avance? 




#72887 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 12 août 2016 - 06:51 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

En faite tu confonds les référentiel et les différentiel les commandes n'agissent pas directement sur DiffX mais plutot sur OffsetX (pas encore de commande sur les pieds mais Alex va les rajouter j en suis sur ;))  . la j ai pas le temp , je te fais un schéma ce soir




#72777 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 05 août 2016 - 12:03 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Si t'as besoin de précision sur des détails que tu comprends pas je suis dispo y'a qu'a demander :blind:




#72900 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 13 août 2016 - 07:59 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Désole un peu en retard pour l explication

 

 

 

Si je veux bouger le centre du robot dans de DX=1  suivant x je vais bien avoir DiffX patte droite (avant ou arrière ) = 9 = DiffX0 -DX 
Et pour les pattes gauche  DiffX=11 = DiffX0 + DX ... 

 

En faite ma cinématique ne marche pas comme ça . Ce qui définît l'empattement c'est les DiffX,Y ou Z (Différentiel) a partir des Offset et position des pieds (Référentiel) .

 

Alors oui y a bien un empattement définit par défaut , mais il faut bien une position de départ ;)

 

Le but étant de ne contrôler que le centre du robot, chaque commande peut être considéré un vecteur partant de Z=0  X=0 Y=0

un latéral de +1 c est un vecteur d'origine  (Z=0  X=0 Y=0) à ( Z=0  X=1 Y=0)

un latéral de -1 c est un vecteur d'origine  (Z=0  X=0 Y=0) à  (Z=0  X=-1 Y=0)

donc on aura toujours "Offset + commande"

exemple pour un latéral de -1:

Offset translaté avant droite = Offset physique + vecteur (( 0 , 0 , 0) => ( 0 , -1 , 0))

Offset translaté avant gauche = -Offset + vecteur (( 0 , 0 , 0) => ( 0 , -1 , 0))

On sait que le vecteur est définit par la droite de l axe x du plan (x,y) passant par le centre du robot on peut donc écrire:

Offset translaté arrière gauche = -Offset + (-1) 

Offset translaté arrière droite = Offset +(-1)

 

Je vais pas dire "on fait la même chose pour la marche" parce qu il faut quelque chose d'un peu plus complet mais on garde le même principe, et  tout nos référentiel (Offset et Pied) sont calculé.

 

Le différentiel entre A et B (nos référentiel) permet de calculer l'empattement dynamiquement 

 

Et enfin  les trois différentiel permettent de calculé tout les angles

 

quad vecteur.png

 

Avec ce début d IK j'ai pas d'exemple qui me viens a l esprit mais sur mon robot j'ai prévu en plus le roulis, tangage, et lacet (avec des méthode de marche bien entendu et d'autre chose .... ;)) je compte lui monter, pour ceux qui connaissent, un "Flymentor" c' est un gyro 3 axes avec accéléromètre et capteur de mouvement au sol (recupéré sur un de mes hélico) il va gérer le lacet et le tangage pour un mise a niveau du thorax.Grace à se système de différentiel quelque soit la correction d assiette du gyro qui sera appliqué, je pourrais toujours utiliser mon latéral ou le faire marcher sans que les différents mouvement soit en conflit les uns avec les autres (dans les limite physique du robot). 




#72793 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 06 août 2016 - 12:06 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

1/ Pourquoi tu applique deux fois pythagore dans la fonction Vecteur ?? 

 

2/ Pourquoi tu rajoute z/Vecteur(x,y,z) a alpha ?

 


double Pythagore.png

 

 

3/  Comment fonctionne sens et cote ?

 

4/ Les variable (x,y,z) ces moi qui doit les définir avec une valeur ???

 

5/ Ces quoi la différence entre lateral,longi,alti et (x,y,z) ??

;) sens,cote,x,y,z ne sont pas des variable mais des arguments de fonction  

 

si tu regardes bien, mon système mathématique n'est construit que de fonction qui s'appellent les unes les autres

et elles définissent seule comment appliquer la cinématique inverse a chaque angle selon la patte

 

Je l'ai écris pour l appeler le plus naturellement possible

tu veux l angle alpha de la patte avant droite = AlphaPatte(avant,droite)

tout le reste se fais tout seul :

AlphaPatte appelle la fonction AngleAlpha(x,y,z)

AngleAlpha prend 3 argument (qui sont 3 fonction)

   x =  la distance x entre l Offset et le pied qui n'est pas la même selon si elle est à droite ou a gauche (cote)

   y =  la distance y entre l Offset et le pied qui n'est pas la même selon si elle est à l'avant ou l'arrière  (sens)

   Z = pour toi pour l instant pas d argument mais ça viendra ;) (le miens avec gyro dois savoir s il est sur le ventre ou sur le dos  il prend en argument haut et bas

ect ..... 

donc tu vois bien que quand tu appels la fonction AlphaPatte toutes les autres sont appelé automatiquement avec les bon arguments .

BetaPatte(avant,gauche) et BetaPatte(arriere,droite) ne renvoient pas le même résultat mais elles appellent les fonctions nécessaire avec les bon argument pour que ça corresponde bien a l angle beta de la patte avant gauche et arrière droite.

 

Latéral commande de déplacement latéral (droite gauche) du CORPS du robot

Longi   commande de déplacement longitudinale (avant, arrière) du CORPS du robot

Alti       commande de déplacement altitude(monter, descendre) du CORPS du robot

 

Alors je sais que quand tu vas comprendre parfaitement comment ça marche, tu vas voir une façon beaucoup plus simple de le faire marcher sans Offset et sans les différentiel, mais ton IK sera figé. Cette structure te laisse la porte ouverte pour faire ce que tu veux.

exemple, comme moi, module Position corps ,et juste pour la moitié des Offset de mon robot (je t'épargne les équations)

CR6 Multi-vue.png

 

Et la tu devrais comprendre pourquoi je te dis de bien structurer ton programme parce que ça prend très vite beaucoup de place 

 

sur ce que tu a fais (je l ai juste survolé pas regardé en détail et je je suis pas bien placé pour t aider en codage je vais laisser ça à d autre) mais j ai quand même vu des erreur.

 

dans le loop (je pense que tu l auras compris ) toute ces fonctions non rien a faire la, elle sont appelé par:

AlphaPatte

BetaPatte

GammaPatte

et même ces fonctions la, devrait être appelé par une boucle sur l'asservissement des servo

 

les arguments de fonction (x,y,z,sens,cote) ne se déclare pas se sont des arguments

 

tu peux créer une fonction pour les "serial print"

 

y a des erreurs .

 

 

 

#define Avant 1
#define Arriere 1
#define droite 1
#define gauche 1
#define bas 1
#define haut 1

 

#define Avant 1
#define Arriere -1
#define droite 1
#define gauche -1
#define bas 1
#define haut -1

 

il faut bien comprendre qu'une valeur comme "largeur/2" vaut pour la droite et la gauche

avec la fonction : OffsetX(cote)=largeur/2*cote

quand tu appels :Valeur+OffsetX(droite)    c'est égale à Valeur+(largeur/2)

                            Valeur+OffsetX(gauche) c est égale à Valeur-(largeur/2)

 

je trouve ça trop "fouillis" (avis perso, peut être a tord)

 

int Mouvement_Alpha_Patte(double sens, double cote)
{
Alpha_Patte = Angle_Alpha(Mouvement_DiffX(cote), Mouvement_DiffY(sens), Mouvement_DiffZ(sens));
Serial.print("Alpha_Patte=");
Serial.print(Alpha_Patte,DEC);
Serial.println();
}

je ne sais pas coder mais ça devrais ressembler plutôt à ça:

A L'AIDE Mike 118 ;)

int Alpha_Patte(double sens, double cote)
    {
    Resultat = Angle_Alpha(DiffX(cote), DiffY(sens), DiffZ));
    return Resultat;
    }

Et ce pour toutes tes fonction

 

ça je comprends pas:

 

 

//Test :
for(int i =0; i<=1; i++)
{
//Avant droit Servos (1)
Move_Servo(AVD0,Gamma_Patte);
Move_Servo(AVD1,Alpha_Patte);
Move_Servo(AVD2,Beta_Patte);
//Arrière droit Servos (2)
Move_Servo(ARD0,Gamma_Patte);
Move_Servo(ARD1,Alpha_Patte);
Move_Servo(ARD2,Beta_Patte);
//Avant gauche Servos (3)
Move_Servo(AVG0,Gamma_Patte);
Move_Servo(AVG1,Alpha_Patte);
Move_Servo(AVG2,Beta_Patte);
//Arrière gauche Servos (4)
Move_Servo(ARG0,Gamma_Patte);
Move_Servo(ARG1,Alpha_Patte);
Move_Servo(ARG2,Beta_Patte);
}

 GammaPatte, AlphaPatte, BetaPatte, de quoi? y a pas d'argument pour l IK !

//indiquer à l'IK de quelle patte il doit calculer cette angle
Move_Servo(AVD0,Gamma_Patte(avant,droite));
Move_Servo(ARD0,Gamma_Patte(arriere,droite));
Move_Servo(AVG0,Gamma_Patte(avant,gauche));

Bien qu'en Python le code et plus court, je pense que même en C tu peux réduire énormément il y a beaucoup de chose inutile ou mal structuré tu devrais bien comprendre la base de cinématique inversé que je t ai faite avant d' essayer de la coder sinon tu arriveras pas à faire marcher ton robot.Comme je n'ai fais que survoler ton code y a peut être d'autre erreur mais je pense que tu vas le retravailler.




#72911 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 14 août 2016 - 09:33 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

On va continuer et développer ma logique d'IK plutot sur mon post parce que ca devient un peu trop envahissant pour AlexBotMaker et je développerais un peu plus sur la marche et un point important , dont j ai fais allusion au début de mon explication, à savoir son centre de gravité.

 

vieartificielle

 

 

Ce robot restera en équilibre à la condition que la projection de son centre de gravité soit en permanence dans le polygone de sustentation. Ce polygone est délimité par tous les points de contacts au sol.

 

Je reste  dispo si tu a des problème avec ton robot Alex ;)




#72993 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 18 août 2016 - 07:56 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Au vues de ta vidéo il semble qu il y ai un problème avec le "longi".

"alti" et "lateral" à l'air OK  .

Avec Parkinson c'est difficile de voir quel mouvement est inversé.Le code de l'IK tu l'as modifié ou il est comme l'original? 




#72979 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 17 août 2016 - 10:06 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

 

const float largeur = 8.6;
const float longueur = 11.1;

Tu dois déjà commencer par changer ça par:

const float largeur = 11.1;
const float longueur = 8.6;

 

 

#define avant 1
#define arriere -1
#define droite -1
#define gauche 1

La tu dois bien faire attention que tes servo soit bien monté comme sur mon schéma sinon tu devras adapter

Considère ton robot comme étant un plan Orthonormés dont son centre est le repère (0,0,0) , ce qui veut dire que si avant 1 et arriere -1 alors droite 1 et gauche -1

quad orthonormees.jpg.png

La tu vois que j ai des Offset avec des valeurs absolu identique = (3,2)

soit B (3*droite,2*avant) / (3*1,2*1) = (3,2)

       A (3*gauche,2*avant) / (3*(-1),2*1) = (-3,2)

       D (3*gauche,2*arriere) / (3*(-1),2*(-1)) = (-3,-2)

       C (3*droite,2*arriere) / (3*1,2*(-1)) = (3,-2)

 

Et il sont tous à leur place. Il s'agit de placement d'Offset et pas d inversion d'angle(je vais vérifier le prog que je t'ai fais, des fois que je me soit trompé)




#72755 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 04 août 2016 - 04:23 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Petit precision parce que c est pas tres clair dans mes screen shoot :

DiffX et DiffY sont des valeurs absolu




#72907 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 14 août 2016 - 08:52 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

Offset translaté arrière gauche = -Offset + (-1) 

Offset translaté arrière droite = Offset +(-1)

Je suppose que c est ça que tu comprends pas?

 

en faite ca correspond a :

Offset translaté arrière gauche = -Offset + (lateral) 

Offset translaté arrière droite = Offset +(lateral)

 

Au final la radio (ou autre moyen de controle) ne dois controler que le centre du robot. 

sur une radio les manches symbolise le centre du robot.

continuons avec l'exemple de commande latéral:

coordonnée 0,0,0

Aurora_9 000..png

coordonnée 0,5,0

Aurora_9 050..png

coordonnée 0,-5,0 

Aurora_9 0-50..png




#72754 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 04 août 2016 - 04:15 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

hello

Désole d avoir était aussi long j ai pas eu trop le temps mais j ai fait ça pour ton robot

 

alors pour commencer comme je savais pas comment est monté ton robot je suis partis sur cette base

montage servo vue dessus.png

montage servo vue face.png

 

tu pourras corriger si ton robot est monté différemment

 

pour la cinématique elle est sur géogébra parce que je l'ai testé virtuellement avant de te la proposer

IK 1.png

IK 2.png

désolé c'est un peu petit, mais tu peux agrandir en ouvrant le lien dans une nouvelle fenêtre(je sais pas comment le mettre en plus grand)

 

Avec ça tu as une base qui fonctionne

 

Si, comme moi, tu veux rajouter le roulis,tangage,lacet ou autre mouvement de corps c est dans position corps que ça se passe.

L amplitude des pas de chaque patte ou position "d'attitude" par exemple c'est dans position pattes  qu il faut le définir.

Le style de marche vecteur de marche et direction c est dans Mouvement

si tu rajoute des éléments a ton robot(un bras articulé par exemple) il faudra modifié la cinématique inversé pour qu elle le prenne en compte

 

et tu distribue tout ca avec une boucle

la définition est simple:

servo1 = GammaPatte(avant,droite)

servo2 = AlphaPatte(avant,droite)

servo3 = BetaPatte(avant,droite)

servo4 = GammaPatte(avant,gauche)

ect......

 

Un lien avec la cinématique fonctionnel, il te suffit de bouger les curseurs vert en haut de la page.Je n'ai pas résolu le déplacement visuel de la diagonal pour que tu vois bien que le pied n'est pas un point fixe sur la page mais que c est bien la cinématique qui gère les angles

 

https://www.geogebra.org/m/nU9jakAj

Voila ;)




#72389 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 24 juillet 2016 - 01:43 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

étant novice en la matière je te dirais que j aurais fais pareil pour le module déclaratif :

Variable constante

prototype de fonction

 

pour le corps du programme:

setup :

j aurais rajouté une position de départ pour le robot histoire de pas avoir de

surprise à sa mise sous tension et ne pas risquer de cramer un servo.

loop:

la je ne ferais que des appel de fonction, j'éviterais de placer de la logique a cette

endroit ça me permettrais d activer ou désactiver des fonctions simplement pour 

test

 

le module de mouvement:

Euh la je dirais que ça pique un peux les yeux ;) c est trop répétitif (bien que la fonction

Move() soit je pense prévu pour ca)

plusieurs façon pour résoudre ça :

soit avec un tableau dans le module déclaratif avec tes servo (je vois que tu n as 

aucune correction sur tes servo ....)moi j ai du redéfinir tout les min et max de mes servo

mais si tu as la chance d'avoir tout tes servo avec des course identique alors de simple boucle

suffiront.

j ai pas compris pourquoi tu a séparé le mouvement des tibia pour le deplacement? 

 

manque(pour bien structurer tout de suite):

module communication:

          Protocole()

          port série

          "radiocommande"

          "Bluetooth"

          "Wifi"

prévoir(selon évolution):

module capteur

module IK

 

Etant novice j'espére que je suis pas trop a cote de la plaque mais je suis sur que de expert en 

programmation viendront me corriger pour me faire avancer aussi

 




#72372 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 23 juillet 2016 - 05:08 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Je t avouerais que sur mon hexapode je l ai pas finis et je ne me suis pas occupé de la marche .Même si ce sont deux chose intimement lie se sont deux processus différent .
En effet la cinématique inverse va redéfinir la position de l extrémité des pattes selon les mouvement de ton point de contrôle (généralement le centre de mon hexapode pour moi (je n ai pas de problème de gravité avec 6 patte) et sur un Quadrupède son centre de gravite. Se mouvement peut être induit par une commande de marche , des capteur du style Gyroscope ,Accéléromètre(donc pas de gaits ) , ou des posture d expression (sur mon hexapode posture défensive s il se sent menacé par exemple) .
Tu dois commencer par te demander qu elle mouvement ton robot dois être capable de faire sans lever les pattes.
selon moi le minimum : mouvement sur la hauteur
                                     mouvement sur la largeur
                                     mouvement sur la longueur
ta cinématique gère les coordonnée (X,Y,Z) avec des offset fixe, tu travail donc avec des plans.
 
pour mon robot j ai rajouté: Tangage (bascule avant arrière)
                                            Roulis (bascule droite gauche)
                                            Lacet (rotation droite gauche)
On peux alors imaginer que je ne contrôle plus un point sur des plans mais une sphère qui se déplace
sur les plans (X,Y,Z) pouvant avoir une rotation sur elle même ça ne rend pas la cinématique plus complique en elle même
mais les offset deviennent dynamique.
la ou moi je bloque (bien que j ai entrevue un début de solution) c est la distribution d offset dynamique sur une seul fonction IK
 
sur mon hexapode les patte peuvent se toucher (se qui n ai peut être pas le cas de ton quadrupède) du coup avec la cinématique
inverse je pourrais définir les limites dynamique de chaque patte par apport a sa voisine est définir des méthode de marche optimisé en vitesse et amplitude, mais j en suis pas encore la ;)
 
Donc tu vois que chaque robot a des caractéristique différente et pourquoi la cinématique d un robot ne peut pas marcher sur son cousin pourtant proche mais le principe et sa construction reste la même 



#72359 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 23 juillet 2016 - 12:06 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

Tu a étudié à L'ESIX en Normandie a Caen ?? :)

Lol j aurais aimé mais non , j ai un simple BEP mécanique Auto d un lycée professionnel du sud de la france




#72358 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 23 juillet 2016 - 12:01 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Puis la cinématique inverse j'ai lu des pages de tutoriel différents mais je comprend toujours pas ... 

En faite c est impressionnant par les équation obtenu, mais en réalité pour la pseudo cinématique inverse (Pythagore/al-kashi) c est hyper simple

il est juste très important de comprendre son principe parce que ce n est pas adaptable d un robot a un autre, en tout cas pas d'une façon simple.

On a du voir a peu prêt les même tuto qui explique le principe d une patte a 90° au sens de marche avec un seul offset.

l important a comprendre c est l intérêt de l IK , pouvoir contrôler son robot par son centre de gravite sans s occuper du reste.

Donc si tu contrôle son centre, ton ik dois déjà savoir ou son tes patte sur ton quad ça donne 2 offset par patte (qui son les meme

en négatif ou positif,largeur/longueur) c est la première chose que tu ne vois pas sur les tutos de plus, sur un quad, le centre de gravite dois etre placé a l’intérieur du triangle des 3 pattes pose au sol + le contre poid de la patte en mouvement chose que l IK peut résoudre plutôt que

(je pense tu a du faire) teste les position et les valider par apporte a son basculement surtout si tu veux des déplacement rapide sans IK ça va vite devenir compliqué (des valeur pour déplacement lent / des valeur pour déplacement rapide / éventuellement des intermédiaire)

pour moi le faite d être seul dessus, bloquer sur des incompréhension sans avis extérieur a était un gros frein donc si tu te lance sur ton IK si tu veux je veux bien travailler dessus avec toi ;)




#72432 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 24 juillet 2016 - 11:44 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

+1 mike118 

 

Sur un tuto que j ai regardé sur le net un prof(je ne me rapelle plus son nom je suis dsl pour lui) disait: "il n'y a pas de mauvaise façonde programmer , mais celle que l on connais" cette phrase à était un grand soulagement pour moi ;)

Par contre structurer un programme et apprendre a le commenter est , a mon sens, essentiel et une priorité quand on veut apprendrea coder. Au fur et a mesure que l on progresse on cherche toujours a optimiser le code , améliorer nos machine et c est désespérantde devoir tous recommencer a zéro parce qu on ne retrouve plus la ligne de code qui correspond ou trop de changement a faireou bien encore retrouver un bug dans un "labyrinthe sans plan".

 

concernant mon hexapode en lui même j en suis a peine plus loin que toi j ai juste une radio 9 voies en plus une fois qu il a marché je me suis consacré a la cinématique inverse qui doit être le cœur du programme ensuite dans l ordre viendra gyroscope/accéléromètre, les style de marche,autre capteur ,comportement

 

concernant la cinématique inverse je ne me suis pas lancer dedans en programmation directement, je me serais pris les pieds dans le tapis, j avais créé un post sur se forum y a a peut prêt un an mais je me suis arrête a 30 ou 40 % de la cinématique complète, je suis alle plus loin par la suite mais j ai pas pris le temps de compléter mon post (vais peut être m'y remettre, au moins corriger les incohérence de correction roulis/tangage).

Sinon je n'utilise que de la trigonométrie Pythagore/Al-kashi tu peut tout faire avec ça, y a surement mieux .

Je me suis intéressé a la trigonométrie sphérique mais bon ça a commence par des figures géométrique à deux sommet ,ca m as effrayé j ai arrêté tout de suite ;))calcule matriciel , pareil je nage ....

 

Après le principe est simple tu définis la position de départ de l'extrémité de ta patte(celle que je t ai dis de placer dans le setup par exemple), tu prend la hauteur de l offset avec la distance de l aplomb de l'offset à l'extrémité de la patte, ca te donne 2 cote d'un triangle rectangle dont tu peux calculer le troisième cotés avec Pythagore maintenant tu connais ce troisième cotés ,la longueur du fémur, la longueur du tibia te voilamaintenant avec un triangle quelconque dont tu connais tout les cotés y a plus qu a calculer tes angles avec Al-kashi ;)  tu applique ça dans tous les sens de mouvement de ton robot.

Voila c est pas très compliqué faut juste pas s emmêler les pinceau




#72465 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 25 juillet 2016 - 07:25 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

;) c est mieux , je te laisse gérer la suite de la prog. moi je suis sur un RPI2 et  en python du coup j ai pas trop développe le C

par contre (sauf erreur de ma part) "COAX","FEMUR","TIBIA" devrais etre des constante.

 

Maintenant niveau IK la je peux t'aider, dans tes déclaration il va te manquer la hauteur du corps de ton robot pour définir la position la plus basse a laquelle ton robot peu marcher et les distance entre les axe servo avant => arrière et droite => gauche pour définir les offset

 

après tu dois me dire quel sont les mouvement que tu veux pouvoir faire 

 

exemple offset pour IK simple (hauteur , latéral , longitudinal )

Offset Y = longueur corps / 2 + le déplacement du centre sur Y

Offset X = largeur corps / 2 + le déplacement du centre sur X

Offset Z = hauteur - (hauteur corps / 2) + déplacement du centre sur Z

 

exemple offset pour IK complet (hauteur , latéral , longitudinal , lacet , roulis , tangage)

Offset Y=longueur corps / 2 x sin(Lacet) x cos(tangage)  + la valeur déplacement du centre sur Y

Offset X=largeur corps / 2 x cos(lacet) x cos(roulis) +  la valeur déplacement du centre sur X

Offset Z=(hauteur - (hauteur corp / 2)) x sin(roulis) x sin(tangage) + la valeur déplacement du centre sur Z

 

Maintenant l intérêt de l'IK? Ne contrôler que le centre de ton robot sans te préoccuper d ou se trouve le début de tes pattes .Le calcule des angles de servo commence à l endroit des Offset. Une fois programmé tu n auras plus à définir chaque servo et l IK va gérer les angles servo mais aussi leur vitesse (plus de patte qui glisse au sol COOL) , tu pourras alors créer des fonctions de cycle de marche en définissant ,l ordre de marche, l amplitude des pas  et sur la fonction de commandes ça vitesse de déplacement GÉNÉRAL (donc sont centre ;))




#72665 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 31 juillet 2016 - 07:29 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

en faite moins il y a de patte plus c est dure sur mon hexapode j ai juste le risque que les patte se touche mais l IK peut définir les limites des pattes vu qu elle calcul les angles .

 

Sur un quadrupède dans l idéale il faut que le point centre se déplace selon le centre de gravité donc des Offset en changement permanent, bon je veux pas effrayer AlexBotMaker c est pas obligatoire ça dépendra des performance que tu recherches pour ton robot.

 

Pour un bipède sauf surdimensionner ses pieds il faudra obligatoirement un accéléromètre et un gyroscope et je ne pense pas que ma méthode soit la bonne approche;) j essayerais peut être un jour .

 

sur le même principe ça peut aussi s appliquer a un bras articulé

 

je vais essayer de te faire un petit truc sur géogébra avec les paramètre de ton robot et comment mettre en place l IK mais ne connaissant pas le sens ni les angle de montage des servo Coax il faudra que tu corriges .




#72649 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 31 juillet 2016 - 01:32 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

je suis pas très bon pédagogue désolé.

 

je vais essayer de te donner mon raisonnement de programmation pour mon robot, ça t aidera peut être à comprendre ce qu est l'IK.

 

J'ai fait un parallèle avec le vivant:

 

Dans notre environnement on reçois des instructions de notre entourage(patron ,professeur,amis......)

Ça c est la partie communication du robot (télécommande, port série, bluetooth, wifi, certain capteur......)

 

Si on me demande d'avancer je décide consciemment comment (en marchant, en courant/ je commence avec le pied droit, le pied gauche/ j y vais a quatre patte.......)

Ça c est la partie Gaits de mon robot( on pourrais lui demander d'aller à l'endroit X au lieu de lui dire d'avancer , avec un système gps il pourrait le faire et c est ici que ça se passe aussi.

 

et pour finir quand tu marches tu ne décide pas consciemment de combien tes muscles doivent se contracter pour que tu puisse marcher on ne connais même jamais les valeurs associer.

Ça c est l IK (il gère tout les servo sans que l on ne connaisse jamais leurs valeurs)

 

pourquoi faire cette différence entre l IK et la marche ? Simplement parce que l IK peut être associer a tout ce qui concerne le robot , en plus de la marche on peut imaginer des réflexe lié a des capteur , des position à adopter..... ce système permet de combiné ce que tu veux.

 

exemple avec un IK complet : tu lui demande en posture de se pencher a gauche avec une torsion a droite en allant a telle endroit avec telle démarche ..... l ik va calculer tout les angles malgré tout ces paramètre venant de différent endroit de ton programme sans que tu ne connaisse jamais la valeur de tes servo 

dans se cas chaque nouveau paramètre appliqué à l IK dois prendre en compte la modification de  l Offset par le paramètre précèdent.

 

Dans le cas simplifié que je t'ai présenté plus haut l IK et la marche ne sont qu une seul chose et rien d autre ne sera appliqué dessus , demander au centre contrôlé ou a chaque patte d avancer c est pareil puisque tout les Offset sont ceux d'origine et ne peuvent pas être modifié par autre chose.

 

pour les angles, alpha beta gamma, sont indissociable. Chacun d eux modifie les autres, ainsi i1 a un empattement par défaut qui définit l emplacement du pied du robot (le vecteur de marche passera par la)  , si tu applique un latéral de 2 vers la gauche l Offset_X de droite sera a +2 et celui de gauche sera a -2, gamma et i1 seront modifiés et par conséquent alpha et beta aussi.Il n est pas question de marche mais bien de garder les pieds du robot à leur place alors que son corp se déplace!!

OffsetX =longueur/2 + deplacementX

 

lateral gauche.png

 

 

il en va de même pour la marche , le pied de ta patte devra courir le long de ton vecteur de marche et modifiera tout les angles en même temps (voir schéma IK simplifié plus haut)

 

ton IK connaissant l Offset et la position d origine du pied de ta patte peux calculer gamma et la longueur total de la patte, en soustrayant la longueur du coax il obtiens i1 avec i1 il peux calculer alpha et beta 

 

Voila pour le principe

 




#72606 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 30 juillet 2016 - 12:03 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Apparemment tu veux faire très simple et le voir marcher rapidement donc oublis les Offset uniquement la marche (avancer et tourner ).Voila le principe et ou ça ne va pas , il faut rajouter l angle de COAX aussi.

 

 

 

 

alpha = acos((pow(FEMUR,2)+ pow(L,2) - pow(TIBIAS,2))/ (2*FEMUR*L));
beta = acos((pow(FEMUR,2) + pow(TIBIAS,2) - pow(L,2))/ (2*FEMUR*TIBIAS));

alpha est incomplet!..

 

principe.png

 

En faisant varier la longueur du Vecteur de  marche tu obtiendra le mouvement avant/arrière 

En faisant varier la longueur du Vecteur de direction tu le feras tourner et le pied suivra toujours le Vecteur de marche et donc pas de glissement ni mouvement bizarre(attention, la valeur ajouter ou soustraite au Vecteur de direction d'une patte dois toujours être l inverse de ces voisines)

pour lever une patte, on soustrait de la valeur Hauteur de l IK sur la patte voulu la hauteur a laquelle on veux qu elle se lève.

Ma cinématique ne fonctionne pas comme ça, je n ai donc pas testé cette version.Mais c est la plus simple qu on peux mettre en place (supprimer : longitudinal, latéral, roulis, tangage, Lacet) difficile de tester sans le faire marcher 

 

Niveau calcule tu m as dis que ça ne te posais pas de problème, je te laisse faire et je te corrigerais ;)




#72563 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 28 juillet 2016 - 09:37 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

 

 

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

Même si c est pas complet c est gentil ,merci.

 

 

 

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 ^^

La je vois pas.......

meme si elle n est pas complete la cinématique calcule les angles, tu les applique a tes servo. C'est quoi la relation que tu comprends pas?

 

sans la cinématique inversé:

http://www.geogebra.org/m/apkw5gdx

 

Avec la cinématique inverse:

http://www.geogebra.org/m/mDdgAGPJ#material/zErDBVzc

 

Les curseurs programmés sont en VERT et il ne contrôle que le point "centre" en violet les angles étant obtenu avec la cinématique inversé . Malgré les mouvements que tu appliques au corps du robot l extrémité de la patte reste parfaitement à sa place sans mouvement à la "Frankenstein" ni glissement au sol .Tous les servo sont en mouvement quand tu bouge les commandes.

Après appliquer la valeur de la fonction "angle" à GAMMA de geogebra ou au servoTibia de ton robot je vois pas de différence à part un MAP de la valeur de l angle en PWM.

 

 

 

Moi mon problème n'est pas de reprendre ces calculs ou Al-kashi

As tu vraiment compris la cinématique inversé? comment elle fonctionne et à quoi elle sert?

 

 

 

il y a juste hauteur_corps et hauteur la différence ou je suis pas sur, il s'agit de l’épaisseur du corps du robot !

 

hauteur_corps est la hauteur physique du corps de ton robot

Hauteur est la distance entre le sol et le centre de ton robot

 

Dans ton code "const int et #define" toujours pas bon.

les longueur physique de ton robot sont invariable donc se sont bien des constantes

par contre hauteur et empattement sont des valeurs par défaut qui servent a initialiser des variables et que tu pourras changer dans l avenir donc tu dois les définir par des #define  




#64830 Robot Quadrupède Arduino Uno

Posté par Vaelan sur 10 juillet 2015 - 11:05 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Salut,

  j avance dans ma cinématique ;)) Une petite précision ,dans ma vidéo pas de cinématique mais des angles programmer angle par angle ma radio ne contrôle que la vitesse et quelque position sur les inter.... ma cinématique est loin d être finis mais elle avance bien et géogébra me confirme le bon fonctionnement de mes équation (qui resterons a simplifier par la suite).d' ailleurs pour ne pas polluer ton post je pense que je vais créer le mien pour une explication pas a pas de mon raisonnement peut être particulier et peut orthodoxe, vu mon niveau en math, mais fonctionnel ;)

 

A chaque robot ses contrainte.Moi je me suis imposer un gyroscope 3 Axes d'ou l'implantation du roulis et tangage dans ma cinématique .Quand a ton quadri (vi vi j y ai réfléchis..) je pense que tu peux te passer du roulis/tangage/lacet, mais tu dois inclure dans tes équation son centre de gravite qui ne dois jamais être devant la diagonal des pattes adjacente a celle qui se lève (suis pas sur d'etre clair.....).Rien de compliqué mais une contrainte importante pour un quadri, selon sa vitesse de déplacement son inertie peut avoir une importance aussi mais je pense que pour commencer tu peux t'en passer.

 

pour tes question sur les coordonnés heu...... cylindrique: je sais pas ce que c est...... cartésiens: suis pas sur, ma radio contrôle le centre de mon robot en hauteur largeur longueur + 3 axe de rotation et déplacement on peut considérer ça comme cartésien mais j ai viré les repéré de geogebra qui ne me serve a rien ... je pense que ce n est que du calcul d angle en gros le but c est de lui dire "avance/tourne/baisse toi .... " et il se débrouille a calculer le reste en plus de compenser les dénivelé du terrain mais pas de données genre (X,Y,Z)

 

En ce qui concerne l'arduino pour l instant je finis la cinématique inversé et je me lance dans la programmation (je n ai appris que ce que j avais besoin pour le faire avancer ) j' avoue que je comprends pas la moitié de ton code mais je vais faire comme toi je vais m inspire de ce que tu as fais pour trouver des structure et raisonnent qui correspondent à mon robot.

 

Une fois mon post créer je compte sur toi pour des critiques constructive et je continu à suivre l'avancement de ton robot avec beaucoup d’intérêt