Académique Documents
Professionnel Documents
Culture Documents
Le robot Tergane
- -
Institut Universitaire de Technologie de TOURS
Département Génie Electrique et Informatique Industrielle
Le robot Tergane
Sommaire _________________________________________________________________ 5
Introduction _______________________________________________________________ 4
1. Présentation générale de la maquette _______________________________________ 5
1.1. Technologie des actionneurs et préactionneurs____________________________________5
1.2. Entrées/sorties ______________________________________________________________5
1.3. Module de communication série ________________________________________________6
1.4. Format des trames de communication___________________________________________6
2. Cahier des charges ______________________________________________________ 8
2.1. Fonctionnement escompté _____________________________________________________8
2.2. Environnement______________________________________________________________8
2.3. Contraintes matérielles _______________________________________________________8
2.4. Planning ___________________________________________________________________9
3. Réalisation du programme _______________________________________________ 10
3.1. Description graphique _______________________________________________________10
3.2. Analyse globale_____________________________________________________________15
3.3. Analyse fonctionnelle ________________________________________________________17
3.4. Résumé de l’analyse _________________________________________________________23
Conclusion _______________________________________________________________ 27
Table des illustrations_______________________________________________________ 28
Annexes__________________________________________________________________ 29
Introduction
Pour notre part nous avons choisi de réaliser la commande d’un bras
manipulateur, la pince Tergane. Vétuste mais toujours fonctionnelle, nous explicitons
dans ce dossier la démarche que nous avons suivie pour élaborer notre projet.
Dans une première partie nous présenterons la pince, puis dans une seconde
nous définirons le cahier des charges. Enfin nous étudierons la composition du
programme.
4
1. P r é se nt at ion gé né r ale de la maque t t e
1.2. Entrées/sorties
On l’a vu précédemment, il y a cinq composants que l’on peut commander : la
base, l’épaule, le coude, le poignet et la pince.
1
Interface entre la partie commande et les actionneurs
2
Transforment l’énergie reçue en énergie utile
5
Ces composants sont commandés par le biais de trames que l’on envoie au
robot grâce à la liaison série.
- Vitesse de communication :
- parité :
- bit de stop :
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
P ± Y Y Y
« P » permet au module gestion des trames du robot de savoir que l’on veut
agir sur la pince.
6
1.4.2. Trames binaires
On a la trame suivante :
X ± Y Y Y
- « X » est ici une lettre qui représente soit la Base (B), le Coude (C),
l’Epaule (E), le poignet (F),
Le tableau suivant définit les variations qui peuvent être appliquées. A noter
que l’on varie entre la partie positive et négative grâce au caractère situé entre le
« X « et les « YYY ».
Coude C - 495 3
7
2 . C ahie r de s c har ge s
On va ici décrire le cahier des charges que nous avons défini pour le
fonctionnement du bras manipulateur. On exposera l’objectif visé du système et les
différentes contraintes liées au matériel et à l’environnement.
Pour lui permettre une autonomie maximale, un mode manuel s’avère plus
que nécessaire. Ce mode manuel autorise tous les mouvements possibles de manière
aisée et précise. Dans un second temps, il serait intéressant d’aller plus loin en
intégrant une manette de commande qui remplacerait la souris ou le clavier.
2.2. Environnement
La pince a pour but d’être utilisée en milieu industriel. Le logiciel doit donc
être clair, concis et fiable. Une erreur de programmation pourrait entrainer l’arrêt
d’une chaîne de production par exemple.
8
Ainsi il n’est plus possible d’effectuer la rotation définie dans la
documentation technique. Il faudra prendre en compte cette vétusté et veiller à ne pas
l’aggraver.
2.4. Planning
Le planning suivant à été réalisé :
Tâches réalisées 1 2 3 4
Programmation affichage des trames émises par
Tergane et bouton d'initialisation
Programmation des différents mouvements recti-
fication des positions prédéfinies dans le CDC
Test et modifications des mouvements et fin du
mode apprentissage
Fin et test du mode apprentissage
Planning prévu
Planning réelle
Figure 3. Planning
Nous nous sommes aperçus que le temps prévu pour réaliser le programme
était relativement cours.
9
3 . Ré alisat ion du pr ogr amme
Voici l’ensemble des éléments qui composent notre logiciel. Les différents
éléments seront activés ou désactivés au cours de l’utilisation du logiciel.
10
3.1.1. Ouverture du logiciel
Par définition le mode libre laisse à l’utilisateur toute liberté sur la commande.
Le logiciel envoie des trames au robot et celui-ci répond en réponse à ces trames. Au
fur et à mesure du programme on vérifie la réponse du robot. En cas d’erreur de
trame ou du robot, le message « Trame incorrecte » apparaît dans le label « lblEtat ».
On a la fenêtre graphique
suivante :
11
Problèmes majeurs rencontrés : la commande de la pince n’est pas une chose
aisée car elle connaît des moments de disfonctionnement.
Cinq trames sont alors envoyées au robot pour mettre le robot à la position
voulue :
12
3.1.4. Mode 3 : mode apprentissage
Le programme pourra ensuite être fermé, il sera toujours possible de lire les
cycles enregistrés.
3
A chaque fois que l’utilisateur définira un nouveau cycle, il sera créé un nouveau fichier qui portera le nom du
cycle.
13
Problèmes majeurs rencontrés : l’utilisation d’un fichier externe n’a pas été
chose facile. Des problèmes résultent toujours de cette difficulté ; notamment au
niveau de l’ouverture de fichiers qui pose des problèmes pour le mode 4.
Problèmes majeurs rencontrés : les objectifs n’ont pas été totalement atteints.
Du fait de difficultés liées à la lecture de fichiers, on ne peut lire que le dernier cycle
créé. Pour les mêmes causes on ne pourra pas lire un cycle après fermeture puis
réouverture du programme.
14
3.2. Analyse globale
On a dans un premier temps défini comment l’utilisateur était graphiquement
guidé pour gérer la pince. Cette partie permet maintenant de décrire comment sont
pris en compte les événements crées soit par le click de souris de l’utilisateur, soit
par un événement externe (réception d’une trame émise par le robot par exemple).
Début
Pas de
fermeture
de fenêtre
?
SwMarche
enclenché
?
RgChoix
Mode 1 Mode 2 Mode 3 Mode 4
Fin
15
Les appels aux sous fonctions « Action libre de l’utilisateur », « envois
d’ordres définis par le concepteur » etc. … n’en sont pas vraiment. Ces renvois
rappellent quelles actions seront gérées par l’ensemble du logiciel lors de la sélection
de tel ou tel mode.
16
3.3. Analyse fonctionnelle
On va ici expliciter les fonctions principales qui ont été programmées pour le
fonctionnement du logiciel.
Dans chaque cas un rappel des principaux paramètres utilisés sera fait, ensuite
un ordinogramme permettra de définir le fonctionnement de la sous-fonction, puis les
lignes de codes associées seront ensuite commentées.
a) Paramètres utilisés
Malgré le fait que le taux de transfert ne soit pas important, la fonction avait
parfois des ratés, et il arrivait que le premier caractère ne soit pas pris en compte.
Les deux conditions de la sous-fonction permettent de régler ce problème.
17
b) Ordinogramme
- Entier NbCaractères
Réception
- Tableau de 100 caractères
NbCar
< 25
?
Fin
c) code correspondant
{
int NbCar;
char Trame[50];
Cette fonction sera réutilisée plusieurs fois dans notre logiciel. Elle permet
d’envoyer les commandes au robot pour qu’il agisse en fonction de ce qu’ordonne
l’utilisateur. Cette fonction d’envoi de trame est donc utilisée cinq fois, pour la
pince, l’épaule, la base, le coude, la pince et le poignet.
a) Paramètres utilisés
18
leurs curseurs - une valeur qui varie dans la plage 4 correspondante à la partie que
l’on commande (Base, coude…). Cette valeur peut être récupérée par l’intermédiaire
du paramètre Value.
b) Ordinogramme
Chaîne de 5 caractères
Envoie > TrameObjet
Fin
c) Code correspondant
{
char TrameBase [5];
En premier lieu, il faut créer et ouvrir le fichier. Ceci sera fait dès lors que
l’utilisateur aura entré le nom du cycle et validé par l’appui sur le bouton la touche
entrée du clavier. Chaque nouveau cycle entrainera la création d’un nouveau fichier.
4
Plage qui correspond à ce qui à été défini dans le paragraphe 1.4
19
trame. Ainsi on envoie la trame, puis on la stocke directement dans notre fichier. On
ajoutera de plus un « if » qui détectera si l’on se trouve dans le mode apprentissage.
b) Ordinogramme
Chaîne de 5 caractères
Envoie > TrameObjet
Mode
apprentissage
?
Fin
c) code correspondant
- code pour détecter le mode apprentissage et stocker les trames.
{
if (RgChoix->ItemIndex==2) //Détection du mode apprentissage
{
n=fwrite (TrameBase,strlen(TrameBase), 1,pFichier); // écriture dans le fichier texte
}
}
- code pour créer le fichier
{
if (Key=='\r') // Détection de l'appui sur entrée
{
sprintf (NomCycle,"%s",EditApr->Text); // Récupération du nom de cycle donnée
pFichier=fopen(NomCycle,"w+t"); // Création du fichier texte
ListApr->Items->Add(NomCycle); // Actualisation de la liste défilante
20
RgChoix->Enabled=false; // Désactive le menu pour éviter la sortie
BtnRgOk->Enabled=false; //du mode apprentissage, ainsi que
} //le bouton de validation
}
3.3.4. Lecture de fichiers
Une fois les cycles sauvegardés et donc les fichiers créés, il nous reste à lire
ceux-ci et à envoyer au robot les trames sauvées.
Après avoir sélectionné le dernier mode, l’utilisateur aura à choisir par le biais
de la liste défilante quel cycle il désirera lancer. On utilisera donc l’événement
OnClick de l’objet ListApr pour déclencher la lecture du fichier.
Une fois ceci effectué on fermera le fichier pour écarter tout risque d’erreur.
b) Ordinogramme
Chaîne de 5 caractères
Lecture > TrameEnvoi
Entiers local
>i
Initialisation du bras Entier global
>n
Désactivation du menu
Récupération du nom de
cycle sélectionné
Temporisation
Fichier non
terminé
?
Fermer le fichier
21
{
char TabEnvoi [500]={0};
int i=0;
fclose(pFichier);
RgChoix->Enabled=true; // On ré-active ensuite le menu et son bouton de
validation
BtnRgOk->Enabled=true;
}
3.3.5. Sous fonctions
a) Initialisation
Pour ce mode, nous avons procédé par étape pour ramener la pince en position
initiale. Il nous a paru plus sûr d’ouvrir la pince puis de ramener le coude en position
initiale, suivi de l’épaule, de la base et enfin du poignet.
Agir ainsi nous permet, au cas ou il y aurait un objet dans la pince, de lâcher
l’objet puis de remonter le coude, l’épaule …
Déclaration privée : void __fastcall TFtergane::Init(void) ;
22
Serie->Write("E+000",5); // Ramène ensuite l'épaule
AbVEpaule->Value=0; // Actualise l'élément de commande
Sleep(75); // Temporise
AbHBase->Visible=false;
AbVCoude->Visible=false;
AbVEpaule->Visible=false; // On cache les éléments de commande
AbPince->Visible=false; //la base , l'épaule, le coude...
AbPoignet->Visible=false;
}
c) Obstruction des éléments de commande
23
ées Evénements pris en compte
tiales
Nom Variables utilisées (type, Description du comportement
portée)
25
TrameBase : chaîne locale
stockant les données à écrire
ValueChanged sur le port série et dans le Composant représentant la base du robot. Quand
fichier si besoin est. la valeur est changée, le robot change de
position.
true
e=0
TramePoignet : chaîne locale
stockant les données à écrire
ValueChanged sur le port série et dans le Composant représentant le poignet du robot.
fichier si besoin est. Quand la valeur est changée, le robot change de
position.
true
e=0
TramePince : chaîne locale
ValueChanged stockant les données à écrire Composant représentant la pince du robot.
true sur le port série et dans le Quand l’état est changé, la pince s’ouvre ou se
fichier si besoin est. ferme.
26
Conclusion
27
Ta b l e d e s i l l u s t r a t i o n s
Figure 1. Emplacement des éléments................................................................................................................. 5
Figure 2. Récapitulatif de la valeur des trames................................................................................................. 7
Figure 3. Planning ........................................................................................................................................... 9
Figure 4. Récapitulatif composants utilisés ......................................................................................................10
Figure 5. Fenêtre d'ouverture ..........................................................................................................................11
Figure 6. Mode libre.......................................................................................................................................11
Figure 7. Mode initialisation ...........................................................................................................................12
Figure 8. Mode apprentissage..........................................................................................................................13
Figure 9. Mode lecture de cycles......................................................................................................................14
Figure 10. Résumé de fonctionnement..............................................................................................................15
Figure 11. Ordinogramme de la réception .......................................................................................................18
Figure 12. Code de la réception.......................................................................................................................18
Figure 13. Ordinogramme Envoie....................................................................................................................19
Figure 14. Nouvelle ordinogramme de la fonction Envoie ................................................................................20
Figure 15. Ordinogramme lecture de fichiers...................................................................................................21
Figure 16. Propriétés des composants..............................................................................................................26
28
An n e x e s
Annexes__________________________________________________________________ 29
1. Programme complet ____________________________________________________ 30
1.1. Fichier C++________________________________________________________________30
1.2. Fichier H __________________________________________________________________35
2. Rappel des objets_______________________________________________________ 37
3. Rappel des propriétés et classes utilisées ____________________________________ 37
29
1. P r ogr amme c omple t
Voici les lignes de codes qui permettent d’obtenir le programme décrit dans ce
dossier.
#include "U_Tergane2.h"
#include "stdio.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CPort"
#pragma link "_GClass"
#pragma link "AbCBitBt"
#pragma link "AbDBCtrls"
#pragma link "AbDial"
#pragma link "AbVSlide"
#pragma link "AbHSlide"
#pragma link "AbHMeter"
#pragma link "AbSwitch"
#pragma link "AbBar"
#pragma link "AbLED"
#pragma resource "*.dfm"
TFtergane *Ftergane;
//---------------------------------------------------------------------------
__fastcall TFtergane::TFtergane(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TFtergane::FormActivate(TObject *Sender)
{
Serie->Connected=true; // Ouverture du port série
30
lblEtat->Caption=Trame; // On l'écrit sur le label
LedOn->Checked=true; // Puis on active la led pour indiquer que tout est correct
}
}
//---------------------------------------------------------------------------
void __fastcall TFtergane::AbHBaseValueChanged(TObject *Sender)
{
char TrameBase[5];
sprintf(TrameCoude,"C%+04d",(int)AbVCoude->Value);
Serie->Write(TrameCoude,5);
if(RgChoix->ItemIndex==2)
{
n=fwrite(TrameCoude, strlen(TrameCoude), 1, pFichier);
}
}
//---------------------------------------------------------------------------
void __fastcall TFtergane::AbVEpauleValueChanged(TObject *Sender)
{
char TrameEpaule[5]; // Idem que précédement pour l'épaule
sprintf(TrameEpaule,"E%+04d",(int)AbVEpaule->Value);
Serie->Write(TrameEpaule,5);
if(RgChoix->ItemIndex==2)
{
n=fwrite(TrameEpaule, strlen(TrameEpaule), 1, pFichier);
}
}
//---------------------------------------------------------------------------
void __fastcall TFtergane::AbPoignetValueChanged(TObject *Sender)
{
char TramePoignet[5]; // Idem que précédement pour le poignet
sprintf(TramePoignet,"F%+04d",(int)AbPoignet->Value);
Serie->Write(TramePoignet,5);
if(RgChoix->ItemIndex==2)
{
n=fwrite(TramePoignet, strlen(TramePoignet), 1, pFichier);
}
}
31
//---------------------------------------------------------------------------
void __fastcall TFtergane::SwMarcheClick(TObject *Sender)
{
if(SwMarche->Checked==true) // Détecte l'activation du logiciel
{
CommandeVoir(); // Affiche les éléments de commande
RgChoix->Enabled=true; // Affiche RadioGroupe et bouton OK
BtnRgOk->Enabled=true;
}
32
if(RgChoix->ItemIndex==3) // Détection mode lecture cycle
{
CommandeCache(); // Cache les éléments de commande
//EditApr->Visible=false; // Cache la saisi du nom de cycle
ListApr->Visible=true; // Affiche la liste défilante pour choisir le cycle
//BtnStop->Visible=false; // Cache le bouton d'arrêt
}
}
//---------------------------------------------------------------------------
void __fastcall TFtergane::BtnStopClick(TObject *Sender)
{
CommandeCache(); // Cache les élément de commande
33
}
else // SINON on ferme le fichier
fclose(pFichier);
}
AbHBase->Visible=false;
AbVCoude->Visible=false;
AbVEpaule->Visible=false; // On cache les éléments de commande
34
AbPince->Visible=false; //la base , l'épaule, le coude...
AbPoignet->Visible=false;
1.2. Fichier H
class TFtergane : public TForm
{
__published: // Composants gérés par l'EDI
TComPort *Serie;
TLabel *lblEtat;
TLabel *lblTxtEtat;
TAbHSlider *AbHBase;
TAbRockerSwitch *SwMarche;
TAbVSlider *AbVCoude;
TAbDBVSlider *AbVEpaule;
TAbDial *AbPoignet;
TAbDBLED *LedOn;
TRadioGroup *RgChoix;
TButton *BtnRgOk;
TEdit *EditApr;
TAbColBitBtn *BtnStop;
TComboBox *ListApr;
TAbDBToggleSwitch *AbPince;
void __fastcall FormActivate(TObject *Sender);
void __fastcall SerieRxFlag(TObject *Sender);
void __fastcall AbHBaseValueChanged(TObject *Sender);
void __fastcall AbVCoudeValueChanged(TObject *Sender);
void __fastcall AbVEpauleValueChanged(TObject *Sender);
void __fastcall AbPoignetValueChanged(TObject *Sender);
void __fastcall SwMarcheClick(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall BtnRgOkClick(TObject *Sender);
void __fastcall BtnStopClick(TObject *Sender);
void __fastcall EditAprKeyPress(TObject *Sender, char &Key);
void __fastcall ListAprSelect(TObject *Sender);
void __fastcall AbPinceStatusChanged(TObject *Sender);
private: // Déclarations de l'utilisateur
FILE *pFichier;
char NomCycle[150];
int n;
int EtatPince;
35
};
//---------------------------------------------------------------------------
extern PACKAGE TFtergane *Ftergane;
//---------------------------------------------------------------------------
#endif
36
2 . Rappe l de s obje t s
37
ées Evénements pris en compte
tiales
Nom Variables utilisées (type, Description du comportement
portée)
38
false
Permet de valider chaque action de l’utilisateur :
OnClick -------- nom de cycle, mode …
false
39
e=0
TrameBase : chaîne locale
stockant les données à écrire
ValueChanged sur le port série et dans le Composant représentant la base du robot. Quand
fichier si besoin est. la valeur est changée, le robot change de
position.
true
e=0
TramePoignet : chaîne locale
stockant les données à écrire
ValueChanged sur le port série et dans le Composant représentant le poignet du robot.
fichier si besoin est. Quand la valeur est changée, le robot change de
position.
true
e=0
TramePince : chaîne locale
ValueChanged stockant les données à écrire Composant représentant la pince du robot.
true sur le port série et dans le Quand l’état est changé, la pince s’ouvre ou se
fichier si besoin est. ferme.
40