plan du rapport - faculté polytechnique de mons · d’autre part pour chaque match il y a deux...

82
- 1 -

Upload: phungmien

Post on 16-Sep-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

- 1 -

- 2 -

Plan du rapport

Introduction.................................................................................................................................................................. 4

Remerciements...................................................................................................................................................4 Règlement du concours « Coconut Rugby » :....................................................................................................5

1. Voici le plan de l’aire de jeu : .................................................................................................................. 7 2. Voici les positions possibles des palmiers et des balles : ......................................................................... 8

I. Mécanique............................................................................................................................................................ 9 1. Introduction...................................................................................................................................................... 9 2. Prototypes. ....................................................................................................................................................... 9

1. Système de ramassage.............................................................................................................................. 9 2. Systèmes de lancement des balles. ......................................................................................................... 13

3. Conception et réalisation du robot final - systèmes mécanique utilisés. ........................................................ 16 1. Introduction............................................................................................................................................ 16 2. Mécanique de motorisation des roues du robot...................................................................................... 16 3. Mécanisme de ramassage des balles. ..................................................................................................... 18 4. Mécanisme de lancement des balles....................................................................................................... 20 5. Mécanisme de placement des balles dans la catapulte. .......................................................................... 22 6. Mécanisme de cueillage des balles dans les cocotiers............................................................................ 23 7. Mécanisme de levage de la poêle. .......................................................................................................... 25 8. Mécanisme du pare – chocs avant.......................................................................................................... 27 9. Mécanisme de plaquage au sol des odomètres. ...................................................................................... 29 10. Plaques d’habillage du robot. ............................................................................................................. 31 11. Structure mécanique finale du robot. ................................................................................................. 31

II. Electronique de puissance. ............................................................................................................................. 33 1. Batteries. ........................................................................................................................................................ 33 2. Circuit du haut................................................................................................................................................ 33 3. Circuit du milieu. ........................................................................................................................................... 34 4. Circuit du bas. ................................................................................................................................................ 36

III. Motorisation. .................................................................................................................................................. 39 1. Moteurs de propulsion. .................................................................................................................................. 39 2. Moteurs des actuateurs................................................................................................................................... 40

Moteur de l’ascenseur : ......................................................................................................................................40 IV. Electronique de commande. ........................................................................................................................... 42

1. Introduction.................................................................................................................................................... 42 Contrôle. ............................................................................................................................................................42 Capteurs. ............................................................................................................................................................42

2. Principe général de transmission des informations. ....................................................................................... 43 3. Les micro-switchs. ......................................................................................................................................... 44

1. Principe. ................................................................................................................................................. 44 - Applications dans le robot...................................................................................................................... 44

4. Les télémètres infra-rouge.............................................................................................................................. 45 1. Principe. ................................................................................................................................................. 45 - Application au robot............................................................................................................................... 46

5. La caméra....................................................................................................................................................... 46 1. Principe. ................................................................................................................................................. 46 - Placement sur le robot. ........................................................................................................................... 48

6. Le sonar ultrason............................................................................................................................................ 48 1. Introduction............................................................................................................................................ 48 2. Principe de fonctionnement.................................................................................................................... 48 3. Communication entre le PIC et l’ATméga............................................................................................. 50 4. Balises. ................................................................................................................................................... 50

7. Les odomètres. ............................................................................................................................................... 52 Pourquoi ? ..........................................................................................................................................................52 Comment ? .........................................................................................................................................................52

1. la théorie................................................................................................................................................. 52 2. Comment déterminer ∆ D et ∆ G ? ........................................................................................................ 54 3. Aller à un point ...................................................................................................................................... 56 4. Disposition mécanique des odomètres ................................................................................................... 60 5. étalonnage des odomètres. ..................................................................................................................... 61 6. Communication entre cartes :tentatives inabouties, erronées................................................................. 61

8. Récapitulatif en vue d’élaborer une stratégie. ................................................................................................ 63

- 3 -

V. Programmation .............................................................................................................................................. 64 1. La programmation de l’ATMEGA 128.......................................................................................................... 64

1. Les différentes fonctions du programme................................................................................................ 64 2. Le programme principal......................................................................................................................... 73

2. Stratégie générale lors de la coupe de Belgique............................................................................................. 75 Conclusions à propos de cette stratégie .............................................................................................................75

3. Stratégie générale pour l’eurobot ................................................................................................................... 76 4. Grafcet............................................................................................................................................................ 77

Sponsoring ................................................................................................................................................................. 80 VI. Conclusion. .................................................................................................................................................... 81

conseils aux suivant… .......................................................................................................................................81

- 4 -

Introduction.

Cette année, pour la troisième fois, le service de Génie Mécanique a proposé à six de ses étudiants de participer à la coupe de robotique en tant que projet de 5ème année.

Ce concours consiste à réaliser un robot totalement autonome capable de disputer des matchs face à un adversaire, sur un terrain de jeu changeant chaque année.

Innovation, ingéniosité, fair-play, connaissances techniques, mise en œuvre pratique, travail d’équipe, organisation, assiduité sont quelques-uns des éléments nécessaires pour pouvoir mener à bien un tel projet. En effet, celui-ci demande beaucoup de travail dans les différents domaines que sont la mécanique, l’électronique et l’informatique. Cette pluridisciplinarité, représentée par le résultat d’une année de travail, illustre bien la caractéristique de nos études d’Ingénieur Civil Mécaniciens.

Cette année, l’équipe est composée de :

- Boshyk Nicolas pour le sponsoring et la mécanique ; - Deplus Kevin pour les contacts extérieur et l’informatique ; - Gobert Christophe pour le règlement et la mécanique ; - Rousseau Vincent pour la logistique et l’électronique de puissance ; - Thielemans Fabien pour la coordination et l’électronique de commande ; - Vanderperre Matthieu pour le secrétariat et la vision.

Avant de continuer avec l’explication du règlement de cette année, Nous désirerions faire quelques

remerciements…

Remerciements La réalisation d’un robot nécessite beaucoup de travail. Pour cela, nous avons été aidés par plusieurs services

dans lesquels certaines personnes ont passé un temps précieux à concevoir et développer des systèmes mais aussi à nous conseiller et discuter de nos idées et problèmes.

Nous tenons à remercier tout particulièrement : M. le Recteur Serge Boucher et M. le Doyen Jean Hanton pour leur financement ; M. les professeur Enrico Filippi et Pierre Dehombreux pour la proposition du projet ainsi que le suivi et

remarques pertinentes; M. Le professeur Marc Delhaye pour l’aide apportée dans le domaine électronique et toutes les idées et

conseils très intéressants; M. Pierre Lecomte, du service de physique générale, pour l’aide apportée au développement des capteurs

ainsi que ses conseils techniques très utiles; Les assistants du service de Génie Mécanique Raffaele Papantonio et Olivier Basile pour leur aide de tous les

jours ainsi que Antonella Contino, Edouard Rivière, Jacques de Arizon et Vincent Stalon pour leurs remarques et l’expérience qu’ils nous ont transmise en tant qu’anciens « roboticiens »;

M. Johan Dechristophoris pour l’aide apportée à la réalisation des cartes électroniques, sa disponibilité et son aide précieuse lors des concours belge et européen ;

M. Laurent Vergari pour l’aide à la conception et à la fabrication mécanique du robot ainsi que pour sa sympathie, son caractère, ses idées révolutionnaires et surtout son soutient moral tout au long de l’année (nuit et jour… mais surtout nuit) ;

M. David Arroyo, étudiant de 4ème , qui a participé au concours en concevant et construisant le robot secondaire ;

M. Laurent Pinchart, pour son savoir-faire informatique et sa motivation; Notre sponsor, La Maison de l’Entreprise, pour sa participation aux frais ; Nos supporters et pom-pom girls, pour leurs encouragements ; Nous remercions aussi toutes les personnes qui ont participé de près ou de loin à la réalisation du robot et que

nous aurions omis de citer ci-dessus (qu’ils nous le fassent savoir).

- 5 -

Règlement du concours « Coconut Rugby » : Cette année les robots se retrouvent sur une île des tropiques .

Figure 1 : terrain de jeu

L’aire de jeu, de dimension de 210 x 300 cm est composée d’un damier (orange et jaune sur le dessin) et de deux zones d’en-but (en bleu) de dimension 30 x 210 cm chacune. Voici une coupe pour se rendre compte de la taille de l’en-but.

Figure 2 : dimensions de l’en-but

L’objectif est de ramasser les noix de coco et de les porter dans l’en-but adverse (essai) ou de les lancer entre les cocotiers du but adverse (drop). Cette année l’aire de jeu comporte 14 balles dont 6 se trouvent perchées dans les deux cocotiers. Les balles voient leur point le plus bas à 30 cm par rapport à l’aire de jeu et sont disposées à 120 degrés sur des anneaux. Par ailleurs ces cocotiers peuvent occuper des positions différentes ! Les balles et cocotiers sont disposées par symétrie centrale avec le centre de la table.

- 6 -

Il existe 9 positions pour les cocotiers, La position de jeu lors d’un match est choisie par tirage au sort par les arbitres. D’autre part pour chaque match il y a deux balles bonus, devant et à gauche de chaque but. Cette balle est destinée à faciliter l’homologation des équipes . Comme les cocotiers, 6 des 8 balles se trouvant par terre n’ont pas de position fixe, c’est encore les arbitres qui par tirage au sort déterminent leurs positions. Toutefois la position des balles doit se trouver aux intersections du damier et dans un rectangle prédéfinit à l’avance par le règlement. Comme au vrai rugby, le but des robots est de réaliser des essais et /ou des drops dans le goal ou dans l’en-but adverse. Le règlement du concours est strict, un certain nombre de points doivent être respecter pour réussir à homologuer son robot auprès des arbitres avant de pouvoir réellement concourir . Citons quelques points essentiels :

- Les équipes peuvent avoir un robot principal et secondaire - Les robots doivent être complètement autonomes - Chaque robot est autorisé à avoir un déploiement - Le robot principal ne doit pas faire plus de 40 cm de hauteur et 120 cm de périmètre non déployé. - Lorsque le robot est déployé son périmètre ne doit pas être supérieur à 180 cm - Le robot secondaire ne doit pas faire plus de 20 cm de hauteur et 120 cm de périmètre non déployé - En outre la somme de périmètre non déployés des robots secondaire et principal ne doit pas excéder 180

cm - Les robots principal et secondaire doivent être munis d’un support de balise, d’un bouton d’arrêt

d’urgence rouge d’accès vertical au dessus du robot. - Les robots ne doivent pas être conçus pour secouer les palmiers - Les robots ne peuvent utiliser d’air comprimé à plus de 4 bar - Les robots ne peuvent pas utiliser de matières dangereuses - Lors des phases de jeu, les équipes disposent de 2 min pour placer leurs robots sur la table de jeu. Après le

placement de leurs robots, les équipes ne peuvent plus toucher leurs robots, ensuite les arbitres disposent les balles et palmiers sur le terrain.

- Le démarrage des robots doit se faire avec un cordon de 50 cm minimum - Les équipes peuvent utiliser des balises - ….

Bien encore d’autres points du règlement existent mais le but n’est pas ici d’en faire état mais juste un bref descriptif. Les balles de jeu sont de forme type balle de rugby et leur couleur est rouge . Les balles ont un coté de 10 cm sur une largeur de 6 cm et pèse en outre 45 grammes. Elles sont de type anti-stress et par voie de fait sont facilement déformables.

- 7 -

1. Voici le plan de l’aire de jeu :

Figure 3 : dimensions du terrain

- 8 -

2. Voici les positions possibles des palmiers et des balles :

Figure 4 : positions possibles des balles et des palmiers

Les croix représentent les positions possibles pour les balles. Les points représentent les positions possibles pour les balles et pour les palmiers. Par ailleurs on y voit les deux balles bonus à gauche et à 60 cm de chaque but.

- 9 -

I. Mécanique.

1. Introduction.

Après avoir pris connaissance du règlement, nous avons constaté d’une part que les balles se trouvaient sur l’aire de jeu et dans deux cocotiers, et d’autre part, que les points étaient attribués par des drops ou par des essais. Suite à ces constatations, nous avons décidé d’essayer de mettre en œuvre des systèmes mécaniques pour répondre aux 4 situations proposées. Nous avons ainsi distingué 4 fonctions mécaniques de base nécessaires : le ramassage des balles, le lancement des balles dans le but, la « cueillette » des balles dans les cocotiers et le déversement des balles dans l’en-but.

La principale difficulté dans la conception de ces systèmes ne résidait pas dans leur réalisation individuelle

mais dans l’assemblage et la coordination de ceux-ci. A ces difficultés, venait encore s’ajouter un facteur capital : l’encombrement du robot. Le règlement prévoyait en effet un périmètre maximum et une hauteur maximale pour le robot.

Durant le premier semestre, nous avons réfléchi aux différentes stratégies envisageables ainsi qu’aux systèmes

mécaniques réalisables. Nous avons ainsi conçu plusieurs prototypes afin de comparer les avantages et inconvénients de chacun d’eux. La construction du robot final ne débuta qu’au second semestre. Le projet étant à la base un projet de mécanique, nous avons voulu réaliser un robot qui assurerait un maximum de tâches. Nous avons donc tenté de créer un robot complet combinant des systèmes mécaniques originaux et performants avec d’autres systèmes (de vision, d’ultrason,..). Tous ces efforts de conception furent récompensés par le prix de la créativité décerné lors de la coupe de Belgique et par une nomination parmi les 8 robots européens les plus innovants lors d’Eurobot.

La mécanique du robot a énormément évolué tout au long de la conception et de la fabrication… Ce gros

chapitre concernant la mécanique va présenter d’abord les différents prototypes fort développés pour certain mais qui n’ont pas été retenus pour le robot final et ensuite il s’attardera à développer les différents mécanismes du robot tel qu’il est actuellement. Toute cette mécanique a nécessité des heures de réflexion suivies de journées et de nuit de mise en œuvre. Nous voudrions encore une fois remercier M. Laurent Vergari pour ses bons conseil ainsi que la joie et la bon humeur qui le caractérisent.

2. Prototypes.

Lors de la réalisation d’un robot ou d’un quelconque projet, on est amener à réaliser des prototypes afin de valider un système qui sera utilisé. Ces prototypes présentent bien des avantages et caractéristiques :

- Tout d’abord ils ne sont pas encore bien dimensionner et pas optimiser - Ils mettent en lumière les défauts du prototype - Ils mettent en lumière ses points forts et permettent donc de repenser l’ensemble afin de réaliser la version

définitive - Ils peuvent être réalisé en très peu de temps - Cependant, du fait de leur rapide conception, on assiste parfois à des prototypes qui ne ressemblent à rien

du tout. C’est une étape essentielle dans la réalisation d’un grand projet, d’autant plus que la réalisation d’un robot demande une miniaturisation maximale de tous les mécanismes à bord. Voici deux prototypes réalisés, l’un pour le lancement des balles (drop) l’autre pour le ramassage des balles au sol.

1. Système de ramassage.

a) L’ascenseur.

Etant donné la position du goal (420 mm) par rapport au sol, nous avons rapidement conclu qu’il était préférable d’effectuer un tir balistique au sommet du robot. Néanmoins, pour y parvenir nous avions donc besoin d’un système qui montait les balles à l’étage du robot. Une fois en haut, ces balles seraient redirigées vers le système de lancement.

Nous avons donc élaboré un mécanisme de ramassage en continu permettant primo de ramasser les balles au

sol, secundo de monter celles-ci au niveau supérieur du robot et tertio, de les diriger vers le système de lancement. Comme nous le montrent les figures, nous avons choisi un système à chaînes. Il est constitué de quatre pignons de

- 10 -

dérailleur de marque Shimano fixés sur deux axes ; la rotation des axes est permise par quatre roulements à billes logés dans des supports (bagues) fixés au bâti. Sur la première version du prototype, nous avions placé quatre petits profilés en U. Ceux-ci, groupés par deux, avaient pour rôle d’attraper la balle qui se présentait à l’entrée de l’ascenseur et de la supporter jusqu’au niveau supérieur. Ils étaient rendus solidaires de la chaîne grâce à leur axe commun avec un des maillons de la chaîne. La forme du profilé était très importante ; elle lui permettait en effet de se plaquer autour de la chaîne dans la zone où la chaîne descendait et de rester perpendiculaire à celle-ci lors de la phase de montée. Cette propriété des profilés présentait donc un bel avantage en terme d’encombrement ; on pouvait dès lors gagner 50 mm à l’avant du robot vu l’absence de déploiement dans cette zone. Néanmoins, on remarqua lors des tests un inconvénient majeur à ce système. Si la balle n’était pas assez avancée dans l’entonnoir, les profilés avaient tendance à l’écraser contre le sol, bloquant ainsi complètement le système.

Nous avons alors tenté d’améliorer le système en modifiant ces profilés ( Fig. 5). Ceux-ci furent remplacés par

deux tiges filetées vissées chacune dans une bague cylindrique. Ces deux bagues furent solidarisées par un axe autour duquel fut placé un rouleau de nylon. L’autre extrémité des tiges filetées fut vissée sur de petites pièces de profilé en U. Le but de ce montage était de garder le même principe d’utilisation qu’à l’origine, c’est-à-dire un rabattement en phase de descente et un déploiement perpendiculairement à la chaîne lors de la montée. Cette modification a permis de mieux attraper les balles grâce à la présence du rouleau qui, en roulant sur la balle au début, ne la plaquait plus au sol. Cependant, lorsqu’une balle arrivait au même moment que le rouleau, elle était rejetée au lieu d’être avalée.

Nous verrons plus tard que l’ascenseur utilisé dans le robot se rapproche fortement de ce prototype auquel nous avons apporté une amélioration déterminante.

Figure 5: Ascenseur avant modifications (gauche) et après modifications (droite)

Roulements Tige

Chaîne

- 11 -

b) griffe de ramassage. Nous avons été amené à réaliser assez bien de prototypes de ramassage des balles de rugby au sol. En effet la forme ronde des balles nous rendait la tâche ardue, qui plus la déformabilité des balles était un problème supplémentaire. Un de nos nombreux prototypes a été la griffe de ramassage. Voici une vue de ce prototype rapidement réalisé :

Figure 6 : en haut prototypes d’ascenseurs, à gauche avant modification, à droite après modification

Rouleau

Profilé en U

- 12 -

Comme son nom et la photo l’indique, ce mécanisme comporte deux griffes. La photo ne le montre pas mais un moteur DC a été lié à l’axe de rotation du système. Ce moteur fait donc tourner les griffes dans un mouvement circulaire (cf la flèche) et doit par cette méthode ramasser les balles qu’on lui présente. Le but est ici de profiter de la forme ovoïde des balles. En effet avec un écartement adéquat entre les deux griffes, on peut arriver par le mouvement de rotation des griffes à faire passer ces dernières sous la balle et ainsi soulever la balle. Ce prototype ne fonctionne pas du tout ou alors très rarement, il faut en effet qu’on lui présente les balles avec leur grand coté face aux griffes et bien centré ! C’est pourquoi nous ne citerons que les inconvénients de ce mécanisme :

- Doit recevoir les balles de la façon expliquée ci-dessus - Prend beaucoup de place du fait de son mouvement de rotation des griffes - N’est pas fiable

