<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte

Haku, détails techniques

Vous trouverez sur cette page les détails techniques de la réalisation de Haku :

  • Haku, vue générale
  • Haku, partie mécanique
  • Haku, partie électronique
  • Haku, le programme du portable, notamment le traitement d'image
  • Haku, conclusion

 

Haku, vue générale

 

Voici un fichier powerpoint, dérivé (et traduit) du poster d'Haku fait pour Hispabot par Soudi.

On y voit une description schématique du robot, ansi que quelques explications. Avant de poursuivre, jettez-y un coup d'oeil !

 



Haku, partie mécanique

 

La partie mécanique de Haku est déja plus ou moins expliquée dans les pages détaillant la conception, avec des photos de sa réalisation pas à pas. Merci de vous y reporter !

Vous trouverez aussi dans le powerpoint les principales caractéristiques des composants.




Haku, partie électronique

 

Pour la partie électronique, il faut surtout se réferer aux pages PID sur PIC.

Mais le programme a légèrement changé. En plus de quelques corrections et améliorations, le programme est maintenant muni d'un time-out. Au bout d'une seconde sans recevoir de nouvelles commandes moteurs, le PIC arrête automatiquement les moteurs (il les met en roue libre). C'est pour eviter des catastrophes en cas de plantage général !

Vous trouvez le dernier programme ici.

Voici aussi la liste des E/S sur ce nouveau programme, à utiliser avec la carte décrite ensuite :

PORT

PIN

18F876 ?

Utilisation "Pid sur PIC" Utilisation sur Haku

A0

2

Oui

Détection de sur-inténsité moteur gauche par convertion A/N connecteur "servo" extérieur (Non utilisé)

A1

3

Oui

Détection de sur-inténsité moteur droit par convertion A/N connecteur "servo" extérieur (Non utilisé)

A2

4

Oui

2ème  signal encodeur 2 2ème  signal encodeur 2

A3

5

Oui

Entrée analogique libre Interrupteur Départ

A4

6

Oui

1er encodeur 1er encodeur

A5

7

Oui

2ème  signal compteur 1 2ème  signal compteur 1

B0

33

Oui

Réservé Interruption d'urgence Sens 1 Moteur 2 (vers le pont en H)

B1

34

Oui

Sens 1 Moteur 1 (vers le pont en H) Sens 2 Moteur 2 (vers le pont en H)

B2

35

Oui

Sens 2 Moteur 1 (vers le pont en H) Sens 1 Moteur 1 (vers le pont en H)

B3

36

Oui

Sens 1 Moteur 2 (vers le pont en H) Sens 2 Moteur 1 (vers le pont en H)

B4

37

Oui

Sens 2 Moteur 2 (vers le pont en H) Non utilisé

B5

38

Oui

I/O numérique

Non utilisé

B6

39

Oui

Réservé Interruption d'urgence

Non utilisé

B7

40

Oui

Réservé Interruption d'urgence

Non utilisé

C0

15

Oui

2ème encodeur 2ème encodeur

C1

16

Oui

PWM 2 -> Enable moteur 2 (vers le pont en H) PWM 2 -> Enable moteur 2 (vers le pont en H)

C2

17

Oui

PWM 1 -> Enable moteur 1 (vers le pont en H) PWM 1 -> Enable moteur 1 (vers le pont en H)

C3

18

Oui

I2C Non utilisé

C4

23

Oui

I2C Non utilisé

C5

24

Oui

Peu servir d'I/O numérique Non utilisé

C6

25

Oui

Liaison série Liaison série

C7

26

Oui

Liaison série Liaison série

D0

19

Non

Réserver pour communication bus ISA

LED rouge

D1

20

Non

Réserver pour communication bus ISA

LED verte

D2

21

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

D3

22

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

D4

27

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

D5

28

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

D6

29

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

D7

30

Non

Réserver pour communication bus ISA

LCD (mais Non utilisé)

E0

8

Non

Réserver pour communication bus ISA

Non utilisé

E1

9

Non

Réserver pour communication bus ISA

Non utilisé

E2

10

Non

Réserver pour communication bus ISA

Non utilisé

 

Voici en plus une description de la carte électronique embarquée, et pour ça je laisse la parole à Lionel :

Réalisation du PCB :

Le figure ci-dessous présente la partie logique de commande du circuit :


