RobotGEII 16-17
Sommaire
[masquer]- 1 Présentation
- 2 Etude du Robot
- 3 Bibliographie/références
Présentation
Présentation du projet
Ce projet consiste à réaliser un robot pour participer à la coupe de robotique des GEII. Pour fabriquer ce robot nous devons respecter un cahier des charges défini par le règlement(reglement).Le principe de ce concours est d'aller le plus rapidement possible d'un coin à l'autre d'une arène carrée de 8 metres de coté, tout en esquivant les obstacles jonchant le parcours et les autres robots. Une fois arrivé, le robot doit perçer un ballon qui lui est attaché en début de course.
Cahier des charges fonctionnel
Schéma fonctionnel de degrés II
Schéma fonctionnelle 1er degres
Solutions techniques
Pour fabriquer ce robot nous avions plusieurs choix pour procéder à l’évitement des obstacles, ainsi qu'au guidage vers la zone. Nous avons choisi pour guider le robot un système hybride composé d'e roues codeuses et d'une caméra CMUCam Pixy, spécialisée dans la reconnaissance d'objets. La roue codeuse permettra d'effectuer le début du parcours, et sera remplacée par la caméra, plus précise, une fois la distance de détection atteinte. L'évitement des obstacles sera assuré par trois capteurs infrarouges SHARP GP2Y0A21YK0F, permettant la detection d'objets jusqu'à 80 centimetres de distance, qui, placés à l'avant du robot, permettront l'esquive si un obstacle est rencontré.
Etude du Robot
Batterie
La batterie est imposé :
Tension: 12V
Capacité: 7Ah
Moteurs de roues
Caracteristique moteur:
Nom: G 42*25
Tension: 15V
In: 1.45A
Ifm: 10.9A
Rpm: 3300 tr/mn
Tests en condition réeles sur les moteurs montés sur le robot ( U=12V ):
Résistance électrique: 4 ohm
Courant à vide: 0.28 A
Courant en charge nominale: 0.7A
Courant en charge au démarage: 1.6A
Caracteristique moteur:
Nom: Dunkermotoren G 42*25 Tension: 15V In: 1.45A Ifm: 10.9A Rpm: 3300 tr/mn
Nous avons éffectué quelques tests sur les moteurs:
Résistance électrique: 4 ohm Courant en charge au démarage: 1.6A
Contrôle deux moteurs CC par un shield (L298P)
Pour commander les moteurs nous allons utiliser le pont H L298P [ datasheet].
Le composant est ci-dessous:
Pour faire des tests nous avons utlisé le Motor Shield For Arduino. En connectant ce shield à l'arduino nous pouvons commander les deux moteurs (commande du sens et de la vitesse).
- PWM
Nous allons utiliser le shild en mode PWM, on placera donc les jumpers en conséquence.
- Borne du moteur
Nous avons deux bornes (bleues) pour connecter les moteurs CC. Les connecteurs mâles derrière sont identiques à celui des bornes bleues.
- PWRIN
Les moteurs peuvent être alimentés par une alimentation externe lorsque le courant du moteur dépasse les limites fournies par l'Arduino (Il est conseillé de séparer les alimentations d’Arduino et des moteurs). Le changement entre la puissance externe et l'arduino est mis en oeuvre par deux jumpers .
PWRIN: Alimentation externe.
VIN: Alimentation du Arduino.
On placera donc les jumpers d’alimentation sur PWRIN.
On doit avoir quelque chose comme cela:
- Signal de contrôle Tableau de vérité
E1 | M1 | E2 | M2 | Texte de l’en-tête | |
---|---|---|---|---|---|
L | X | Moteur 1 desactivé | L | X | Moteur 2 desactivé |
H | H | Moteur 1 en arrière | H | H | Moteur 2 en arrière |
H | L | Moteur 1 en avant | H | L | Moteur 2 en avant |
PWM | X | Control vitesse PWM | PWM | X | Control vitesse PWM |
NOTE:
H: Niveau haut
L: Niveau bas
X: N'importe quel niveau.
Mode PWM
Commande | Moteur | Pin Arduino | Pin Atmega328p | Siginification |
---|---|---|---|---|
M1 | Gauge | 4 | PD4 | Contrôle du sens de rotation |
E1 (PWM) | Gauge | 5 | PD5 | Contrôle de la vitesse de rotation |
M2 | Droit | 7 | PD7 | Contrôle du sens de rotation |
E2 (PWM) | Droit | 6 | PD6 | Contrôle de la vitesse de rotation |
- Exemple de code
Nous allons gérer les moteurs par des signaux PWM (-255 a 255), le signe moins (-) indique que le moteur fonctionne en marche arrière, et le signe plus (+) qu'il fonctionne en marche avant. Ce code nous permet de gérer les deux motors par la fonction setVitesse(vG,vD). Dans la suite nous allons l'utiliser pour gérer le déplacement du robot.
Code exemple
Positionnement du robot: Explication du principe
Approximation par des segments de droites
Le positionnement du robot est obtenu par odométrie, c'est à dire que la position est obtenue par intégration de petits déplacements. L'intérêt de l'odométrie est qu'elle est assez simple à mettre en oeuvre et qu'elle est fiable. Par contre, quand on intègre les déplacements, on intègre aussi l'erreur ce qui fait que l'erreur de position croît avec le temps.
Entre deux lectures, on peut savoir de combien s'est déplacée chaque roue codeuse et il faut à partir de cela en déduire la position du robot.
Appelons ∆d et ∆g les distances (en mm) parcourues respectivement par les roues droites et gauches entre deux lectures des LM soit un intervalle de temps Te. Connaissant la position du robot à l'instant n-1, on cherche la pose à l'instant n.
On a donc : ∆moy_n = (∆d_n + ∆g_n)/2
∆dif_n = ∆d_n - ∆g_n
∆x_n = ∆moy_n cos(theta_n-1)
∆y_n = ∆moy_n sin(theta_n-1)
∆theta_n = ∆dif_n/L
x_n = x_n-1 + ∆x_n
y_n = y_n-1 + ∆y_n
theta_n = theta_n-1 + ∆theta_n
Estimation de la position du robot
Carte Capteur
L'odométrie nous permettra d'estimer la position du robot en mouvement, des le debut et jusqu'à la détéction de la balise par la caméra. C'est à partir de la mesure des déplacements des roues, qu'on pourra reconstituer le mouvement du robot. En partant d'une position initiale connue et en intégrant les déplacements mesurés, on peut ainsi calculer à chaque instant la position courante du véhicule.
Pour mésurer le déplacement des roues, nous allons utiliser un encodeur, monté sur l'axe de chaque roue.
ENCODEUR DE BASE:
Ce montage basique permet de mesurer la vitesse de rotation à partir de la fréquance, mais il ne permet pas de connaitre le sens de rotation.
ENCODEUR EN QUADRATURE: Celui-ci nous permettra de connaitre à la fois le sens et la vitesse des roues. Il est composé d’un disque rotatif, 1 led infrarouge et 2 capteurs optique décalé un par rapport à l’autre de 90°. C’est justement ce décalage la qui va nous permettre de connaitre le sens de rotation de la roue. Suivant le sens de rotation, nous auront deux signaux déphasés en avance/retard de 90°.La vitesse sera déterminé en fonction de la fréquence.
Les signaux de sortie à l’oscilloscope
CAPTEUR TCUT 1300. Nous allons utiliser ce capteur il nous permettra d'avoir le sens et la vitesse de chaque roue.
The TCUT1300X01 is a compact transmissive sensor that
includes an infrared emitter and two phototransistor
detectors, located face-to-face in a surface mount package.
Schéma et dimensionement composants
Emiter: If = 10mA (Vf = 1.2V), Re = (5V-Vf)/If = 380 ohm.
Collector: Ic sat = 0.4mA (If = 10mA), Rmin = Vce /Ic = 12.5 kohm. Vce sat = 0.4V max (pour Ic sat = 0.4mA, If = 10mA ). On prendra Rc = 15 kohm.
Schéma et routage en Eagle
Réalisation carte (2 exemplaires)
- Carte simple face CMS.
Roue codeuse
Pour determiner la position du robot nous allons utiliser deux Roues Codeuses et deux capteurs (TCUT 1300). Nous avons créé le roue sur le logiciel GEFAO et fabrication avec la machine charlyrobot. Vous trouverez ici le fichier de la roue (Fichier:RoueCodeuse.zip).
Valeurs recu par les capteurs
Cette roue sera placer sur l'arbre des motors et sur les deux capteurs, lorsque le moteur est en train de tourner les capteurs va nous envoyer une signal qui se resamblera à:
- Si la roue en avant
Il faut remarquer que la signal 1 est en avance. Donc sur chaque front montant de la signal 1, la signal 2 est à 0. Et sur chanque front descendate de la signal 1, la signal 2 est à 1. Ce raisonnement sera utiliser dans le code du proogramme.
- Si la roue en arriere
Il faut remarquer que la signal 1 est en retard. Donc sur chaque front montant de la signal 1, la signal 2 est à 1. Et sur chanque front descendate de la signal 1, la signal 2 est à 0. Ce raisonnement sera aussi utiliser dans le code du proogramme.
Il faut remarquer que si le robot avance, la roue codeuse est en arriere et si le robot recule la roue codeuse est en avant. Ce effet est du aux engranages qui sont sur les moteurs et la roue.
Interruptions et timer
- Interruptions INT0 et INT1: Code example
Dans cette partie nous allons utiliser les interruptions et les timers. On utilisera les inturruptions (INT0 et INT1) pour dechancher un code a chaque fois que les dents de la roue codeuse travers le flux lumineuse du capteurs (sur le front montant et front descendant). Nous allons aussi utliser un timer qui sera dechanché sur un temps assez petit ( <10ms) pour calculer un deltaX, un deltaY et un detaTeta qui nous permetront de determiner la position du robot a chaque instante.
Code example
- TIMER 1
En faite nous allons calculer la position du robot en ajoutant de petits deltas de postition lequels seront calculer sur un temps suffisamment petit ( <20ms) pour eviter que l'erreur soit grand. On utilisera un drapeau pour eviter de faire de calculs dans le ISR(TIMER1_COMPA_vect), nous allons les faire plutot sur while(1), cela nous permettra de reduire l'erreur.
Code example
Suivons une ligne droite
On sait que le moteurs n'ont pas la vitesse, donc il faut essayer de faire cela par code. On va donc faire setVitesse(Vmax * cos(Teta + PI / 4.0), Vmax * sin(Teta + PI / 4.0)), les cos et sin nous permettra jouer sur la vitesse et de cette facon faire que le robot suis une ligne droite. Il faut remarquer qu'il ne va pas s'arreter.
Code de Suivons une ligne droite
Suivons une consigne
Cette fois nous pourrons donner une valeur en X ey Y et le robot sera capable d'arriver au point et s'arreté. La valeurs doit etre donnée en cm.
ws2812_config.h
Detection d'obstacles
Caméra
Choix camera
Nous avons testé 3 cameras différentes, la PiCam, la CMUCam3 et la CMUCam5 Pixy
Nous avons choisi d'utiliser la CMUCam 5(site CMU cam 5) car elle est beaucoup plus simple d'utilisation que les deux autres. En effet, celle ci dispose d'une interface dre réglage, PixyMon, lui permettant d'enregistrer les signatures des objets à détecter, et de régler l'acquisition pour restreindre la détection à ces signatures précises. De plus, celle ci dispose d'un support mû par des servomoteurs permettant d'élargir son champ de vision.
Camera CMU cam 5
Tout d’abord nous avons réalisé une simple reconnaissance d'objet grâce au logiciel, il suffit pour cela de sélectionner l'objet en question via une interface, Pixymon. Nous avons ensuite choisi d'utiliser une balise lumineuse pour que la camera la repère le plus loin possible. balise test.
Grâce à cette balise nous avons pu déterminer la distance maximale de détection avec une balise de taille réglementaire. Nous avons ainsi déterminé que la balise était capable d'effectuer une détection à approximativement 6m.
Programme de gestion du cap
Nous avons réalisé un programme permettant de récupérer la position en X d'un objet par rapport à la caméra
Code exemple
Cette fonction a été testée avec le main suivant
Code exemple
Il est nécessaire d'appeler les bibliothèques SPI.h et Pixy.h, et de déclarer et d'initialiser Pixy dans le setup. Ceprogramme ne permet cepandant pas l'usage des servomoteurs, limitant le champ de vision.
Mise à l’arrêt du robot et le perçage du ballon
La mise à l’arrêt du robot et le perçage du ballon doivent avoir lieu simultanément. Cela doit se produire quand le robot est arrivé dans le coin opposé.
Mise à l’arrêt du robot
Pour se diriger vers le bon coin, le robot est guidé par la caméra qui suit une balise lumineuse. Maintenant qu'il est guidé dans la bonne direction, nous devons procéder à une mise à l’arrêt rapide des qu il franchi le coin opposé. Le coin possède la particularité d'avoir une surface au sol de couleur blanche, alors que le reste du sol est bleu. Une solution évidente est d’utiliser le principe d’une diode émettrice infrarouge et d'un photo transistor récepteur infrarouge. Ainsi on pourra arrêter le robot quand il franchit une surface blanche.
Le capteur CNY70 : Nous pourrons utiliser ce capteur infrarouge pour détecter la couleur du sol.
Schéma et dimensionement composants
Emetteur: If = 20mA (Vf = 1.15V), Re = (5V-Vf)/If = 195 ohm.
Collecteur: Ic = 0.5mA (pour If = 20mA, Vce = 5V, d = 2mm), Rc = Vce /Ic = 10 kohm.
Schéma et routage sur Eagle
Réalisation carte
le transistor mofset : Le transistor est un composant électronique qui est utilisé comme interrupteur dans les circuits logiques, comme amplificateur de signal, pour stabiliser une tension, moduler un signal ainsi que pour de nombreuses autres applications.On a utilisé le transistor mofset fournit 5V pour le moteur tourne et perce le ballon.
Schéma et routage sur Eagle
Réalisation carte
Perçage du ballon
Nous avons testé deux moteurs ,un moteur normal et SM-S4303R et deux matériaux,le fer et le plastique pour faire la perçage:
Finalement nous avons choisi le moteur normal,car le SM-S4303R est moins puissant,il tourne pas assez vite, pour percer des ballons c'est pas possible, Pour l'aiguille, nous avons choisi d'utiliser du fer, afin de facile de faire de pointe et sa facilité d'utilisation.Pour fixer le moteur on met le à un accommodant .
Nous avons met un ballon dessus d'accommodant et utilise des cordes le fixe,on place des anode et cathode avec la carte de arduino,quand on demarre le robot, une carte avec le capteur cny60 qui connait des couleurs,selon des règles,le robot cherche point final et arrêt,la carte arduino et la carte utilise transistor mofset avec la tension fournissent 5 V tourne l'aiguille et perce de ballon.