D’autre part nous ne savions pas comment pouvoir réaliser le déchargement des balles plus haut dans le robot à l’aide de cette mécanique. Les balles avaient tendance à rester coincées dans les griffes et si jamais elles arrivaient à en sortir, il fallait être certain que le passage était libre pour que les griffes continuent leur mouvement de rotation. Par conséquent ce prototype a très rapidement été écarté à l’avantage du prototype à chaîne.

Bâti

Griffe

Axe de rotation

- 13 -

2. Systèmes de lancement des balles.

a) Catapultes à air comprimé.

Nous avons réalisé vers la mi-octobre un prototype de lancement des balles, autrement dit une catapulte. Cette catapulte fonctionne grâce à de l’air comprimé. Le premier prototype réalisé fut celui-ci :

D’un fonctionnement simple, il ne permettait que de lancer les balles de façon désordonnée et pas très loin. Le godet n’est pas optimal. Nous avons ensuite réalisé le prototype ci-dessous beaucoup plus impressionnant .

Cette catapulte fonctionne grâce à un bras de levier d’environ 20 cm. La balle se trouve dans le godet

avant son éjection. Le mouvement de rotation du bras de levier est effectué à l’aide d’un piston. Ce piston dégage une grande énergie .

Bâti Piston

Godet

Godet

Bras de levier

Piston

Bâti

- 14 -

Les principaux avantages de cette réalisation sont : - La puissance de lancement des balles (4-5 mètres de distance) - La facilité de conception de ce mécanisme qui ne nécessite qu’un axe de rotation sur lequel est fixé le bras

de levier, un piston un godet, un réservoir d’un comprimé, une butée et un système de commande pneumatique.

Les principaux inconvénients sont :

- L’encombrement important du mécanisme même si le prototype n’est pas encore optimisé. - La nécessité d’avoir un réservoir d’air comprimé qui prend énormément de place à l’intérieur du robot - La nécessité d’avoir un système de commande pneumatique - La nécessité d’avoir un compresseur à proximité lors des phases de jeu du concours ce qui peut poser

quelques soucis d’organisation. Toutes ces considérations nous ont amené à ne pas adopter cette catapulte lors de la réalisation de notre robot . Cependant le principe mécanique de la catapulte utilisée sur le robot final est identique à celui de la catapulte à air comprimé. En effet nous avons toujours réalisé le lancement des balles par un mouvement alternatif d’un bras de levier mais à l’aide d’une mécanique plus petite, moins encombrante et plus simple.

b) système à came.

Le troisième prototype réalisé pour le lancement des balles dans le goal fut le système à came. Il est composé

d’un bâti, d’une plaque en rotation, d’une came actionnée par un moteur à courant continu, d’une butée et de ressorts. La plaque centrale est solidaire d’un axe logé dans les plaques latérales, faisant office de paliers. En position naturelle (Fig. 7 droite), cette plaque est inclinée par l’action de la force exercée par les ressorts (reliés au bâti). Le moteur est également fixé sur le bâti à l’aide de trois vis. La forme de la came est importante dans cette configuration vu qu’elle détermine le mouvement d’armement de la plaque. Nous avons donc usiné une came interrompue en forme de « virgule ». Elle présente un axe de rotation décentré permettant un armement progressif de la plaque. Après avoir effectué une rotation de 270° à partir de sa position initiale (Fig.7 gauche), la came libère la plaque qui éjecte la balle.

Après plusieurs essais, nous avons rapidement remarqué que la portée du tir n’était pas très importante (500

mm maximum). Nous avons tenté d’augmenter ce facteur en utilisant des ressorts plus rigides. Suite à ces modifications, nous n’avons pas obtenu un gain très significatif ; de plus, si on augmentait trop la force de rappel des ressorts, le moteur n’arrivait plus à vaincre le couple résistant engendré. Nous avons également constaté que la qualité et la direction des tirs étaient fortement tributaires de la position de la balle. Nous en avons donc conclu qu’il serait préférable d’amener les balles de sorte qu’elles se retrouvent dans une position similaire lors de chaque tir. Le principal avantage d’un système de ce genre est le faible encombrement par rapport au système à air comprimé. Finalement, ce système n’a pas été retenu pour les raisons évoquées et à cause des bonnes performances du prototype à engrenage.

Figure 7: Prototype de lancement à came armé (à gauche) et non armé (à droite)

Bâti

Came Plaque centrale

Ressort

Axe de rotation

Moteur

- 15 -

c) catapulte à engrenages. Le prototype suivant fut le dernier réalisé pour cette fonction. Son fonctionnement résulte de la combinaison de

deux systèmes : un ressort en torsion et un engrenage. Son principe est semblable à celui d’un piège à souris. La cage, composée de deux lattes d’aluminium et de deux tiges filetées, est rendue solidaire de son axe par quatre contre-écrous. Le ressort de torsion est positionné sur l’axe de rotation et prend appui d’une part sur une des lattes et d’autre part sur la butée. Hormis cette fonction, la butée a également le rôle de bloquer la cage en fin de course. Le procédé utilisé pour mettre en mouvement ce système est un engrenage (Fig. 8). La particularité de celui-ci est que la roue dentée montée sur l’axe du moteur présente un secteur non denté. Le sens de rotation de l’arbre moteur est antihorlogique. Au début de la rotation de l’arbre, la cage est à butée (en position haute) ; elle reste dans cette position jusqu’au moment où la première dent du pignon vient engrener avec la grande roue dentée. La cage s’incline alors vers l’arrière jusqu’à la fin de l’engrènement (position basse); à ce moment, la roue dentée se trouve à nouveau libre et la force de rappel du ressort provoque le retour rapide de la cage en position haute. La balle se trouvant entre les tiges est propulsée vers l ‘avant.

Cette solution s’est révélée très efficace, envoyant les balles à plus d’un mètre avec une trajectoire plutôt parabolique. Ce système présente également l’avantage d’être réglable tant au niveau de la force de rappel qu’au niveau de la trajectoire du tir, en jouant sur la butée. Avant d’effectuer des tests, nous avions quelques craintes en ce qui concerne le début de la phase d’engrènement, mais finalement les tests furent concluants. Cependant, nous avons constaté qu’il serait préférable de prévoir un godet de lancement afin d’uniformiser au maximum la position de la balle lors du lancement.

Secteur non denté

Figure 8 : Prototype de catapulte

Butée

Axe de rotation

Ressort

Engrenage

- 16 -

3. Conception et réalisation du robot final - systèmes mécanique utilisés.

1. Introduction. La construction du robot final (Fig. 9) débuta au

second semestre. Après avoir élaboré et testé plusieurs prototypes, nous avons dû choisir les systèmes que nous allions mettre en œuvre. Le choix se fit sur base de plusieurs critères : performance, fiabilité, compatibilité entre systèmes, encombrement, coût, contraintes techniques,... La première étape dans cette construction fut le choix de l’architecture globale du robot. Nous avons décidé d’utiliser une architecture relativement proche de celle du robot de l’année précédente, à savoir une base carrée de 295 mm de côté. Nous avons voulu exploiter le périmètre maximum autorisé pour le robot principal afin de soulager les contraintes d’encombrement.

Cette année, nous avons construit deux bases

roulantes pour le robot. La première constitua la base du robot final, et la seconde fut employée comme plate-forme de tests pour les développements de la vision, du sonar, des odomètres et de la caméra. Nous allons maintenant détailler chaque partie mécanique du robot.

Figure 9 : modélisation du robot final

2. Mécanique de motorisation des roues du robot

Le robot se meut à l’aide de deux roues en matière plastique montées à la presse sur des axes en acier. Ces axes tournent dans des paliers lisses en bronze (5). Cet ensemble acier – bronze à le mérite d’avoir un coefficient de frottement très petit. Les palier lisses (5) sont montés à la presse dans les support de palier (4).

Moteurs (1)

Poulies (2)

Roue pvc (3)

Support (4) Palier en bronze et l’axe (5) Figure 10 : motorisation

- 17 -

La transmission de puissance aux roues (3) se réalise au travers de poulies (2) et de courroies synchrones crantées. La poulie montée sur l’axe des roues a un diamètre double de la poulie montée sur l’axe du moteur. On réalise donc un rapport de réduction de ½. Le choix d’un tel rapport de réduction était nécessaire pour ne pas voir le robot, lorsque les moteurs sont commandés à pleine vitesse, parcourir la table en 1 seconde. On aurait pu aussi attaquer avec des renvois d’angle les axes des roues ou encore réaliser une attaque directe. Ce qui a motivé le choix de poulies réside dans le choix de l’architecture générale : une plate-forme carré pour le robot et les dimensions de cette plate-forme. Du fait de ce choix il était impossible de faire une attaque directe des axes des roues. Il fallait aussi pouvoir installer l’ascenseur et entonnoir au centre du robot (8), ce qui explique que les moteurs se soient retrouver en arrière de la plate-forme. Les moteurs sont fixés à la plate-forme à l’aide d’équerres (7) sur lesquelles les moteurs sont vissés. Si l’ensemble tel que décrit dans les lignes supérieures était construit, il n’aurait aucun équilibre puisque seulement deux roues, et donc deux points de contact avec le sol sont réalisés. Il faut donc stabiliser la plate-forme. Cette stabilisation est réalisée avec 4 billes folles disposées dans les coins de la plate-forme. Ces billes (6) sont amenées au niveau du sol à l’aide de tiges filetées sur lesquelles les billes sont vissées et bloquées . Que ce soit les supports de palier ou les équerres, elles sont fixées à la plate-forme par des vis ou boulons. Les poulies sont bloquées en rotation par des vis de pression sur les axes des moteurs et par des goupilles sur les axes des roues. Au départ seules des vis de pression ont été utilisées mais sur les axes des roues moteurs un desserrage fréquent se manifestait. Des goupilles ont alors été utilisées.

Plate-forme en plexiglas

Equerre de fixation (7)

Espace ascenseur(8) Billes folles (6)

Figure 11 : base du robot final

- 18 -

3. Mécanisme de ramassage des balles. Pour le ramassage des balles situées sur l’aire de jeu, nous avons élaboré un système d’ascenseur (Fig. 12) basé

sur le principe du prototype développé. Son principe est d’avaler les balles sur le chemin du robot et de les monter jusqu’au niveau supérieur. Notre objectif était de créer un système de ramassage en continu des balles afin de faciliter la programmation et de ramasser ainsi un maximum de balles en un minimum de temps.

Figure 12 : ascenseur sur la base du robot

L’ascenseur est composé de quatre pignons dentés et deux chaînes montées en parallèle sur deux axes de 8mm. Les pignons (de marque Shimano) sont identiques à ceux utilisés pour le prototype, ils présentent 10 dents. Leur diamètre extérieur vaut 39 mm et intérieur 8mm. L’écartement entre les pignons est de 85mm et l’entraxe 225 mm (chaîne tendue). Le montage des pignons sur les axes fut réalisé à la presse. L’arbre moteur est l’axe supérieur, il est entraîné par un moteur à courant continu Maxon de puissance 4 W et de vitesse 56 tr/min. C’est le critère de vitesse qui a influencé notre choix de moteur. Nous avions en effet besoin d’une vitesse suffisante pour faire monter les balles rapidement sans toute fois être trop importante pour avoir le temps de les avaler. Pour des raisons d’encombrement, il nous était impossible d’entraîner l’arbre moteur directement. Dans ce cas, le moteur aurait été en dehors du périmètre autorisé. D’autre part, la position de l’ascenseur devait rester centrale pour des raisons évidentes de faciliter de conception et d’optimisation du ramassage. Par conséquent, nous avons opté pour une solution avec un renvoi d’angle.

L’axe de celui-ci (côté moteur) est rendu solidaire de l’axe du moteur par un manchon. Le blocage axial du

manchon sur l’axe du renvoi d’angle fut réalisé par une goupille fendue et celui sur l’axe du moteur par une vis de pression. L’arbre de sortie du renvoi d’angle est également rendu solidaire de l’axe supérieur de l’ascenseur par un manchon et un boulon. Cette dernière configuration fut choisie pour faciliter le démontage du système sans bouger le renvoi d’angle et le moteur. Celui-ci est fixé sur la partie supérieure du robot par l’intermédiaire d’un support en plexiglas. Le moteur est alors positionné via 4 vis sur le support, lui-même fixé par deux vis sur l’étage supérieur du robot. Remarquons qu’un alésage dans le support permet la libre rotation de l’axe du moteur. Le renvoi d’angle est

- 19 -

quant à lui fixé directement sur la partie supérieur du robot par 3 boulons. L’axe inférieur de l’ascenseur est

soutenu par 2 roulements à billes et l’axe supérieur, par un roulement à billes rotulé afin de reprendre le défaut

d’alignement. Les roulements employés sont de marque SKF, présentant un diamètre extérieur de 22mm et intérieur de 8 mm, ils ont été montés sur les axes à la presse. Les roulements sont logés dans des supports de plexiglas, eux-mêmes fixés sur la partie inférieure ou supérieure du robot par 2 vis.

La cage de l’ascenseur comporte trois parois permettant d’accompagner la balle dans sa montée et de la

« canaliser ». Les parois latérales sont prolongées vers l’avant par une petite partie de tôle inclinée vers l’extérieur. Les parties de tôle forment ainsi un entonnoir dont l’objectif est de ramener les balles vers le centre du robot pour y être avalées. La plaque de fond, quant à elle, s’est révélée d’une importance capitale pour la montée des balles et le transfert de celles-ci vers la catapulte. Elle présente ainsi une certaine courbure dans sa partie inférieure pour créer une rampe facilitant le début de l’ascension de la balle. Une autre rampe est aussi présente au sommet de la plaque afin de permettre à la balle de rouler vers la catapulte. La partie verticale de la plaque est légèrement inclinée vers l’avant (10°) afin de comprimer la balle en fin de montée et d’améliorer l’éjection de celle-ci vers la catapulte. Quelques aménagements furent nécessaires pour faciliter la maintenance du robot. Les rainures (fig. 14) permettent de glisser l’axe inférieur de l’ascenseur et donc de démonter celui-ci sans enlever les parois. En outre, nous avons réalisé des encoches dans l’entonnoir afin de laisser le passage des tiges des micro-switchs. Précisons finalement que l’entonnoir est fixé sur le robot via des équerres solidaires des tiges filetées de l’ossature.

Figure 13 : Comparaison de modélisation de l’ascenseur et du prototype

Rampe

Rainure

Encoche microswitch

Rampe

Figure 14 : parois de l’ascenseur

Moteur

Roulement

Paroi

Support roulement

Renvoi d’angle

Manchon

Entonnoir

Tige

- 20 -

Lors de la réalisation des tests sur le prototype, nous avions relevé quelques inconvénients du système employé. Les rouleaux montés sur tiges attrapaient correctement les balles à condition que celles-ci soient suffisamment enfoncées dans l’entonnoir. Dans le cas contraire, elles étaient repoussées voire parfois plaquées sur le sol, bloquant ainsi le système. Nous avons donc tenté de remédier à ce problème en remplaçant les rouleaux montés sur tige par des rouleaux seuls. Nous avons ainsi suppléé l’axe d’un maillon de chacune des chaînes par une tige commune aux deux chaînes. Cette tige, faisant office d’axe pour le maillon, fut bloquée axialement par deux rondelles auto serrantes. Avant la fixation de la tige, nous avons interposé le rouleau entre les chaînes utilisant ainsi la tige comme axe. Cette première modification a contribué à améliorer légèrement le système mais les résultats ne nous satisfaisaient pas encore, même en changeant la taille du rouleau. C’est pourquoi, nous avons testé une seconde amélioration qui s’est révélée très efficace. Celle-ci a consisté à remplacer plusieurs axes des maillons des chaînes par des tiges de 3mm afin de former une pseudo bande. Le nombre de tiges utilisées (22) fut obtenu suite à plusieurs tests. Dans cette configuration, la pseudo bande comprime légèrement la balle et « épouse » la forme de celle-ci grâce à l’espace vide entre deux tiges. La balle est alors montée à l’étage supérieure en roulant contre la paroi du fond. Nous avons dû trouver le réglage optimum en ce qui concerne la position de l’axe inférieur de l’ascenseur. Celui-ci doit se trouver à environ 70 mm du sol afin que les tiges compriment les balles sans trop les écraser.

Le principal avantage de cette modification est que l’ascenseur attrape plus de 90% des balles se présentant à

l’entrée et surtout, quelque soit la position de la balle ! Dans les cas les plus critiques, l’ascenseur arrive même à monter deux balles entrées simultanément. Un autre point positif de ce système est qu’il permet le stockage de plusieurs balles avant de les tirer. Par contre, l’inconvénient de ce système réside dans son démontage laborieux.

4. Mécanisme de lancement des balles.

Pour le lancement des balles dans le but, nous avons choisi d’utiliser la catapulte à engrenage (Fig. 15). Le système présente un encombrement relativement réduit par rapport à la catapulte à air comprimé. Celle-ci nécessite un espace plus conséquent par la présence du réservoir d’air comprimé et à cause de la course du piston. Il présente également l’inconvénient d’être limité au niveau de son autonomie. Quant au système à came, il aurait également pu être appliqué mais dans une configuration différente de celle du prototype. Cependant, la catapulte à engrenage s’est immédiatement révélée performante et fiable.

Le principe de la catapulte est basé sur l’effort développé par un ressort de torsion combiné à un système

d’entraînement par engrenage. La catapulte est composée de deux montants en aluminium, solidaires de l’axe de rotation grâce à 4 écrous. Celui-ci est soutenu par deux roulements à billes de type SKF, eux-mêmes logés dans deux supports de plexiglas. L’axe de rotation est en fait une tige filetée (M6), c’est pourquoi nous avons inséré à la presse un écrou cylindrique (M6) dans chaque roulement. Cette opération nous a ainsi permis de visser les

Figure 15 : catapulte

Pignon à secteur non denté

Roue dentée

Godet

Axe de rotation

Butée Ressort de torsion Moteur

- 21 -

roulements sur la tige. Le ressort de torsion est positionné sur l’axe de rotation et prend appui d’une part sur le montant gauche et d’autre part sur une butée. Celle-ci est constituée d’une tige filetée (M6) sur laquelle on a vissé deux écrous cylindriques. La butée est fixée aux supports grâce à deux écrous montés serrés dans le plexiglas. Le rôle principal de la butée est de déterminer la position initiale de la catapulte. Nous avons positionné la butée de telle façon que le godet soit incliné de 60° par rapport au sol en position final. Lorsque le godet est trop incliné (80° par exemple), la balle ne monte pas assez et garde une trajectoire très plate. Par contre, une inclinaison trop faible engendre une trajectoire plus parabolique et une portée de tir moins longue. Ce choix (60°) constitue donc une bonne configuration pour obtenir un compromis entre la portée et la trajectoire du tir.

L’armement de la catapulte est réalisé par un système d’engrenage assez particulier. Cette particularité se situe

au niveau du pignon moteur ; celui-ci présente en fait un important secteur non denté. L’engrenage utilisé est de module inférieur à 1 (non métrique), le diamètre extérieur du pignon vaut 42 mm et celui du pignon 21 mm. Celui-ci est fixé sur l’axe du moteur par une vis de pression tandis que la roue dentée est vissée sur l’axe de la catapulte et bloquée par 2 écrous. Le nombre de dents du pignon fut calculé à partir de la course utile du godet, en considérant que la position basse du godet était à –5° environ.

