Voici une vidéo qui pourrait t'inspirer, https://www.robot-ma...-nuls/?p=104801
Dans cette vidéo, j'utilise un vrai 5 barres. Aujourd'hui, j'utilise un losange, c'est un 5 barres dont la barre g (ground, chassis) est de longueur nulle. Cela permet de simplifier les calculs et est, à mon avis, plus facile à mettre en œuvre.
Ne te prend pas la tête, j'ai une fonction, une boite noire, tu lui donnes la coordonnée cible et elle te donne les angles pour les 2 servos de ta patte.
Mais il faudra peut-être adapter les calculs à ton mécanisme.
Perso, je fais un rectangle, c'est facile et efficace.
Dans ce sujet, https://www.robot-maker.com/forum/topic/13321-fourbarquad525-toujours-plus-rapide/?p=111789 , avec l'aide de Patrick et Sandro, j'ai fait des tas de tests. Vers le début, tu y retrouveras la figure proposée par Patrick qu'il utilise dans son dernier quadrupède.
J'ai déjà fait une version où je calcule les angles par avance, mais cela ne sert à rien, car les servos sont très lents, si tu les compares à la vitesse d'un microcontrôleur.
Pour commencer, tu devrais faire un schéma de ton mécanisme
En 12 lignes, voici une version très simplifiée de cette fonction pour un losange. J'ai supprimé le traitement des erreurs pour plus de lisibilité.
Tu lui donnes les coordonnées Px et Py d'un point cible, et elle active les 2 servos avec les bons angles en degrés.
void IK(int Px, int Py, int LS, int RS){ // Inverse Kinematics function
float Ax=0, Ay=80, c=80; // Values of paw coordonates
float d=Ay-Py, e=Ax-Px; //
float h=sqrt((d*d)+(e*e)); //
float B=asin(d/h); if(e<0)B=(PI-B); // B is the top angle of the rectangle triangle
float A=acos(h/(2*c)); // A is the Diamond half top angle (cosin law)
int S1=round(degrees(B-A)); // S1 is the left servo angle in degrees
int S2=round(degrees(B+A)); // S2 is the right servo angle in degrees
Srv[LS].write(S1); // set target Left servo
Srv[RS].write(S2); // set target Right servo
delayMicroseconds(Speed); // speed of action
}