Aller au contenu


Photo

Construction d'un hexapod


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

#21 Hybrid Assistive Limb

Hybrid Assistive Limb

    Membre

  • Membres
  • 13 messages

Posté 24 juin 2013 - 04:27

Bonjour/bonsoir à toutes et à tous,

voilà maintenant quatre mois que j'ai disparu des méandres du forum, et pendant ces deux mois, j'ai bien sûr continué à éduquer mon fiston, afin de régler ses problèmes d'alimentation et l'aider à faire ses premiers pas.

Malheureusement, suite à un manque de temps dû aux examens, je n'en suis pas encore arrivé à un stade où le petit sait se déplacer correctement. Disons qu'actuellement, il fait plutôt la majorette :lol:/>/>/>

La bonne nouvelle est que ses pattes sont dorénavant toutes alimentées correctement, ce qui fait qu'elles se mettent en mouvement suivant les deux triangles bien définis (pattes avant et arrière droites avec la patte milieu gauche et l'inverse). La mauvaise nouvelle est que le mouvement est un petit peu boiteux, étant donné que, lorsque je dis au robot de se mettre en position de marche, sa patte arrière droite se met dans une position tout à fait farfelue et handicape ensuite ses voisines.

Pour mieux cibler le problème, j'ai fait un test qui consistait à demander individuellement à chaque servo de se mettre dans sa position initiale, en leur donnant donc le même ordre à chacun. Voici une petite vidéo montrant l'expérience, et où l'on voit très bien le problème que pose cette patte. Mais à ce moment-là, je suis un petit peu bloqué : j'ai essayé, pour régler le problème, de démonter (et débrancher, bien évidemment), la patte qui pose problème, d'envoyer l'ordre de se mettre en position initiale puis replacer la patte à la position qu'elle devrait occuper à ce moment-là. Seulement voilà, même après cet essai mécanique, la patte continue de perturber le tout.
La seule explication que j'y trouve est que le problème provient du fait que la position initiale du servo n'est pas la même que celle de ses consœurs, faisant ainsi qu'elle occupe bien la position que je lui demande, mais que celle-ci est déphasée par rapport à celle des autres. Mais malgré des recherches, je n'ai pas trouvé de code permettant de savoir la position initiale d'un servo ou de la modifier. Si quelqu'un aurait une piste à ce niveau-là, je suis preneur.

Un autre petit souci que j'ai est au niveau des servo intérieurs. Normalement, ceux-ci devraient aussi tourner sur leur axe de rotation, mais au final seul l'un d'eux semble y parvenir. Les autres ont l'air d'être bloqués sur leur position, et il y en a même deux que je n'arrive pas à tourner manuellement lorsque le tout est débranché. Là-aussi, je fais appel à votre érudisme, car j'ai essayé de dévisser les vis pour voir si elles opposaient une trop grande résistance aux servos, mais ça n'a guère changé.

Je vous remercie d'avance pour vos réponses et vous souhaite une bonne soirée :)/>/>/>

#22 Hybrid Assistive Limb

Hybrid Assistive Limb

    Membre

  • Membres
  • 13 messages

Posté 15 septembre 2013 - 01:39

Bonjour / bonsoir à toutes et à tous,

voilà bien des mois que je n'ai pas donné de nouvelles de mon projet. Aujourd'hui, alors que la rentrée a eu lieu il y a trois semaines et que les dates butoirs de reddition du travail de maturité approche, je voulais actualiser l'avancée de mon hexapod.

Pour résumer, disons que le petit avance bien. J'ai consacré mes vacances à m'occuper de calibrer et de synchroniser ces servomoteurs afin d'avoir un déplacement homogène où les pattes n'entrent pas en conflit les unes avec les autres. Actuellement, outre deux petits servos qui, pour une raison qui m'est inconnue, ne semble pas prêts à faire ce que je leur demande, le tout est assez joli à voir :)/>

L'étape qui me tient à cœur d'accomplir maintenant est de le libérer des câbles qui le contraignent et de modifier le code arduino, afin de pouvoir contrôler à ma guise son déplacement.

