1. LibreBot Mag
Numéro 00.0 – 1,00 €
Sommaire
Edito p1
Présentation du robot Nao p2
Jouer avec un robot Nao virtuel p3
Piloter le robot Nao avec URBI p4-5
Programmation : flexions p6
Premier programme URBI______________p7
Mini Concours _________________________p8
Edito
B onjour, et merci de l'intérêt que vous avez bien
voulu accorder à cette modeste publication.
Ceci est le numéro zéro d'un magazine dont le but est de
vous apprendre à programmer les mouvements d'un
robot humanoïde, et plus spécifiquement ceux du robot
Nao.
Il n'est pas dit qu'il y ait d'autres numéros que celui-ci...
Mais si le contenu vous intéresse, envoyer un mail pour
réclamer la suite, et qui sait, il y aura peut être un
numéro un :)
En attendant, bonne lecture.
Rédaction : Bothari GANHIR
Mise en page : Bothari GANHIR
Relecture : C.J. / C.P.
Site Web : http://librebot.free.fr
Mail : librebot@free.fr
2. LibreBot Mag n° 00.0
Présentation du robot Nao
I l est peu probable que vous
un robot Nao chez vous.
éviter que la lecture soit
ayez
Pour
trop
fastidieuse, nous allons faire
comme ci vous me posiez des
questions, et moi, je vais faire
comme si je connaissais les
réponses ;),
A quoi ressemble le robot Nao ?
Ce robot ressemble à celui
présenté sur la couverture, et la
particularité qui le distingue des
autres, c'est qu'il a des jambes, et
qu'on peut donc lui apprendre à
marcher.
Car ce robot, c'est un peu comme
un bébé, pour qu'il fasse quelque
chose, il faut d'abord que quelqu'un
lui ait appris à le faire.
Où peut-on en acheter un ?
Pour l'instant on ne peut pas, car il
n'est pas encore en vente. Seuls
quelques privilégiés en ont un, et
ce n'est pas la version finale.
Combien coûte-t-il ?
On ne sait pas encore précisément,
mais il coûte cher, sans doute trop
cher pour que vous puissiez en
acheter un sans l'aide de vos Fig. 1: Axe et orientation des articulations du robot Nao
parents.
Que sait-il faire ?
En ce moment, les concepteurs de
Nao lui apprennent à faire plein de
choses, mais nous, nous allons faire
comme si il ne savait rien faire, et
on va tout lui apprendre nous
même !
A quoi peut-on jouer avec lui ?
A plein de choses, mais dans ce
magazine, on va juste jouer à lui
apprendre à se déplacer, comme
on apprend à un bébé à marcher.
Est-ce que le magazine pourra
m'apprendre à lui faire faire
d'autres choses ?
Oui :) Le but est de lui apprendre à
jouer au foot, pour qu'il gagne la
prochaine Robocup ! Mais pour ça,
il faut commencer par lui
apprendre à marcher, puis lui
apprendre à comprendre ce qu'il
voit.
Et comment on.... ?
STOP ! Fini pour les questions, il est
temps de passer aux choses
sérieuses.
Fig. 2: Détail de la hiérarchie des axes
2
3. LibreBot Mag n° 00.0
Jouer avec un robot Nao virtuel
C omme nous n'avons pas de
robot Nao, nous allons utiliser
Contrôler soi même le Vous pouvez maintenant double
cliquer sur le robot Nao. Cela
le logiciel « Webots » qui propose robot Nao devrait ouvrir une fenêtre avec des
une version virtuelle de Nao. curseurs. Chacun de ces curseurs
Pour vous apprendre à contrôler contrôle un axe de rotation d'une
votre Nao, j'ai préparé un fichier articulation du robot. En bougeant
Téléchargement et « librebot_nao.wbt » aussi simple les curseurs, vous faites bouger le
installation que possible. Vous pouvez le
trouver dans l'archive qui se trouve
robot !
à cette adresse :
Nous allons utiliser la version
d'évaluation gratuite de Webots. Il
Utilisation
vous suffit donc de chercher de Webots
« webots download » sur google, et
vous devriez arriver sur la page Si vous cliquer
permettant de le télécharger. Il y a dans la fenêtre
des versions pour Linux, Windows de simulation et
et Mac. Évidemment, comme déplacer la
j'utilise Linux (distribution Ubuntu), souris en
il faudra peut être adapter mes maintenant le
explications à votre propre clique, vous
système. pouvez déplacer
votre point de
Une fois que vous avez chargé le vue, et ainsi voir
logiciel Webots, il suffit de le robot sous un
l'installer. Sous linux, il faut extraire autre angle.
le contenu de l'archive « tar.bz2 » Clique gauche,
où l'on veut. Cela créé un clique droit,
répertoire « webots », dans lequel il molette, chacun
y a le programme webots que l'on des boutons de
souhaite lancer. la souris à une
action
particulière. Ainsi
Lancement de Webots la molette
permet de zoomer plus ou moins.
Ca y est, vous avez installé http://librebot.free.fr/mag/librebot_
webots ? Dans ce cas, il est temps webots_00.zip Vous pouvez cliquer sur l'icône
de l'utiliser. Lancer l'application et
« Revenir » pour retrouver le
regarder ce qu'il se passe :) Chargez cette archive et monde et le robot tels qu'ils étaient
décompressez la. Cela devrait créer en début de simulation.
Webots permet d'ouvrir des fichiers un répertoire « librebot_webots ».
de type « *.wbt ». Par défaut, je Ouvrez avec webots le fichier Il y a dans la fenêtre de simulation
crois que « webots » ouvre le « worlds/librebot_nao.wbt » de une petite zone rectangulaire. Elle
fichier « Nao2.wbt » qui se trouve cette archive. affiche ce que voit le robot. Si vous
dans le répertoire « webots /
bouger la tête du robot, le robot
projects / contests / nao_robocup / Il s'agit d'un monde avec juste un regardera ailleurs, et le contenu de
worlds ». Avec le menu de webots, robot Nao. Ce robot n'est contrôlé la fenêtre sera modifié en
vous pouvez essayer d'ouvrir par aucun programme, ce qui va conséquence.
d'autres fichiers « wbt » (il y en a nous permettre de lui faire faire
plein dans les sous-répertoires de nous même ce que l'on veut pour
« webots/projets »). mieux comprendre comment s'y La suite ?
prendre.
Le logiciel webots permet de Vous allez vite vous rendre compte
simuler un monde en 3D. Une fois que la fenêtre de curseur est
que vous avez ouvert un fichier Lancer la Simualtion pratique pour se familiariser de
« wbt », vous verrez les différents façon interactive avec les
éléments qui ont été mis dans ce Une fois que vous aurez ouvert le articulations du robot, mais que
monde, et vous pourrez lancer ou monde librebot_nao.wbt, il faut contrôler chaque axe un par un à la
suspendre la simulation. lancer la simulation (icône de main est laborieux et ne permet
lecture « Run » en forme de pas de faire faire grand chose au
En général, il y a dans chaque triangle). L'icone de lecture devient robot, à part le faire tomber...
monde un robot qui bouge tout carré, et en bas à droite de la
seul, car ses actions sont fenêtre, le temps de simulation se Pour aller plus loin, nous allons
contrôlées par un programme. met à défiler. faire de la programmation !
3
4. LibreBot Mag n° 00.0
Piloter le robot Nao avec le langage URBI
P our faire faire des choses plus
évoluées au robot, nous allons
utiliser le langage de
Ou avec UrbiRemote :
Connexion Error
echo("Hello World !");
[00108636] *** Hello World !
programmation URBI. Can't connect to `localhost` Cela va juste afficher la phrase
on `54001`. dans votre fenêtre de commande
Normalement, vous n'avez rien de Error code: -1 URBI. Évidemment, cela n'a aucun
plus à installer, car le langage URBI impact sur le robot Nao, donc ce
est intégré à la version de Webots n'est pas très intéressant. Mais au
Cela arrive aussi après 5 minutes
que vous avez installé. moins, la coutume est respectée :)
de simulation (cf la version
d'évaluation de Webots ne permet
Grâce à URBI, nous allons pouvoir
que 5 minutes de simulation, après
nous connecter au robot, et le
piloter en tapant des commandes.
quoi il faut la relancer depuis le
début).
Commande d'un moteur
Si la connexion se passe bien, vous Dans URBI, chaque élément du
Lancer URBI devriez voir s'afficher des lignes robot a un nom. Ainsi, le moteur de
précisant la version de URBI. l'articulation du cou qui permet de
faire tourner la tête du robot à
Ouvrez le monde gauche ou à droite s'appelle
« librebot_nao.wbt », et lancez la 'HeadYaw' (attention à bien
simulation webots (bouton
« Run »). Une fois que la simulation Commandes URBI respecter
minuscules).
les majuscules et
est en cours, ouvrez une fenêtre de
terminal (fenêtre DOS sous Pour faire tourner la tête du robot,
Une fois que vous êtes connecté au
Windows), et lancez la commande il suffit d'indiquer quelle valeur
robot, vous pouvez taper des
suivante : d'angle le moteur doit atteindre.
commandes dans cette même
fenêtre de terminal (ou dans la Pour cela, il suffit de taper dans la
telnet localhost 54001 ligne de saisie en bas de la fenêtre fenêtre URBI la commande suivante
de UrbiRemote), vos commandes (attention à ne pas oublier le point-
Cette commande permet de se seront alors envoyées au robot qui virgule à la fin) :
connecter par telnet au robot de la les exécutera.
simulation Webots. HeadYaw.val = 30;
Avec telnet, pour quitter URBI, il
Vous pouvez aussi vous connecter faut taper le caractère '^]' (le ^ Normalement, après avoir tapé puis
au robot de la simulation webots en signifie qu'il faut maintenir la validé cette ligne en appuyant sur
utilisant le programme touche CTRL appuyée, puis taper le la touche entrée du clavier, vous
« urbiremote » (aussi appelé caractère indiqué, en l'occurrence devriez voir la tête du robot bouger.
urbilab). Une version gratuite de le crochet fermé, qui nécessite sur Comme la valeur est positive, la
ce programme peut être mon clavier d'utiliser aussi la tête a du tourner vers la gauche.
téléchargée à l'adresse : touche 'alt gr'). Cela quitte URBI, et Essayer une valeur négative, et elle
http://www.gostai.com/urbilab.html vous ramène au mode telnet, qui devrait tourner vers la droite :
se quitte en tapant « quit » puis la
Pour installer le logiciel, il suffit touche entrée. HeadYaw.val = -50;
sous Linux de charger le
programme, de décompresser Avant toute chose, une première La valeur que l'on met correspond
l'archive et de lancer le programme règle à ne pas oublier : quand vous à un angle en degré. Essayons de
« UrbiRemotePro.sh » contenu dans taper une commande URBI, il faut à tordre le cou du robot :
le répertoire « urbiremote » qui a la fin taper un point-virgule « ; »,
été créé. sinon la commande ne sera pas HeadYaw.val = -180;
exécutée.
Une fois UrbiRemote lancé, il faut
cliquer sur l'icône de connexion, On voit qu'il n'y a pas de risque de
mettre « localhost » comme tordre le cou du robot. Si on
serveur, et « 54001 » pour le port. demande un angle trop important,
Hello World ! le mouvement va commencer, puis
Si webots ou la simulation n'a pas s'arrêter une fois atteinte la limite
été lancé, vous obtiendrez une de rotation du cou (en l'occurrence
erreur disant : La coutume veut que la première 60°). Donc toutes les valeurs
chose que l'on fasse quand on supérieures à 60 degrés (ou
telnet: Unable to connect to apprend un nouveau langage est inférieures à -60°) feront que le
de faire afficher « Bonjour le monde robot tournera sa tête à 60 (ou -60)
remote host: Connection
! » (en anglais « Hello world ! »). degré seulement.
refused
4
5. LibreBot Mag n° 00.0
mouvement associé à l'étiquette
Lecture de l'angle d'une spécifiée :
articulation
stop test;
De la même façon qu'on peut Normalement, le mouvement de
indiquer à un moteur quel angle il tête du robot devrait s'arrêter.
doit prendre, on peut demander au
robot quel angle a un moteur Voilà, il ne vous reste plus qu'à
donné. Double cliquer sur le robot essayer tout cela avec d'autres
pour ouvrir la fenêtre des curseurs, articulations pour vous familiariser
et faite bouger la tête du robot en avec URBI et le robot Nao.
déplaçant le curseur HeadYaw.
Maintenant, vous pouvez faire
afficher l'angle du cou en tapant Programme
dans la fenêtre URBI la commande :
Comme taper des commandes est
assez laborieux, on peut les écrire
echo(HeadYaw.val);
[00099999] 19.99999 Mouvements continus dans un fichier et les sauver. C'est
tout simplement ce type de
Avec URBI, on peut aussi définir séquence de commandes qui
On peut afficher un message un constitue un programme.
des commandes qui tournent en
peu plus explicite de cette façon :
continu.
Au lancement de la simulation, le
echo("angle=" + HeadYaw.val); Essayez ceci (attention, pour les robot exécute automatiquement les
[00099999] angle=19.99999 commandes qui tournent en commandes contenues dans le
boucle, il faut mettre une virgule à fichier « nao.u » (jusqu'à
la fin de la commande au lieu d'un maintenant il était vide, donc le
point-virgule, sinon on ne pourra robot ne faisait rien).
Mouvements lents plus taper d'autres commandes) :
Ouvrez le fichier « nao.u », et taper
HeadYaw.val = 0 sin:5s les commandes suivantes :
Les commandes précédentes
entraînent un mouvement aussi ampli:40,
rapide que possible.
# Mouvement continu de la tête
Ceci demande au robot de bouger
On peut si on veut spécifier la la tête de façon sinusoïdale autour HeadYaw.val = 0 sin:10s ampli:60,
durée que doit prendre le de la position centrale 0, et avec HeadPitch.val = 0 sin:500ms ampli:20,
mouvement, ce qui permet une amplitude max de chaque coté # Mouvement continu des bras
d'obtenir des mouvements plus de 40°.
lents. RShoulderPitch.val = 0 sin:2s ampli:120,
LShoulderPitch.val = 0 cos:2s ampli:120,
Pour cela il faut taper la valeur à
atteindre (la consigne), suivi de Les étiquettes RShoulderRoll.val = -40 sin:3.5s ampli:55,
LShoulderRoll.val = 40 cos:3.5s ampli:55,
« time: » et la durée que doit Le problème de ce type de RElbowRoll.val = 45 sin:1.5s ampli:45,
prendre le mouvement : commande en continu, c'est LElbowRoll.val = -45 cos:1.5s ampli:45,
qu'elles ne s'arrêtent jamais ...
HeadYaw.val = -60 time:10s; RElbowYaw.val = 0 sin:2.5s ampli:90,
LElbowYaw.val = 0 cos:2.5s ampli:90,
Heureusement, on peut donner une
Avec ce type de commande, dès étiquette à nos commandes, puis
que la tête a atteint l'angle voulue, faire un stop sur une étiquette
le mouvement s'arrête. Sauver le fichier. Relancer la
donnée. simulation. Et voilà, le robot bouge
sa tête et ses bras !
Si on reprend le même exemple
(relancer la simulation pour qu'il On peut même dire que vous venez
n'y ait plus de mouvement), on de programmer votre robot pour lui
peut lancer la commande avec faire danser la tecktonik ! Pour un
l'étiquette « test ». début c'est pas mal ;)
test: HeadYaw.val = 0 sin:5s Maintenant que vous savez écrire
ampli:40, un programme, il est temps
d'essayer de faire bouger le robot
Du coup, dès qu'on en a marre de sur ses jambes sans qu'il ne
voir la tête du robot osciller de tombe !
gauche à droite, on peut taper la
commande « stop » comme ci- Et pour ça, il faut commencer par
dessous, ce qui va arrêter le un peu de théorie :)
5
6. LibreBot Mag n° 00.0
Programmation : flexions
L e premier mouvement que nous
allons apprendre à notre robot
sera assez simple : faire des
Flexion max et min
Si le robot ne plie pas le genoux, il
flexions. C'est à dire que l'on va le sera à sa hauteur maximale. Quand
faire se plier sur ses jambes, puis le genou sera plié au maximum, le
se relever. robot sera aussi bas qu'il peut
l'être.
Pour cela, il faut lui faire plier les
genoux. On va donc apprendre à Dans la suite, on va appeler « c » la
contrôler la jambe du robot. distance HK (la Cuisse), et « t » la
distance KA (le Tibia). Il faut donc calculer ces angles en
fonction de la longueur HA que l'on
La Jambe La hauteur Ymax du robot est donc
obtenue pour un angle αK du souhaite donner à la jambe.
Pour pouvoir contrôler la jambe, il genoux de 0° :
Dans notre cas, il s'agit en fait de
faut commencer par bien en Y max =Y K =0 ° =HK KA=ct trouver tous les angles du triangle
comprendre la structure.
HKA, sachant qu'on connaît la
Mais que vaut Ymin ? Et plus longueur de chacun des cotés de
Il y a trois articulations :
généralement, que vaut Y pour un ce triangle.
▶ la hanche (« Hip » en anglais),
angle αK donné ?
▶ le genou (« Knee »),
On peut comme précédemment
▶ et la cheville (« Ankle »),
Pour le savoir il faut utiliser le trouver ces angles en appliquant
théorème de Pythagore, et les les formules de trigonométrie de
Sur la figure, les articulations sont
formules de trigonométrie (cf calcul base.
repérées par une lettre
détaillé du cadre « Formule 1 »).
correspondant à l'initiale de leur
On obtient : En fait, il y a plus simple et plus
nom anglais, à savoir : H, K et A.
HA = c² t² 2⋅c⋅t⋅cos K rapide, car les formules
K
mathématiques de ce cas de figure
La hanche est reliée au torse du
sont connus.
robot (point O), et la cheville au Grâce à cette formule, on peut
pied du robot (point F, « foot »). déduire l'angle du genou pour avoir Chercher « résolution d'un
une flexion donnée (càd une triangle » sur Google, le premier
distance HA donnée) : lien vous amènera à la page
HA² − c²t² Wikipedia qui répertorie ce genre
K =acos de formules (dont le cas où l'on
2⋅c⋅t cherche les angles d'un triangle
dont on connaît la longueur des 3
Cas du Nao côtés).
La jambe du robot Nao à les Il ne reste plus qu'à coder tout cela
caractéristiques suivantes : en URBI !
c = 120 mm
t = 100 mm
αK dans l'intervalle [0°; 130°] HA²=HA 0 ² A A0 ²
D'après le calcul que l'on vient de
faire, les hauteurs de flexions sont HA0 =ct⋅cos K
donc :
Ymax = 220 mm A A0=t⋅sin K
Fig. 3: Jambe du robot Ymin = 95 mm
Chacune des articulations peu avoir HA²=c²2⋅c⋅t⋅cos K
un ou plusieurs axes de rotation. Le Angle de la hanche et t²⋅cos² K t²⋅sin² K
genou a par exemple un seul axe
de rotation, alors que la cheville en de la cheville
a 2, et la hanche 3.
Si on ne contrôle pas comme il faut HA²=c²2⋅c⋅t⋅cos K t²
Pour commencer, on va s'intéresser l'angle de la hanche et de la
uniquement à un seul de ces axes cheville, le pied du robot ne sera
de rotation : l'axe « pitch ». pas à plat sur le sol (et il aura donc HA= c²t² 2⋅c⋅t⋅cos K
de fortes chances de tomber), ou
alors il ne gardera pas le torse droit
(ce qui a aussi de fortes chances de Formule 1: Calcul de HA en
le déséquilibrer). fonction de l'angle du genou.
6
7. LibreBot Mag n° 00.0
Un premier vrai programme URBI
C omme on l'a vu précédemment,
l'archive
« librebot_webots_00.zip » que
Voici le contenu du fichier URBI.ini :
load("nao.ini");
Le code qui suit peut-être taper
dans le fichier nao.u.
vous avez chargé et décompressé à load("nao.u"); Il fait bouger la tête et les bras du
créé un répertoire robot en continu, et pour ce qui est
« librebot_webots ». des jambes, il fait faire la boucle
On voit que le programme URBI.ini infinie suivante :
Le sous-répertoire « controllers » se contente juste de charger (et – attente d'une seconde,
contient les programmes des exécuter) ce qui est contenu dans – flexion des jambes du robot,
différents robots, et le programme les fichiers nao.ini et nao.u. – attente d'une seconde,
du robot Nao vert que l'on voit – extension des jambes du robot.
quand on lance la simulation, c'est Le fichier nao.ini contient en fait
celui qui s'appelle « nao ». l'initialisation de l'ensemble des La flexion correspond à une
éléments du robot. On ne touchera consigne de longueur des jambes
Il y a dans ce répertoire pas à ce fichier. (cf partie flexion). Les angles des
« librebot_webots/controllers/nao/ » hanches, genoux et chevilles
deux fichiers : On va par contre pouvoir modifier nécessaires pour obtenir cette
• URBI.ini le contenu du fichier nao.u. Ouvrez flexion sont actualisés à intervalle
(fichier lu par URBI quand on le, puis tapez le code URBI que de temps régulier (toutes les 40
lance la simulation Webots) vous voulez. Ensuite sauvez le millisecondes).
• nao.u fichier.
(programme qui pilote notre Si vous relancer la simulation Maintenant, c'est à vous de
robot). Webots (icône de rechargement), le modifier tout cela pour voir ce que
nouveau code sera alors exécuté. cela donne !
# On groupe les moteurs similaires des deux jambes
# (pour pouvoir commander les deux en une seule affectation)
group Knees { RKneePitch, LKneePitch };
group Hips { RHipPitch, LHipPitch };
group Ankles { RAnklePitch, LAnklePitch };
# Définition de variables
var cuisse = 120; #longueur de la cusise
var tibia = 100; #longueur du tibia
var yy = 220; #consigne de longeur de jambe
var tt = 1s; #vitesse du mouvement
# Boucle infinie modifiant la consigne
loop {
wait(1s);
yy = 95 time:tt;
wait(1s);
yy = 220 time:tt;
},
# Commande des moteurs
every (40ms) {
Knees.val = acos( (yy**2 - (cuisse**2 + tibia**2)) / (2*cuisse*tibia) ) / pi * 180;
Hips.val = - acos( (yy**2 + cuisse**2 - tibia**2 ) / (2*yy*cuisse) ) / pi * 180;
Ankles.val = - acos( (yy**2 + tibia**2 - cuisse**2 ) / (2*yy*tibia) ) / pi * 180;
},
# Mouvement continu de la tête
HeadYaw.val = 0 sin:10s ampli:60,
HeadPitch.val = 0 sin:500ms ampli:20,
# Mouvement continu des bras
RShoulderPitch.val = 0 sin:2s ampli:120,
LShoulderPitch.val = 0 sin:2s ampli:120,
RShoulderRoll.val = -40 sin:3.5s ampli:55,
LShoulderRoll.val = 40 cos:3.5s ampli:55,
RElbowRoll.val = 45 sin:1.5s ampli:45,
LElbowRoll.val = -45 cos:1.5s ampli:45,
RElbowYaw.val = 0 sin:2.5s ampli:90,
LElbowYaw.val = 0 cos:2.5s ampli:90,
7
8. LibreBot Mag n° 00.0
Mini Concours
Si vous avez suivi toutes les étapes programmé les mouvements de directement l'adresse suivante :
du magazine jusqu'ici, vous êtes danse les plus sympa, bref, d'avoir http://www.dailymotion.com/LibreBot
peut-être arrivé a faire faire des le meilleur robot danseur :)
mouvements sympas à votre robot. Voilà, si ça vous tente de rejoindre
La vidéo de la piste de danse avec ce « danse floor », envoyez votre
Dans ce cas, vous pouvez envoyer tous les robots sera mis en ligne code URBI par mail à l'adresse
votre code au magazine, je me sur Dailymotion. Vous pouvez librebot@free.fr .
chargerai de rajouter votre robot d'ailleurs jeter un coup d'oeil à ce
dans la simulation « Nao Dancing que ça donne, cherchez juste Bonnes créations.
Battle ». Il n'y a rien à gagner, si ce « librebot » sur le site
n'est le plaisir d'être celui qui a « Dailymotion », ou tapez
FIN
8