Sur cette carte, on retrouve le microcontroleur PIC 16F877 avec son quartz.
Pour l’alimentation, la carte embarque un régulateur 5V du type 7805 et ses condensateurs de filtrage.
Pour l’IHM, on retrouve les deux leds du type CMS, l’interrupteur de démarrage.
Pour la communication avec le PC, on a le classique MAX232 avec ses condensateurs. Il est possible de monter directement un prise type DB9 sur le circuit.
Enfin il y a divers connecteurs optionnels pour une utilisation étendue du circuit. CON5, CON6, CON3, CON4.
Les connecteurs CON1 et CON2 permettent le branchement des encodeurs moteurs.
Le CON7 est relié à la carte de puissance ci-dessous.

La carte ci-dessus regroupe la partie puissance de l’ensemble pour la commande des moteurs.
Le circuit IC1 est un L298, avec ses 8 diodes de protection..
On retrouve aussi deux regulateurs de tension type 7805 : un pour la partie puissance, et un pour la partie microcontroleur. Dans ce cas ne pas souder celui de la carte microcontroleur.
Enfin un interrupteur INT3 pour le marche arrêt.

Le moteur 1est à souder entre les pattes 22 et 23. Le moteur 2 est à souder entre les pattes 20 et 21. Pour le moteur, il faut limiter le courant à 2A et mettre un radiateur sur le L298.

Pour la réalisation, commencer par souder les composant CMS ( résisance et led). Ensuite procéder par taille de composant.
Lors de la mise sous tension vérifier le 5V au niveau du microcontroleur avant de monter celui-ci.

Liste des composants :

La carte microcontroleur :
Un circuit double face.
IC1 PIC16F877 et son support.
IC2 MAX232 et son support
D1 Diode shottky BA209
INT1 interrupteur inverseur
INT2 interrupteur poussoir CMS.
R1,R2 1K CMS 1206
R3,R4 10K CMS 1206
C1,C11,C12,C13 100nF millefeuille
C9,C10 10µF
C2,C3 33pF céramique
C4,C5,C6,C7,C8 1µF tantale
Q1 quartz 20Mhz
DB9
CON1,CON2,CON3,CON4 barrettes sécables males.


Carte de puissance :
Un circuit double face. Pour info vous pouvez les faire faire chez Perlor Radio 25 rue Hérold 75001 Paris. Le service est rapide, de qualité et les prix sont très raisonnables.
T1,T2 7805
C1,C2,C3,C4,C5,C11 100nF
C6,C7,C8,C9,C10 10µF
D1,D2,D3,D4,D5,D6,D7,D8 BYV28
INT3 interrupteur inverseur
CON1 barrettes sécables males

Vous trouverez le fichier protel ici.


Haku, le programme du portable

 

