Rapport Cachan Teneo
Rapport Cachan Teneo
Rapport Cachan Teneo
2018
Frank FACUNDO
Seydou DIA
Jonathan ANDRIEU
Anthony PAOLOZZI
Loïc CLAEYS
PROLOGUE 3
INTRODUCTION 3
MODALITES 4
Terrain 4
Généralités 4
Cahier des charges 5
Règles du jeu 5
RÉALISATION 6
Organisation 6
Capteurs 6
Détecter la ligne 7
Différencier une ligne épaisse d’une ligne fine 7
Phase de test 9
Mise en forme du signal 10
Carte électronique 12
Objectifs pour la suite du projet 12
Traitement et support 13
Composants sur raspberry PI 13
Assemblage des parts 13
Installation de Linux Ubuntu Mate et des logiciels nécessaire 15
Raspberry, Ubuntu et python 17
Organigramme 18
Code réalisé 18
Code pour l’initialisation 18
Code pour la boussole 19
Code pour le moteur 20
Objectifs à court terme 21
Expérience issue des essais avec la Raspberry et des conseils de M. Vaillé 21
Actionneurs 22
Gestion de la balle 22
Premières idées 23
Analyse des besoins 23
Essais de projection 23
Ejection avec ressort 24
Choix de gestion de la balle retenu 24
CONCLUSION 26
ANNEXES 27
Nomenclature 27
Choix des résistances 28
Trigger de Schmitt 29
1. PROLOGUE
Le nom TENEO vient de l’ancien français. En effet, le tennis découle directement du
jeu de paume. L’apparition du tennis daterait des années 1850, c’est à dire plus de quatre
siècles après que les anglo-saxons aient découvert le jeu de paume. Par habitude les
joueurs annonçaient l’engagement en disant ‘Tenets !’ qui se traduit en français actuel par
‘Tenez !’. À cette époque les anglo-saxons ont mal entendu ce mot et ont compris ‘tenis’.
Ensuite ce mot est devenu ‘tennis’ comme on le connaît de nos jours et est repassé au
français. Le Concours Cachan étant un jeu de tennis évolué, nous avons décidé de nommer
notre robot ‘teneo’, l’infinitif de ‘tenets’.
2. INTRODUCTION
Ce rapport est un suivi de l’avancement du robot TENEO, à mi parcours, développé
par une équipe de Génie Électrique et Informatique Industrielle de Montpellier pour participer
au FRC (Festival Robotique Cachan) 2018. Ce festival organise une coupe des IUT GEII qui
rassemble 100 à 130 étudiants répartis dans toute la France. Cette coupe, initiée par le
Festival Robotique de Vierzon, est organisée par l’association ASTECH depuis 2002.
Pour cette nouvelle édition, le FRC a établi de nouvelles règles : les robots passent
au tennis. Le but des robots est d’envoyer un maximum de balles de tennis dans le camp
adverse, sans entrer dans le camp adverse et sans jamais contrôler plus d’une balle à la
fois. Malheureusement, ce changement d’objectif à été fait environ un mois et demi après le
début de la réalisation du projet. Il a donc obligé un redémarrage de nombre de réflexions et
essais.
Pour réaliser ce projet, nous constituons un groupe de 6 personnes en mettant à
profit les compétences et expériences : Anthony, Damien, Frank, Jonathan, Loïc et Seydou.
Nous nous sommes associés car nous sommes passionnés par la robotique et les
technologies.
Ce projet représente pour nous un challenge car nous utilisons une technologie que
nous n’avons pas encore étudiée lors de notre formation et dont nous avions tous envie de
découvrir.
3. MODALITES
3.1. Terrain
Les robots vont s’affronter sur un terrain de 8 x 4m. Soit un carré de 4 x 4m pour
chaque équipe. Il n’y a pas de filet qui sépare les deux parties. Des ballons de couleurs
seront répartis de chaque côté. Les ballons de baudruches sont fixés à 30cm du sol et à
10cm à l’extérieur du terrain. Les lignes au sol sont réalisées en scotch blanc et font 19mm
de large. Au centre, la ligne médiane fait 10cm de large avec une bande noire centrale de
19mm.
3.2. Généralités
Les robots des anciennes et de la nouvelle version peuvent participer au concours.
En cas de non-respect le match est arrêté et le robot fautif perd.
Déroulement de la compétition : le robot vainqueur marque 2 points, 1, en cas de
match nul et 0 en cas de défaite.
Si le robot a totalement franchi la ligne de milieu de terrain le match est
immédiatement arrêté et le robot fautif est disqualifié. Les balles ne doivent pas être
éjectées hors du terrain. Toute balle éjectée hors du terrain entraîne une pénalité pour le
lanceur.
Le robot à 10 secondes une fois qu’il est immobilisé pour lancer un projectile de
faible masse dans l’air (avec un angle de 20° par rapport à la verticale). Cette action
déclenche l’ajout d’une balle dans le camp adverse.
4. RÉALISATION
4.1. Organisation
Le projet peut se voir et se découper selon 3 axes. Comme tout projet de robotique,
nous avons séparé les capteurs, les actionneurs et le traitement intermédiaire. C’est de cette
façon que nous nous sommes répartis les tâches. C’est donc de la même manière que sera
axé la partie ‘réalisation’ de ce rapport.
4.2. Capteurs
Pour que le robot puisse se déplacer sans pouvoir être disqualifié, il doit être capable
de différencier les lignes fines des lignes épaisses pour ne dépasser la ligne du milieu de
terrain.
Nous sommes tout d’abord penché sur tous les cas de figure que pourrait rencontrer le robot
en s’approchant d’une ligne.
Sachant qu’une ligne épaisse fait 40mm de large et une ligne fine 19mm. Le robot
doit pouvoir les différencier quelque soit sa position relative à ces dernières.
Rd=330Ω
Rt=47kΩ
Cf. annexe pour calcul
Pour différencier les lignes nous avons mis au point un système de trois capteurs
infrarouges.
Ces capteurs sont positionnés de manière à ce que l’unique cas où les trois détectent une
ligne sera le cas où le robot est confronté à une ligne épaisse.
cas 1
cas 2
cas 3
Si l’on rencontre une ligne épaisse alors l’intégralité des capteurs seront à l’état haut et cela
dans tous les cas de figure que l’on va rencontrer :
cas 4
cas 5
cas 6
Schéma du robot vue de haut (les capteurs ne sont pas schématisés à l’échelle) :
Pour tester notre système nous avons fait une mise en forme avec des comparateurs
Tout Ou Rien (TOR).
Nous avons comparé la tension fourni par le capteur avec une tension de 2.5V. Le circuit
suivant est alimenté en 5V.
Si un capteur détecte une ligne la sortie de l’AOP pas à l’état haut dans le cas contraire la
sortie est à l’état bas
La Raspberry ne peut traiter que des informations logiques alors que le capteur nous
fournit une tension continue comprise en 0 et Vcc. Il faut donc faire une mise forme des
signaux. Pour cela nous utilisons un Trigger de Schmitt inverseur à seuil réglable. Le trigger
nous permet de travailler avec des signaux logiques mais nous donne aussi une marge de
sécurité. En effet l’environnement dans lequel va évoluer le robot est très perturbé et les
capteurs sont susceptibles de détecter des rayons infrarouges alors qu’il ne se trouve pas
confronté à une ligne.
Nous avons rajouté un AOP suiveur pour que les trigger de Schmitt ne se perturbent pas les
uns les autres.
En plus d’être capable de différencier les lignes fines des lignes épaisses, le robot
doit pouvoir détecter les murs, repérer les balles à ramasser, pouvoir se réorienter dans la
direction de la zone adverse et détecter les balises qui se situent au abords du terrain.
Au moment où ce rapport est écrit, le capteur que nous avons choisis est un
GP2Y0E02A (Cf. annexe). C’est un capteur infrarouge qui peut mesure une distance de 4 à
50 cm.
- Pixy Camera
- Dissipateur pour la Raspberry PI
- Batterie portable 10400mAh - DC5V/2.4A max
- 16 GB Class 10 MicroSD
- Moteur Driver Adafruit
Le driver a les circuits suivants:
- PCA9685PW - I2C PWM
- TB6612FNG - DRIVER IC DUAL DC MOTOR
- 24C32 - EEPROM PROGRAMMER
- Câbles USB
- Stacking Headers
- Nylon Standoffs (M2.5) pour placer differents stages.
- Wireless Adapter 5GHz pour communication sans fils avec ordinateur.
Tout d’abord nous avons collé les dissipateurs de la Raspberry, ensuite brancher la
carte microSD et finalement monter les “Nylon Standoffs”
Figure 2.1
Figure 2.2
Nous avons soudé les “stacking headers” Figure 2.3 avec le Driver Moteur Figure 2.4
Figure 2.3
Figure 2.4
https://ubuntu-mate.org/download/
Ensuite il faut une image du système d’exploitation sur la microSD, pour cela, on exécuter la
commande:
$ sudo fdisk -l
1. Une fois que l’image est sur la microSD, il faut vérifier que l’image du système a bien
été créée. Pour le savoir on vérifie les 2 partitions qui s’appellent “PI_ROOT” et
“PI_BOOT”
Figure 2.5
4.3.5. Organigramme
Figure 2.6
GPIO.setup(20,GPIO.IN) #CAPTEUR
GPIO.setup(19,GPIO.IN)
GPIO.setup(26,GPIO.IN)
LEFT_TRIM = 0
RIGHT_TRIM = 0
Figure 2.7
La librairie RPI.GPIO sert à utiliser les ports de la Raspberry Pi, la librairie time nous
aide à gérer la PWM, Robot est la librairie qui permet d’utiliser le driver moteur, hmc58831
est le driver de la boussole, BCM est le type de nom des ports, et finalement on attribue le
capteur de ligne sur les ports 20,19,26.
Ø i2clibraries
Ø HMC5883libraries
Ces librairies rendent le dialogue avec la boussole plus simple. En effet les fonctions
présentes dans HMC5883libraries nous permettent de récupérer les données en quelques
lignes.
Ø Sa position en x
Ø Sa position en y
Ø Sa position en z
Ø S
on orientation en degré minute
import time
Angle_numerique = hmc58831.getHeading()
Pour adapter la vitesse des moteurs il faut tout d’abord être capable de la modifiée.
On agit sur les moteurs grâce aux au driver qui communique avec la Raspberry Pi par le
protocole I2C, mais si on regarde de plus près on a besoin de 4 ports : 2 pour l’I2C, 2 pour
I2C ID EEPROM. Pour la borne plus et la borne moins, rien de compliqué, la carte est prévu
pour inverser la tension PWM de puissance. Pour la PWM, Pulse Width Modulation, on va
modifier la largeur d’impulsion de notre signal pour faire varier la vitesse. Plus exactement,
on modifie le rapport cyclique.
Nous avons donc créé plusieurs fonctions utilisant ces 6 ports afin de pouvoir utiliser
toutes les fonctions des moteurs.
Ainsi lorsqu’un capteur détecte un obstacle il suffit d’appeler la fonction qui permet
de faire avancer le moteur mais en appliquant les rapports cycliques correspondant.
while True:
if GPIO.input(20) == GPIO.LOW:
robot.forward(255)
print("Il n’y a pas de ligne blanche")
if GPIO.input(20) == GPIO.HIGH:
robot.stop()
print("Ligne blanche detecte ")
GPIO.cleanup()
Le choix de l'unité de calcul dépend fortement de la nature de notre projet : ce qui est
la première chose à laquelle il faut penser.
Le Raspberry est un ordinateur miniature, sur lequel est installé un OS qui va faire
l'interface entre le matériel (entrées / sorties) et le soft que l’on veut faire tourner. Le point
positif, c'est que manipuler le matériel est simplifié, ensuite, c'est souvent au prix des
performances (tous les OS ne sont pas temps réel).
C'est effectivement bien adapté pour des projets assez haut niveau où l'on se
concentre sur des algorithmes un peu complexes, du traitement du signal massif, ou
éventuellement du réseau. De plus, les broches de la RPi sont des entrées / sorties
numériques il faut donc avoir un convertisseur analogique numérique, soit un PIC ou un
circuit spécialisé, qui fait l'interface avec certains capteurs / actionneurs en écrivant le driver
adapté ou en ayant des capteurs spécialement créés pour le Raspberry Pi.
Le problème étant que la Raspberry est plus adaptée pour des applications
majoritairement informatique mais pour faire de la robotique elle est beaucoup trop sensible
et est beaucoup trop lente avec l’OS (Operating System) que nous avons choisi « Ubuntu
Mate ». Car l’interface graphite est très gourmande en énergie et en ressources. Il nous
faudrait alors utiliser un OS plus léger et plus adapté à la robotique.
Une solution serait, de programmer la Raspberry en SSH sans interface graphique à
charger et de ne pas programmer en Python comme nous le faisons. Le langage Python est
un langage interprété contrairement au langage C qui est un langage compilé et donc plus
rapidement interprétable par un processeur.
Par ailleurs, on ne peut pas faire d’interruptions en temps réel par soucis de gestion
du temps car il nous faudrait sauvegarder le contexte, charger l’interruption, exécuter
l’interruption et recharger le contexte. Il nous faudrait gérer en parallèle plusieurs tâches :
c’est le multitâches. Et découper les tâches les plus longues et faire une machine à états par
exemple.
Alors, nous pourrons aussi utiliser un Pic18 ou 32 avec un OS temps réel comme
FreeRTOS et développer sur MpLAB Harmony qui prend en charge les RTOS et propose
des librairies et services pour les systèmes embarqués.
4.4. Actionneurs
D’après la forme du terrain et les règles du jeu, nous savons qu’il faut envoyer les
balles dans une direction particulière le plus rapidement possible. Ci-dessous un schéma de
l’arène.
v initiale ≃ 1m
14 images ≃ 1m
0.5 s ≃ 2 m.s −1
La vitesse initiale retenue a donc été celle-ci.
Nous avons pensé dans un premier temps d’éjecter la balle avec un système de
ressort. Une fois la balle coincée dans la cage et le robot bien orienté vers sa cible, un
piston se déploie et permet d’éjecter la balle. Le piston serait tendu et détendu par un petit
moteur. Le désavantage de cette solution est de dimensionner le ressort. En effet si le
ressort fournit une force trop importante la balle risque de rebondir, et inversement la balle
ne pourrait pas avancer.
Il est évident que le robot entier, s’il ne gère pas la balle n’est d’aucune utilité. Étant
donné que nos domaines de compétences ne s’étendent pas jusqu’à la mécanique nous
nous sommes décidés à opter dans un premier temps pour une solution simple et sans
faille. Nous avons donc choisi de n’utiliser aucun mécanisme de projection de la balle au
début, quitte à optimiser ou même changer le système de gestion de balle une fois le projet
bien avancé.
La solution choisie se décompose en plusieurs étapes. Premièrement, la balle sera
saisie avec une trappe en rotation autour d’un axe vertical, qui sera commandée par un
servomoteur. De cette façon, la balle sera piégée dans la cage du robot. Deuxièmement,
nous nous servons de la mobilité du robot pour se diriger vers le camp adverse. De cette
façon, avec l’élan donné à la balle, l’ouverture de la trappe suivie de l'arrêt du robot avant la
ligne de séparation, permet à la balle de continuer son chemin dans le camp adverse. Le
robot peut alors réitérer autant de fois qu’il y a de balle.
Le mécanisme qui permet de réaliser cette opération est concus et en cours de
fabrication. Des version plus efficaces suivront probablement.
Les essais sur le servomoteur qui servira à la rotation de la trappe son élémentaires et
donnent les résultats situés dans le paragraphe dédié.
Cette partie concerne les tests effectués pour l’emploi d’un ou deux servomoteurs
pour l’ouverture de la trappe du “récolteur” de balle.
La référence est . Ils sont alimentés en 5V et sont tolérants pour l’amplitude du signal
d’entrée donc c’est compatible avec l’utilisation des sorties GPIO de la raspberry si le choix
est à faire. Le signal de commande est une MLI de 2ms de période. Le temps à l’état haut
restera à fixer en fonction de l’angle souhaité pour l’ouverture de la trappe.
A l’aide du raspberry, on configure le driver de moteur pour avoir une tension variable
de 0 à 5V. De ce fait on pourra lancer un programme permettant de faire varier la PWM et
on pourra mesurer la tension aux bornes du moteur.
5. CONCLUSION
6. ANNEXES
6.1. Nomenclature
U1 1 Résistance de 1k LM324
Date :17/01/2018
Sous-ensemble :Projet tuteuré Vérification: Effectuée
Auteur :DIA