Institut National des Sciences Appliquées de Toulouse BE Systèmes

publicité
Institut National des Sciences Appliquées de Toulouse
BE Systèmes Autonomes
FOLLOW THE LINE
an autonomous robot project
Badr Bouaddi <[email protected]>
Simon Bouvot <[email protected]>
Brice Cavelier <[email protected]>
Yassine Chemchoum <[email protected]>
Héléna Creixell <[email protected]>
Florent Dallet <[email protected]>
Encadrant : Christophe Escriba
Fonctions
Noms
Date
Software
Bouaddi/Dallet
12/01/14
US
Bouvot/Cavelier
11/01/14
IR
Chemchoum/Creixell
12/01/14
Signature
Table des matières
1 Ultrason
1.1 Emission . . . . . . . . . . . . . . . .
1.1.1 Montage oscillateur à base de
1.1.2 Dimensionnement . . . . . .
1.2 Réception . . . . . . . . . . . . . . .
1.2.1 Chaine amplificatrice . . . . .
1.2.2 Détecteur de crête . . . . . .
1.2.3 Le comparateur . . . . . . . .
1.2.4 Conditionnement du signal .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
3
4
4
4
6
6
2 Infrarouge
2.1 Présentation . . . . . . . . . . . . . . . . . . . .
2.2 Principe de fonctionnement . . . . . . . . . . .
2.3 Emission . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Générateur du signal carré . . . . . . .
2.3.2 Amplification et conversion du signal . .
2.4 Réception . . . . . . . . . . . . . . . . . . . . .
2.4.1 Conversion, filtrage et écrêtage du signal
2.4.2 Comparateur hystérésis . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7
7
7
7
7
8
9
9
10
. . . .
NE555
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
.
.
.
.
.
.
.
.
3 Software côté microcontrôleur PIC18f2580
4 Software embarqué sur le PC
4.1 Une IHM . . . . . . . . . . . . . . . . . . . . . . .
4.1.1 Développement de driver des commandes de
4.1.2 Développement d’IHM sous python . . . . .
4.2 Commandes du robot . . . . . . . . . . . . . . . .
2
11
. . . . . . . . . .
robot portables
. . . . . . . . . .
. . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
15
16
Chapitre 1
Ultrason
1.1
1.1.1
Emission
Montage oscillateur à base de NE555
Le montage émetteur doit osciller à 40kHz, pour cela on utilise un NE555 (ou équivalent LM555)
monté en astable qui génère un signal rectangulaire d’amplitude 5V. Le montage suivant a été réalisé.
Figure 1.1 – Montage astable
La documentation constructeur nous propose les 2 relations suivantes afin de calculer le rapport cyclique
et la fréquence d’oscillation.
f=
1.1.2
1.44
(RA + 2 · RB ) · C
D=
RB
RA + 2 · RB
Dimensionnement
On veut une fréquence f = 40kHz et un rapport cyclique de D = 50%. En utilisant les formules
proposées, on trouve le compromis suivant :
D=
22k
= 48.2%
1.65k + 2 · 22k
f=
3
1.44
= 38.5kHz
(1.65k + 2 · 22k) · (820p)
BE Systèmes Autonomes
INSA Toulouse
Figure 1.2 – Montage oscillateur à 40kHz
On note qu’après avoir réglé manuellement grâce à un potentiomètre la valeur de RA = 1.65kΩ, on met
2 résistances de 3.3kΩ en parallèle. On installe en sortie de l’oscillateur un montage émetteur commun
pour amplifier le signal émis.
1.2
1.2.1
Réception
Chaine amplificatrice
Le récepteur capte le signal à 40kHz émis. Un suiveur est installé ensuite pour adapter l’impédance.
S’en suit deux amplificateurs inverseurs de gains :
G1 = −
220
= 11
20
G2 = −
47k
= 47
1k
Soit une amplification de 517 (54dB). On a placé 2 AOP pour respecter le produit gain-bande G · B ≤
3M , en effet :
G1 · B1 = 11 · 40k = 440k < 3M
G2 · B2 = 47 · 40k = 1.88M < 3M
Figure 1.3 – Chaine amplificatrice
1.2.2
Détecteur de crête
Après la chaîne d’amplification se trouve un détecteur de crêtes, montage composé d’une diode et de la
mise en parallèle d’une résistance et d’un condensateur. Le principe consiste détecter la valeur maximale
du signal sinusoïdale. Cette valeur sera exploitée en sortie du montage avec un comparateur.
5ESE - groupe 2
Page 4/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
Pourquoi ce montage ? Si le signal de l’émetteur rencontre un obstacle, il sera réfléchit puis capté
par le récepteur. En sortie de la chaîne d’amplification, on aura alors un signal identique au signal émit
mais avec une amplitude différente. L’amplitude sera en fait l’image de la distance de l’obstacle. Plus
l’obstacle est loin, plus l’amplitude sera petite. Étant donné que nous souhaitons réaliser un détecteur
tout ou rien (un obstacle ou pas d’obstacle), nous allons prélever la valeur de l’amplitude du signal, puis
la comparer à une valeur Vref, qui sera réglable avec un potentiomètre. Ainsi, on pourra régler la distance
de détection.
Figure 1.4 – Détecteur de crête
Voici le signal avant et après le détecteur de crêtes :
Figure 1.5 – Signal avant et après détection
On remarque que pour une amplitude de 12V, on obtient un signal constant de 11,3V. La différence
est due à la tension de seuil de la diode. Pour confirmer le fonctionnement de notre détecteur, on change
la valeur du signal d’entrée.
5ESE - groupe 2
Page 5/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
Figure 1.6 – Signal plus faible (5V) : impact de la diode
Là encore on remarque une différence due à la diode, cependant Vsortie a bien suivie le changement
d’amplitude.
1.2.3
Le comparateur
La comparaison est réalisée avec un simple pont diviseur pour obtenir Vref , et un AOP pour comparer
les deux valeurs. L’AOP étant alimenté en sysmétrique avec des tension de ±12V , nous aurons en sortie :
– +12V si Vsortie > Vref
– -12V si Vsortie < Vref
Etant donné que notre signal va être exploité par un pic, nous devons le reconditionner pour obtenir :
– 5V si Vsortie > Vref (si un obstacle est détecté)
– 0V si Vsortie < Vref (s’il n’y a pas d’obstacle)
1.2.4
Conditionnement du signal
Pour cela nous réalisons un montage non inverseur à base de transistors (la résistance de 470Ω en sortie
du montage sert à limiter le courant en entrée du pic).
Sur la figure ci dessous on remarque l’effet des transistors :
Figure 1.7 – Effet des transistors sur le signal
Avant les transistors le signal varie entre 0 et 12V. Après, il est adapté à l’entrée d’un pic, il varie entre
0 et 5V.
Remarque : le retard de 1µs n’a pas été observé en réel. Il est certainement dû à un réglage du simulateur.
5ESE - groupe 2
Page 6/ 27
20 janvier 2014
Chapitre 2
Infrarouge
2.1
Présentation
Cette partie consiste à interfacer les capteurs IR connecté à une carte de commande par Microcontrôleur, de sorte qu’on peut faire distinction entre surface noire et blanche pour garantir que le robot suit
la ligne.
Le principe de la détection est de pouvoir avoir une tension, en front montant ou descendant lors du
franchissement de ligne. En effet il apparait que c’est compliqué d’utiliser les tensions analogiques générées
par les capteurs IR, du coup il fallait utiliser une chaine d’instrumentation vu la facilité de traiter des
niveaux logique.
Il a donc été prévu de fournir directement à la carte de commande une tension qui vaut soit 0 ou 5V
en sortie de la carte IR. L’acquisition de cette tension par le microcontrôleur permettra de prendre les
décisions nécessaires pour le suivie de la ligne.
2.2
Principe de fonctionnement
Ce détecteur infrarouge est sensible à la couleur pour caractériser les lignes, donc on se sert des
différences de coefficients d’absorption des ondes infra-rouge pour les deux couleurs blanc et noire. On
peut considérer que le blanc reflète entièrement les ondes émises alors que le noir absorbe plus.
Le principe des capteurs est le suivant : ils sont composés d’une diode émettrice et une autre réceptrice,
disposés de sorte que le faisceau émis, le capteur étant perpendiculaire à une surface plane, soit réfléchi
sur la diode réceptrice.
Pour éviter d’être trop sensible à la lumière ambiante que peut être forte en intensité, il ne faut pas
utiliser une émission continue, mais plutôt une émission par porteuse. Le récepteur peut alors être accordé
sur la fréquence d’émission et on atteint des sensibilités importantes.
2.3
2.3.1
Emission
Générateur du signal carré
Pour pouvoir émettre, il est intéressant d’émettre en train d’onde plutôt qu’une émission continue pour
éviter l’impact de la lumière ambiante dans la réception. De plus, la diode infrarouge accepte des courants
maximums pendant un temps très court, et il nous intéresse aussi d’émettre à grande puissance vu que
la distance de détection est lié à l’énergie émission. Cette distance se limite à quelques centimètres. Elle
peut être nettement augmentée si l’on met les trois leds IR en série.
Dans cette optique, et pour rendre notre circuit optimal on a choisi de mettre les trois diodes émettrices
en série pour n’utiliser qu’un seul générateur de signal carré.
7
BE Systèmes Autonomes
INSA Toulouse
Pour ce faire, on a adopté un montage oscillateur à base d’un NE555 en mode astable pour générer un
signal carré (comme pour le capteur à ultrason), on voulait cadencer l’émission à une fréquence de 1kHz,
et pour avoir un rapport cyclique de 50% on a dimensionné nos composants comme suit :
Figure 2.1 – Générateur de signal carré à 1kHz
f=
1
1
1
=
= 1kHz
=
T
TH + TB
0.7 · (RA + RB ) · C
RA + RB = 0.7 · f · C
Pour une valeur de C=10nF, on obtient :
RA + RB = 142.85kΩ
Par la suite, on a choisi les valeurs des résistances suivantes :
RA = 56kΩ
RB = 82kΩ
On obtient en sortie :
Figure 2.2 – Signal en sortie de l’oscillateur
2.3.2
Amplification et conversion du signal
A la sortie du NE555 on a un courant faible par rapport à ce qu’on voulait pour émettre à grande
puissance. Donc on décidait d’utiliser un montage amplificateur de courant. Ainsi, d’après la Datasheet
de la diode IR émettrice SFH 4585, on a un courant de 100 mA "Forward curent ; If" qui correspond à
un "Forward Voltage ; Vf" de 1.5V.
5ESE - groupe 2
Page 8/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
Ce montage donc avec un transistor NPN 2N1711, permet d’amplifier le courant de sorte que les diodes
IR puissent émettre avec une grande puissance et convertit le signal électrique en signal optique.
Un calcul rapide dans cette branche nous donne les valeurs suivantes des résistances coté base et
émetteur :
R1 = 18kΩ
R3 = 2.2kΩ
2.4
2.4.1
Réception
Conversion, filtrage et écrêtage du signal
La conversion Optique/électrique se fait par l’intermédiaire d’une photodiode. Le principe est de détecter le courant inverse traversant la photodiode, qui varie en fonction de l’intensité du signal reçu.
Figure 2.3 – Chaine de réception IR
La réception du signal calé sur 1KHz permet, se fait à l’aide des photodiodes SFH2500FA et est suivi
par un filtrage pour d’éliminer le bruit dans le signal délivré par la photodiode après conversion.
Ensuite, on commence par redresser la tension de sortie du filtre VS. Le redressement se fait par une
diode D, une résistance Rr et un condensateur Cr. La tension VS charge le condensateur Cr lorsque VS
est positif, et le condensateur se décharge à travers Rr lorsque VS est négatif, la diode protégeant la
charge de Cr. C’est en utilisant la décharge de Cr qu’on peut obtenir un signal quasi constant, un signal
écrêté.
Figure 2.4 – Chaine de réception IR
5ESE - groupe 2
Page 9/ 27
20 janvier 2014
BE Systèmes Autonomes
2.4.2
INSA Toulouse
Comparateur hystérésis
On peut se contenter d’un simple comparateur à seuil pour décider si la zone visée est noire ou blanche.
Le principe est de comparer le signal reçu redressé (la tension VR) avec une tension de référence Vref , à
l’aide d’un comparateur.
Pour cela, nous utilisons l’amplificateur opérationnel LM311P : il contient 4 AOP. Pour créer la tension
de référence, on utilise un pont diviseur de tension réglable par une résistance variable. Cette dernière est
en parallèle avec une capacité pour pouvoir utiliser le maximum de la course de l’ajustable qui permet
un réglage précis.
Figure 2.5 – Pas de détection : 0V transmis au pic
Figure 2.6 – Détection : 5V transmis au pic
5ESE - groupe 2
Page 10/ 27
20 janvier 2014
Chapitre 3
Software côté microcontrôleur
PIC18f2580
Le microcontrôleur PIC18f2580 joue le rôle d’intermédiaire entre les capteurs et le PC. Le but de son
utilisation est ici de sérialiser les données issues des capteurs pour les envoyer par UART au PC.
Il a donc fallu se mettre d’accord sur le nombre de capteurs utilisés dans le but de définir un format
de trame envoyé par l’UART adéquat.
Nous avons 4 capteurs : 3 capteurs infrarouges pour le suivi de ligne et un capteur pour la détection
d’obstacle.
Le format suivant des trames a donc été choisi :
Stop
1
1
1
CAP1US
CAP3IR
CAP2IR
CAP1IR
Start
On dénombre 9 bits car l’UART utilisé sur le PIC18f2580 envoie 9 bits et permet de mettre ce 9ème
bit à une valeur caractéristique. Dans notre cas, nous n’utilisons pas ce bit, il n’est donc pas actif ce qui
se traduit par un ’0’ logique lorsqu’il n’est affecté à aucune valeur caractéristique. Nous utiliserons donc
ce bit (qui est envoyé avant les 8 autres) comme bit de START.
Les informations des capteurs sont ensuite envoyé mais suivi par 3 bits mis à ’1’. Le dernier bit sera
mis à 0 et pourra faire office de bit de STOP. Le chronogramme suivant témoigne de ce qu’il se passe en
sortie de notre microcontrôleur PIC :
Figure 3.1 – Chronogramme d’une trame série émise par PIC18f2580
Les trames séries maintenant définies, il ne reste qu’à définir deux choses :
– Les pins d’entrées choisies pour accueillir l’information issue des capteurs
– L’algorithme applicatif pour exploiter correctement ces "drivers"
Intéressons nous dans un premier temps aux pin I/O à configurer. Nous choisissons de prendre les pattes
d’entrées RA.0 à RA.3 comme entrées digitales. Ces entrées marchant à un niveau TTL, nous aurons
donc un ’0’ logique lorsqu’on appliquera 0V à leurs bornes et un ’1’ logique lorsque 5V sera appliqué. De
plus nous avons précédemment établi qu’un UART était nécessaire pour la transmission des data séries,
nous choisissons donc l’UART0 qui est configuré pour émettre sur la patte PORTC.6
11
BE Systèmes Autonomes
INSA Toulouse
Voici donc la configuration choisie des I/O :
Fonction
Port
Numéro de patte
Capteur Infrarouge 1
A
0
Capteur Infrarouge 2
A
1
Capteur Infrarouge 3
A
2
Capteur Ultrason 1
A
3
UART en transmission(TX)
C
6
Remarque : Lors de l’initialisation du microcontrôleur certaines pattes (comme RA.0 à RA.3) sont par
défaut initialisées pour fonctionner avec l’ADC donc avec des signaux analogiques et non digitales. Il faut
donc modifier le registre ADCON1 dans le but d’utiliser ces pattes comme "digital input" et non "analog
input".
Il ne reste maintenant qu’à définir l’algorithme de notre programme.
Figure 3.2 – Schéma fonctionnel du programme principal
Le programme principal ne fait que scruter l’état des capteurs puis toutes les 65ms un Timer entre en
interruption pour envoyer les données sérialisées vers le PC. Par exemple, lorsque le capteur ultrason détecte un obstacle, celui-ci met quelques fois quelques µs avant de se stabiliser à 5V, d’où la nécessité de ne
pas envoyer une trame série à chaque fois que l’état d’un capteur change. Ce problème pouvait également
être réglé par l’ajout d’un filtre anti-rebond avec le PIC mais cette solution était plus confortable à mettre
en pratique. De plus le PC ne doit pas recevoir en permanence des trames séries car toute l’intelligence
du robot est exécuté dessus, il faut donc qu’il reçoive des trames séries espacées dans le temps. Ces 2
nécessités nous ont conduit à mettre un temps d’échantillonnage compris entre 65µs et 250µs.
5ESE - groupe 2
Page 12/ 27
20 janvier 2014
Chapitre 4
Software embarqué sur le PC
Sur la partie software, l’objectif fixé en début de projet, est que l’ordinateur fourni permette de contrôler
le robot grâce aux informations reçues par le microcontrôleur, il doit également permettre d’afficher une
interface homme/machine.
Nous disposons du matériel suivant afin d’attendre cet objectif :
– Un ordinateur DELL sous Windows XP avec un port série et plusieurs ports USB.
– Une bibliothèque de commande du robot, fourni par le constructeur, compilé sous WINDOWS XP
sans fichier source.
– UneUn boitier « ER1 ROBOT CONTROL MODULE », qui reçoit en entrée des données séries
grâce à une puce FTDI « FT2332AM ». Il envoie des signaux PWM avec drivers « ALLEGRO
A3959SLB »
4.1
Une IHM
Nous disposons de la bibliothèque « TKINTER » pour développer une IHM sur la machine fournie.
TKINTER est une bibliothèque graphique libre d’origine pour le langage Python, permettant la création
d’interface graphique. L’inconvénient de cette bibliothèque est que la version installée sur notre machine
est très limitée graphiquement comparée à des bibliothèques graphiques récentes comme "Qt". Ce langage
donne de meilleurs résultats qu’une bibliothèque graphique. C’est un ensemble de bibliothèques qui met
à disposition un ensemble d’outils pour développer des IHM efficaces et modernes.
Cependant pour ce projet nos droits sur la machine sont très limités, on ne peut pas installer de nouvelle
bibliothèque sans être administrateur.
C’est pour cette raison que j’ai décidé de tenter de développer le projet sur ma machine afin de pouvoir
utiliser QT, pour cela il fallait d’abord créer le driver de commandes du robot car la bibliothèque fournie
sur la machine initiale est non portable.
4.1.1
Développement de driver des commandes de robot portables
Afin de vérifier que cela est possible, il faut chercher la liste des valeurs de commande du robot à envoyer
au boitier ER1. Un article trouvé sur internet a permis de lister toutes ces commandes par un travail
de reverse engineering (en observant les commandes envoyées par les drivers fournis par le constructeur)
(voir Annexe).
A cette étape, il suffit de savoir comment ouvrir une communication série avec une puce FTDI pour
pouvoir communiquer avec le robot. Les fonctions importantes de mon code sont les suivantes :
– Ouverture de la liaison
– Paramétrage de la liaison
– Envoi des commandes
Première fonction : Ouverture de la liaison
Sous Linux, chaque port série de notre machine est représenté par un fichier de périphérique situé dans
le répertoire /dev à côté de dizaines d’autres :
13
BE Systèmes Autonomes
–
–
–
–
/dev/ttyS0
/dev/ttyS1
/dev/ttyS2
/dev/ttyS3
correspond
correspond
correspond
correspond
INSA Toulouse
à
à
à
à
COM1
COM2
COM3
COM4
Grâce à la bibliothèque « Termios » sur linux, on peut ouvrir un port COM comme un fichier :
Open(”/dev/ttyU SB0”, O_RDW R | O_N ON BLOCK | O_N DELAY );
Une fois que le port est ouvert, on peut y lire et y écrire des caractères au moyen des primitives read()
et write().
Deuxième fonction : Paramétrage de la liaison
Dans la norme POSIX, tous les paramètres d’une liaison sont regroupés dans une structure appelée
termios et définie dans le fichier < termios.h > qu’il nous faut donc inclure.
Cette structure comporte les champs suivant :
struct termios {
tcflag_t c_iflag; /* input mode flags */
tcflag_t c_oflag; /* output mode flags */
tcflag_t c_cflag; /* control mode flags */
tcflag_t c_lflag; /* local mode flags */
cc_t c_line; /* line discipline */
cc_t c_cc[NCCS]; /* control characters */
};
La fonction tcgetattr permet d’obtenir les paramètres actuels d’une liaison. En voici le prototype,
extrait du man :
int tcgetattr ( int fd, struct termios *termios_p );
De plus, avec l’article de reverse engineering nous avons pu récupérer tous les paramètres de la liaison :
Paramètre
Mode
Bit de Parité
SANS
Bit de Stop
1 bit de stop
Taille de trame
8 bit
Flow control
Sans
Timeout
0.5 seconds
Vitesse de réception
9600 bits/s
Vitesse d’émission
9600 bits/s
Troisième fonction : Envoi des commandes
Pour envoyer une commande, je me suis servi de deux types de fonction, d’une part une méthode qui
remplit une structure de commande, d’autre part celle qui l’envoi. Les paramètres de cette structure sont :
typedef struct PWDCmd_struct {
BYTE address; // Choix de la roue (gauche « 1 », ou droite « 0 ») .
BYTE checksum; // formule de calcul :checksum = ~(adresse + code) + 1;
BYTE axis; //Initiaisé par le constructeur souvent a zero.
BYTE code; //Valeurs des commandes présentés dans le tableau d’annexe 1.
BYTE data [6]; //Peut indiquer vitesse position ...
BYTE size; // La taille de la trame envoyé.
} PWDCmd;
5ESE - groupe 2
Page 14/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
Par la suite on envoi la commande grâce à la fonction write, la trame est de la forme suivante :
adress
checksum
axis
command name
parameters
Motion Processor answer
Résultat
Toutes ces fonctionnalités ont été testées avec la fonction perror() de la bibiliotheque « erno » de linux.
Perror est une fonction qui affiche un message d’erreur standard en cas de problème, elle décrit la dernière
erreur rencontrée durant un appel système ou une fonction de bibliothèque.
La chaîne de caractères retournée contient généralement le nom de la fonction où s’est produite l’erreur.
Le numéro d’erreur est obtenu à partir de la variable externe errno, qui contient le code d’erreur lorsqu’un
problème survient.
A l’exécution de mes fonction la fonction perror ne me retourne aucune erreur, l’ouverture de la liaison
et l’envoie se passent sans aucune erreur. Malgré cela, le driver du robot ne répond pas.
Mes doutes sont orientés sur une piste de temporisation d’envoi de commande ou un problème d’ordre
d’envoi cependant ces pistes d’erreur ne peuvent pas être vérifiées sans installer un snifer sur la machine
initiale afin de voir les bonnes temporisations et le bon ordre d’envoi des commandes.
4.1.2
Développement d’IHM sous python
Malgré les essais de faire fonctionner le driver sur mon ordinateur, cela n’a pas fonctionné, je me suis
rabattu au python et à l’utilisation de la bibliothèque "TKINTER" disponible sur la machine fournie.
Pour ce faire, on a créé une class interface qui permet d’initialiser une fenêtre composé d’une image et
de boutons.
Exemple de création de fenêtre :
f1 = Frame(self);
Création de self l’objet lié à la fenêtre de l’IHM ;
Exemple de création de bouton :
self.Start = Button(f1,text="START",fg = "white", bg = "green", command=self.OnStart) ;
Le paramètre f1 associe le bouton à la fenêtre f1. Fg et bg correspondent aux couleurs du texte du
bouton et le bouton même. Command correspond à la fonction qui se déclenche au clic du bouton.
Exemple de fonction associée à un bouton :
def Avancer(self): //Définition de la méthode avancer.
print("avancer") //affiche au terminal le message avancer.
ersp.task.navigation.Move(10,0) //la commande envoyé au robot pour avancer.
On utilisant ces trois fonctions, on a développé un pad manuel qui permet de contrôler le robot. Le
but est de prendre en main le langage python et les commandes associées au mouvement du robot :
Figure 4.1 – Pad de contrôle manuel
5ESE - groupe 2
Page 15/ 27
20 janvier 2014
BE Systèmes Autonomes
4.2
INSA Toulouse
Commandes du robot
La commande du robot se base sur les informations envoyées en série par le pic, le langage python
dispose d’une bibliothèque serial qui nous permet de récupérer facilement les données. Le robot dispose
de 3 capteurs infrarouge afin de pouvoir suivre une ligne noire et un capteur d’obstacle. Le tout est
disposé de la manière suivante :
Figure 4.2 – Disposition des capteurs
Selon les informations reçues par le pic, le programme en python engage une action associée :
5ESE - groupe 2
Etats des capteurs
(Action, vitesse)
du Robot
Valeurs des
commandes
IR-DROIT
DROIT FORT
V=0, W=-0.5
IR-GAUCHE
GAUCHE FORT
V=0, W=+0.5
IR-DROIT
CENTRE
Droit MOYEN
V=0, W=-0.2
IR-GAUCHE
CENTRE
GAUCHE
MOYEN
V=0, W=+0.2
IR –DROITGAUCHECENTRE
TOURNE (le sens
selon l’état
précédent)
Si W<0 : V=3,
.W=-0.4 sinon :
V=3 , W=0.4
IR-AUCUN
TOUT DROIT
V=10, W=0
ULTRA SON
S’ARRETE
V=0, W=0
Page 16/ 27
20 janvier 2014
Table des figures
1.1
1.2
1.3
1.4
1.5
1.6
1.7
Montage astable . . . . . . . . . . .
Montage oscillateur à 40kHz . . . .
Chaine amplificatrice . . . . . . . . .
Détecteur de crête . . . . . . . . . .
Signal avant et après détection . . .
Signal plus faible (5V) : impact de la
Effet des transistors sur le signal . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
4
4
5
5
6
6
2.1
2.2
2.3
2.4
2.5
2.6
Générateur de signal carré à 1kHz . .
Signal en sortie de l’oscillateur . . . .
Chaine de réception IR . . . . . . . . .
Chaine de réception IR . . . . . . . . .
Pas de détection : 0V transmis au pic
Détection : 5V transmis au pic . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
9
9
10
10
3.1
3.2
Chronogramme d’une trame série émise par PIC18f2580 . . . . . . . . . . . . . . . . . . .
Schéma fonctionnel du programme principal . . . . . . . . . . . . . . . . . . . . . . . . . .
11
12
4.1
4.2
3
4
5
Pad de contrôle manuel
Disposition des capteurs
Schematic de l’ultrason
PCB : vue top . . . . .
PCB : vue bottom . . .
15
16
23
24
24
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . .
. . . .
. . . .
. . . .
. . . .
diode
. . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Annexe A - Schématic et PCB du
détecteur IR
18
D
C
B
9
GND
GND
Res1
GND
3
GND
Cap
10nF
PIC1102
8
U3C
LM324N
D5
COD5
GND
1
PIU101
5
PIU105
3
PIU103
7
PIU107
PIR20 2
GND
GND
COR3
R3
PIQ101
Cap
1uF
C9
COC9
GND
PIC702
PIC701
Q1
UJT-N
COD9
D9
LED0
COD8
D8
LED0
COD1
D1
LED0
BAL
V-
2
LM311P
PIU604
6
PIU606
OUT44
NLOUT4
GND
PIU601
1
PIU602
2
7
VCC
8
PIU608
PIU607
3
V+
GND
R15
COR15
GND
GND
PIR2701
R27
COR27
Res1
6.8K
PIR2702
PIR2601
GND
GND
GND
2
GND
PIC1002
3
Cap
10nF
PIC1001
C10
COC10
Res1
10K
7
PIU307
COC5
C5
Cap
100nF
COC3
C3
Cap
1uF
PID402
PIR1602
Date:
File:
A4
Size
Title
PIR1201
PIR1202
1
2
P4
COP4
C8
COC8
Cap
1uF
GND
PIC802
PIC801
GND
GND
PIP502
PIP501
1
2
V-
4
Res1
COR5
R5
GND
GND
GND
1
2
Revision
PIP302
PIP301
OUT3
PIP202
1
2
2
OUT2
NLOUT2
PIP201 1
PIP102
PIP101
GND
1
PIU401
7
PIU407
VCC
8
PIU408
OUT1
V+
NLOUT1
OUT1
PIR5011K
PIR502
VCC
Sheet of
Drawn By:
P5
COP5
LM311P
PIU404
OUT4 4
6
PIU406
2
PIU402
3
PIU403
4
BAL/STB
BAL
PIU405
U4
COU4
5
GND
1
PIU201
7
PIU207
Cap
100nF
V+
VCC
8
PIU208
COC6
C6
-VCC
PIC602
PIC601
R12
COR12
3RPot
10K
PIR1203
VCC
16/01/2014
C:\Users\..\IR_BOARD.SchDoc
Number
GND
PIP402
PIP401
VCC
GND
V-
BAL/STB
LM311P
OUT4PIU204
4
6
PIU206
2
PIU202
3
PIU203
COU2
U2
5
PIU205 BAL
R16
Diode 1N4148 COR16
Res1
PIR1601 100K
PID401
U3B
LM324ND4
COD4
GND
PIC302
PIC301
GND
PIC501
COR10
R10
RPot
1K PIC502
PIR1003
COR8
R8
Res1
PIR801100K
PIR802
PIR10 1
PIR10 2
VCC
GND
PIR1902
R19
COR19
PIR1901
R24
COR24
Res1
PIR2401680
PIR2402
5
PIU305
6
VCC
Diode 1N4148
PID301 PID302
PIU306
R18
COR18
Res1
15K
PIR1801
PIR1802
D6
COD6
Photo Sen
R17
COR17
Res1
10K
PIR1701
PIR1702
PID602
PID601
VCC
Cap
10nF
1
3
COD3
LM324N D3
COU3
U3A
PIU301
PIR902
PIC401 PIC402
COR11
R11
Res1
PIR1 01 680
PIR1 02
Res1
10K
C4
COC4
GND
PIU301
1
PIU304
VCC
COR9
R9
PIR901
PIU303
3
2
PIU302
R26
COR26
Res1
15K
OUT4
PIR2602
-VCC
Res1
PIR1501 1K
OUT3
NLOUT3
PIR1502
VCC
GND
COR7
R7
Res1
PIR70115K
PIR702
COD2
D2
Photo Sen
COR6
R6
Res1
PIR60110K
PIR602
PID20
PID201
VCC
PIU603
BAL/STB
U6
COU6
PIU605
Cap
100nF
5
GND
PIQ102
PIQ103COQ1
PID902
PID901
PID802
PID801
PID102
PID10
C7
COC7
R14
COR14
PIR302
RPot
PIR1403
10K
GND
PIC902
PIC901
PIR1401
PIR1402
VCC
Cap
10nF
Res1
2.2K
PIR301
C1
COC1
GND
PIC102
PIC101
R20
Diode 1N4148 COR20
Res1
PIR20 1 100K
PIU3014 PID501 PID502
PIU308
PIR2302
C11
COC11
Res1
10K
PIC1101
1
VCC
R23
COR23
PIR2301
R25
COR25
PIR2501680
PIR2502
Res1
PIR2 01 15K
Res1
10
PIU3012
PIU3010
R22
COR22
PIR210110K
PIR2 02
Photo Sen
COD7
D7
R21
COR21
PIR2102
PID701
PID702
VCC
GND
10nF
PIU3013
PIU309
+VCC
LM555CM
TRIG
8
PIU108
PIR40182K
PIC202
C2
COC2
PIC201 Cap
Res1
2
PIU102
CVOLT
OUT
THR
PIU106
6
DIS
COU1
U1
4
PIU104 RST
R4
COR4
PIR402
Res1
PIR20156K
COR2
R2
PIR202
VCC
Res1
PIR10118
COR1
R1
PIR102
VCC
2
4
11
A
1
4
11
4
11
2
1
P3
COP3
P2
COP2
P1
COP1
COR13
R13
Res1
PIR13011K
OUT2
PIR1302
VCC
D
C
B
A
PAC201
COC2
PAR202
PAR902
PAC402
PAD301
PAD302
PAR802
PAC302
COD3 COR8 COC3
COR10
COC5
PAU201
PAU202
COU2
PAU208
PAU207
PAR502
COR5
Comment
Cap
Description
Designator
C1, C2, C3, C4,
C5, C6, C7, C8,
C9, C10, C11
Footprint
LibRef
Quantity
RAD-0.2
Cap
LED-0
LED0
3
PIN2
Photo Sen
3
DO-35
Diode 1N4148
3
CON2
Header 2
5
TO-39
UJT-N
1
Res1
Capacitor
Typical
INFRARED
GaAs LED
D1, D8, D9
Photosensitive
Diode
D2, D6, D7
High
Conductance
Fast Diode
D3, D4, D5
P1, P2, P3, P4,
Header, 2-Pin P5
Unijunction
Transistor with
N-Type Base
Q1
R1, R2, R3, R4,
R5, R6, R7, R8,
R9, R11, R13,
R15, R16, R17,
R18, R19, R20,
R21, R22, R23,
R24, R25, R26,
Resistor
R27
AXIAL-0.3
Res1
24
RPot
Potentiometer
R10, R12, R14
POT
RPot
3
LM555CM
U1
P008
LM555CM
1
LM311P
Timer
Differential
Comparator
with Strobes
U2, U4, U6
P008
LM311P
3
LM324N
Quad Differential U3
Input, Low-Power646-06
Operational Amplifier
LM324N
1
LED0
Photo Sen
Diode 1N4148
Header 2
UJT-N
11
22
BE Systèmes Autonomes
INSA Toulouse
Annexe B - Schématic et PCB du
détecteur US
Figure 3 – Schematic de l’ultrason
5ESE - groupe 2
Page 23/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
Figure 4 – PCB : vue top
Figure 5 – PCB : vue bottom
5ESE - groupe 2
Page 24/ 27
20 janvier 2014
Annexe C - Software
AdjustActualPostion 0xF5
ClearPositionError 0x47
GetActivityStatus 0xA6
GetActualVelocity 0xAD
GetCaptureValue 0x36
GetChecksum 0xF8
GetCommandedAcceleration 0xA7
GetCommandedPostion 0x1D
GetCommandedVelocity 0x1E
GetCurrentMotorCommand 0x3A
GetDerivative 0x9B
GetEventStatus 0x31
GetHostIOError 0xA5
GetIntegral 0x9A
GetInterruptAxis 0xE1
GetPhaseCommand 0xEA
GetPositionError 0x99
GetSignalStatus 0xA4
GetTime 0x3E
GetTraceCount 0xBB
GetTraceStatus 0xBA
GetVersion 0x8F
InitializPhase 0x7A
NoOperation 0x00
ReadAnalog 0xEF
ReadBuffer 0xC9
ReadIO 0x83
Reset 0x39
ResetEventStatus 0x34
SetAcceleration 0x90
GetAcceleration 0x4C
SetActualPostion 0x4D
GetActualPostion 0x37
SetActualPostionUnits 0xBE
GetActualPostionUnits 0xBF
SetAutoStopMode 0xD2
GetAutoStopMode 0xD3
SetAxisMode 0x87
GetAxisMode 0x88
SetAxisOutSource 0xED
GetAxisOutSource 0xEE
SetBreakpoint 0xD4
GetBreakpoint 0xD5
SetBreakpointValue 0xD6
GetBreakpointValue 0xD7
SetBufferFunction 0xCA
GetBufferFunction 0xCB
SetbufferLength 0xC2
GetBufferLength 0xC3
SetBufferReadIndex 0xC6
25
BE Systèmes Autonomes
INSA Toulouse
GetBufferReadIndex 0xC7
SetBufferStart 0xC0
GetBufferStart 0xC1
SetBufferWriteIndex 0xC4
GetBufferWriteIndex 0xC5
SetCaptureSource 0xD8
GetCaptureSource 0xD9
SetCommutationMode 0xE2
GetCommutationMode 0xE3
SetDeceleration 0x91
GetDeceleration 0x92
SetDerivativeTime 0x9C
GetDerivativeTime 0x9D
SetDiagnosticPortMode 0x89
GetDiagnosticPortMode 0x8A
SetEncoderModulus 0x8D
GetEncoderModulus 0x8E
SetEncoderSource 0xDA
GetEncoderSource 0xDB
SetEncoderToStepRatio 0xDE
GetEncoderToStepRatio 0xDF
SetIntegrationLimit 0x95
GetIntegrationLimit 0x96
SetInterruptMask 0x2F
GetInterruptMask 0x56
SetJerk 0x13
GetJerk 0x58
SetKaff 0x93
GetKaff 0x94
SetKd 0x27
GetKd 0x52
SetKi 0x26
GetKi 0x51
SetKout 0x9E
GetKout 0x9F
SetKp 0x25
GetKp 0x50
SetKvff 0x2B
GetKvff 0x54
SetLimitSwitchMode 0x80
GetLimitSwitchMode 0x81
SetMotionCompleteMode 0xEB
GetMotionCompleteMode 0xEC
SetMotorBias 0x0F
GetMotorBias 0x2D
SetMotorCommand 0x77
GetMotorCommand 0x69
SetMotorLimit 0x06
GetMotorLimit 0x07
SetMotorMode 0xDC
GetMotorMode 0xDD
SetNumberPhases 0x85
GetNumberPhases 0x86
SetOutputMode 0xE0
GetOutputMode 0x6E
SetPhaseAngle 0x84
GetPhaseAngle 0x2C
SetPhaseCorrectionMode 0xE8
GetPhaseCorrectionMode 0xE9
SetPhaseCounts 0x75
SetPhaseInitializeMode 0xE4
5ESE - groupe 2
Page 26/ 27
20 janvier 2014
BE Systèmes Autonomes
INSA Toulouse
GetPhaseInitializeMode 0xE5
SetPhaseInitializeTime 0x72
GetPhaseInitializeTime 0x7C
SetPhaseOffset 0x76
GetPhaseOffset 0x7B
SetPhasePrescale 0xE6
GetPhasePrescale 0xE7
SetPostion 0x10
GetPostion 0x4A
SetPostionErrorLimit 0x97
GetPostionErrorLimit 0x98
SetProfileMode 0xA0
GetProfileMode 0xA1
SetSampleTime 0x38
GetSampleTime 0x61
SetSerialPortMode 0x8B
GetSerialPortMode 0x8C
SetSettleTime 0xAA
GetSettleTime 0xAB
SetSettleWindow 0xBC
GetSettleWindow 0xBD
SetSignalSense 0xA2
GetSignalSense 0xA3
SetStartMode 0xCC
GetStartMode 0xCD
SetStartVelocity 0x6A
GetStartVelocity 0x6B
SetStopMode 0xD0
GetStopMode 0xD1
SetSynchronizationMode 0xF2
GetSynchronizationMode 0xF3
SetTraceMode 0xB0
GetTraceMode 0xB1
SetTracePeriod 0xB8
GetTracePeriod 0xB9
SetTraceStart 0xB2
GetTraceStart 0xB3
SetTraceStop 0xB4
GetTraceStop 0xB5
SetTraceVariable 0xB6
GetTraceVariable 0xB7
SetTrackingWindow 0xA8
GetTrackingWindow 0xA9
SetVelocity 0x11
GetVelocity 0xAB
Update 0x1A
WriteBuffer 0xC8
WriteIO 0x82
5ESE - groupe 2
Page 27/ 27
20 janvier 2014
Téléchargement