# E-Puck

Le e-puck est un petit robot pour l’enseignement et la recherche. Il a été conçu à l’origine par Francesco Mondada et Michael Bonani à l’EPFL (Lausanne, Suisse) en 2004. Une version 2 plus récente a vu le jour en 2006. Le e-puck est open hardware et open source. Plusieurs compagnies le fabriquent et le vendent.
Bien que le e-puck ait été développé pour l’éducation, son prix bas et son grand nombre de capteurs le rendent intéressant pour la recherche. Il a été utilisé en robotique collective, en robotique évolutionnaire, et en robotique artistique.

## Caractéristiques

* Diamètre : 70 mm
* Hauteur : 50 mm
* Poids : 200 g
* Vitesse maximale : 13 cm/s
* Autonomie en déplacement : 2 h
* Processeur : DsPIC30F6014A à 30 MHz (15 MIPS)
* RAM : 8 KB
* Flash : 144 kB
* 2 moteur pas à pas
* 8 capteurs de distance infrarouge (TCRT1000)
* Camera couleur VGA (640 × 480)
* Anneau de 8 LEDs + 1 LED frontale + 1 LED centrale
* Accéléromètre 3D
* 3 microphones
* 1 haut-parleur

## Extensions

Les fonctionnalités du e-puck peuvent être étendues par l’utilisation de cartes d’extension qui s’empilent sur un connecteur au sommet du e-puck.
Listes des extensions :
* Une carte de 3 caméras linéaires, plaçable selon plusieurs configurations, appelée le "fly-vision turret"
* Trois capteurs infrarouges au sol, nommés "ground sensors", permettant le suivi de ligne, la détection de surface au-dessous du robot (nous aurions par exemple apprécié de developper une application où le robot pourrait librement se déplacer sur une table, sans barrière, puisqu'il détecterait lui-même l'absence de surface), ou encore la détection de niveau de gris
* Un émetteur-récepteur ZigBee
* Une caméra omnidirectionnelle
* Des roues aimantées
* Un anneau de 8 DELs multicolores, le "Colour LED Communication Turret", qui peut être utilisé pour faire de la communication visuelle grâce à la caméra du robot
* Un lecteur de cartes SD

## Programmation
### Environnement de programmation

Il est nécessaire de disposer d’une version de Windows XP ou plus haute afin de pouvoir utiliser l’IDE "MPLAB" ainsi que "Tiny Boot Loader". "MPLAB" est essentiel pour le développement d’applications embarquées utilisant des PIC et autres microcontrôleur, notamment pour compiler les programmes pour e-puck. Ce logiciel est gratuit, et comprend une foule de composants logiciels libres pour le développement rapide d’applications. Il n’y a pas de débugger fourni avec l’IDE permettant de débugger les e-puck une fois le programme chargé.

### Langage de programmation

La programmation du e-puck est assurée par GNU C. Il sera compilé par l’IDE sus-nommé, qui génèrera un fichier exécutable ".hex" qui sera ensuite téléversé vers le robot.

### Exportation du programme vers le robot

Pour ce faire, il est nécessaire d’installer "Tiny Boot Loader" afin de téléverser le programme dans le PIC 8 bits du e-puck. Le transfert s’effectue par liaison matériel bluetooth. Les E-Puck possèdent des numéros d’identification uniques, permettant notamment d’accéder à ceux-ci afin de charger le fichier ".hex".

### Différentes approches/techniques utilisées pour la programmation du e-puck

* Il est possible d’accèder aux divers composants du robot via
** Des variables (comme l'instruction LED0 = 1 qui permet d’accèder à la diode 0 de l’anneau et de l’allumer ou IR0 qui permet d’accéder au capteur infrarouge 0)
** Des méthodes (comme la fonction e_set_led(0, 1) qui permettent lui aussi d’accèder à la diode 0 de l’anneau et de l’allumer
* Il est possible d’effectuer une boucle infinie via
** Un while(1) classique
** La méthode e_activate_agenda(nom_de_la_méthode, cycle_en_millisecondes) en ayant au préalable correctement initialisé les "agendas" au moyen de e_start_agenda_processing
Pour les deux techniques abordées, les secondes alternatives sont les plus propres.