Go Down

Topic: Robot bipède (Read 2382 times) previous topic - next topic

Wotan_20

Bonjour à tous,

j'ai grandement besoin de votre aide, car étant débutant dans la programmation, je n'arrive pas à contrôler un servomoteur avec la programmation arduino ( malgré de longue et longue heures d'essais et de recherche sur le net).

Mon but est de pouvoir contrôler un robot bipède, composé de 8 servomoteurs et d'une carte arduino Duemilanove.

Le robot bipède que je veut réaliser est le modèle avec 8 servomoteurs de EASY ROBOTICS.

Je sais que c'est un gros projet pour débuter, mais je suis quelqu'un de très motivé et qui est près à prendre en considération toute l'aide que vous pourrai m'apporter et dans un premier temps dans la programmation d'un servomoteur!

Merci d'avance.

Luj06

#1
Feb 14, 2010, 01:53 pm Last Edit: Feb 14, 2010, 01:53 pm by julien@pobot.org Reason: 1
Bonjour Wotan,

Très bon projet, et le robot d'Easyrobotics est très bien, j'en sais quelque chose :)

Le club a fait le même projet donc je peux t'aider à démarrer. Tout notre code source est disponible dans les différents articles dédiés à notre bipède: http://www.pobot.org/-Humanoides-.html


Wotan_20

Merci (Julien, c'est bien ça). C'est vrai qu'il est terrible votre robot, et j'ai débuté dans arduino grâce à votre tuto, j'ai pu tester avec un servomoteur votre code et sa à fonctionner. (j'étais trop heureux  ;D).

Mais j'ai essayé grâce à ce code, de comprendre qu'elle code fais qu'elle action et j'ai compris à 95%, à part "servo1.write(angle)" et par rapport à l'endroit ou est placé le "delay(10)", à qu'elle moment de l'action il intervient?

Et j'aimerais pourvoir pour continuer dans ma recherche, arrivé à faire un mouvement de 100 degré et qu'il s'arrête à 100 degré?

Merci d'avance!  :)

Luj06

Je n'ai pas compris ta question. L'angle donné est un angle absolu, pas relatif, donc si tu fais "servo.write(100)", le moteur tourne jusqu'à atteindre la position 100. Puis si tu fais "servo.write(90)", il tourne de 10° (si le servo est standard ou que tu l'as bien paramétré avec les options disponibles) jusqu'à atteindre la position 90.

Wotan_20

autant pour moi, je parler en faite d'un autre code d'un autre tutoriaux, qui est le suivant:

#include <Servo.h>

#define INCR 1

Servo servo1;

int angle = 0;

int sens = 0;


void setup()
{
 servo1.attach(9);
}


void loop()
{
 if (sens == 0)
 {
   angle += INCR;
 }
 else {
   angle -= INCR;
 }
 
 
 if (angle == 0)
 {
   sens = 0;
 }
 
 if (angle == 180)
 {
   sens = 1;
 }
 delay(10);
 servo1.write(angle);
}




Et c'est dans celui là que je ne comprend pas la fonction de "servo1.write(angle)" et le temps "delay(10)" intervient pour qu'elle action?

Et un autre question qui peut m'aider à avancé, comment en code, je peut faire venir le servomoteur à 0 degré, pour qu'il puisse partir du début et ensuite allé à un angle que j'aurais donné?


Khao

Au tout début, angle est créé et a une valeur de 0 donc 0 degrées.
Code: [Select]
int angle = 0;
Dans la boucle (tout le code entre loop() { ... }) on augment ou diminue la valeur de la variable 'angle' selon la valeur de la variable 'sens'. Si sens = 0, on augment de 1, sinon on diminue de 1 l'angle.
Code: [Select]

if (sens == 0)
{
  angle += INCR;
}
else {
  angle -= INCR;
}

Quand on atteint 180 degrées ou 0 degrées, on inverse la variable sens pour changer le sens du servo
Code: [Select]

if (angle == 0)
{
  sens = 0;
}

if (angle == 180)
{
  sens = 1;
}

ce code sert à dire au servo de bouger jusqu'à la valeur de la variable angle.
Code: [Select]
servo1.write(angle)
Le delay(10) sert a attendre 10 millisecondes avant d'effecter la prochaine action. Ensuite, le code dans loop() est exécuté à nouveau. J'espère que j'ai pu clarifier certains trucs ;)

Wotan_20

Merci Khao, sa m'éclaircir un peu plus!  ;)

Parcontre j'aimerais que vous m'aidiez à la programmation d'un servo moteur, en gros le faire ce déplacer à un certain degrée, puis faire un enchainement pour aller à un autre degrée et qu'il s'arrète.