Course utile de la roue ≈ 60° - (-5°) ≈ 65° ;

Rapport de réduction = 2 ;

→ Rotation 360° (pignon) ≡ rotation 180° (roue) ;

→ Course total/ course utile = 180° / 65° = 2,77 ;

Nombre total de dents du pignon = 24 ;

→ Nombre de dents utiles = 24/ 2,77= 8, 66

Finalement, nous avons gardé 8 dents sur le pignon car dans la configuration avec 9 dents, le godet descendait

trop bas. Signalons que le positionnement des roues a requis une importante précision au niveau de l’entraxe compte tenu du faible module.

Le moteur utilisé pour cette application est également un moteur Maxon à courant continu de 4 W, tournant à 40 tr/min. Les critères de sélection du moteur furent le couple et l’encombrement, la vitesse ne jouant pas ici un rôle déterminant vu le faible nombre de tirs par match (5 maximum). Le couple devait être suffisant pour vaincre la force du ressort de catapulte et de la raclette (cfr. point 5). Le moteur est fixé sur la plaque support gauche à l’aide de 4 boulons, sa position est inclinée de 45° afin de ne pas interférer avec la butée.

Au départ de la rotation du pignon, le godet est maintenu dans sa position « haute » par la force du ressort. Il

garde cette position jusqu’au moment où le secteur denté du pignon commence à engrener avec la roue dentée. Le godet s’incline alors vers l’arrière jusqu’à la fin de l’engrènement. A ce moment, la roue dentée redevient libre, provoquant le retour rapide du godet vers sa position naturelle et éjectant la balle par la même occasion.

Le godet que nous avons fabriqué pour la catapulte est issu d’un coude de 80 mm de diamètre en PVC utilisé

habituellement pour l’égouttage. Nous avons effectué une découpe transversale de celui-ci afin de ne garder que le

Figure 16 : modélisation de la catapulte et du godet

Rainure

Bord incurvé

- 22 -

fond du coude sur une hauteur de 30mm. Ensuite, nous avons réalisé 3 rainures destinées à assurer le positionnement correct du godet sur les montants d’aluminium et nous avons optimisé la forme (incurvée) des bords. L’avantage de ce godet est qu’il permet de lancer la balle quelque soit sa position. Si la balle se présente correctement, elle roule sur les flancs jusqu’à la partie incurvée. Par contre, lorsqu’elle arrive transversalement, elle tombe dans le godet. La qualité des tirs dépend fortement de la position de la balle dans le godet. En moyenne, on peut considérer que notre système de tir est performant sur 70% des essais (en condition de match).

Signalons avant de clôturer ce chapitre que les supports en plexiglas présentent également une autre fonction

que la fixation de la catapulte : ils permettent la rigidification de la structure du robot en se fixant sur la base de plexiglas et sur la partie supérieure du robot par 8 vis.

5. Mécanisme de placement des balles dans la catapulte.

Après plusieurs essais des systèmes précédents, nous avons constaté que la transition des balles entre

l’ascenseur et la catapulte ne s’effectuait pas toujours correctement. Les balles, parfois bloquées par les parois de l’étage supérieur, restaient devant le godet de la catapulte, provoquant des tirs complètement aléatoires. Pour remédier à ce problème, nous avons développé un mécanisme, baptisé « la raclette » permettant de pousser les balles dans le godet (Fig. 16).

Figure 17 : raclette

La raclette fonctionne selon le principe de la déformation d’un parallélogramme où les côtés se déplacent

parallèlement deux à deux. Elle est constituée de deux barres fixées parallèlement à l’aide de rivets sur le racloir d’un côté et sur une plaque support de l’autre. Les rivets ont été placés de telle sorte que les barres puissent être libres en rotation. La mise en œuvre de la raclette se fait à l’aide d’un câble, selon le principe des freins de vélo par câble. Nous avons décidé d’utiliser le déplacement de la catapulte pour actionner la raclette (Fig. 17). En effet, lorsque la catapulte s’arme, la balle a tendance à rouler naturellement vers le fond du godet. Le couplage de la catapulte et de la raclette permet ainsi d’aider la balle à rouler au fond du godet en la poussant, quelque soit sa position. La gaine du câble est fixée à deux emplacements sur le bâti par deux vis spéciales (cfr. flèches rouges). Le câble, quant à lui, est relié d’une part au bras gauche de la catapulte et, d’autre part, à la première barre de la raclette (cfr. flèches bleues). Le dernier élément est un ressort de rappel situé entre la vis de fixation du câble sur la raclette et la vis de fixation de la gaine. Sa présence permet à la raclette de reprendre sa position initiale une fois le câble détendu. Lorsque la catapulte s’arme, le câble se tend, entraînant avec lui la raclette vers l’arrière. Celle-ci pousse alors la balle, présente sur la rampe, dans le godet. Lorsque le godet a atteint sa position basse, le système est de nouveau libre d’engrènement. La catapulte revient alors rapidement dans sa position naturelle. Durant cette phase, le câble se détend, permettant à la raclette de reprendre sa position initiale grâce à la force de rappel de son ressort. La tension du câble constitue un facteur important dans ce mécanisme. Un système de vis de pression rend possible ce réglage. Figure 18 : Fixation du câble sur la catapulte

Racloir

Barre Ressort de rappel

Rivet Câble

- 23 -

6. Mécanisme de cueillage des balles dans les cocotiers.

Le challenge cette année était très difficile : il fallait aller cueillir des balles dans les cocotiers, les balles étant à environ une trentaine de centimètres de hauteur par rapport à l’aire de jeu. La difficulté était que nous ne pouvions pas selon le règlement secouer les cocotiers et de d’autre part nous n’avons connu les détails de fixation des balles dans les cocotiers que très tard après la parution du règlement. Tout d’abord nous avons pensé à ces quelques systèmes, en voici un aperçu :

Les idées étaient de cueillir les balles grâce à deux bandes (fig de gauche) ou de les soulever à l’aide d’un procédé de succion (fig de droite). L’idée de la succion n’était pas viable car les balles sont poreuses . L’idée des deux bandes beaucoup trop encombrante et difficile à mettre en œuvre avec les autres mécanismes du robot. Finalement le système qui a été retenu à l’unanimité était le système baptisé « La poêle » .

Figure 20 : idée de départ

Le principe est simple et audacieux. Il consiste à déployer sous les trois balles contenue dans le cocotiers une surface horizontale qui, en poussant les balles vers le haut, les dégage des anneaux de support. Ensuite en dégageant la poêle du cocotier on retenait les balles dans la poêle.

Figure 19 : quelques idées

- 24 -

Voici le premier prototype de poêle qui fut réalisé en métal :

Comme la photo le montre, il fallait réaliser deux découpes dans la poêle pour cueillir les balles :

- Une découpe pour rentrer la poêle dans le cocotier sous les balles (1) - Une découpe pour pouvoir s’extraire du palmier en reculant (2)

Pour pouvoir effectuer cette manœuvre, il nous fallait beaucoup de précision dans les mouvements du robot sur la table de jeu. Nous avons obtenu cette précision en utilisant des odomètres (roues codeuses). Cependant cette technique a ses limites et nous n’étions pas précis au millimètre près. Il a donc fallu pallier cette difficulté par quelques subterfuges :

- Agrandissement de l’orifice (1). - Disposition de poils de brosse assez rigides mais pas trop pour pouvoir encore pousser les balles vers le haut et les retenir dans la poêle (3)

Par ailleurs la forme de la poêle ci-dessus n’était pas optimal et nous avons finalement opté pour une poêle rectangulaire comme la figure issue de Solid Edge ci-dessous nous le montre :

Passage libre (2)

Orifice pour rentrer la poêle dans le cocotier (1)

Bras de levier (5)

Axe de la poêle

Surface de contact pour soulever les balles

Figure 21 : prototype de poêle

- 25 -

Cette poêle en aluminium de 2mm comporte donc un grand orifice et une nouveauté, les bouts flexibles. Ces petits bouts sont faits de matière plastique issue d’un seau. Ils ont été mis en forme par chauffage. Ils servent comme expliqué précédemment à retenir les balles dans la poêle lors de l’extraction de la poêle vers l’arrière. Un certain écartement (4) est nécessaire pour pouvoir rentrer dans le cocotier. En effet un espacement nul ne nous permettait pas de rentrer facilement dans le cocotier, c’est à dire que notre moteur de levée de la poêle n’était pas assez puissant pour cet exercice.

7. Mécanisme de levage de la poêle. Au départ notre poêle est en position verticale. Nous avons utilisé le point du règlement qui précise qu’ on peut avoir un déploiement après le début du match. Le problème était donc de relever la poêle en position horizontale (cf fig paragraphe ci-dessus) durant le match. La situation n’était pas très simple puisque le mécanisme devait être très petit vu que nous ne disposions plus de beaucoup d’espace dans le robot. Le mécanisme utilisé fonctionne grâce à un seul moteur DC de 4 W. Ce moteur est commandé dans les deux sens selon le mouvement de la poêle désiré. La poêle est levée à l’aide d’un bras de levier (5) qui attaché sur la poêle oblige cette dernière à se relever. Ce bras de levier est attaché à un écrou (8) qui monte et descend sur une vis (6) de pas 12 mm.

Orifice pour rentrer le cocotier dans la poêle (4)

Poils (3)

Bout flexible pour retenir les balles

Plaque rivetée sur la poêle et liée à l’axe de rotation

Figure 22 : poêle

- 26 -

Voici le mécanisme utilisé :

La vis (6) est taraudée à ses deux extrémités et deux tiges filetées de longueurs adéquates y sont vissées. Autour de ces tiges sont insérés les ressorts, écrous et rondelles d’arrêt des ressorts (7) et (11). Le mécanisme utilise une roue dentée de module 1 (9) qui engrène sur une roue dentée identique montée sur le moteur qui actionne la poêle. Selon le sens de rotation du moteur l’écrou monte ou descend (sur la vue ci-dessus à gauche ou a droite). La vis (6) n’est pas très longue et lorsque l’écrou, pour les deux sens, sort du pas de la vis (6) l’écrou vient en butée sur les ressorts (11) et (7) . Ces ressorts ont pour rôle de plaquer l’écrou contre la vis (6) pour pouvoir facilement engager l’écrou dans la vis (6) lors d’un changement de sens du moteur . Un autre avantage de ces ressorts est qu’ils permettent de provoquer un choc lorsqu’ on sort du pas de la vis (6). Ce choc a pour but de faire vibrer, de donner une impulsion, et donc mieux faire tomber les balles (qui sont dans les cocotiers) dans la poêle. Une entretoise (10) est disposée sur la tige pour que l’écrou reste bien stable et ne bouge pas trop ce qui empêcherait un engagement postérieur facile de l’écrou (8) sur la vis (6) . Comme le mécanisme doit tourner pour pouvoir faire monter ou descendre l’écrou (8), l’ensemble est monté sur deux roulements (12) . Ces deux roulements sont insérés respectivement dans la plaque de plexiglas du bas et du haut du robot. Comme l’écrou doit pouvoir monter et descendre tout en actionnant un bras de levier fixe dans un plan vertical, l’écrou ne doit pas tourner, ce qu’il a tendance à faire naturellement du fait des efforts de frottement. Pour palier ce problème on a installé une plaque de guidage tout le long de la course de l’écrou.

Vis sur laquelle l’écrou monte ou descend (6)

Ressort (7) et rondelle d’arrêt

Roulement (12)

Ecrou (8)

Roue dentée(9)

Entretoise (10) Ressort et rondelle

d’arrêt(11)

Figure 23 : mécanisme de levage

- 27 -

Voici l’explication de ce mécanisme :

Le levier (13) peut tourner librement autour de deux vis M4 monté respectivement sur la poêle et sur l’écrou (8).

8. Mécanisme du pare – chocs avant. Le règlement conseillait d’avoir un pare-chocs et insistait lourdement sur le fait d‘ éviter le contact entre robots. Le pare-chocs réalisé ne prenait pas en compte les chocs avec le rebord de la table puisque situé plus haut, mais bien les chocs avec les adversaires. Au départ nous pensions aussi qu’il servirait au contact avec les cocotiers mais c’était sans compter qu’il y avait des anneaux sur le cocotier à 30 cm de haut et que le robot mesurait 40 cm. Voici une vue du pare –chocs réalisé :

Levier et axe de rotation de la

poêle (13) Guidage de l’écrou pour

éviter sa rotation naturelle due aux

frottements

Plaque de plexiglas de la base du robot

Plaque de plexiglas du 2ème étage du

robot

Moteur actionnant le mécanisme

Figure 24 : principe de fonctionnement du levage

- 28 -

Le pare –chocs (1) est situé au niveau de la plate –forme en plexiglas de la base du robot. La fixation de ce pare –chocs se fait au travers de deux vis M4 (2). La partie cachée du mécanisme est ci-dessous :

Ressort (3)

Cavité percée dans le plexi (4)

Pièce goupillée (5)

Plate-forme en plexi

Pare-chocs (1)

Vis M4 de fixation (2)

Déclencheur de microswitch (7)

Figure 25 : pare-chocs avant

Figure 26 : détail du pare-chocs

- 29 -

Le mécanisme est relativement audacieux et difficile de réalisation. Voici une vue en coupe de la cavité (4) percée dans le plexiglas.

Comme sur cette coupe, le trou est de deux diamètres différents : un grand (8mm) qui permet d’accueillir le ressort de compression (3) et un petit (6mm). On a donc une surface d’appui (7) pour le ressort (3). Ensuite la pièce goupillée (5) peut bouger selon l’axe de l’alésage et est retenue dans le logement à l’aide de la goupille et du trou oblong (6). Cette pièce goupillée à donc une course identique à celle de la longueur du trou oblong. Le pare-chocs est fixé à la pièce goupillée par des vis M4. Le ressort est légèrement plus long que l’espace disponible entre la surface d’appui et la surface du pare –chocs. Ceci permet de maintenir le pare-chocs tendu vers l’avant du robot et de pouvoir fonctionner. Lorsqu’un choc quelconque intervient, les ressorts se compriment et les déclencheurs de micro-switchs entrent en œuvre. Le principe du déclenchement indirect des micro-switchs est respecté ici.

9. Mécanisme de plaquage au sol des odomètres. Les odomètres devaient, pour pouvoir fonctionner de façon optimale, être plaqué au sol en toute circonstance. Le mécanisme construit devait être très petit par manque de place. Dans un premier temps mettre les odomètres sur charnière, avec un ressort de torsion sur l’axe de la charnière, était notre solution. Dans le cas d’une fixation sur charnière, des mouvements relatifs par rapport à la direction d’ avancement étaient possibles selon que des rugosités hautes ou basses de la table de jeu étaient rencontrées. Un procédé bien plus élégant fut adopté. Il s’agit de mettre les odomètres sur glissière. On élimine ainsi les inconvénients sus-cités. Voici le mécanisme réalisé :

Trou oblong pour le passage de la goupille (6) Surface appui (7)

Glissières gauche et droite fixées sur un support en plexiglas (1)

Ressort (2)

Roue odomètre (3)

Elément mobile glissière (4)

Plexiglas d’attache des odomètres (5)

Bloc de plexiglas (8)

Figure 27 : coupe de la cavité (4)

Figure 28 : suspension des odomètres

- 30 -

Le bas du ressort (2) est introduit dans un alésage réalisé dans le bloc de plexiglas (8). D’autre part un alésage (7) dans la plate – forme de base du robot a été réalisé pour recueillir le haut du ressort.

Les roues des odomètres (3) sont bloquées en rotation avec des vis de pression. Les glissières (1) sont fixées sur le support en plexiglas avec des vis M4. Les ressorts (2) sont environ 1cm plus long que la distance entre le fond du trou haut (7) dans la base de plexiglas et le trou bas dans le bloc de plexiglas (8). Les éléments mobiles (4) peuvent coulisser verticalement et d’autre part sont déjà bloqués au niveau de la plaque de retient (6) par l’action de plaquage du ressort (2) de compression. Les odomètres sont fixés sur le bloc de plexiglas (8) par l’intermédiaire du Plexiglas d’attache (5). A ce niveau les roues des odomètres sont plus basses que les roues de motorisation. C’est le poids du robot qui mettra à niveau les roues des odomètres. Il faut aussi remarquer que pour pouvoir fonctionner de façon optimale, les roues des odomètres devaient être dans l’axe des roues de la motorisation. Les roues des odomètres ont été tournées dans une matière plastique et sont recouvertes sur la surface de roulement d’un morceau de chambre à air de vélo. Ces roues ont une largueur d’environ 6 mm. Le but de ce morceau de caoutchouc est d’assurer une adhérence suffisante entre les roues et la table de jeu. Pour les années de robotique futures, dans le cas d’ une utilisation d’odomètres, il peut être envisager de réaliser des roues de la façon suivante :

- Roue d’un diamètre d’environ 30 mm tournée dans du métal ou une matière plastique quelconque - Réaliser une gorge sur toute la circonférence de la roue - Insérer un joint o-ring dans cette gorge

Cette façon de faire donne un grip intéressant. De plus si on utilise une roue de petit diamètre, on sera plus précis pour l’utilisation des odomètres. Note sur l’utilisation de plexiglas : L’utilisation de plexiglas est très facile. Le taraudage, le perçage sont des opérations bénignes. Cependant cette matière risque, si on n’y prête pas attention, lors d’un chanfreinage d’éclater. On risque de perdre un long travail pour un bref moment d’inattention. De ce point de vue le métal est un meilleur ami.

Roue motorisée

Alésage haut pour le ressort dans le plexi de la plate-forme de base (7)

Plexiglas de support des glissières

Plaque de retient (6)

Figure 29 : principe de suspension des odomètres

- 31 -

10. Plaques d’habillage du robot.

Outre les plaques latérales du robot, cette année le robot est muni d’une plaque sous le robot. Cette plaque est à

5 mm de hauteur par rapport à l’aire de jeu. Le rôle de cette plaque est d’éviter, si nous montions sur la barre de but, d’endommager les éléments sous le robot et aussi de donner un certain fini au robot.

Figure 30: carénage inférieur

Comme la figure le montre des trous ont été réalisés pour les roues moteurs, les roues des odomètres, les poulies moteurs et les billes porteuses. Cette plaque est fixée sous le robot par des vis M4. Les points de fixation sont les supports de paliers des roues, le pare –chocs arrière du robot, les supports des micro-switchs avants. L’épaisseur de la plaque du dessous et des plaques latérales est de 1,5 mm et sont en aluminium.

11. Structure mécanique finale du robot. La structure de base du robot est constituée de plexiglas de 16 mm d’épaisseur. La forme de cette structure est carrée : 295mm X 295 mm. (voir figure ci-dessous). Le robot est constitué de deux étages : le premier est situé à environ 10 cm du sol, le second est à 30 cm du sol. Le système utilisé pour maintenir l’ensemble de façon rigide est l’emploi de quatre tiges filetées M10 de 35 cm de longueur. Deux écrous et deux rondelles d’appui sont utilisées pour assembler les pièces. L’ensemble du robot doit être stable sur la table de jeu. Nous avons donc utilisé des billes folles directement montées sur les tiges filetées. Les billes folles (2) sont montée industriellement avec une tige filetée de diamètre M8 alors que les tiges filetées (3) sont en M10. L’assemblage des deux s’est effectué à l’aide d’un écrou cylindrique adaptatif et d’une tige filetée/écrou. Cette tige filetée/écrou est taraudée en M8 et filetée à l’extérieur en M10. (On ne voit pas cette pièce sur la figure ci dessous).