1) Pour le premier point, pas de souci particulier, il me suffit d'acheter le matériel nécessaire, c'est-à-dire une batterie pour remplacer l'alimentation secteur que j'ai actuellement et remplacer la connexion câblée qui relie l'arduino à mon PC. Pour ce dernier point, je pense partir sur du bluetooth, avec une clef bluetooth à mettre à l'un des ports bluetooth de mon PC et un adapteur bluetooth pour l'arduino (pour ce dernier, si quelqu'un a des produits avec un bon rapport qualité/prix à me conseiller, je suis preneur).

2) Quant au deuxième point, c'est pour lui que je viens quémander votre aide :P/>. En effet, l'idée que j'ai eue est d'utiliser le moniteur série inclus dans l'IDE d'Arduino afin d'envoyer des messages au microcontrolleur, qui donnera un ordre spécifique aux servos en fonction du message reçu. Par exemple, s'il reçoit un '8', il leur dira d'avancer; s'il reçoit un '6', il leur dira de tourner à droite, etc...). Pour cela, je suis donc parti sur une structure avec des conditions et un message qui s'affiche dans le moniteur pour confirmer que l'action a bien été accomplie. Le problème est que je reçois le message...mais le robot n'a pas bougé d'un pouce.

Afin que vous puissiez jeter un coup d'oeil au code, le voici (j'ai simplement omis la déclaration des variables et les importations, afin de donner la partie où l'anomalie se cache):

ServoConsole console;

void setup(){
  Serial.begin(115200); //For printing out data, or debugging.
  Serial2.begin(115200); // Used for control servos on left side.
  Serial1.begin(115200);// Used for control servos on right side.
  Serial.println("Entrez 5 pour passer en position de mouvement ou 8 pour avancer");
}

void loop(){
  if (Serial.available() > 0)
  {
    code = Serial.read();
    Serial.print(code);
    if (code == '5')
    {
      console.Move(legs, 3, 170, 311); //Legs move to 170 for standing up
      console.Move(legsbas, 3, 50, 311);
      console.Move(hips, 6, 480, 311); // hips move to 480 for standing up
      console.Move(hipsbas, 1, 280, 311);
      console.Move(hipshaut, 1, 580, 311);
      console.Move(axisA, 2, 0, 1); // axis group A move to 130. Prepare for walking
      console.Move(axisC, 1, 0, 1);
      console.Move(axisB, 3, 0, 1); // axis group B move 70. Prepare for walking
      Serial.print("Le robot s'est leve");
    }
 
    if (code == '8')
    {
      Serial.print("Le robot marche");
      while(1){
        walk();
      }}}}
      
void walk(){
  
  console.MoveUp(hipB, 3, 100, 300); //hips group B move up 100
  console.MoveUp(axisB, 3, 60, 100);// axis group B move forward 60
  console.MoveDown(axisA, 2, 60, 100);// axis group A move backward 60
  delay(500);// waits for movement
  console.MoveDown(hipB, 3, 100, 300);//hips group B move down 100
  delay(500);// waits for movement
  console.MoveUp(hipA, 3, 100, 300);//hips group A move up 100
  console.MoveDown(axisB, 3, 60, 100);// axis group B move backward 60
  console.MoveUp(axisA, 2, 60, 100);// axis group A move forward 60
  delay(500);// waits for movement
  console.MoveDown(hipA,3, 100, 300);//hips group A move down 100
        
                }


Pour donner un exemple du résultat obtenu, lorsque j'envoie un '5' à travers le moniteur série, celui-ci affiche "Le robot s'est levé", même si le gredin est resté inerte.

______

Voilà, c'est tout pour l'instant. Je vous remercie d'avance pour vos réponses :)/>

#23 alix

alix

    Membre

  • Membres
  • 16 messages
  • Gender:Male

Posté 18 septembre 2013 - 04:23

Bonjour,
Sympa ton robot, dommage qu'il n'y ai pas de T.M. en france...
Je voulais juste de montrer la solution que je vais utiliser pour piloter mon quadupède quand j'en aurais le temps.
Le kit sur cette page Mon lien est assez interessant dans le sens ou il est tres peut cher et permet de recvoir les signaux simplement (4 voies).Mais l'inconvenient est qu'il n'est disponible qu'aux etablissements scolaires (à ma connaissence) mais peut-être que dans le cadre d'un TM ...
Il a aussi une faible portée (10m).
Bonne chance




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

0 members, 0 guests, 0 anonymous users