Download RP6 ROBOT BASE - arexx engineering

Transcript
RP6 ROBOT SYSTEM - 4. Programmation du RP6
Le robot essaie maintenant d'effectuer des carrés de 30cm de côté. Il fait un demitour complet après chaque carré et roule dans le sens opposé.
Cela ne peut se faire qu'avec un bon calibrage de la résolution des encodeurs car si non le robot ne peut pas tourner exactement à un angle de 90° mais p.ex. à 98° ou
80°. Cet exemple illustre parfaitement que même avec des encodeurs parfaitement
calibrés, il n'est pas simple de commander le trajet d'un robot à entraînement par
chenilles à l'aide des mesures des encodeurs – comme nous l'avons déjà dit au chapitre 2. Selon la nature du sol, les chaînes dérapent facilement, notamment pendant
des rotations, ou s'emballent ce qui fait que le trajet réellement parcouru est nette ment inférieur au trajet mesuré par les encodeurs. Une programmation habile peut
certes compenser partiellement cet écart mais ce ne sera probablement jamais à
100% précis. Cette précision n'est réalisable qu'avec des détecteurs supplémentaires
qui déterminent plus exactement la position et l'orientation du robot (voir Annexe).
Exemple 9: Excursion – Automates finis
Répertoire: <RP6Examples>\RP6BaseExamples\Example_05_Move_04_FSM\
Fichier: RP6Base_Move_04_FSM.c
Le programme génère des sorties sur l'interface série
Dans ce programme, le robot ne se déplace pas!
Pour les programmes complexes, le méthodes simples que nous avons utilisées dans
les programmes précédents, ne suffisent pas toujours.
Ainsi, pour des robots commandés par le comportement, nous avons besoin d'automates finis (anglais Finite State Machines ou en abrégé FMS). Ce programme montre
un automate fini simple qui change son état lorsque les pare-chocs sont appuyés. Afin
de bien comprendre le programme, le mieux est de l'exécuter et appuyer deux fois sur
les pare-chocs. Il faut regarder les sorties sur le terminal et les LED d'état tout en appuyant d'abord lentement sur les pare-chocs et relâcher!
Dans la plupart des cas, des automates finis sont réalisés en C avec une construction
switch-case (ou une multitude de conditions if-else-if-else... switch est cependant plus
clair).
Un petit exemple:
- 131 -