F
Deux données différentes réduisent le risque de ne pas pouvoir sortir
d'un coin.
Solution :
Le problème posé nous permet de percevoir que nous devons piloter
le robot en fonction des détecteurs de bords. Nous décomposons donc
le problème en des parties plus petites. Nous interrogeons tout
cet effet, nous mettons les moteurs en marche arrière. Notre roue
d'impulsion doit alors identifier un trajet défini. Nous fixons la
longueur de ce trajet à l'aide de la variable VAR10. Le bloc
d'affectation Z2 = 0 est nouveau pour nous. Après un peu de
réflexion, nous en reconnaissons le sens. Si nous ne mettons pas la
variable de comptage à zéro, le mécanisme ne fonctionnera qu'une
fois car, dès que Z2 atteint la valeur de la variable VAR10, notre
compteur de trajet échouerait à chaque passage suivant. Dans
l'optique des programmateurs professionnels, nous avons affaire à cet
endroit à des variables locales et globales. La variable locale Z2
doit être initialisée avant chaque utilisation dans le sous-programme.
36
d'abord les contacteurs (détecteurs de bords). Si
aucun n'est actif, le robot avance. Dans
l'illustration, on peut le voir sous la forme du
bloc « En avant ». Derrière un tel module qui est
nouveau pour nous se cache un sous-prgramme.
Les sous-programmes améliore la clarté de
systèmes complexes et permettent, quand on
les utilise plusieurs fois, de mieux mettre à
profit la puissance des systèmes d'ordinateur.
Notre premier sous-programme est très simple
puisqu'il met seulement en mouvement les
moteurs M1 et M2. Nous avons cependant
besoin d'autres sous-programmes. Le robot doit,
selon sa position, esquiver vers la gauche, vers
la droite ou en arrière. Dans un tel cas, il ne
suffit plus de mettre simplement les moteurs en
marche. Il faut programmer une certaine
séquence de déplacements. Regardons un autre
sous-programme de plus près. Il doit permettre
au robot de reculer lorsqu'il détecte un bord. À
Conclusion :
L'appel de sous-programmes augmente la clarté des programmes. Nous
utilisons des varia-bles afin de mesurer différentes valeurs, ici des trajets.
Nous avons besoin de trajets de lon-gueur différente pour que notre robot
puisse se « libérer » même s'il se trouve dans un coin. Si les trajets étaient
absolument identiques, il pourrait arriver que le robot exécute toujours le
même va-et-vient dans le coin.
Quand nous utilisons des variables, nous faisons attention à leur plage de
validité. Les varia-bles locales, c'est-à-dire les variables que nous n'utilisons
qu'à l'intérieur d'un sous-programme, doivent être initialisées avant leur
première mise en œuvre. Nous constatons en outre que notre robot a
besoin d'une certaine liberté de mouvement pour pouvoir fonctionner. S'il
rencontre de nouveau un bord au cours d'un mouvement d'esquive, il ne
pourra pas réagir. Les bricoleurs très forts peuvent essayer de trouver une
solution à ce problème.
4.3 Robot avec détection des obstacles
Nous pouvons à présent détecter les bords relativement bien. Les obstacles
ordinaires sont par contre problématiques. Nous devons modifier le principe
de la détection des bords. Un contact au choc approprié va remplacer les
roues auxiliaires. À cette occasion, nous méditons également sur un défaut
que présentent les détecteurs de bords ; il y a des situations dangereuses
dans lesquelles le robot, sans capteur à l'arrière, tombe « en aveugle » dans
le précipice lors de sa marche arrière. Un troisième contacteur évitera ce
défaut. Entretemps, nous sommes devenus des programmateurs assez futés.
C'est une chance car le problème devient à présent plus compliqué comme
le montre un coup d'œil sur le programme. Le programme contient d'autres
blocs fonctionnels nouveaux. À certains endroits du programme, nous in-
sérons des modules ATTENTE. C'est facilement compréhensible car on attend
ici la durée introduite avant d'exécuter la prochaine fonction du
programme. Ce qui est vraiment nouveau, ce sont les comparaisons logiques.
Jusqu'à présent nous avons toujours, lors de l'interrogation des contacteurs,
effectué immédiatement une comparaison et ramifié notre programme de
façon correspondante. Il y a également une comparaison simi-laire lors du
comptage des impulsions, c'est la comparaison avec un certain nombre
d'impul-sions. La comparaison logique avec plusieurs expressions dans un
module COMPARAISON est également nouvelle pour nous.
Problème 4 :
Comme décrit dans la notice de montage, on construit le robot avec
la démultiplication rapide de 50 : 1. La maquette doit avancer tout
droit. Aussitôt qu'elle détecte un obstacle à l'un des contacteurs
avant (E3 ou E4), le robot s'arrête. S'il a détecté un obstacle à
droite, le robot reculera et contournera par la gauche (env. 30°). En
cas d'obstacle à gauche le robot, après un recul, contournera par la
droite (env. 45°). Le nombre inégal de degrés est nécessaire pour
qu'il puisse aussi sortir d'un coin.
Au cas où l'obstacle serait détecté directement devant, le robot doit
reculer et l'éviter à 90°. Au cas où un obstacle se présenterait
derrière lors de la marche arrière, il devra faire un mouvement bref
vers l'avant et ensuite contourner comme prévu.