- 32 -

Ecrou cylindrique (1)

Bille folle (2)

Tige filetée (3)

2 ème étage

Base du robot : 1 er étage

Figure 31 : structure du robot final

- 33 -

II. Electronique de puissance.

La carte de puissance sert d’intermédiaire entre l’alimentation par les batteries et les différents éléments électriques qui constituent le robot (capteurs, actuateurs). La carte est très similaire à celle de l’année 2002-2003. En effet, celle-ci s’est avérée très fiable l’année passée, nous n’avons donc effectué que quelques modifications.

1. Batteries. Les batteries utilisées sont, comme en 2002-2003, 4 batteries Ni-Mh. De par leur forme et leur taille

restreinte, nous les avons placés aisément en fin de construction du robot. Leurs caractéristiques sont les suivantes : Voltage 12 V Ampérage 3000mAh Nous avons décidé de conserver ces batteries cette année car :

- leur capacité de 3000mAh, nous a donné une très grande autonomie (cette autonomie est intéressante surtout dans les phases finales ou dans certaines phases qualificatives où le robot doit enchaîner les matchs rapidement) ;

- leur prix est relativement élevé, nous avons donc préféré réaliser une économie à ce niveau ;

Nous ne disposons que d’un jeu de 6 batteries Ni-Mh, un nombre suffisant pour le robot principal. Nous n’avons donc pas pu équiper le robot secondaire d’une de ces batteries. Celui-ci est donc alimenté par une batterie au plomb (12V) comme celle utilisée en 2001-2002. Nous avons également acquis une alimentation stabilisée, celle-ci s’est avérée très utile durant les phases de tests ou le robot est amené à fonctionner souvent pendant des durées assez longues.

2. Circuit du haut.

Le circuit du haut est quasiment identique à celui de l’année 2002-2003. Il sert principalement à alimenter les moteurs de propulsion en 24V (deux batteries 12V Ni-Mh en série) Ce circuit est composé :

• d’un interrupteur général qui permet de couper l’alimentation 24V ; • d’un fusible de 5 A (capable de supporter le courant de démarrage des moteurs (2*2,2A)) ; • de diodes de contrôle avant et après fusible respectivement pour vérifier l’état de la tension et l’état du

fusible ; • d’un bouton poussoir arrêt (rouge) normalement fermé. L’ouverture de ce circuit provoque l’arrêt des

moteurs du robot et des éléments commandés par le relais Km1 ; • d’un relais Km1 (4 inverseurs) qui permet de fermer 4 contacts pour le passage d’un courant plus puissant

par le passage d’un courant plus petit ;

- le premier contact de ce relais est mis en parallèle avec le bouton poussoir ‘marche’. Cette opération est nécessaire car les boutons poussoirs n’ont pas de mémoire. Pour maintenir le contact, il faudrait maintenir le bouton appuyé pendant tout le match. Une fois le relais activé le circuit se fermera définitivement et ne pourra être coupé que par le bouton arrêt ;

- le deuxième contact du relais Km1 est utilisé pour fermer un autre relais (Km2). Ceci est nécessaire car le relais Km1 ne supporte que des petits courants. En effet, on voit que le relais Km2 sert à fermer le circuit des moteurs. Le circuit Km2 verra donc passer l’entièreté du courant qui passe dans les moteurs ;

- le troisième contact est utilisé pour fermer le relais Km3. Même remarque que précédemment, le relais Km3 voit passer l’entièreté du courant du circuit des actuateurs ;

- le dernier contact est laissé libre.

• d’un bouton poussoir marche (jaune) normalement ouvert et mis en parallèle avec un contact du relais Km1. La fermeture de ces circuits provoque la mise sous tension des circuits 24V, 9V et 5V ;

• deux fusibles de 2 A pour protéger les moteurs des surintensités ; • de Leds de contrôle (clignotantes) qui sont mises en parallèle sur les fusibles qui protègent les moteurs.

- 34 -

3. Circuit du milieu. Ce circuit est composé :

- d’une batterie de 12V ; - d’un fusible de 1 A ; - d’un interrupteur ; - de diodes de contrôle avant et après fusible ; - de régulateurs de tension à 9V (7809) et à 5V (7805).

Le but du circuit du milieu est d’alimenter l’ensemble des capteurs (télémètres, microswitchs, caméra) et l’Atmel en 5 V, 9 V et 12 V. La batterie de 12 V qui alimente ce circuit est à la même masse que les batteries 24 V. Nous avons également remplacé la pince à linge par un jack pour le démarrage. Le jack est court-circuité ; une des bornes du récepteur du jack est à la masse et l’autre est reliée à une des IO de l’Atmega. Le programme intégrait donc ce système de démarrage. Remarques : Le respect des masses communes est un aspect fondamental de la bonne marche du robot. L’ATméga peut être alimenté en 12 V car celui-ci dispose d’un régulateur 5 V intégré. La caméra et le sonar sont alimentés en 9 V, les micro-switchs et les odomètres en 5 V. La caméra et le sonar possèdent également leur régulateur de tension 5 V intégré

- 35 -

Figure 32 : Schéma de principe de la carte de puissance

- 36 -

4. Circuit du bas. Contrairement à l’année passée, le circuit du bas est alimenté en 12 V et non plus en 24V. Il est alimenté par une batterie de 12 V indépendante. Le circuit du bas est relié au reste par une masse commune. Le circuit du bas sert à commander les différents actuateurs que sont le moteur de l’ascenseur, le moteur de la catapulte et le moteur de la poêle. Ces différents actuateurs sont commandés à partir de l’Atmega ; pour ce faire, le signal (5 V) provenant de l’Atmega est envoyé vers une résistance et un transistor Darlington qui joue le rôle d’interrupteur. Pour chaque actuateur, on dispose à chaque fois en parallèle une diode de roue libre qui permet d’évacuer le courant à chaque fois que l’on coupe le circuit afin d’éviter d’endommager le transistor.

Figure 33 : Carte de puissance

Figure 34 : Schéma de principe de la carte de puissance

- 37 -

Carte de commande de la catapulte, de la poêle et de l’ascenseur Ces actuateurs ne demandent pas un courant trop important, ils peuvent donc être commandés directement par le transistor sans avoir recours à un relais intermédiaire. La catapulte ne nécessite un fonctionnement du moteur que dans un seul sens. La carte de commande est donc la même que l’année passée, elle comprend : - une diode D4 pour se protéger des inversions de tension ; - un fusible pour se protéger des surintensités ; - une diode mise en série avec une résistance pour vérifier l’état du fusible ; - deux résistances R1 et R2 qui forment un pont diviseur dont le but est de ramener la tension à 5 V au niveau du

transistor Darlington ; - un bouton poussoir ; - une branche de commande à partir de l’ATméga ; - une diode D1 dont le rôle est d’empêcher qu’un courant passe vers l’ATméga lorsque le bouton poussoir est

activé ; - une résistance R3 dont le rôle est d’encore abaisser la tension ; - un transistor Darlington qui joue le rôle d’interrupteur ; - deux clous J3 et J4 auxquels sont raccordés le + et le – de l’actuateur considéré ; - une diode de roue libre D3 dont le rôle est d’éviter que le courant revienne vers le transistor lorsque l’on coupe

le courant.

Figure 35 : Schéma de principe de la commande de la catapulte

Figure 36 : Carte de commande de la catapulte

- 38 -

Les cartes de commandes de la poêle et de l’ascenseur sont différentes car les moteurs nécessitent de pouvoir fonctionner dans les deux sens. Elles intègrent donc un système dit en pont H afin d’inverser la tension aux bornes des moteurs et ainsi de travailler dans les deux sens. On dispose donc de deux boutons sur ces cartes : - un bouton poussoir qui donne le sens de fonctionnement ; - un bouton poussoir de commande classique. Remarque : Les boutons poussoirs de sens relâchés entraînent la rotation du moteur correspondant à l’ascenseur qui monte et la poêle qui monte.

Figure 37 : Carte de commande de la poêle et de l’ascenseur

Figure 38 : Schéma de principe de la commande en pont H des moteurs de la poêle et de l’ascenseur

- 39 -

III. Motorisation.

1. Moteurs de propulsion.

Les deux premières participations à la coupe de robotique nous ont permis de disposer de 5 moteurs Crouzet brushless dés le départ. Ceux-ci ayant fait leurs preuves, par le passé, tant au niveau de la puissance que de la fiabilité, nous avons donc opté de les conserver et de participer au concours de cette année avec ces moteurs. Caractéristiques des moteurs Crouzet de type 80 035 509

Tension d’alimentation Volt 24

Vitesse de rotation Tr/min 5400

Puissance utile W 30

Puissance absorbée W 45

Courant absorbé A 0.22

Courant de démarrage A 2.2

Electronique intégrée Régulation de vitesse Commande par Pwm ou par régulation de tension

Réduction de 12.5

Ces moteurs sont directement commandés à partir de l’ATméga en utilisant une commande PWM (Pulse Width Modulation). Cette commande se base sur le principe suivant :

Figure 39 : PWM

T est constant mais Ton varie ; soit le rapport Ton/T le rapport cyclique ; -Si le rapport cyclique est de 0%, la vitesse est de 0tr/min ; -Si le rapport cyclique est de 100%, la vitesse est égale à la vitesse à vide ; -Si le rapport cyclique est de 50%, la vitesse est égale à la (vitesse à vide)/2. L’utilisation des moteurs Crouzet présente divers avantages :

- couple important ; - commande informatique déjà réalisée ; - puissance élevée ; - expérience acquise lors du concours précédent. L’expérience de l’année précédente, notamment au niveau de l’endommagement de l’électronique intégrée,

nous a permis d’éviter tout problème à ce niveau. En effet, nous savions que de brusques changements de sens pouvaient endommager l’électronique. Par ailleurs 4 des 5 moteurs possèdent une nouvelle électronique adaptée à ces problèmes. Nous avons, cependant, gardé une boucle de sécurité dans le programme, afin de faire passer la commande du moteur par 0 lors d’une inversion de sens de rotation. Les moteurs sont commandés par un signal PWM. Chaque moteur nécessite l’utilisation de 5 sorties. Le code couleur est le suivant :

- 40 -

- Fil orange pour la sortie du signal (PB5/PB6) ; - Fil rouge pour l’alimentation 24 V ; - Fil noir pour la masse de l’alimentation ; - Fil bleu sur la masse de l’ATméga (GND) ; - Fil vert sur une sortie pour l’information Marche/Arrêt (PB0/PB2) ; - Fil jaune sur une sortie pour l’information Avant /Arrière (PB1/PB3).

Remarques :

- Afin d’éviter les chocs trop violents avec les bords, nous ralentissons la vitesse des moteurs lors de l’approche de ceux-ci.

- Nous avons constaté, comme l’année passée, que bien que la consigne des deux moteurs soit la même, la vitesse de rotation n’est pas la même pour les deux roues ; ceci entraîne une rotation du robot. Nous avons donc dû intégrer un facteur de correction, estimé par étalonnage, dans le programme.

- Nous avons également marqué le seul moteur ne possédant pas d’électronique.

2. Moteurs des actuateurs.

Moteur de l’ascenseur : Nous avons tout d’abord effectué nos tests avec le moteur de l’ascenseur du robot de l’année précédente. Caractéristique du moteur Crouzet de type 82 862 003:

Type de moteur 82 862 003

Tension d’alimentation Volt 24

Puissance utile W 3

Vitesse de rotation en charge T/min 40

Réduction d’un facteur 95.4 Prix € 62

Couple nominal Nm 0,5

Longueur totale mm 70

Les tests avec ce moteur se sont avérés concluants. Cependant, pour se donner une marge de sécurité

supplémentaire, et confronté au fait qu’il fallait acheter plusieurs moteurs pour les différents actuateurs, nous avons décidé de considérer différentes offres avec des caractéristiques de couple et de puissance et de vitesse de rotation un peu plus importantes. Nous avons regardé les possibilités chez Crouzet, Maxon et MDP. Nous étions particulièrement intéressés par l’offre de MDP suivante : Caractéristique du moteur MDP:

Type de moteur G30.1/2938

Tension d’alimentation Volt 12

Puissance utile W ?

Vitesse de rotation en charge T/min 55

Couple nominal Nm 0,6

Longueur totale mm 101,1

Les caractéristiques de couple, de vitesse de rotation et d’encombrement nous convenaient assez bien.

Nous avons alors passé commande, mais nous n’avons jamais obtenu les moteurs en raison de rupture de stock. La

- 41 -

mauvaise organisation et les problèmes de communication de la société MDP, nous ont laissés sans moteurs à 4 semaines du concours. Nous avons alors dans l’urgence commandé à la société Maxon, les moteurs aux caractéristiques suivantes : Premier type :

Type de moteur F 2140, commutation Métal CLL

Tension d’alimentation Volt 12

Puissance utile W 4

Vitesse de rotation à vide T/min 4090

Type de réducteur Réducteur à pignons droits GS 38 Rapport de réduction 100

Nombre d’étages 4 Couple nominal Nm 0,6 Diamètre moteur mm 40

Diamètre réducteur mm 38 Longueur totale mm 69,7

Nous avons commandé ce moteur pour la catapulte. En effet, celle-ci ne nécessite pas une vitesse de rotation très importante. Les dimensions permettaient de l’insérer dans l’espace imparti. Le couple était suffisant pour armer le ressort de torsion. Deuxième type :

Type de moteur A-max 26, commutation Métal CLL

Tension d’alimentation Volt 12

Puissance utile W 4

Vitesse de rotation à vide T/min 5590

Type de réducteur Réducteur à pignons droits GS 38 Rapport de réduction 100

Nombre d’étages 4 Couple nominal Nm 0,6 Diamètre moteur mm 26

Diamètre réducteur mm 38 Longueur totale mm 70,4

Nous avons commandé ces moteurs pour l’ascenseur et la poêle. En effet, la vitesse de rotation est plus importante que le F2140, elle permet donc de faire monter à la fois les balles (dans l’ascenseur) et la poêle, plus rapidement. Il est important de signaler que ces moteurs ne nous ont posé aucun problème de fonctionnement et ont pleinement répondu à nos attentes. De plus, notre contact belge de chez Maxon motor, nous a permis d’obtenir ces moteurs très rapidement (2 jours).

- 42 -

IV. Electronique de commande.

1. Introduction. Ce chapitre va traiter, le plus simplement possible, la face « électronique de commande » du robot.

Par « électronique de commande » on entend l’ensemble des dispositifs permettant au robot de communiquer avec l’extérieur. C’est à dire se repérer sur l’aire de jeu, détecter les obstacles (palmiers) et les cibles (balles), décider ce qu’il faut faire, gérer les contacts avec l’adversaire,… Toute cette électronique peut-être subdivisée en deux parties :

-l’ensemble des capteurs qui reçoivent l’information et -le module de contrôle qui gère ces informations et renvoie les commandes adéquates aux différents moteurs.

Contrôle. Le module de contrôle s’appelle ATméga. C’est le cerveau du robot. Il s’agit d’un composant

programmable avec un certain nombre d’entrées et sorties. Le principe est relativement simple : on y met un programme qui, en fonction de l’état de toutes les entrées, détermine un état pour chaque sortie. A partir de cette image un peu simpliste, on peut travailler sur les capteurs tout à fait indépendamment de l’ATméga. D’un coté, on a des capteurs qui renvoient une information sous forme de 0 et de 1. De l’autre, l’ATméga doit être programmée de façon à gérer tous les cas possibles. La partie « programmation » développera plus complètement ce module contenant l’intelligence du robot. En effet, cette intelligence se traduit par un programme assez complexe nécessitant bien un chapitre…

Le chapitre « électronique de commande » se limitera donc à décrire les différents capteurs, leur principe de fonctionnement, l’information brute qu’ils produisent et leur transformation en une information décodable par l’ATméga. En quelque sorte, il s’agira de la description des organes sensoriels et du système nerveux du robot.

Capteurs. Cette année, nous avons profité, du point de vue électronique et capteurs, de l’acquis de l’année passée.

En effet, en début d’année nous avons commencé par tester sur les robots les capteurs déjà développés lors des deux années précédentes. Il s’agit des micro-switchs, des télémètres infra-rouge et de la caméra. La suite du chapitre reprendra plus en détail ces éléments ainsi que les nouveautés tels que le sonar ultrason et les odomètres, la plus grande avancée développée cette année du point de vue électronique. Il faut aussi savoir que nous avions à notre disposition des balises infra-rouge que nous n’avons pas utilisées pour cause d'une redondance avec les odomètres. Bien qu’elles aient beaucoup servi les années précédentes, nous n’avons pas eu besoin de nous en servir. La suite du chapitre va développer dans l’ordre :

• le principe général de transmission des informations • les micro-switchs • les télémètres infra-rouge • la caméra • les odomètres • le sonar ultrason (avec un petit mot sur les balises) • récapitulatif en vue d’élaborer une stratégie

Avant de plonger dans le vif du sujet, je tiens, au nom de toute l’équipe, à remercier deux personnes ayant apporté énormément d’aide à toute cette partie électronique (… qui n’est pas évidente pour une équipe de mécaniciens) : M. Pierre Lecomte qui a consacré beaucoup de son temps à développer des solutions et à tester les possibilité de tous ces composants pour en tirer leurs avantages, inconvénients et limites. M. Johan Dechristophoris qui nous a suivis de près tout au long du développement du robot pour nous fabriquer sur commande des cartes électroniques pratiques et fiables, pour nous aider dans le montage de toute cette électronique et nous aider en cas de problème plus grave.

- 43 -

2. Principe général de transmission des informations.

Presque tous les capteurs utilisés dans le robot, de par leurs caractéristiques intrinsèques et leur principe de fonctionnement, ont un style de réponse qui leur est propre face à un changement de leur environnement. Par exemple, un micro-switch, suite à une pression sur le déclencheur, envoie un signal sous la forme d’un échelon de tension. D’un autre côté, un télémètre renvoie une tension qui est une fonction continue de la distance à un objet placé dans son « champ de vision ». Un odomètre, quant à lui, envoie une impulsion à chaque 500ème de tour.

Pour simplifier l’utilisation des différents capteurs, on va harmoniser et simplifier leurs réponses. C’est à dire que l’information brute sortant du capteur sera traitée avant d’être envoyée au système de contrôle (ATméga), en général sous forme d’état 0 ou 1.Ce traitement est généralement réalisé par des PIC (petits composants programmables). Le schéma général est le suivant :

Le PIC peut collecter des informations venant de plusieurs capteurs et la gérer pour envoyer vers

l’ATméga un signal simple et utile.

L’avantage de cette méthode est de faciliter la tâche du composant central. Celui-ci n’a d’ailleurs pas toujours assez d’entrées analogiques nécessaires pour des télémètres par exemple. Cela permet également de développer un capteur totalement indépendamment de l’ATméga.

La limite se situe, pour le PIC, dans la taille du programme qu’on lui demande d’appliquer (mémoire de 1K pour le modèle 16F84A qu’on a utilisé) et dans la complexité des opérations(il ne sait pas calculer de fonction trigonométrique par exemple).

