Академический Документы
Профессиональный Документы
Культура Документы
REIBEL Thomas
RAPPORT DE PROJET
LEGO MINDSTORMS
Le chariot pendule
- Licence EEA-
2004/2005
REIBEL Thomas
CARNANDET Christophe
Page 1 sur 23 Projet Chariot pendule
CARNANDET Christophe
REIBEL Thomas
Remerciements
Nous tenons galement remercier Mr Buessler pour son aide dans la partie
informatique et sa patience.
Mme Woesteland nous a galement apport son aide indispensable pour le rsum en
Anglais et nous len remercions.
Sommaire
Remerciements............................................................................................................................2
Introduction.................................................................................................................................4
II) LegOS/Brickos.......................................................................................................................9
2.1. Prsentation :....................................................................................................................9
2.2. Voici dautres logiciels quivalents :.............................................................................10
2.3. Compilation vers BrickOS :...........................................................................................10
2.4. Installation de BrickOS :................................................................................................11
Conclusion................................................................................................................................19
ANNEXE..................................................................................................................................20
Introduction
Dans un premier temps nous vous prsenterons les Lego Mindstorms qui nous ont t
mis disposition par un kit RIS qui regroupe tous les lments ncessaires la ralisation du
robot.
Par la suite nous vous dcrirons plus en dtail le cerveau du robot savoir le RCX
ainsi que les diffrents capteurs et actionneurs quil peut commander.
Dans un deuxime temps nous vous ferons dcouvrir le langage utilis habituellement
par Lego Mindstorm pour programmer les diffrents robots dcrits dans le manuel du kit.
A travers ce chapitre nous verrons que dautres langages permettent doptimiser les
possibilits de programmation dont Bickos fait partie.
1.2. Le RCX :
Dun affichage digital qui nous permet de contrler certaines valeurs telles que la
puissance de la batterie, les valeurs des diffrents capteurs... Cet affichage est aussi
trs utile pour le dboguage de certains programmes ;
Dun port infrarouge qui permet de tlcharger les programmes et dchanger des
donnes avec lordinateur lors dune application ;
De 32 Ko de mmoire RAM ;
Dun processeur Hitachi.
Port infrarouge
3 entres
Affichage
digital (LCD)
3 sorties
ROM 16 Ko
Firmware de dmarrage
que lmetteur fonctionne. Le RCX utilise une porteuse 38 kHz, cependant le rcepteur est
accord sur une modulation de 76 kHz, ce qui permet la compatibilit entre les produits Lego
les plus anciens et les plus rcents. Le dbit est de 2400 bps, cest dire toutes les 417 s ce
qui se rapproche des tlcommandes pour tlviseur.
Lutilisation de lIR pour communiquer des donnes au RCX pose des problmes, en
effet la perte de paquet arrive frquemment. Les rayons infrarouges ne pouvant pntrer des
objets opaques, ce systme est trs directif et la tour USB et le capteur du RCX doivent tre
en vue directe une distance infrieure un mtre.
Pendant les premires semaines nous avons commenc par installer notre poste de
travail puis par dcouvrir le langage de programmation utilis par Lego, cest cette partie qui
va tre prsente dans ce chapitre.
Il est tout dabord utile de prciser que tout au long du projet, nous avons rencontr
diverses difficults qui nous ont considrablement ralenti dans notre avancement :
Des problmes dcran et de lecteur de CD-ROM que nous avons d changer
lun comme lautre ;
Des problmes avec la tour Lego (lmetteur permettant de tlcharger les
programmes vers le RCX) ;
Divers problmes avec le PC au cours des diffrentes sances qui nous ont
conduit devoir changer plusieurs fois de PC et devoir tout rinstaller: fichier uxtheme.dll
introuvable , des ralentissements considrables, etc. ;
Ceci tant dit, nous allons maintenant vous prsenter le travail ralis au cours de ces
diffrentes sances.
Nous avons ainsi commenc par effectuer les MISSIONS, qui sont en fait un tutorial.
La programmation seffectue sous forme de blocs qui ont chacun une fonction prcise. Il
existe des petits blocs, qui correspondent aux fonctions de bases (moteur droit activ,
attendre,etc.), et des gros blocs, qui correspondent en fait un ensemble de petits blocs
(avancer pendant 3 secondes, faire danser le robot pendant 4 secondes,etc.). On peut rajouter
des fonctions si on choisit dajouter des capteurs, il faut alors choisir dans quel tat doit tre le
capteur pour que la fonction sexcute.
II) LegOS/Brickos
2.1. Prsentation :
Brickos est en faite une amlioration de LegOS qui est un des premiers langages
destins au RCX. LegOS a t dvelopp par Markus Noga dans les annes 90. Il est
multitche et permet le chargement dynamique de programmes grce linterface infrarouge.
Ce systme dexploitation gre galement lensemble des Entres/sorties du RCX. Il fournit
une librairie permettant de remplacer le firmware de la brique par un OS plus puissant. Le
code de programmation est crit en langage C/C++.
Remplacement non
du firmware disponible oui non Oui oui
Nombres en
point flottant non oui non Non non
Affichage
programmable non oui non Oui oui
Trigonomtrie
et
mathmatique
avances non oui non Non non
Langage
interprt oui oui oui Non oui
Programme.c Programme.lx
Progamme.h Compilateur Programme.o dll
make
firmdl3
LegOS.srec
Cependant LOS, le compilateur et les outils de chargement de code sur le RCX ont t
dvelopps sur une plate-forme Unix. Il faut donc interprter les commandes pour pouvoir les
utiliser sous Microsoft Windows. On utilise pour cela le logiciel Cyqwin32.
Linstallation de ce logiciel nous a pos plusieurs problmes, en effet pour des raisons
que nous ignorons, lorsque nous allumions le PC, il arrivait parfois quil soit dfectueux et
que lon doive le rinstaller et ce plusieurs fois (une vingtaine environ).
Notre projet consiste faire bouger le chariot de telle sorte que le balancement du
pendule cesse de faon plus rapide que son balancement normal.
Nous avons dabord ralis le robot avec les Legos Mindstorms mis notre disposition.
Comme nous pouvons lobserver sur cette image, le robot est constitu de plusieurs
lments dont voici les dtails :
Le capteur dangle :
Pour obtenir linformation de langle du pendule, le capteur qui nous intresse serait le
capteur de rotation Lego. Cependant, ce capteur peut seulement mesurer en incrmentant de
360/16=22.5 degr. Cette prcision tant insuffisante, nous utiliserons un potentiomtre de
meilleure qualit (de valeur maximal de 10k) coll une bride standard de LEGO et
lectriquement connect au RCX.
Ce potentiomtre est utilis au point de suspension du pendule. Le logiciel convertit ce
signal en mouvement horizontale du pendule not yp.
Le capteur de vitesse :
Comme il ny a pas de capteur de vitesse standard fournit, nous utilisons donc un
moteur DC qui, en fonctionnement gnratrice, produit une tension proportionnelle sa
vitesse de rotation. Nous avons galement rajout une rsistance de 10k afin de linariser la
mesure ralise.
Ce moteur est coupl un des moteurs conducteurs au moyen dun rapport de vitesse
de 24/40=0,6.
Le frein lectrodynamique :
Il sagit dun moteur DC court-circuit, reli mcaniquement au moteur
dentranement, qui fonctionne comme un frein lectrodynamique. Ce frein fait de la roue
dente une rsistance mcanique linaire dont le couple est proportionnel la vitesse
angulaire.
Le capteur de rotation :
Il sagit du capteur de rotation standard de Lego, il est coupl aux moteurs par un
rapport de vitesse de 24/16=1,5. Le logiciel convertit ce signal en position linaire du chariot
note yc.
Voici une vue dtaille des diffrents lments monts directement sur le chariot :
La position du pendule est mesure par le potentiomtre situ sur laxe de rotation du
pendule. La valeur brute envoye par ce capteur de rotation est ensuite convertit en
mouvement horizontal du pendule par la mthode qui suit :
Chariot
La position du chariot est mesure par le capteur de rotation qui est directement li aux
roues conductrices. Nous utilisons galement un capteur de vitesse afin de dterminer la
vitesse du chariot.
Donc grce ces mesures, le robot dtermine la commande des moteurs pour corriger
le balancement du pendule. Plus le dplacement est grand, plus le chariot se dplacera loin et
vite.
Le programme principal utilise diffrentes fonctions (le programme principal est mis
en annexe). En voici quelques unes :
int velocity_raw;
double velocity;
velocity_raw = (SENSOR_3/64) - 512; /*valeur brute obtenue par le capteur*/
velocity = velocity_raw/VELOCITY_FACTOR;
return velocity;
}
double cart_position()
{
int position_raw;
double position;
position_raw = ROTATION_1;
position = position_raw/TICKS_PER_METRE; /* metre */
position = 0.82*position; /* facteur correcteur */
return position;
}
if (u>0) {
motor_a_dir(fwd); /*dirige les moteurs vers lavant*/
motor_c_dir(fwd);
u_int = u*MAX_SPEED;
}
else
{ motor_a_dir(rev); /*dirige les moteurs vers larrire*/
motor_c_dir(rev);
u_int = -u*MAX_SPEED;
};
I[0] = elapsed*100;
I[1] = y*I2R;
I[2] = u*I2R;
I[3] = v*I2R;
I[4] = w*I2R;
Nous avons vu dans le programme quune fonction permettait denvoyer des donnes.
Monsieur Buessler nous a ralis une commande permettant de rcuprer les donnes sous
Matlab, ces donnes sont dabord stockes dans un registre auquel cette commande permet
daccder. A partir de ces donnes, nous avons trac les courbes correspondantes lvolution
temporelle de ces valeurs.
600 1000
position commande
400
500
200
0
0
-500
-200
-400 -1000
0 200 400 600 800 1000 0 200 400 600 800 1000
600 1
vlocit setpoint
400
0.5
200
0
0
-0.5
-200
-400 -1
0 200 400 600 800 1000 0 200 400 600 800 1000
On constate que pour un grand basculement du pendule, le systme ragit bien mais
lorsque le basculement devient plus faible, le chariot a du mal se dplacer ce qui est d au
couple de frottement du sol sur les roues.
On remarque bien que la commande du moteur (u) est loppose du signal de position.
Le chariot se dplace donc en sens inverse au dplacement du pendule.
Conclusion
Ce projet nous a permis de dvelopper notre sens du travail en quipe. Il nous a aussi
permis de dcouvrir la programmation applique aux robots avec le logiciel de
programmation fourni par Lego ainsi quavec BrickOS et Cygwin.
ANNEXE
Le programme principal:
int main(int argc, char **argv)
{
int i;
double kk;
double bob, angle, angle_0, position, position_old, velocity;
double w = 0.0; /* mtre */
double y, y_con, u, u_out;
double state[N_state];
double t=0.0;
sleep(1);
lcd_clear();
cputs("WAIT");
#ifdef USE_CART_POSITION
y_con = position; /* Sortie contrle */
#else
y_con = y;
#endif
w = 0;
for (i=0;i<N_U;i++)
{
w = w + U[i]*ustar[i];
};
lcd_int(i_U);
/* Contrle */
#ifdef OPEN_LOOP
u = w;
#else
u = controller(y_con,u_out,w,state);
#endif
Thereafter, I have to allot the various projects to each group. I began the project by
building the robot. Then I had to analyze and transferred the program thanks to the Brickos
software.
Finally I had to analyze the operation of the system.
As a conclusion, I think that this project was very useful for me to challenge my
knowledge. Also this project is complete because it covers different aspect (Automatics and
computing).
With this goal in mind we used Legos Mindstorms, we made the programs on the
computer then we transferred them towards a Legos brick containing a microcontroller, called
RCX, this one being able to analyze input signals (contact, light detector) or to actuate
engines.
First, we built different robots starting from the software provided with the Legos box,
but we noticed that this software was not practical to use, indeed, it is practical for simple
programs but it is more delicate to use for more complex programs. Thats why we chose to
use an other programming language, C/C++. In the course of this first experiment, we
encountered a lot of problems like PC malfunctions, problems with the Legos tower. These
problems were resolved by changing the PC and reinstalling the Legos tower driver.
This software, called brickOS, enabled us to compile the programs. The code is
constituted of various functions which manage the information sent by the sensors and makes
the cart move according to this information in order to stop the pendulum. We also tried to
make the RCX communicate with the PC in order to be able to recover the information which
enabled us to improve the system.
In conclusion, I can say that this project is perfectly registered in the framework that I
have chose and complete the license certificate.