Tout d'abord vous trouverez ici le code complet de Haku, et les Dlls qui vont bien. Il s'agit aussi bien du programme sur le robot que du programme qui fait la télécommande dans la version Wifi (en fait c'est le même, avec un fichier de config différent).

Vous-y trouverez :

  • Une gestion de la webcam (bien sûr)
  • Une gestion du port série sous windows (dur !)
  • Une gestion du joystick (assez facile)
  • Une gestion d'échange TCP/IP d'information client/serveur, pour la liaison wifi.
  • Le tout chapeauté par un fichier de configuration assez simple.

Je ne vais pas trop passer de temps à l'expliquer, le code n'est pas trop compliqué.

Par contre pour le recompiler, c'est un peu galère.

En fait ce code est basé sur un example d'une libraire : OpenCv.

Pour info cette librairie fournit des tas de trucs pour le traitement d'images (il y à même de la reconnaissance de visage !). Et je me sert d'à peu près rien sur Haku, à part le retour de l'image vidéo ;-)

Il faut avant tout repomper cette libraire et la recompiler. Il faut aussi directX (pour la caméra, mais aussi pour le joystick). Là aussi c'est très lourd à recompiler !

Voici les explications fournies dans OpenCv :

/************ How to get Developer Studio understand streams.h ************\

You need DirectShow SDK that is now a part of DirectX SDK.

1. Download DirectX SDK from msdn.microsoft.com/directx/
(It's huge, but you can download it by parts).
If it doesn't work for you, consider HighGUI that can capture video via VFW or MIL

2. Install it TOGETHER WITH SAMPLES.

3. Open <DirectXSDKInstallFolder>\samples\Multimedia\DirectShow\BaseClasses\baseclasses.dsw.
If there is no such file, it is that you either didn't install samples or the path has changed, in the latter case search for streams.h and open a workspace file (workspace files for Developer Studio .NET have different extension) located in the same folder.

4. Build the library in both Release in Debug configurations.

5. Copy the built libraries (in DirectX 8.x they are called strmbase.lib and strmbasd.lib) to <DirectXSDKInstallFolder>\lib.

6. In Developer Studio add the following paths:
<DirectXSDKInstallFolder>\include
<DirectXSDKInstallFolder>\samples\Multimedia\DirectShow\BaseClasses
to the includes' search path (at Tools->Options->Directories->Include files in case of Developer Studio 6.0)
Add
<DirectXSDKInstallFolder>\lib
to the libraries' search path (at Tools->Options->Directories->Library files in case of Developer Studio 6.0)

NOTE: PUT THE ADDED LINES ON THE VERY TOP OF THE LISTS, OTHERWISE YOU WILL STILL GET
COMPILER OR LINKER ERRORS. This is necessary, because Developer Studio 6.0 includes some older DirectX headers and libs that conflict with new DirectX SDK versions.

7. Enjoy!

\******************************************************************/

Bon courage !

 

Parlons un peu maintenant plus particulièrement du traitement d'image.

En fait, c'est pas bien compliqué pour détecter les lignes. C'est un algo "bourin" comme j'aime bien ;-)

En gros l'analyse se fait ligne par ligne sur l'image.
Pour chaque ligne il trouve le min et le max sur les couleurs noir et blanc.
Ensuite il refait une passe, et trouve des "zone sombres" qui sont des zones qui sont dans un certain % de noir, avec un petit hysteresis (Elle ne sont pas representées ici).
De ces zones sombres, il tire une zone sombre continue "principale", une par ligne. Comment il la trouve ? Et bien il part d'abord du principe qu'elle est plutôt vers le milieu (sur la 1ere image) puis après il se sert de la dernière position (ligne précédente ou image précédente pour la 1ere ligne). La zone sombre principale suivante est celle qui est la plus près de la précédente, sachant que l'épaisseur de la zone joue aussi un peu (j'ai réglé des coefficients).
Le milieu de cette zone sombre principale est marqué par les points rouges qu'on peut voir sur l'image. C'est donc la ligne sur laquelle il fait l'asservissement ! Il y a un point rouge par ligne de l'image.
Sinon la ligne horizontale est une ligne qui indique l'endroit à partir duquel il ne considère plus ce qu'il y a après comme une ligne à suivre. Comment ça marche ? En fait c'est simple, je regarde simplement si il y a un saut de plus de "X" pixels entre 2 points rouges sur des lignes consécutives. Si ils sont placés sur une ligne, ils vont forcément ne pas être trop décalés l'un par rapport à l'autre. Par contre si ce n'est plus une ligne, les points sont un peu placés n'importe où et il y a des sauts -> en détectant ces sauts on sait que ce n'est plus une ligne à suivre (bien sûr, ca ne marche pas à 100%, mais c'est suffisamment précis pour notre besoin).
Le robot va garder un oeil (c'est le cas de le dire) sur plusieurs lignes de l'image. En particulier si la ligne horizontale commence à trop baisser le robot va automatiquement ralentir (pour mieux passer le virage). Et si la ligne est vraiment trop basse, il ralentit fortement pour ne pas rentrer dans le robot adverse (si il le ratrape bien sûr).

Il n'y a vraiment rien de compliqué mathématiquement là-dedans, c'est plutot du réglage (pas trop dur d'ailleur).

Le seul problème qui s'est posé (au concours et pendant certaines démos) vient des reflets. En effet le robot peut voir une lampe ou le soleil se refléter sur la ligne noire ... qui du coup n'est plus noire du tout ! Mais dans l'ensemble ça marchait pas mal ;-)

 

 

Haku, conclusion

 

Voilà, j'espère que ce petit passage technique sur Haku vous inspirera ou vous servira à développer vos propres robots (c'est fait pour ça !) et que vous vous amuserez bien !

En tout cas moi, je me suis bien amusé ;-)

Julien - pour les Fribottes, avec l'aide de Lionel et de Soudi.

 

 


Complétez cette page, posez vos questions et remarques ici : WiKiFri

Page http://fribotte.free.fr/bdtech/haku/robot_haku8.html modifiée le 13/09/2004.
Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
Reproduction autorisée par simple mail