Il faut aussi faire attention au câblage. Les cartes intermédiaires se multiplient vite, le câblage se complique donc rapidement aussi. Il faut être suffisamment méticuleux pour ne pas se tromper ce qui résulte généralement en court-circuit très dévastateurs… L’alimentation correcte et la mise à la masse commune de tous les composants sont des points extrêmement importants. On perd énormément de temps sur ces « détails » lorsqu’ils ne sont pas pris avec la rigueur nécessaire !

Figure 40 : principe général du traitement des informations

capteur

+VCC

0V

PIC

ATmégainfo brute

info simplifiée

alimentation

masse

carte intermédiaire

info commande

commande en puissance

moteur

- 44 -

3. Les micro-switchs.

1. Principe.

Les micro-switchs sont les capteurs les plus simples et les plus faciles à gérer. Il s’agit de petits interrupteurs ayant deux états possibles : ouvert (0) ou fermé(1). La simplicité de leur signal de réponse permet de les relier directement à l’ATméga.

- Applications dans le robot. Ils servent à détecter la présence d’un obstacle (robot adverse, bord, support de balle), d’une balle (dans

l’ascenseur) ou la position d’un élément (catapulte). Pour la gestion des contacts avec l’autre robot, on trouve des micro-switchs dans le pare-chocs, à 8cm de hauteur de façon à ne pas se déclencher contre les bords. Pour détecter la présence d’un bord, on en a mis deux sur la face avant, en bas, aux extrémités gauche et droite. Vu que les chocs peuvent être assez violent pour les switchs, la mécanique permet d’encaisser l’énergie sans détruire le capteur : un ressort amorti le choc alors que le switch est libéré au début de la course de celui-ci.

ergot libérant le switch

micro-switchbâti

ressort

au repos : le switch est enclenché en contact : le switch est relâché

PIC

sabot d’alimentation

sortie de l’information vers l’ATméga

LEDs de contrôle allumée si 1 éteinte si 0

système de programmation du PIC

oscillateur

LEDs de contrôle de l’alimentation

régulateur de tension

Figure 41 : exemple d’une carte de traitement d’information

Figure 42 : principe de déclenchement en douceur des micro-switchs

- 45 -

Initialement, un pare-chocs arrière était prévu mais les switchs qu’il commandait n’ont pas été utilisés.

Les micro-switchs sont aussi utilisés dans l’ascenseur pour détecter le passage d’une balle. Ils servent de compteurs et gèrent le nombre de balle dans le robot.

Lors de l’utilisation du robot dans la phase de développement du programme, nous nous somme rendu compte que les supports de balle dans les palmiers n’étaient pas détectés alors que les contacts avec les palmiers s’effectuaient toujours à cet endroit. L’équipe des mécaniciens a donc réalisé un petit détecteur de contact à l’aide d’un micro-switch.

Une dernière application est le repérage de la position de la catapulte. Le switch, par l’intermédiaire d’une longue moustache, palpe la « raclette » pour connaître la position de la catapulte (reliée mécaniquement).

4. Les télémètres infra-rouge.

1. Principe.

Les télémètres infra-rouge (IR) permettent de déterminer la distance à laquelle se trouve un objet.

Pour cela, un faisceau IR est émis d’une source se trouvant sur le capteur. Ce faisceau est réfléchi par l’obstacle et est récupéré par un détecteur se trouvant à côté de l’émetteur. Le capteur détermine l’angle de réception du faisceau et en déduit une image de la distance. Cette image se trouve sous la forme d’une tension variant continûment en fonction de la distance.

émetteur IR récepteur IR

Figure 43 : réalisation pratique du système

Figure 44 : pare-chocs arrière

Figure 45 : principe du télémètre IR

- 46 -

Cette fonction a l’allure suivante :

En dessous de 5-10 cm, la courbe est unitilisable car

pour une valeur de U, on en aurait deux de x. Au-dessus de 80 cm, la variation de tension n’est plus

assez grande pour assurer une juste mesure. Le PIC intermédiaire entre le télémètre et l’ATméga

sert à fixer des paliers auxquels l’information envoyée à L’ATméga varie.

Par exemple, sur 2 bits, on peut envoyer les 3 points ci-contre par l’intermédiaire du code (0 1)=5cm, (1 0)=10cm, (1 1)=20cm ; (0 0) étant le cas où il n’y a pas d’obstacle.

On peut évidemment récupérer l’information de 2 ou plusieurs télémètres et décider de critères mettant en jeu différentes mesures.

- Application au robot.

Les télémètres ont été testés pour ralentir à l’approche d’un obstacle et faire demi-tour lorsqu’on est près du bord. Les résultats sont très bons mais suite au développement des odomètres (voir plus loin), ils n’ont pas été repris dans le robot. Cependant, c’est une solution relativement simple, facile à mettre en œuvre, bon marché, fiable, peu encombrante et qui a fait ses preuves. Il ne faut donc pas l’oublier. Leurs seules limites sont les bornes 5-80cm.

De plus, ces télémètres peuvent servir de barrière (à la place d’un laser ou un micro-switch), Solution qui a été envisagée pour détecter les balles à la sortie de l’ascenseur.

5. La caméra.

1. Principe. La caméra qu’on utilise a été largement étudiée par l’équipe précédente. Il s’agit d’une CMUcam, bon marché

et relativement simple à exploiter. Je ne vais développer que les points importants et ce qui nous a servi cette année. Pour plus de renseignements (communication avec le port RSR232 notamment), reportez-vous au rapport du robot 2002-2003.

Parmis toutes les fonctions proposées,

celle qui nous est la plus utile est le repérage d’une couleur : on implémente, dans un PIC, un intervalle pour chaque composante RGB de la couleur recherchée [rougemin rougemax vertmin vertmax bleumin bleumax] et la caméra renvoie la position de la zone correspondant à cet intervalle de couleur ainsi que le centre de masse de cette zone et une valeur exprimant la confiance (si on est au milieu de l’intervalle demandé ou aux extrémités). Cette

x1 y1

x2 y2 x3 y3

x

y

zone utilisable

U

x 5cm 80cm

Figure 46 : courbe de la réponse en potentiel en fonction de la distance

Figure 47 : télémètre IR

Figure 48 : interprétation de l’image par la caméra lors de la recherche du rouge

- 47 -

information est envoyée de la caméra au PIC sous la forme suivante : [x1 y1 x2 y2 x3 y3 confiance] A partir de ces valeurs transmises par câble série au PIC, celui-ci va en déduire une information simplifiée sur 2

bits pour l’ATméga :

• 00 je ne voit rien • 01 il y a du rouge à droite • 10 il y a du rouge à gauche • 11 il y a du rouge droit devant

Les notions de droite, gauche et devant sont déterminées par la

valeur de y3. Ces notions peuvent être modifiées en changeant les paramètres programmés dans le PIC.

La CMUcam est facile à utiliser, surtout à l’aide d’un « simplificateur » d’information tel que le PIC. C’est une façon très efficaces de localiser les cible. Cependant il faut savoir que son axe optique est sensiblement décalé de son axe géométrique ce qui perturbe beaucoup lors des tests. Des mesures faites l’année passée et vérifiées cette année quantifie cette déviation (voir rapport 2002-2003).

La définition des paramètres de couleur recherchée se fait à l’aide d’un programme JAVA. Il permet de prendre une photo qu’il affiche à l’écran. En baladant le pointeur sur cette image, les trois composantes RGB sont déterminées. Il faut alors estimer les limites minimum et maximum de chaque composante RGB sur la zone de couleur désirée. Nous n’avons pas eu de problème de reconnaissance du rouge qui se démarquait bien du sol jaune et orange, des arbre verts et de la zone d’embut bleue. Les paramètres étaients pourtant assez larges. De plus, une fonction de régulation du gain, interne à la caméra, permettait de limiter l’influence de la luminosité. Mais d’autre part, un problème régulièrement rencontré était le fait que la caméra voyait en dehors de la table. La moindre tache rouge (support du spot) était détecté. Il a aussi falu gérer le cas où la balle se trouvait dans la zone d’embut (voir partie informatique).

gauche droite devant

câble série de communication entre le PIC et la CMUcam

les deux LED permettent de savoir quelle état est envoyé à l’ATméga. C’est pratique lorsqu’on veut régler la position de la caméra.

Figure 49 : définition des trois zones de vision

Figure 50 : CMUcam et sa carte électronique

- 48 -

- Placement sur le robot.

Tout ces développements ont été faits sur la plate-forme de test. Cette plate-forme nous a permis de travailler indépendamment de l’avancement de la partie mécanique. L’emplacement de la caméra sur le robot n’a pas pu être énormément discutté vu les éléments mécaniques (la poëlle et l’ascenseur) : on ne pouvait la placer au milieu. Son emplacement a été décidé à gauche car son axe optique est dirigé vers la droite

Le but était de diriger le robot précisément lorsqu’il est déjà proche de la balle (à 50 cm). Placer la caméra le plus haut possible et de la faire plonger pour qu’elle ne voit pas trop loin (en dehors de la table) semblait la meilleure solution.

6. Le sonar ultrason.

1. Introduction. Le sonar est le capteur qui nous permet

de déterminer la position du palmier au début de chaque match. En effet, nous ne la connaissons pas a priori et le robot doit être complètement autonome. Une solution simple aurait été de trouver la position du palmier en tenant compte de la position du robot au premier choc. Cette solution est toutefois risquée car il aurait pu s’agir d’un robot adverse. De plus, on considère alors de connaître la position ce qui n’est pas certain à priori.

2. Principe de fonctionnement.

Nous avons donc utilisé un système de

télémètre ultra-son (utilisé pour la mise au point des appareil photo polaroïd) monté sur un servomoteur(très précis en position). Initialement, il est positionné de façon à scanner face au robot (il a un cône de dispersion non négligeable mais raisonnable d’environ 25°). Ce télémètre envoie un ultrason et détecte son écho. En fonction du temps mis pour recevoir la réponse, une électronique intégrée (qui gère aussi l’émission, la réception) en déduit la distance et l’envoie par port série au PIC que nous avons intercalé entre le sonar et l’ATméga. Ce PIC compare la valeur reçue aux valeurs programmées qui sont celles entre le sonar et les palmiers qui se trouvent sur la première rangée. Si celle-ci correspond plus ou moins à une valeur, on considère

servomoteur

télémètre US

électronique du télémètre

carte de gestion du télémètre et du servomoteur

câble série entre le télémètre et le PIC

Figure 51 : position de la caméra sur la plate-forme de test et sur le robot

Figure 52 : sonar

- 49 -

qu’il s’agit du palmier et le robot peut alors démarrer. (En pratique, les valeurs enregistrées dans le PIC sont des intervalles divisant la longueur en cinq zones : une zone par palmier et la zone suivant le dernier palmier) Si la valeur est trop grande (il ne « voit » rien…) le servomoteur, contrôlé par le même PIC, fait alors pivoter le télémètre de quelques degrés. Celui-ci refait alors une mesure de distance. Si celle-ci correspond à la distance entre le robot et le palmier le plus éloigné ne se trouvant pas juste en face de lui, on a détecté le palmier et c’est parti pour le match. Au cas où la distance mesurée serait de nouveau supérieure, le servomoteur tourne encore un peu à droite et le télémètre refait la mesure. Cette boucle s’effectue jusqu’au dernier possible.

Sur le robot final, la position du sonar n’a pas

pu être fort discutée vu la priorité à la mécanique et de la caméra. Il devait être plutôt sur la droite du robot pour se trouver face à la première ligne de palmiers. De plus, il fallait le mettre assez haut pour ne pas avoir d’écho provenant de la table.

Pour une question d’électronique, il faut

attendre 2 secondes entre chaque mesure de distance (chargement des condensateurs ? …). Initialement, le robot faisait 2 mesures, les comparait puis démarrait si elles concordaient. Sinon, il en faisait une 3ème, une 4ème,… jusqu’au moment où 2 mesures successives donnaient la même réponse. Pour éviter de perdre le temps de mesure au début du match, on a changé ce système. Avant le Départ, le robot fais une mesure toutes les 5 secondes. Dès que le TOP était donné, il prend la dernière valeur et démarre immédiatement. Une position de palmier nous posait régulièrement problème, la valeur renvoyée était régulièrement 0 au lieu de 8. On a pris la décision de considérer 8 si le robot ne voyait rien.

Au début, le sonar est placé dans l’axe

de la première série de palmiers. Si un palmier se trouve à une de ces

quatre positions, la distance mesurée correspond à un intervalle connue par le PIC. Le robot peut partir.

S’il n’y a pas de palmier, le premier objet dans le champ du télémètre est détecté. Il s’agit soit du but, soit du robot adverse. La distance étant plus élevée que le maximum admis par le PIC, celui-ci impose au servomoteur de tourner.

Cette fois, il n’y a plus qu’un intervalle

défini. Si l’écho est créé par un objet s’y trouvant, on considèrera que le palmier est dans la position concernée.

position initiale du robot cône de diffusion

positions possibles des palmiers

position du sonar sur le robot

palmiers de but

intervalles définis dans le PIC

télémètre servomoteur

caméra

Kamikaze

Figure 53 : position du sonar sur le robot

Figure 54 : principe de fonctionnement du sonar-1

Figure 55: principe de fonctionnement du sonar-2

- 50 -

Sinon, le PIC impose de nouveau une

rotation. La boucle continue jusqu’au dernier

palmier. Dans le cas où aucun palmier ne serait pas détecté, si le robot est mal positionné au début ou s’il y a un problème de transmission, le PIC renvoie la valeur 0 à l’ATméga.

3. Communication entre le PIC et l’ATméga.

La carte intermédiaire entre le sonar et l’ATméga, munie du PIC qui combine les mesures fait par le télémètre et

la rotation du servomoteur, doit envoyer la position du palmier à l’ATméga. Il s’agit d’une information ayant 10 états différents au maximum (9 positions possibles et le cas où le sonar ne détecte rien). On aurait pu la transmetre l’information sur 4 bits, c’est à dir 4 fils sortant du PIC alant directement sur 4 entrée de l’ATméga. Cependant, nous avons développé la communication par le port série entre l’ATméga et un PIC lors d’essais sur les odomètres. Vu que cette façon de communiquer n’était finalement pas utilisée par les odomètres, nous avons choisi de l’appliquer au sonar. Cette solution permet d’envoyer le caractère ASCII directement. (pour signaler que le palmier est en position 2, sur 4 bits il aurait fallu envoyer « 0010 », en série on envoie « 2 »). Ceci permet d’économiser des entrées sur l’ATméga (le port série utilise l’équivalent de 2 entrés pour envoyer n’importe quelle information sous forme de caractère).

4. Balises. Initialement, le sonar était muni d’un récepteur infra-rouge (IR) très directionnel. Celui-ci pouvait détecter la

présence d’une balise dans l’axe du télémètre ultrason(US). Les balises se distinguent entre-elles par le code qu’elles émettent. Cela aurait permis de calculer la position du robot par triangulation. Deux méthodes étaient envisageables :

• Mesure d’un angle et deux distances.

Le sonar scanne (de gauche à droite par exemple) le jeu à la recherche des deux balises.

Le sonar utilise le récepteur IR pour localiser une balises puis, dès que la position angulaire est connue, le télémètre US mesure la distance entre le robot et la balise. De même pour la suivante.

A partir de l’angle formé entre les deux balises et des distances. Le pic peut aisément calculer la position du sonar sur le terrain.

Ce calcul peut être confirmé par la connaissance de la distance entre les deux balises. Pour un maximum de précision, il faut les balises les plus écartées possible.

supports de balises

Figure 56: principe de fonctionnement du sonar-3

Figure 57: principe de triangulation-1

- 51 -

• Mesure de deux angles.

Cette fois, le sonar n’utilise plus de

mesure de distance mais uniquement le récepteur IR. Il scanne toujours le terrain en cherchant la position angulaire de trois balises. Il calcule les différents angles par différence de position et peut alors en déduire sa position. Ce calcul est de nouveau confirmé par les distances à priori connues entre les balises.

Ces deux méthodes n’ont pas été très développées, malgré l’efficacité prouvée les années précédentes des balises, pour plusieurs raisons :

• Tout d’abord, le développement des odomètres a pris du temps et donné suffisamment de résultats pour

pouvoir y construire une stratégie complète. Evidemment, le recalage nécessaire aurait pu être effectué par triangulation.

• Ensuite, la première méthode était fragile lorsqu’un obstacle se trouvait (à une dizaine de centimètres près) entre le robot et la balise. Le télémètre US aurait sûrement donné une distance bien inférieure !

• La précision des mesure et du calcul n’a pas pu être quantifiée à temps.

• La simplicité étant un avantage considérable, on a préféré ne pas trop compliquer ce système déjà bien développé pour la recherche des palmiers.

• Le récepteur infrarouge doit se trouver dans une enceinte complètement hermétique aux infrarouges (excepté la fine fente) et assez longue pour assurer la directivité. Ce système monté sur le servomoteur prend beaucoup de place en lui-même ; de plus il faut tenir compte du mouvement de rotation de l’ensemble US et IR.

• La position calculée est celle du sonar et non du centre du robot. Il faut donc rajouter une information quant à la position angulaire du robot (celle-ci peut être trouvée grâce à la position relative du robot par rapport à une balise dont on connaît l’emplacement exact sur la table).

supports de balises

inraci

danger pour la mesure US !!

Figure 58: principe de triangulation-2

Figure 59 : problème de mesure de distance

Figure 60 : nécessité d’avoir une longue enceinte avec une petite ouverture

- 52 -

7. Les odomètres.

Pourquoi ? Dès le début, nous avons exprimé le désir de pouvoir aller sur les palmiers et de les éviter.

Ce problème nécessitait donc l’usage d’un système de positionnement. Après avoir recherché ce qui existait, nous avons pu constater qu’il y avait deux grandes catégories de système :

- les odomètres - la triangulation

Bien sûr, comme nous avons pu le voir lors de la coupe de Belgique, d’autres systèmes existaient, ils étaient basés sur la détection des bords grâce à des ultrasons. En calculant la distance du robot par rapport à chacun des bords, et en connaissant l’orientation, du robot, ils déterminaient leur position. Mais cette manière de faire semble complexe à gérer, et augmente considérablement le nombre de capteurs. De nombreux autres systèmes se basent sur la triangulation, et différent entre eux par la disposition des capteurs. La triangulation n’a malheureusement pas pu être développé cette année par manque de temps. De ce fait, consacrons nous à ce qui existe : les odomètres.

Comment ?

1. la théorie

L’odométrie est obtenue par intégration de petits déplacements. 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. Il y a en fait deux manières d’approximer la trajectoire élémentaire parcourue par le robot durant le temps eT :

- En utilisant des segments de droites. On considère alors que le robot va en ligne droite pendant le temps eT en

servomoteur

télémètre US

enceinte contenant le récepteur IR

Figure 61 : sonar avec le récepteur IR

Figure 62 : principe de calcul de la position-1

- 53 -

gardant l’orientation qu’il avait au début de cet élément de trajectoire. Ceci revient à supposer que les deux roues ont une vitesse constante et identique sur cet élément de trajectoire. A la fin de cet élément de trajectoire, on corrige l’orientation du robot en fonction de la différence de distance parcourue par les deux roues.

- En utilisant des arcs de cercles. On considère alors que le robot se déplace et change d’orientation en suivant un arc de cercle pendant le temps eT .