Car j'ai pas saisi encore les fonction pour piloter un servo-moteur et aussi pour faire un enchainement d'action et enfin stopper le tout???

Wotan_20

C'est bon j'ai trouver comment faire pour contrôler un servomoteur à différent degré et qu'il s'arrête au moment voulu.

Par contre j'ai une question pour l'alimentation de mes 8 servomoteurs, à partir de la carte Arduino, j'avais pensé à une plaque d'essais, mais j'ai peur que sa prenne de la place sur le robot, voyez vous un autre moyen ou la plaque d'essais est une bonne solution???

Merci d'avance.  :)

sensor56

Salut,

pour la commande d'un servomoteur, j'ai fait une page qui montre comment commander un servo en envoyant directement la valeur de l'impulsion (en µs) à partir de la fenêtre du moniteur série : çà devrait t'aider à tester ton servomoteur. Moi je trouve çà très pratique pour bien contrôler "à froid" le fonctionnement du servomoteur.

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertSerieDepuisPCPositionServomoteur

Pour une commande du servomoteur à partir d'un angle en degré, voir ici :
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCanPositionServomoteur

Attention, il peut y avoir des variantes pour les impulsions des positions extrêmes selon les servomoteurs. Le premier lien que je te donne te permettra d'en avoir le coeur net en testant ton servomoteur aux positions extrêmes.

Conseil d'ami : commence par bien maîtriser la commande d'un ou 2 servomoteurs avant d'en gérer 8...  "Il y a le chemin court mais long... et le chemin long mais court"... :)

A+



Wotan_20

Merci sensor56, je vais suivre tes conseil, et en plus grace à toi je sais aussi maintenant piloter un servo de mon clavier d'ordi!!!

;)

Wotan_20

Mon programme pour faire avancer mon robot bipède est le suivant, mais j'aimerais pouvoir contrôler la vitesse des servomoteurs, pouvez-vous me l'expliquer et me le rajouter à mon programme comme exemple???

MERCI!

Voici mon programme:

//Robot avance droit et revien en position initiale

#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

void setup()
{
 
 servo1.attach(3);
 servo2.attach(9);
 servo3.attach(12);
 servo4.attach(6);

//mettre le robot en position initiale
 servo3.writeMicroseconds(1555);
 servo4.writeMicroseconds(1575);
 servo1.writeMicroseconds(1595);
 servo2.writeMicroseconds(1595);
 delay(2000);
 
//bascule sur le pied gauche
 servo1.writeMicroseconds(1200);
 servo2.writeMicroseconds(1400);
 delay(1000);

//avance du pied droit
 servo3.writeMicroseconds(1765);
 servo4.writeMicroseconds(1810);
 delay(1000);


//pied droit avancé et posé
 servo1.writeMicroseconds(1595);
 servo2.writeMicroseconds(1595);
 delay(1000);

//bascule sur pied droit
 servo1.writeMicroseconds(1750);
 servo2.writeMicroseconds(1750);
 delay(1000);

//avance du pied gauche
 servo3.writeMicroseconds(1295);
 servo4.writeMicroseconds(1295);
 delay(1000);

//pied gauche avancé et posé
 servo1.writeMicroseconds(1595);
 servo2.writeMicroseconds(1595);
 delay(1000);

//bascule sur le pied gauche
 servo1.writeMicroseconds(1200);
 servo2.writeMicroseconds(1400);
 delay(1000);

//avance du pied gauche pour se remettre en position initiale
 servo3.writeMicroseconds(1555);
 servo4.writeMicroseconds(1575);
 delay(1000);

//pied gauche avancé et posé, le robot est revenu en position initiale
 servo1.writeMicroseconds(1595);
 servo2.writeMicroseconds(1595);
 delay(1000);
 
 
 
}


void loop() {}

Jean-François

#11
May 11, 2010, 12:53 am Last Edit: May 11, 2010, 12:55 am by jfs Reason: 1
Avec la librairies Servo.h tu n'as pas 36 solutions... elle ne gère pas la vitesse des servos.

Regarde cette page ça t'aidera peut-être:

Maitriser le temps
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Luj06

Il y a une solution simple : faire plus de positions intermédiaires et gérer le temps d'attente entre les deux.

C'est ce que je fais sur mon bipède : dans l'interface de conception des pas, il y a une vitesse contrôlable.

http://www.pobot.org/Logiciel-de-configuration-du.html



Dans la colonne de droite les valeurs des différents servos, et des boutons pour tester la vitesse max disponible ou ralentir si besoin. Et ça marche très bien :)

Go Up