Title: Cration dA'P'I' JAVA pour la programmation de systmes robotiss
1Création dA.P.I. JAVA pour la programmation de
systèmes robotisés
PIP 2004 à M.I.
- DAVID BOREL
-
- EMILE-HENRI BALLAND
2Sommaire
- Introduction
- Utilisation du port série
- Interface de la table traçante
- Interface du Bras Robotisé
- Conclusion
3 Introduction
- Le projet
- Créer une interface Java permettant de piloter
des robots en saffranchissant des problèmes
machines - Objectifs
- Mettre en place des travaux pratiques
dinitiation à la programmation en java - Plus visuels
- Plus concrets
- Les moyens
- Les robots retenus sont
- Une table traçante Hewlett-Packard 7475A
- Un bras robotisé LynxMotion 5 axes
4I. La communication via le port série
- Les deux automates sont reliés au PC via un port
série (liaison asynchrone) et un câble de type
RS-232 - Nécessité dy faire transiter les informations de
déplacement sous la bonne forme (débits, bits de
stop, bits de données, parité) - Problème la gestion du port série sous JAVA
(package javax.comm) est prévue pour plateformes
Windows, Solaris mais pas pour Linux - 2 solutions envisagées
- Adapter le package javax.comm à la plateforme
Linux - Utiliser un code C sous java pour communiquer
avec le port Serie
5I. La communication via le port série
- Adaptation du package javax.comm à
lenvironnement Linux - Utilisation dune API créée par Kevin Hester en
1999 CommAPI - Distribuée sur le site www.geeksville.com/kevin
h/linuxcomm.html - Ajouter le fichier comm.jar dans le CLASSPATH
- Création de librairies dynamiques à partir de
sources C appelée RXTX - Télécharger et compiler les sources RXTX
- Placer les librairies dynamiques SerialPort.so et
ParralelPort.so dans le répertoire - A partir de là on peut utiliser toutes les
classes du package javax.comm
6I. La communication via le port série
- Exemple de classe utilisant javax.comm
- import javax.comm.
- public class ConnexionSerie
- ()
7I. La communication via le port série
- Utilisation dun code C à laide de JNI (Java
Native Interface) - Classe CommPortSerie.java
- public class CommPortSerie
- public CommPortSerie()
-
- public native void send(String message)
- static
- System.loadLibrary("serie")
-
- public void envoyerMessage(String message)
- new CommPortSerie().send(message)
-
8I. La communication via le port série
- Utilisation dun code C à laide de JNI (Java
Native Interface) Suite - Fichier CommPortSerie.h généré automatiquement
par la commande javah jni CommPortSerie - Fichier CommPortSerie.c implantation du code de
communication avec le port série. - include ltjni.hgt //librairie relative au JNI
- include "CommPortSerie.h " //signatures issue de
java - include lttermios.hgt //librairie relative au port
série - ()
9I. La communication via le port série
- Utilisation dun code C à laide de JNI (Java
Native Interface) Suite - Compilation du fichier C
- gcc fpic shared I /usr/local/java/include I
/usr/local/java/include/linux CommPortSerie.c o
libserie.so - Ajouter libserie.so dans le path LD_LIBRARY_PATH
- Export LD_LIBRARY_PATH /home/dborel/monrepertoir
e
10I. La communication via le port série
- Et finalement
- Grâce à ces deux méthodes nous sommes capables
denvoyer un message via le port série avec JAVA.
Le tout maintenant est denvoyer un message qui
soit interprétable par le robot. - Table traçante langage HPGL (Hewlett Packard
Graphic Language) - Langage utilisé pour piloter les anciennes tables
traçantes - Evolution ensuite en HPGL-2 utilisant de
nouvelles fonctions - Abandonné aujourdhui pour utiliser le langage
JCL - Bras Robotisé commandé par un microcontrôleur
programmable - Nécessité de créer notre propre langage pour
communiquer avec le robot - Protocole simple permettant dactionner les
servomoteurs
11II. La table traçante
- Hewlett Packard 7475A (alias le Stradivarius du
plotter )
12II. La table traçante
- La table traçante
- Communication via un port série standard (RS-232)
- Caroussel de 6 feutres
- Dessin sur feuilles A4
- Le langage de programmation
- HPGL (Hewlett Packard Graphic Language)
- Principe commandes en langage ASCII séparées
par des - Principales commandes
- PU Pen Up
- PD Pen Down
- PA Plot Absolute
- PR Plot Relative
- CI CIrcle
- Etc..
13II. La table traçante
- Exemple de programme HPGL
- PA500,500PD500,1000
- Trace une ligne reliant les points A(500,500) et
B(500,1000).
14II. La table traçante
- Lobjectif
- Envoyer au plotter un code HPGL correspondant aux
formes graphiques de base - Ecrire une A.P.I JAVA faisant office dinterface
entre le PC et le plotter afin de saffranchir de
la programmation HPGL - Le protocole de communication
- Communication via le port série avec pour
paramètres - 9600 bauds
- 8 bits de données
- 1 bit de stop
- Pas de bit de parité
15II. La table traçante
- API Java côté PC
- Utilisation et amélioration du package n6k.formes
afin de reprendre les formes graphiques de bases
et de disposer dune fenêtre d aperçu avant
impression . - Les classes disponibles de lAPI
- ObjetGraphique
- Point
- Ligne
- Cercle
- Fenetre
- ArcCercle
- Texte
- CommPortSerie
- Par combinaison de ces formes de bases on peut
tracer tout type de graphisme.
Classes ajoutées au package
16II. La table traçante
- API Java côté PC suite
- La classe CommPortSerie.java gère la
communication série ave la table traçante et
traduit en langage HPGL les différents objets
graphiques
17II. La table traçante
- API Java côté PC suite
- Diagramme UML simplifié (fait sous Paint désolé)
18II. La table traçante
- Exemple de code pour contrôler la table
- Problèmes de communication et de commande
transparents pour lutilisateur - public class Test
- public static void main(String args)
- Ligne l1 new Ligne(320,0,320,480)
- Ligne l2 new Ligne(0,240,640,240)
- Cercle c1 new Cercle(320,240,38)
- Texte t1 new Texte(10,10,"Page Test")
- Point p1 new Point(400,400)
- Point p2 new Point(380,380)
- Point p3 new Point(380,420)
- Point p4 new Point(420,420)
- Point p5 new Point(420,380)
- ArcCercle a new ArcCercle(320,240,20,0,90)
-
19II. La table traçante
- Attention DEMONSTRATION !!!
- Démonstration avec le code précédent
- Objets utilisables en TP par exemple pour créer
des dessins plus complexes (carré, maison,
spirales)
20III. Le bras robotisé
- LynxMotion 5 (alias Lynx )
21III. Le bras robotisé
- Le robot
- Fabriqué par Lynxmotion (société américaine)
- Commandé chez un revendeur basé à Paris
- Articulé par 5 axes de rotation dirigés par des
servomoteurs de type HS-422 ayant une course de
180 - Commandé par un microcontrôleur de type OOpic
- Le microcontrôleur OOpic
- 31 entrées/sorties, capacité 4096 instructions
pour un débit de 2000 instructions/sec. - Programmable par différents langages Visual
Basic, C ou Java légèrement modifiés - Programmé au préalable par notre programme
dinterfaçage
22III. Le bras robotisé
- Lobjectif
- Programmer le microcontrôleur de telle sorte
quil attende la réception dinformation
provenant du port série pour effectuer 3 types
opérations - Activer/désactiver un servomoteur
- Positionner un servomoteur
- Ecrire une A.P.I JAVA faisant office dinterface
entre le PC et le microcontrôleur - Traduction de données sources (booléen, angle) en
données compatibles avec notre protocole de
communication.
23III. Le bras robotisé
- Le protocole de communication
- Lidée est de coder les informations utiles sur
un minimum despace mémoire - On envoie donc les informations relatives au
servomoteur et au déplacement sous forme de deux
octets - 1 octet didentification et dactivation/désactiva
tion - ? Un nombre de 13 à 17 pour choisir un moteur et
un chiffre 0 ou 1 pour lactiver ou non - (codage de 130 à 171 pour ne pas confondre avec
loctet de positionnement). - Ex 130 désactiver le servo n1 (identifié 13)
- 151 activer le servo n3 (identifié 15)
- 1 octet de positionnement
- ? Un nombre de 0 à 127 correspondant à la valeur
de la position du servomoteur -
- Ex 10010111 00011110
- 151
30 - Activation du servomoteur n3
et mise à la position 30
24III. Le bras robotisé
- Le codage du microcontrôleur
- Téléchargements grâce à un programme fourni par
le constructeur - Se charge de compiler et denvoyer au
microcontrôleur le code assembleur correspondant - Fonctionnement de linterface au niveau
microcontrôleur - Création et initialisation des servomoteurs
connectés - Initialisation de la connexion série
- Attente dun message provenant du PC
- Si ce message est compris entre 130 et 171
information dactivation - Sil est compris entre 0 et 126 information de
positionnement - Rem Si une information de positionnement arrive
alors quaucun servo na été activé, le robot ne
va pas se déplacer. - Le programme ooPIC
25III. Le bras robotisé
- Le codage de linterface JAVA (côté PC)
- Une classe générique ServoMoteur.java dont les
servomoteurs spécifiques hériteront
ServoMoteur.java
-identifiant int -position int -isActivated
boolean -connectionSerie
positionner(int angle) tourner(int angle)
void getPosition() int isActivated() boolean
26III. Le bras robotisé
- Le codage de linterface JAVA (côté PC)
- Une classe pour chaque servo, héritant de
ServoMoteur.java, ayant une méthode spécifique
didentification
ServoCoude.java
-identifiant int -position int -isActivated
boolean -serie CommPortSerie
activer() void desactiver() void
27III. Le bras robotisé
- Le codage de linterface JAVA (côté PC)
- Diagramme UML simplifié (refait sous Paint
redésolé)
28III. Le bras robotisé
- Exemple de code pour contrôler le robot
- Problèmes de communication et de commande
transparents pour lutilisateur - public class Test
- public void main(String args)
- //Création des objets
- ServoSocle socle new ServoSocle()
- ServoPince pince new ServoPince()
- //Activation des servos
- socle.activer()
- pince.activer()
- //Positionnement des servos
- socle.positionner(30)
- pince.ouvrir()
- socle.desactiver()
-
29III. Le bras robotisé
- Attention DEMONSTRATION !!!
- Il est possible de combiner une infinité de
mouvement sans risque de congestionner le
microcontrôleur. - A charge pour déventuels élèves dutiliser lAPI
pour créer des mouvements plus élaborés. -
30Conclusion
- Ce projet nous a donné lopportunité
dappréhender des problèmes nouveaux - Utilisation du port série avec ses difficultés
liées au système dexploitation - Programmation bas-niveau
- Utilisation de méthodes natives
- Utilisation dun microcontrôleur
- Problèmes liés à sa programmation
- Problèmes liés à son utilisation
- Volonté dêtre concis dans le but de permettre
des utilisations ultérieurs de nos classes