Sur le robot, il n’y a que l’approximation par des segments qui a été utilisée et elle donne de bons résultats. Beaucoup d’équipes parlent d’une grosse erreur mathématique qui s’accumulerait…Il est vrai qu’en théorie, on a bien une erreur qui grossit, mais elle est minime par rapport aux erreurs que l’on commet lors de l’étalonnage des roues codeuses. En effet, il n’est pas simple de trouver la bonne valeur du diamètre des roues et de leur écartement. Nous n’utilisions pas de fréquence fixe d’échantillonnage, il serait intéressant l’année prochaine de le faire. En effet, plus L’ATméga fait de calculs et moins il échantillonne souvent, ce qui entraîne une perte de précision. Pour le bien, il faudrait échantillonner toutes les 1 à 10ms. Appelons D∆ et G∆ les distances (en mm) parcourues respectivement par les roues droites et gauches entre deux lectures du nombre d’impulsions des roues codeuses soit un intervalle de temps eT . Connaissant la pose du robot à l’instant n-1, on cherche la pose à l’instant n. Le terme pose signifie que l’on prend les coordonnées (x,y) et l’orientation du robot θ . La pose s’écrit donc ( , , )x y θ .

On a donc :

2nn

ngdmoy ∆+∆

=∆

nnn gddif ∆−∆=∆

Ldifn

n∆

=∆θ

1cos −∆=∆ nnn moyx θ

1sin −∆=∆ nnn moyy θ On a ainsi,

nnn xxx ∆+= −1

nnn yyy ∆+= −1

nnn θθθ += −1

On obtient alors, la pose du robot par rapport à un repère fixe.

Figure 63 : principe de calcul de la position

- 54 -

2. Comment déterminer ∆ D et ∆ G ?

Les roues codeuses émettent des impulsions en quadrature (500 par tour). C’est-à-dire que les signaux sont décalés de PI/2. Selon que l’on lit de la gauche vers la droite ou de la droite vers la gauche, on peut dire dans quel sens tourne la roue. Ex :

On incrémente un compteur quand, on a un flanc montant sur le canal A alors que le canal B est égal à 0. On décrémente le compteur quand, on a un flanc montant sur le canal A alors que le canal B est égal à 1.

Le compteur tel qu’on l’a utilisé est constitué d’un Pic. Chaque roue codeuse possède son propre pic. Le Pic est programmé pour ressortir à ses bornes un nombre entre 0 et 255. On code donc sur 8 bits le nombre d’impulsions reçut par le compteur. Comme on a deux roues codeuses, on aura 16 bits de sorties sur la carte odomètre (c’est la nappe de fil qui sort de la carte). C’est d’ailleurs un des problèmes du port parallèle : il prend beaucoup d’entrées sur l’ATméga. L’ATméga a donc à ses bornes un nombre en binaire pour chacune des roues. On peut voir dans read_sensors la façon dont on décode l’information : newD = robot.sensors.bit18*128+robot.sensors.bit17*64+robot.sensors.bit16*32+robot.sensors.bit15*16+robot.sensors.bit14*8+robot.sensors.bit13*4+robot.sensors.bit12*2+robot.sensors.bit11*1; newG = robot.sensors.bit28*128+robot.sensors.bit27*64+robot.sensors.bit26*32+robot.sensors.bit25*16+robot.sensors.bit24*8+robot.sensors.bit23*4+robot.sensors.bit22*2+robot.sensors.bit21*1; On multiplie chacun des bits par sa valeur décimale. Lorsque l’on atteint 255+1 impulsions, le Pic repasse à 0, et si on a 0-1 impulsions, on passe à 255. Il faut donc que l’ATméga repère les passages de 255 à 0, et de 0 à 255. En effet, dans le cas contraire, l’ATméga croirait que l’on a fait un saut et le prendrait en compte dans son calcul des coordonnées.

Sens horlogique Sens antihorlogique

Temps

A

B

Figure 64 : impulsions fournies par un odomètre

- 55 -

Architecture de l’ensemble :

Fonction de calcul de la pose du robot : void calcul_pose( void ) {

double dteta; double dx; double dy; double moy; double dif; double d; double g;

difD = newD - oldD; difG = newG - oldG; oldD = newD; oldG = newG; if (difD < -200)

difD = difD + 256; if (difD > 200)

difD = difD - 256; if (difG < -200)

difG = difG + 256; if (difG > 200)

difG = difG - 256;

d = (difD)/PULSE_PER_MM; g = (difG)/(PULSE_PER_MM); moy = (g+d)/2; dx = moy*cos(teta); dy = moy*sin(teta); dif = (d-g); dteta =(dif/WHEEL_DISTANCE); teta = teta+dteta;

x = x+dx; y = y+dy; tetabis=PI/2-teta; } Dans la fonction ci-dessus, on peut voir comment est repéré ce passage (en gras) : on calcule la différence d’impulsions entre deux lectures et on la compare par rapport à 200.

Pic1 Pic2

ATméga

Canal A et B

Roue codeuse Nappe de fil (8bits)

Figure 65 : architecture globale

- 56 -

Si on dépasse 200 (newD – oldD>200) , c’est que l’on est passé de 0 à 255 : on a reculé. Il faut donc retirer 256 pour trouver la vrai valeur de l’avancement. Ex :

On a la série suivante :

30 20 10 240

On fait difD=newD – oldD, et on trouve 230 ce qui voudrait dire que l’on a avancé de 230 impulsions alors que l’on a reculé ! Comme on a trouvé difD>200, on va retirer 256, on trouve alors la vrai valeur de l’avancement difD=-26 . On part bien entendu de l’hypothèse qu’entre deux lectures des impulsions par l’ATméga, on ait un temps suffisamment court pour qu’il soit impossible d’avoir une variation de plus de 200 impulsions. Ce qui est effectivement le cas.

On possède donc la pose ( , , )x y θ du robot. Pour avoir plus de facilités à se représenter le robot sur la table, nous avons décidé d’utiliser un angle autre que l’angle trigonométrique (appelé teta dans le programme). Cette angle tetabis est l’angle calculé par rapport à l’axe y :

- si tetabis est négatif, c’est que le robot est orienté vers la gauche - si tetabis est positif, c’est que le robot est orienté vers la droite - si tetabis est nulle c’est que le robot avance droit : parallèle à y.

A partir de ces valeurs, il est simple de demander au robot d’aller à un point

3. Aller à un point

Pour aller à un point, il faut connaître la direction et la distance qui nous sépare du but. On peut voir, en gras ci-dessous, les fonction utilisées : ce sont les formules classique de l’analyse mathématique. Fonction de calcul de la direction :

void calcul_direction ( void ) {

dbut = sqrt( square(x-xbut) + square(y-ybut) ); tetadest = atan((x-xbut)/(y-ybut)); if ((ybut<y)&&(xbut>x))

{ tetadest=PI+tetadest;

} if ((ybut<y)&&(xbut<x))

{

y

x

Tetabis

Figure 66 : définition de tetabis

- 57 -

tetadest=-PI+tetadest; }

if ((ybut==y)&&(xbut<x)) {

tetadest=-PI/2; }

if ((ybut==y)&&(xbut>x)) {

tetadest=PI/2; }

if ((ybut>y)&&(xbut==x)) {

tetadest=0; }

if ((ybut<y)&&(xbut==x)) {

tetadest=PI; }

nt=tetabis/(2*PI); tetabis=tetabis-nt*(2*PI); tetabut=tetadest-tetabis;

} tetadest (angle de destination) représente l’angle que fait le point à atteindre avec l’axe y’ lié au robot. tetabut ,qui est la différence entre tetadest et tetabis, est donc la valeur de l’angle qu’il faudrait faire tourner le robot pour être dans la bonne direction.

Lorsque le calcul est fait, on a donc une valeur d’angle et de distance. Mais, la fonction atan ne retourne qu’une valeur d’angle comprise entre [ ]/ 2; / 2π π− + D’où les lignes qui suivent le calcul de tetadest pour corriger ce problème. Laurent Pinchart nous a parlé d’une fonction « atan2 » qui pourrait simplifier toutes ces lignes. Notre démarche dans le programme a été la suivante :

- Tourner sur place de l’angle - Avancer pendant une fraction de seconde tout droit - Avancer en utilisant la fonction d’asservissement

Dans FSM_STEP, on peut lire( en simplifié):

x

y

tetabut

tetabis tetadest

Y’

Robot

Point à atteindre

Figure 67 : exemple montrant les différents angles

- 58 -

case ROBOT_STATE_TURN: {

if (((tetadest-tetabis)<5*PI/180)&& ((tetadest-tetabis)>-5*PI/180))

{ new_state = ROBOT_STATE_MOVE;

} } break; case ROBOT_STATE_MOVE: {

if (robot.time.local>TIME_ACCELERATION ) new_state = ROBOT_STATE_CORRECTION;

} break;

case ROBOT_STATE_CORRECTION: {

calcul_direction(); if ((x<(xbut+prec))&&(x>(xbut-prec))&&(y<(ybut+prec))&&(y>(ybut-prec)))

{ next_point(); calcul_direction(); new_state = ROBOT_STATE_TURN;

} else if ((tetabut>(60*PI/180))||(tetabut<(-60*PI/180)))

{ new_state = ROBOT_STATE_TURN;

} dans robot_motors_actuate:

case ROBOT_STATE_TURN: if (tetabut > 0)

robot_move (ROBOT_SPEED_ROTATE1, ROBOT_DIR_RIGHT); else if (tetabut < 0) robot_move (ROBOT_SPEED_ROTATE1, ROBOT_DIR_LEFT); break;

case ROBOT_STATE_MOVE: robot_move (ROBOT_SPEED_FORWARD, ROBOT_DIR_FORWARD); break;

case ROBOT_STATE_CORRECTION: robot_move (ROBOT_SPEED_FORWARD,ROBOT_DIR_CORRECTION);

break;

dans robot_move (en simplifié):

case ROBOT_DIR_FORWARD: speed_left = speed; speed_right = speed; break;

case ROBOT_DIR_RIGHT:

speed_left = speed; speed_right = -speed; break;

case ROBOT_DIR_LEFT:

speed_left = -speed; speed_right = speed; break;

case ROBOT_DIR_CORRECTION:

speed_left = speed+speed*0.01*tetabut*180/PI; speed_right = speed-speed*0.01*tetabut*180/PI; break;

- 59 -

Dans le case turn, on demande au robot de tourner jusqu’à ce que la différence entre l’angle de destination et l’angle du robot par rapport à y soit compris dans une fourchette de 5°. Cela permet de ne pas osciller autour d’une valeur et de s’arrêter un peu avant d’avoir atteint l’angle. En effet, à cause de l’inertie, le robot a tendance à tourner un peu de trop. Le case move est présent ici pour que l’on n’ait pas d’instabilités. L’introduction de ce case entre turn et correction permet au robot d’atteindre la vitesse de régime avant de passer dans le case correction qui assure l’asservissement en direction. Le case correction assure l’asservissement en direction du robot : on peut voir dans le programme que la vitesse des roues, est proportionnelle à l’angle tetabut

case ROBOT_DIR_CORRECTION: speed_left = speed+speed*0.01*tetabut*180/PI; speed_right = speed-speed*0.01*tetabut*180/PI; break

Cette asservissement rudimentaire permet au robot de bien rester dans la direction à atteindre. Sans cela, le robot se décalerait au fur et à mesure qu’il avancerait. L’intérêt de l’asservissement est aussi de pouvoir se diriger sur le point même si l’on a reçu un choc. On peut observer dans fsm_step, que si le robot dépasse un certain angle, on le fait repasser dans turn. Cela permet d’assurer la stabilité du robot : si l’angle est trop important, le robot va prendre une trop grande vitesse de rotation et va finalement se mettre à osciller autour de l’angle à atteindre.

Il serait intéressant que l’on développe un asservissement en vitesse du robot . Cela permettrait un meilleurs comportement du robot, il gérerait ainsi lui-même ses accélérations et on n’aurait plus tout les problèmes de stabilités et nous pourrions alors augmenter sa vitesse. On arrive au point lorsque l’on entre dans un carré autour du point : nous ne pouvons demander au robot d’atteindre parfaitement le point, il faut laisser une certaine marge autour de celui-ci, sinon il risque de ne jamais y arriver et fera donc une série de manœuvre. D’où la condition :

if ((x<(xbut+prec))&&(x>(xbut-prec))&&(y<(ybut+prec))&&(y>(ybut-prec))) Prec comme précision autour du point

Système robot

0.01x180/π

Vitesse des moteurs

Tetabut +

-

Figure 68 : asservissement du robot en direction

- 60 -

4. Disposition mécanique des odomètres

Quelques dispositions sont à prendre à fin d’avoir les meilleurs résultats possibles. L’écartement doit être le plus grand possible pour avoir une grande précision sur l’angle. Minitech utilise la disposition suivante :

Roues codeuses

Roues motrices

Point à atteindre

Robot

prec

prec

Figure 69 : zone dans laquelle on considére que le robot est arrivé à destination

Figure 70 : position idéale des roues

- 61 -

Comme on peut le voir ils ont placés les roues motrices à l’intérieur et les roues codeuses à l’extérieur. Les roues codeuses doivent bien sûr se trouver sur le même axe que les roues motrices. La surface des roues codeuses doit être la plus agrippante possible pour éviter tout glissement. De plus, il faut qu’elles soient toujours en contact avec le sol, d’où la nécessité d’un montage sur amortisseur. Il est préférable que les roues codeuses aient une faible épaisseur.

5. étalonnage des odomètres. La précision du positionnement dépend en grande partie de l’étalonnage. A chaque fois que l’on modifie la géométrie du système (changement du caoutchouc autour des roues), il est nécessaire de réétalonner :

- le périmètre des roues - l’écartement des roues

Pour l’étalonnage, nous avons procédé comme suit :

• Premièrement, on a demandé au

robot d’avancer droit pendant 6m. Suite à ce test, on a pu ajuster la valeur du diamètre des roues car on s’est rendu compte qu’il allait 12 cm trop loin (le diamètre était trop petit d’un rapport 12/600).

• Ensuite, on l’a fait tourné sur lui-même de 4 tours. Vu qu’il a fait 11° de trop (sur 1440°). On a alors modifié l’écartement des roues.

• Enfin, on a demandé au robot d’effectuer une infinité de carrées. Dans le meilleur des cas, après 7 carrés de 900mm de coté, le robot était revenu à 3cm de sa position initiale.

Malheureusement, l’usure de la chambre à air et les jeux au niveau de la glissière de suspension font varier

sensiblement la précision. Finalement, on pouvait espérer une précision de quelques centimètres après un tour de table. Cette précision n’étant pas suffisante pour ce placer exactement en face des palmiers ou les éviter, on a pris la décision de se recaler régulièrement sur les bords.

6. Communication entre cartes :tentatives inabouties, erronées Pour la mise au point des odomètres, le plus dur a été de trouver une méthode pour la transmission des données entre l’ATméga et les pics… Nous sommes passés successivement par :

• le port série • i²C • SPI • Port parallèle

Figure 71 : système de suspension des odomètres

Figure 72 : odomètres sur la plate-forme de test

- 62 -

a) le port série Le problème de cette méthode est la lenteur de la transmission (9600 bits par seconde). Ex :

au départ, nous envoyions les informations sous forme de caractères ascii qui chacun prenait 8bit. Or nous comptions les impulsions sur 16 bits : soit de 0 à 65535. Il fallait donc envoyer à chaque fois 5 caractères. Pour les odomètres nous avions donc 2x5caractères (deux odomètres), plus les caractères de séparations. (On envoyait par exemple : « 12000*34000* ») Au total, à chaque interrogation de l’ATméga, nous envoyions 12x8=96 bits soit un temps de transmission de 96/9600=10ms. Le problème qui s’est posé est le suivant : L’ATméga interrogeait toute les 10ms les Pics, ceux-ci mettaient 10ms pour répondre. Or, le pic (comme l’ATméga) est un système séquentielle : il effectue les opérations une à une, ce qui veut dire que pendant qu’il envoie les informations, il ne compte plus les impulsions des odomètres. On obtenait alors des résultats totalement erronés.

Nous avons pu comprendre ce problème grâce à l’utilisation de l’eeprom :la mémoire flash de l’ATméga. On y inscrivait les valeurs des coordonnées et on les relisait après qu’il ait effectué son parcours. Ce moyen de débuggage a été long à mettre au point et n’était pas du tout prévu à cette effet. De plus il reste difficile à utiliser pour des mécaniciens : l’ATméga écrit les informations en hexadécimal qu’il faut apprendre à déchiffrer… Un grand problème lorsque l’on veut rajouter des périphériques sur l’ATméga, c’est que l’ on a tendance, par facilité, à utiliser le port série. Or l’ATméga ne possède qu’un seul port série (Il y en aurait deux sur l’ATméga 128 mais on n’a pas utilisé le deuxième). Or, le port série est vraiment pratique pour le débuggage lorsque le programme devient complexe. On conseillera donc de toujours s’assurer qu’au moins un port série puisse être utilisé pour le débuggage. (ou un autre moyen…facile d’utilisation) Finalement, le port série a été utilisé pour la carte sonar, cette emploie du port série cadrait mieux avec cette fonction.

b) i²C et SPI De longues heures ont été nécessaires à la recherche d’un autre mode de transmission. Nous avons essayé d’utiliser les deux protocoles de communication mais nous ne sommes jamais arrivés à quelques choses d’intéressant…Il y aurait un problème de relation master slave …

c) port parallèle Finalement la solution a été trouvé : le port parallèle. Les informations sont directement envoyées en code binaire sur 8bits. Nous avons essayés de réinitialiser les odomètres à chaque lecture pour nous éviter d’avoir à repérer les transitions 0-255 et 255-0. Mais nous avons encore été confronté à un problème : la réinitialisation ne se faisait pas toujours… Le Pic n’étant pas à la bonne ligne du programme (problème du séquentiel).

d) conclusions Comme on a pu le voir, dès que les informations deviennent complexes entre les cartes, il faut passer à l’utilisation d’un des systèmes précité. Le plus simple et le plus rapide d’utilisation étant bien sûr le port parallèle : l’information est directement disponible à la sortie des fils, la vitesse de transmission est presque infinie, il peut donc être utilisé pour tout type d’utilisation.(d’après Laurent Pinchart, il pourrait y avoir quand même des problèmes de transmission. D’après lui il faudrait synchroniser les horloges de l’ATméga et du pic…) . Bien sûr, chaque fil correspond à un pin sur l’ATméga et le nombre de pin n’est pas infini. Ensuite, vient le port série. Il est facile à utiliser et ne demande pas de connaissances techniques particulières. Le seul problème est que la vitesse de transmission est limitée (max 9600 Bits par s) et que le nombre d’entrée sur l’ATméga128 est limité à deux. Le port série doit donc plutôt être utilisé pour des demandes occasionnelles d’informations. Ce moyen de transmission est fort facile à débuguer : l’information peut se lire directement sur l’écran de l’ordinateur. Les autres moyens que nous avons essayés vainement à mettre en place, demandent une bonne connaissance des protocoles de transmission de l’informatique et de l’électronique… Si il se faisait que tout les ports séries et que tout les pins de l’ATméga soient occupés, il faudrait alors passer à ce mode de transmission. Ils ont l’avantage d’être très rapides, mais la mise au point doit être faite par une personne

- 63 -

qualifiée dans le domaine. De plus, il devient difficile de débugger le système : l’information qui circulent entre les fils nous est incompréhensible.

8. Récapitulatif en vue d’élaborer une stratégie.

Pour mettre les choses au clair, en vue d’expliquer le programme implémenté dans l’ATméga, voici un résumé des différents capteurs finalement utilisés. Il reprend aussi les résultats obtenus et quelques remarques formulées suite aux problèmes remarqués lors de l’utilisation du robot.

capteur emplacement fonction résultats des tests remarques utiles

à 1cm de hauteur

détecter les bords

pare-chocs avant (7cm de hauteur)

détecter un robot adverse ou un palmier

ascenseur détecter le passage d’un balle

raclette connaître la position de la catapulte

micro-switchs

pare-chocs en hauteur (30cm de hauteur)

détecter la présence d’un palmier au niveau des supports de balles

Les micro-switchs sont très simples à utiliser et très fiables. Le seul problème rencontré est le détachement des fils suite à une cassure de la soudure

Il faut éviter de cacher les soudures des fils avec de la « gaine thermo » pour pouvoir rapidement remarquer une mauvaise connexion.

Caméra

en haut à gauche, plongeant le plus possible

détecter la présence des balles pour diriger le robot exactement vers la balle

Les tests ont été très concluants. La caméra est très fiable et simple à gérer suite au traitement de l’information.

Elle détecte la couleur cherchée à plusieurs mètre!

Odomètres

sur le même axe géométrique que les roues motrices

déterminer la position du robot à tout instant.

les résultats ont souvent varié (de très hauts à très bas) mais globalement ils ont été positifs.

Il faut être très soigneux lors de la conception et du montage. Une petit erreur géométrique conduit rapidement à des dizaines de centimètres de dérive pendant un match.

Sonar

en haut à droite détecter la position des palmiers

Bons résultats. De temps à autre il ne détecte rien. Il faut attendre 2 sec au minimum entre deux mesures.

Il faut faire un calibrage assez précis pour chaque position de palmier. Il faut prévoir que les balles sur le palmier lui donne un encombrement plus important. la position relative des balles sur le palmier peut faire varier la distance entre le sonar et le palmier de quelques cm… Il faut que le robot soit toujours placé exactement au même endroit au début du match.

- 64 -

V. Programmation .

1. La programmation de l’ATMEGA 128 Cette année nous avions comme base de programmation, le programme d’eurobot de l’année dernière, qui était en fait la réécriture du programme de la coupe de Belgique 2003 par Laurent Pinchard. La particularité innovante de ce programme, hormis son orientation objet est l’utilisation de différents « case » qui définissent les différents états du robot. L’un des avantages de cet outil est qu’il permet de ne pas utiliser toutes les entrées à n’importe quel moment mais de tenir compte du temps qui s’est écoulé, de l’état précédent, de certaines entrées ou d’une combinaison de ces éléments. Par exemple, si le robot a une balle prête a être tirée et qu’il se trouve dans la zone où il lui est permis de tirer, il ne doit pas être influencé par une balle que la caméra verrait, il doit donc tirer toute les balles qu’il possède pour ensuite recommencer son parcours et c’est seulement dans cet état que la caméra devient de nouveau opérationnelle. Un autre exemple est le recalage, après avoir parcouru une certaine distance, l’erreur accumulée par les odomètres devient trop importante et un recalage sur un bord devient nécessaire, il ne faut bien sur pas que le robot se recale sur un autre robot, pour éviter cela, l’état de recalage ne s’active qu’à une petite distance du bord. L’intérêt de cette écriture sera mis en évidence dans le graphcet.

1. Les différentes fonctions du programme.

a) La commande des moteurs. Une fonction s’occupe de la gestion des moteurs, en fonction des différents états.

En fait il existe une fonction différente pour chaque moteur. Ces fonctions se reconnaissent par le mot « actuate » dans leur noms : robot_lift_actate, robot_poêle_actate, ect… Ces fonctions demandent simplement aux moteurs de s’arrêter ou de se mettre en route quand le robot se trouve dans tel ou tel état. Exemple de la commande du moteur de l’ascenseur : void robot_lift_actuate(void) { robot.lift.position = LIFT_POSITION_UP; switch ( robot.state.state ) { case ROBOT_STATE_DEMARRAGE: robot.lift.state = LIFT_STATE_OFF; break; case ROBOT_STATE_FORWARD: robot.lift.state = LIFT_STATE_ON; break; case ROBOT_STATE_TURN: robot.lift.state = LIFT_STATE_ON; break; case ROBOT_STATE_DUMP: robot.lift.state = LIFT_STATE_ON; break; case ROBOT_STATE_MOVE_TO_DROP: case ROBOT_STATE_TURN_TO_DROP: case ROBOT_STATE_CORRECTION_TO_DROP: /* Lorsque le robot va au drop, l'ascenseur s'arrête si : * - il y a une balle en face de la moustache et une balle * dans la catapulte, ou * - il y a 3 balles dans le robot. */ if ((robot.sensors2.MOUSTACHE && robot.catapluch.full) || ball == 3) robot.lift.state = LIFT_STATE_OFF; break;

- 65 -

case ROBOT_STATE_DROP: /* Lorsque le robot est au drop, il fonctionne tant qu'il y a des balles if (robot.catapluch.full||!robot.sensors2.RACLETTE) robot.lift.state = LIFT_STATE_OFF; else robot.lift.state = LIFT_STATE_ON; break; case ROBOT_STATE_END: robot.lift.state = LIFT_STATE_OFF; break; default: if ((robot.sensors2.MOUSTACHE && robot.catapluch.full) || ball == 3) robot.lift.state = LIFT_STATE_OFF; // else // robot.lift.state = LIFT_STATE_ON; break; } } Ce programme commande à l’ascenseur de fonctionner tout le temps, sauf :

- si il y a 3 balles dans l’ascenseur - si il y a une balle dans la catapulte et une balle en haut de l’ascenseur - si la catapulte est en train de tirer (car la raclette qui pousse la balle dans la catapulte obstrue la sortie de

l’ascenseur

Parmis toutes ces procédures de commande des moteurs, il en existe une particulière pour la gestion des moteur de locomotions, celle-ci s’appelle robot_motors_actuate. En fait, cette fonction ne donne pas directement l’état des moteurs mais appelle une autre fonction appelée robot_move qui gère la commande simultanée des 2 moteurs. Quand on appelle cette fonction (robot_move), il y a 2 paramètres à introduire : la vitesse et la direction. La vitesse est une constante que l’on défini généralement dans le fichier « config.h » et la direction est une petite fonction que l’on défini dans la première partie du programme. Cette année, dans la pratique, nous nous sommes rendu comptes qu’il était impossible de faire avancer le robot rigoureusement droit en appliquant une commande constante dans le temps (le facteur correctif d’un moteur par rapport à l’autre n’étant pas le même au démarrage et en régime). Nous avons donc dû faire intervenir un asservissement continu (qui s’opère à chaque boucle du programme) que nous avons introduit sous forme de direction, (nous l’avons appelée : ROBOT_DIR_CORRECTION) dans la fonction « robot_move ». (voir chapitre sur les odomètres). En résumé, dans la fonction robot_motors_actate : Si l’on veut faire tourner le robot à droite à une vitesse ROBOT_SPEED_ROTATE, il faut écrire la commande robot_move(ROBOT_SPEED_ROTATE, ROBOT_DIR_RIGHT). Si l’on veut faire avancer le robot d’un point à un autre de la matrice de point de passage à une vitesse ROBOT_SPEED_FORWARD, il faut écrire la commande robot_move(ROBOT_SPEED_FORWARD, ROBOT_DIR_CORRECTION). Exemple : void robot_motors_actuate (void) { switch ( robot.state.state ) case ROBOT_STATE_RECALAGE: { if ((!robot.sensors2.MSD)&&(!robot.sensors2.MSG)) robot_move (ROBOT_SPEED_RECALAGE, ROBOT_DIR_FORWARD); else if (robot.sensors2.MSD)

- 66 -

robot_move (ROBOT_SPEED_RECALAGE, ROBOT_DIR_FORWARD_RIGHT); else if (robot.sensors2.MSG) robot_move (ROBOT_SPEED_RECALAGE, ROBOT_DIR_FORWARD_LEFT); } break; case ROBOT_STATE_DROP: robot_move(ROBOT_SPEED_STOP, ROBOT_DIR_FORWARD); break; case ROBOT_STATE_TURN: if (tetabut > 0) robot_move (ROBOT_SPEED_ROTATE1, ROBOT_DIR_RIGHT); else if (tetabut < 0) robot_move (ROBOT_SPEED_ROTATE1, ROBOT_DIR_LEFT); break; case ROBOT_STATE_CORRECTION: robot_move (ROBOT_SPEED_FORWARD, ROBOT_DIR_CORRECTION); break; case ROBOT_STATE_SEARCH_BALL: robot_move (ROBOT_SPEED_ROTATE_CAM, robot.position.vision); break; case ROBOT_STATE_FETCH_BALL: robot_move (ROBOT_SPEED_FORWARD, ROBOT_DIR_FORWARD); break; case ROBOT_STATE_END: robot_move (ROBOT_SPEED_STOP, ROBOT_DIR_FORWARD); break; } robot_motors_actuate_command(); } N.B: La fonction robot_motors_actuate_command appelée à la fin est une sécurité qui permet, avant de donner la commande aux moteurs, de passer par un état non alimenté pendant un certain temps dans le cas où on commanderait aux moteurs de changer de sens instantanément. Cela évite de griller les moteurs. void robot_move (unsigned int speed, enum robot_direction dir) { int speed_left, speed_right; float correction=1.18; switch ( dir ) { default: case ROBOT_DIR_FORWARD: if (((x < dist_freinage)&&(tetabis<-PI/4)&&(tetabis>-3*PI/4))|| ((y < dist_freinage)&&((tetabis>3*PI/4)||(tetabis<-3*PI/4)))|| ((x > (2100 - dist_freinage))&&(tetabis>PI/4)&&(tetabis<3*PI/4))|| ((y > (2400 - dist_freinage ))&&((tetabis<PI/4)&&(tetabis>-PI/4)))) { if (speed > 30) speed = 30;

- 67 -

} else if (robot.state.state == ROBOT_STATE_FETCH_BALL) { if (dpalm < DISTANCE_FREINAGE_PALMIER) { if (speed > 40) speed = 40; } } speed_left = speed; speed_right = speed; if ((robot.time.local<(TIME_ACCELERATION))&&((speed_left-speed_left_last>30)||(speed_left-speed_left_last<-30))) speed_left = speed_left*robot.time.local/(TIME_ACCELERATION); if ((robot.time.local<(TIME_ACCELERATION))&&((speed_right-speed_right_last>30)||(speed_right-speed_right_last<-30))) speed_right = speed_right*robot.time.local/(TIME_ACCELERATION); break; case ROBOT_DIR_RIGHT: speed_left = speed; speed_right = -speed; break; case ROBOT_DIR_LEFT: speed_left = -speed; speed_right = speed; break; case ROBOT_DIR_BACKWARD: speed_left = -speed; speed_right = -speed; break; case ROBOT_DIR_EVITE_PALMIER: speed_left = speed - (speed*0.033*(1/(tetapalm+12*sign(tetapalm))-0.06));//+speed*0.020*tetabut*180/PI);//+speed*0.010*tetabut*180/PI; speed_right = speed + (speed*0.033*(1/(tetapalm+12*sign(tetapalm))-0.06));//-speed*0.020*tetabut*180/PI);//-speed*0.010*tetabut*180/PI; break; case ROBOT_DIR_CORRECTION: { if (dpalm < DISTANCE_FREINAGE_PALMIER) { if (speed > 40) speed = 40; } speed_left = speed+speed*0.01*tetabut*180/PI; speed_right = speed-speed*0.01*tetabut*180/PI; }

break; N.B: La direction ROBOT_DIR_EVITE_PALMIER est une direction inspirée de l’asservissement qui permettait au robot de contourner le palmier naturellement si celui-ci se trouvait sur sa trajectoire quand il allait tirer. Malheureusement cette fonction n’a jamais vraiment été au point car le robot ne se corrigeait que par rapport au

- 68 -

palmier le plus proche. Quand il se trouvait entre 2 palmiers, il se mettait alors à osciller et finissait par se perdre sur l’un des deux palmiers.

b) Le fsm step (Finite State Machine). Le « fsm step », s’occupe de définir les conditions pour le passage d’un état à un autre. Généralement, ce passage se fait à l’aide d’un changement au niveau des entrées (odomètres, caméra, micro-switch). Par exemple lorsque le robot est dans l’état : « ROBOT_STATE_CORRECTION » qui est l’état dans lequel le robot est asservi en position pour garder l’angle de la direction des coordonnées du point qu’il veut atteindre, si il franchit la limite d’un carréé de 200 mm autour de ce point, il passera alors dans l’état « ROBOT_STATE_TURN » et tournera grossièrement (sans asservissement) sur lui-même jusqu’à atteindre la direction du point suivant. Si par contre, la caméra lui envoie une information pendant qu’il se trouve dans cet état, il passe dans l’état « ROBOT_STATE_SEARCH_BALL » et tourne sur lui-même du côté où il a vu la balle, il passera dans l’état « ROBOT_STATE_FETCH_BALL » quand il verra la balle droit devant lui. Exemple : case ROBOT_STATE_CORRECTION: { calcul_direction(); calcul_direction_palmier();

if ((x<(xbut+prec))&&(x>(xbut-prec))&&(y<(ybut+prec))&&(y>(ybut-prec)))

{ next_point(); calcul_direction(); new_state = ROBOT_STATE_TURN; } else if (robot.sensors2.LEFT||robot.sensors2.RIGHT ) { new_state = ROBOT_STATE_SEARCH_BALL; Le robot passerait également dans un autre état si un choc survenait sur un des pare-chocs, si il se trouvait dans la zone de tir et qu’il possédait une balle, ect… Par contre, Si le robot est en train de déverser ses balles dans l’embut, nous n’avons aucune information quand à la hauteur de la « poêle » et le passage à l’état suivant se fait à l’aide d’une temporisation. case ROBOT_STATE_DUMP: { if (robot.time.local>TIME_TO_DUMP) { next=0; next--; next_point(); new_state = ROBOT_STATE_RECALAGE; robot.poil.is_up = 0; } } break; N.B: La ligne robot.poil.is_up = 0 est une sécurité que l’on a ajouté pour l’eurobot. C’est en fait une variable qui passe en 1 quand l’état dans lequel la poêle doit être levée se termine et qui repasse en 0 quand l’état qui déverse les balles se termine. Cette astuce permet de demander de baisser la poêle après 45 secondes si l’état « ROBOT_STATE_DUMP» n’a pas encore été atteint (vraisemblablement à cause du robot adverse qui se trouvait sur le chemin pour aller déverser ou à cause d’un palmier mal identifié).

c) La lecture des entrées ou « read sensors » La partie read_sensors, est la partie qui gère les entrées. C’est ici que l’on définit les ports de l’ATMEGA qui vont être utilisé.

- 69 -

Dans le read_sensors, on trouve également le compteur d’impulsion (newD, newG dans le programme ci-dessous) venant du port parallèle de la carte des odomètres, les informations venant de la caméra, la gestion des contacts, le compteur de balles et la variable qui nous averti si il y a une balle dans la catapulte. Exemple : void robot_read_sensors (void) { robot.last_sensors = robot.sensors; robot.last_sensors2 = robot.sensors2; *(unsigned int*)&robot.sensors = ( inp(PINC) << 8 )| inp(PINA); *(unsigned int*)&robot.sensors2 = ( inp(PINE) << 8 )| inp(PIND); robot.time.local = atomic_read32(&time.local); robot.time.global = atomic_read32(&time.global); if (robot.sensors2.LEFT||robot.sensors2.RIGHT) { if (robot.sensors2.LEFT && !robot.sensors2.RIGHT) robot.position.vision=ROBOT_DIR_LEFT; else if (!robot.sensors2.LEFT && robot.sensors2.RIGHT) robot.position.vision=ROBOT_DIR_RIGHT; else if (robot.sensors2.LEFT && robot.sensors2.RIGHT) robot.position.vision=ROBOT_DIR_FORWARD; } newD = robot.sensors.bit18*128+robot.sensors.bit17*64+robot.sensors.bit16*32+robot.sensors.bit15*16+robot.sensors.bit14*8+robot.sensors.bit13*4+robot.sensors.bit12*2+robot.sensors.bit11*1; newG = robot.sensors.bit28*128+robot.sensors.bit27*64+robot.sensors.bit26*32+robot.sensors.bit25*16+robot.sensors.bit24*8+robot.sensors.bit23*4+robot.sensors.bit22*2+robot.sensors.bit21*1; // compteur de balles if ( robot.sensors2.JARJAR == 1 && robot.last_sensors2.JARJAR == 0 ) { robot.timers.jarjar.data = 1; robot.timers.jarjar.expires = (0.1*HZ); add_timer(&robot.timers.jarjar); } if ( robot.timers.jarjar.data && !timer_pending(&robot.timers.jarjar) ) { robot.timers.jarjar.data = 0; if ( robot.sensors2.JARJAR ) ball++; } if ( robot.sensors2.MOUSTACHE == 0 && robot.last_sensors2.MOUSTACHE == 1 && robot.lift.time == (unsigned long)-1 && robot.catapluch.full == 0 ) robot.lift.time = robot.time.global + TIME_BETWEEN_MOUSTACHE_AND_CATAPLUCH; else if ( robot.time.global > robot.lift.time ) { robot.catapluch.full = 1; robot.lift.time = (unsigned long)-1; } }

- 70 -

d) Le calcul de la coordonnée du robot La fonction calcul_pose reçoit les impulsions de read_sensors et calcul la coordonnée courante du robot. void calcul_pose( void ) { double dteta; double dx; double dy; double moy; double dif; double d; double g; difD = newD - oldD; difG = newG - oldG; oldD = newD; oldG = newG; if (difD < -200) difD = difD + 256; if (difD > 200) difD = difD - 256; if (difG < -200) difG = difG + 256; if (difG > 200) difG = difG - 256; d = (difD)/PULSE_PER_MM; g = (difG)/(PULSE_PER_MM); moy = (g+d)/2; dx = moy*cos(teta); dy = moy*sin(teta); dif = (d-g); dteta =(dif/WHEEL_DISTANCE); teta = teta+dteta; x = x+dx; y = y+dy; tetabis=PI/2-teta; } Le programme ci-dessus est en fait la fonction calcul-pose complète ! Si on compte le nombre de lignes de code qui servent vraiment à calculer les coordonnées, on s’aperçoit qu’il n’y en a que 13 (11 dans le calcul pose + 2 dans le read_sensors). C’est grâce à cette simplicité de calcul que l’ATMEGA avec ses 8 MHZ(négligeable par rapport aux GHZ des pc embarqués) arrive à calculer des coordonnées avec une précision relativement bonne.

e) La fonction calcul_direction Maintenant que le robot sait se situer sur le terrain, il faut trouver une méthode pour utiliser ces coordonnées. Nous avons opté pour une fonction que nous avons appelée calcul_direction, dans laquelle nous introduisons des coordonnées (xbut,ybut) du point que nous voudrions que le robot atteigne. Cette fonction calcul alors différentes valeurs, à savoir :

- la distance entre le point actuel et le point d’arrivée (dbut) - l’angle que doit effectuer le robot en tenant compte de son orientation actuelle (tetabut)

Cette fonction sera expliquée plus en détail dans le chapitre sur les odomètres. void calcul_direction ( void ) { dbut = sqrt( square(x-xbut) + square(y-ybut) ); tetadest = atan((x-xbut)/(y-ybut));

- 71 -

if ((ybut<y)&&(xbut>x)) { tetadest=PI+tetadest; } if ((ybut<y)&&(xbut<x)) { tetadest=-PI+tetadest; } if ((ybut==y)&&(xbut<x)) { tetadest=-PI/2; } if ((ybut==y)&&(xbut>x)) { tetadest=PI/2; } if ((ybut>y)&&(xbut==x)) { tetadest=0; } if ((ybut<y)&&(xbut==x)) { tetadest=PI; } nt=tetabis/(2*PI); tetabis=tetabis-nt*(2*PI); tetabut=tetadest-tetabis; }

f) La fonction next_point La fonction next_point passe aux coordonnées suivantes et repasse au premier point de passage lorsque le dernier a été atteint. Il était nécessaire de faire une procédure juste pour cette action car il faut tenir compte du fait qu’il existe une matrice de point de passage pour chaque emplacement de palmier et que ces matrices n’ont pas forcément la même taille. void next_point(void) { if (robot.sonar.pos==1) { if (next == 6) { next = -1; } next=next+1; xbut = parc1[next][0]; ybut = parc1[next][1]; } if (robot.sonar.pos==2) { if (next == 7) { next = -1; } next=next+1; xbut = parc2[next][0]; ybut = parc2[next][1]; } etc…

- 72 -

g) La fonction sonar_measure

La fonction sonar_measure est une fonction qui fait une demande au sonar sur la position du palmier en lui envoyant « RP » (pour Recherche Palmier) et qui attend une réponse sous forme de chiffre de 1 à 9. Cette fonction se trouvait dans le main.c pour la coupe de Belgique mais pour plus de souplesse nous avons décidé de la mettre dans un fichier isolé (sonar_measure.c) que nous appelons toutes les 2 secondes quand le robot est sous tension avant même d’avoir tirer la goupille de démarrage. Tout ceci afin d’éviter la fameuse panne qui est survenue lors des quarts de finale de la coupe de Belgique. unsigned int sonar_measure(void) { struct timer_list timer; unsigned int c; uart_putc('R'); uart_putc('P'); init_timer(&timer); timer.expires = 2*HZ; add_timer(&timer); do { c = uart_getc(); if ( c == UART_NO_DATA ) continue; if ( c >= '0' && c <= '9' ) return c - '0'; } while (timer_pending(&timer)); return 0; } unsigned int sonar_find_tree(void) { struct timer_list timer; int pos = 0, last_pos; int retry = 0; init_timer(&timer); do { timer.expires = TIME_BETWEEN_TO_MESURE; add_timer(&timer); while(timer_pending(&timer)) {}; last_pos = pos; pos = sonar_measure(); if (pos == 0) { if (retry++ < 4) continue; /* Si 4 essais sans succès, on choisit la position 8 */ pos = 8; last_pos = 8; } } while (pos != last_pos); return pos; }

- 73 -

2. Le programme principal Le programme principal est appelé « main ». Le « main » peut être partagé en 2, une partie se trouvant hors de la boucle et une partie se trouvant dans la boucle. La première partie contient toutes les définitions, le nom des différentes entrées, micro-switch, odomètres et caméra, certaines constantes telles que la seconde (fonction de la fréquence de l’ATMEGA) ainsi que l’énumération des différents états du robot. C’est aussi dans cette partie que l’on définit les matrices de points de passage (ci-dessous : parc1 et parc2 pour les 2 premières positions de palmiers. Exemple : #define PI 3.1415952 #define PULSE_PER_MM 3.071728// pulse per rotation / (diameter*pi) #define WHEEL_DISTANCE 124 #define XTAL_CPU 8000000LL //3686400LL// 3.6864 Mhz internal clock */ #define HZ ((unsigned long)XTAL_CPU/256) long int parc1[7][2] = { {300,2400}, {1650,450}, {2100,450}, {1800,2400}, {1050,2000}, {1050,450}, {300,450}, }; long int parc2[8][2] = { {300,2400}, {1050,2000}, {1050,450}, {2100,450}, {1800,2400}, {1050,2000}, {1050,450}, {300,450}, }; typedef struct _sensors_m { unsigned int RIGHT : 1, /* PD0 */ LEFT : 1, /* PD1 */ PAVD : 1, /* PD2 */ PAVG : 1, /* PD3 */ MSD : 1, /* PD4 */ MSG : 1, /* PD5 */ PARD : 1, /* PD6 */ RACLETTE : 1, /* PD7 */ serie1 : 1, /* PE0 */ serie2 : 1, /* PE1 */ serie : 1, /* PE2 */ JARJAR : 1, /* PE3 */ MOUSTACHE : 1, /* PE4 */ bit22 : 1, /* PE5 */ KLINCHOUILLE : 1, /* PE6 */ START : 1; /* PE7 */ unsigned int collision; } sensors_r;

- 74 -

enum robot_state { ROBOT_STATE_END, ROBOT_STATE_FORWARD, ROBOT_STATE_MOVE, ROBOT_STATE_TURN, ROBOT_STATE_DROP, ROBOT_STATE_CORRECTION, ROBOT_STATE_EVITE_PALMIER, ROBOT_STATE_EVITE_PALMIER_TO_ENBUT, ROBOT_STATE_EVITE_PALMIER_TO_DROP, ROBOT_STATE_MOVE2_TO_ENBUT, ROBOT_STATE_BACK, ROBOT_LONG_STATE_BACK, ROBOT_STATE_MOVE_TO_PALMIER, ROBOT_STATE_TURN_TO_PALMIER, ROBOT_STATE_CORRECTION_TO_PALMIER, ROBOT_STATE_RECULE_TO_PALMIER, ROBOT_STATE_RECULE_TO_ENBUT, ROBOT_STATE_MOVE_TO_ENBUT, ROBOT_STATE_TURN_TO_ENBUT, ROBOT_STATE_CORRECTION_TO_ENBUT, ROBOT_STATE_MOVE_TO_DROP, ROBOT_STATE_TURN_TO_DROP, ROBOT_STATE_CORRECTION_TO_DROP, ROBOT_STATE_GET_THE_BALLS_OF_THE_PALMIER, ROBOT_STATE_DUMP, ROBOT_STATE_SEARCH_BALL, ROBOT_STATE_FETCH_BALL, ROBOT_STATE_RECALAGE, ROBOT_STATE_DEMARRAGE, ROBOT_STATE_LEVE_POIL, ROBOT_STATE_TURN_PARCOURS, ROBOT_STATE_DROP_PARCOURS, ROBOT_STATE_CORRECTION_PARCOURS, ROBOT_STATE_MOVE_PARCOURS, ROBOT_STATE_TURN_TO_DROP_PARCOURS, }; N.B : L’énumération de la longue liste ci-dessus d’états du robot, révèle un problème au niveau de l’écriture. En effet, la syntaxe utilisant des états du robot était faite en principe pour simplifier l’écriture (le programme de l’année passée comportait 11 états contre 35 ici). La deuxième partie est constituée de ce que l’on trouve dans la boucle. Exemple : int main (void) { robot_read_sensors(); robot_fsm_step(); calcul_pose(); #ifdef DEBUG /* Print the state on the serial port */ if ( robot.state.state != last_state ) uart_print_state(robot.state.state); #endif } /* Power off the motors. */ cbi (PORTB, 0); /* Power off right motor */

- 75 -

cbi (PORTB, 2); /* Power off left motor */ ioinit(); while ( 1 ) {}; return 0; } Avec le return 0 qui se trouve à la dernière ligne, ces fonctions sont donc appelées à chaque boucle du programme à savoir 8000 fois par seconde. Quand la fonction « robot_fsm_step()» est appelée, elle appelle à son tour toutes les fonctions de commandes des moteurs. C’est volontairement que la fonction calcul_direction n’est pas appelée dans la boucle principale. Ceci, Pour alléger les calculs de l’ATMEGA, Cette fonction est uniquement appelée lors de l’asservissement et une fois avant de tourner grossièrement (voir exemple du fsm_step).

2. Stratégie générale lors de la coupe de Belgique D’une manière générale, la partie était partagée en 2 : -Une phase de démarrage qui n’était autre qu’une longue séquence à l’intérieur de laquelle le robot passait successivement dans différents états sans autres alternatives. Dans cette phase : le robot commençait par scanner le terrain avec son sonar pour repérer le palmier. Il levait ensuite sa poêle à mi-hauteur, se dirigeait vers ce palmier, terminait de lever la poêle, reculait pendant 3 secondes puis allait contre la barre d’embut adverse et descendait la poêle pendant la somme des 2 temporisations mises pour la monter. -La seconde phase était la phase plus « intelligente ». Le robot commençait par effectuer le parcours qui correspondait au palmier qu’il avait identifié lors de la phase de démarrage. Si pendant ce parcours, il était en possession de 2 balles et qu’il se trouvaient dans la zone de tir (un rectangle de 300mm sur 900mm près du but), il rentrait alors dans un état où il s’oriente vers le but et combine l’action de la catapulte et de l’ascenseur jusqu’à ce qu’il n’y ai plus de balle dans le robot. Ensuite il reprenait son parcours et ainsi de suite jusqu’à ce que la minute trente soit écoulée.

Conclusions à propos de cette stratégie -Cette procédure comportait certains dangers. Par exemple, lors de la phase de démarrage, si un incident survenait (un choc avec un autre robot ou un palmier mal identifié), la seule sécurité que nous avions était de ne jamais laisser le robot 10 secondes dans un même état. Après 10 secondes dans un même état, il devait commencer la procédure de parcours à partir du premier point. -Comme nous n’avions aucun moyen de détecter les chocs avec les palmiers, nous n’avons pas pu brancher la caméra car si celle-ci nous emmenait sur une balle et qu’un palmier se trouvait entre le robot et la balle nous étions perdu. -La procédure de scannage du sonar en début de match était lente et nous faisait perdre au moins 6 secondes avant de commencer (les 6 secondes les plus importantes de la parties). En voulant diminuer ce temps lors des quarts de final, le sonar n’a rien envoyé à l’ATMEGA (on ne sait encore pour quelle raison), et le robot n’a pas démarré.

- 76 -

3. Stratégie générale pour l’eurobot

Pour l’eurobot, la principale amélioration était une plus longue séquence de démarrage. En effet, nous avons remarqué lors de la coupe de Belgique que certains robots comme celui des Kamikazes, se déplaçait au hasard sur le terrain en se dirigeant vers le but adverse et qu’il ramassait de cette façon au moins 2 balles. En allant sur le palmier dès le début, nous perdions ces balles. En plus de cette amélioration tactique, nous avions (enfin) un micro-switch placé à la hauteur des anneaux des palmiers ce qui nous permettait de détecter les palmiers et nous pouvions dès lors brancher la caméra sans crainte de rester bloqué. De plus, nous avions vu que le robot de Minitech lors de la coupe de Belgique, prenait des photos alors que la ficelle n’était pas encore tirée. Nous avons donc décidé de faire de même avec notre sonar et de scanner le terrain dès que le robot était sous tension. La partie pouvait donc se résumer comme suit : -Séquence de démarrage : Lorsque l’on tir la ficelle, le robot sait où est le palmier et démarre immédiatement. Il prend la première balle qui se trouve devant lui puis longe le bord gauche, là où il n’y a pas de palmier mais où il peut y avoir des balles. Arrivé au bout, il tourne à gauche et avance jusqu’au goal. Il se tourne alors vers le goal et tire ses balles. Pendant qu’il tire, il lève la poêle jusqu’à mi-hauteur ce qui nous fait encore gagner 4 à 5 secondes. Une fois la poêle levée, il se dirige vers le palmier et termine de lever sa poêle, recule et va les déverser dans l’embut adverse. -Phase intelligente : Cette phase est identique à celle de la coupe de Belgique si ce n’est que cette fois, la caméra a pu être branchée.

- 77 -

4. Grafcet.

1ATMEL ON

ALIM 24V ONBouton poussoir ON

Palmier détecté

5

6

8

7

4

3

2Ascenseur ON

Avance vers ce point en se corrigeant si tetabut

augmente

Tourne vers le point suivant

Avance tout droit

Ascenseur OFF

Tourne vers le butAscenseur OFF

Jack retiré

Balle = 2

|tetabut|<5°

Y>=300

4'

Dbut<200mm

1050<X<1150

|tetabut|<1°

9 Catapulte OFFAscenseur ON

Microswitch de la catapulte=0

Catapulte ONAscenseur OFF

Balle=0

10 Lève la poêle

T=4 sec

11 Arrête de lever la poêle

Balle < 2

1050<X<1150

6'Asc On

Y>2100

4' Attente

Balle>0

1

- 78 -

13

12

Avance vers le palmier en se corrigeant si tetabut augmente

|tetabut|<1°

Dbut<250mm

Tourne vers le palmier

14 Lève la poêle

T=2 sec

15Arrête de lever

la poêleRecule

T=2 sec

17

16

Avance vers ce point en se corrigeant si tetabut

augmente

Tourne vers le point suivant (pour aller

vers l’embut)

|tetabut|<5°

Dbut<200mm

Y>2250

18 Baisse la poêle

T=6 sec

- 79 -

20

19

Avance vers ce point en se corrigeant si tetabut

augmente

Tourne vers le point suivant

Ascenseur ON

|tetabut|<5°

Dbut<200mm

La caméra voit le centre de masse à gauche ou à

droite

24Tourne du côté du centre de masse

La caméra voit le centre de masse au centre

25Avance

T=2 sec

T=3 sec

22

21 Tourne vers le butAscenseur OFF

Balle>=1 && 1600<y<2000 &&

300<x<1200

|tetabut|<1°

23 Catapulte OFFAscenseur ON

Microswitch de la catapulte=0

Catapulte ONAscenseur OFF

Balle=0

Recule 26

Choc sur pare-choc

T=2 sec

Balle>0

- 80 -

VI. Sponsoring

Afin de nous aider dans la réalisation de ce projet, nous avons contacté de nombreuses entreprises pour un sponsoring. Néanmoins, une seule d’entre-elles a répondu favorablement à notre requête et s’est donc associée à notre aventure. Cette année, notre sponsor est La Maison de l’Entreprise. Celle-ci a pris à sa charge nos frais d’équipements pour une valeur de 500 euros. Nous avons ainsi pu réaliser des t-shirts et polos pour chaque membres de l’équipe. Parc Scientifique Initialis Rue Descartes, 2 7000 Mons Contact : Stéphane Maucci Email : [email protected] Tel : 065/32.15.02 Fax : 065/36.17.46

- 81 -

VII. Conclusion.

Le travail fourni dans le cadre de ce projet nous a, à tous, appris beaucoup de choses. Tant aux points de vue technique et pratique que sur le plan humain. Le travail d’équipe et la gestion d’un budget sont entre autres des caractéristiques propre à ce projet mais qui nous donne une bonne impression des difficultés que l’on rencontrera inévitablement dans un futur assez proche…

Les résultats obtenus sont encore une fois à la hauteur de nos espérances puisque nous avons terminé à la

10ème place du concours EUROBOT qui rassemble les meilleures équipes européenne mais aussi d’horizons plus lointains. Il faut aussi noter que nous avons décroché le prix de l’innovation lors de la coupe de Belgique grâce à une mécanique particulièrement inventive et originale.

Conseils aux suivant… Pour conclure ce rapport, nous avons chacun donné quelques conseils qu’il nous semble utile de transmettre

dans le but d’optimiser le travail de nos successeurs. Ceux-ci proviennent le plus souvent d’expériences personnelles, de problèmes rencontrés ou d’idées pertinentes survenues lors de notre travail. o Mécanique…

- Utiliser du plexiglas comme matériau de base - Essayer si le règlement s’y prête une forme de robot en demi-hexagone. - Lors du choix des dimensions de cette plate – forme, penser que le robot doit gérer les contacts et que

donc il faut prévoir de la place pour les pares –chocs - Être toujours audacieux dans les réalisations - Ne pas utiliser les mèches à chanfreiner mais bien le chanfrein, vous éviterez de briser une plaque de

plexiglas importante - Réaliser des vues isométriques ou plans diverses lors de la réalisation de prototype ou de réalisations

définitives - Toujours utiliser deux types de vis si possible : des M4 et des M 5 . - Etre bien ordonné sur l’établi pour ne pas perdre de pièce

o Motorisation et électronique de puissance…

- Pour les moteurs de propulsion, les Crouzet brushless de type 80 035 509 ne sont plus fabriqués, il serait peut être intéressant de passer à une autre solution moins encombrante et tout aussi puissante. Regarder chez Crouzet qui propose de nouveaux moteurs brushless programmable (Motomate) ou chez Maxon ou nous avons un contact en Belgique très disponible et intéressé (sponsoring éventuel).

- Même remarque pour les moteurs des actuateurs. Les moteurs Maxon sont beaucoup utilisés par les roboticiens. Nous avons pu le constater en coupe d’Europe. Ils se sont de plus avérés particulièrement fiables sur notre robot.

- Au niveau de l’électronique de puissance, la carte de puissance est aboutie et fiable, elle ne nécessitera probablement plus de grosses modifications. Penser peut être à ajouter des tâches supplémentaires à cette fonction.

o Electronique de commande et programmation…

- Pour pouvoir développer l’ensemble des systèmes électroniques, il faut rapidement mettre sur pied une plate-forme munie des moteurs définitifs et d’un système de contrôle (ATméga). L’idéal est de commencer à se familiariser à la programmation et l’électronique dès le début de l’année.

- Du point de vue électronique, il faut assurer des bon contacts, de bonnes soudures car un faux contact fait perdre beaucoup de temps (le temps de le remarquer, le localiser, le réparer,… s’il n’a pas détruit des composants d’une carte ).

- Pour ce qui est des capteurs, la fiabilisation du robot complet nécessite un certain temps. Il faut une période de test (avec un robot terminé mécaniquement) la plus longue possible. En attendant, l’équipe commande-

- 82 -

programmation doit s’arranger pour que chaque capteur soit parfaitement maîtrisé. Ceci fait gagner du temps lors des réglages sur le robot définitif.

- Nous avions prévu un poste « caméra ». Il s’est avéré que celui-ci n’avait pas trop de sens car elle avait été développée l’année passée. Par contre, les odomètres ont nécessité énormément de travail. Il faut donc, lors de l’attribution des postes au début de l’année, prévoir une personne s’occupant du développement d’un système (avec M. Lecomte par exemple). Ce système n’est pas nécessairement connu au départ mais se précisera en fonction des règles et des choix faits en cours de conception.

o En général…

- Si l’objectif est de faire de bons résultats en Coupe de Belgique ou en Coupe d’Europe, envisager de faire un robot qui dispose des fonctions essentielles mais très fiable, plutôt que de vouloir faire un robot très complexe moins fiable. Essayer d’avoir ainsi un maximum de temps de tests. La simplicité paie toujours…