Etabli
← Retour aux leçons
Leçon · FND-14 · Machines à états · 2/4

Machines à états : organiser les comportements

5 étapes·35 min·0/5 fait·quiz à réussir
voix

Une feuille, un crayon, puis le clavier : cette grande séance transforme un dessin en comportement qui roule. Tu vas poser les bulles, étiqueter les flèches, puis transcrire le tout presque mot à mot — d'état, un aiguillage, un cas par état. En prime, le robot annoncera chaque changement sur la , et gardera un état d'urgence qui bat tout le reste.

📖 Comprendre

1. Dessiner d'abord, coder ensuite

Le n'est pas un brouillon qu'on jette : c'est LE , et le code n'en sera que la transcription. Si le dessin est faux, le code sera fidèlement faux — et tu chercheras dans les lignes une erreur qui habite sur la feuille. D'où la méthode : on pose les bulles (EXPLORE, EVITE, RECHARGE), on trace les flèches, et on ne touche pas au clavier tant que le dessin ne répond pas à trois questions : chaque état a-t-il une sortie ? deux flèches peuvent-elles tirer en même temps ? qui gagne alors ?

Les étiquettes des flèches se chiffrent AVANT de coder : « à moins de 25 cm », « sous 20 % », « 2 s de dégagement écoulées ». Une condition mesurable se teste avec une règle, un chronomètre ou un ; « quand ça va mal » ne se teste pas. Ces chiffres viennent de tes leçons passées — la distance d'arrêt de TON , l' de TA batterie — et ils se règlent sur la feuille bien plus vite que dans .

2. Une variable d'état et un aiguillage

Côté code, la machine tient en deux pièces. D'ÉTAT : la boîte étiquetée « etat », qui contient à tout instant le nom de l'état en cours — des constantes nommées EXPLORE, EVITE, RECHARGE, pas des nombres nus. Et un AIGUILLAGE : le switch(etat), qui à chaque tour de boucle lit la boîte et saute à la branche du même nom. Un cas par état, une branche exécutée par tour — jamais deux, jamais zéro.

Cette forme rend la promesse du diagramme VÉRIFIABLE dans : puisque seule la branche de l'état en cours s'exécute, le robot ne peut pas faire deux comportements à la fois. Et pour savoir où il en est, plus besoin de reconstituer trois : on ouvre la boîte. C'est aussi ce que fera le journal tout à l'heure — lire la boîte, et raconter ses changements.

écriredistance18liresi distance < 20→ STOPmême boîte, contenu neuf à chaque mesure — la décision suit

3. Chaque branche : agir, puis surveiller SES sorties

Le contenu d'un cas suit toujours le même plan en deux temps : d'abord AGIR — appliquer les de cet état : avancer en EXPLORE, reculer-pivoter en EVITE, viser le socle en RECHARGE — puis SURVEILLER ses sortantes, et seulement les siennes. La branche EXPLORE teste l' et la ; la branche EVITE ne teste que son horloge de dégagement ; personne ne surveille les flèches des autres.

C'est cette localisation qui tue le spaghetti : chaque règle du comportement vit dans UNE branche, à côté des règles qui la concernent. Ajouter un état, c'est ajouter un cas et ses flèches, sans toucher aux autres ; en retirer un, c'est effacer un cas et rebrancher ses flèches. Dans la forêt de si, la moindre retouche pouvait réveiller n'importe quel ; ici, le rayon d'action d'une modification se lit sur le diagramme.

4. Annoncer ses changements, garder une issue de secours

À chaque , une ligne part sur la : l'instant, l'état quitté, l'état rejoint — « 2980 : EXPLORE, puis EVITE ». Une ligne par CHANGEMENT, jamais par tour de boucle : cent lignes par seconde noieraient tout. Après la course, l'historique se relit comme un récit, et c'est le meilleur témoin qui soit : il dit ce que le robot a VRAIMENT fait, pas ce que tu crois qu'il a fait.

Et parce qu'un vrai robot rencontre de vrais accidents, la machine garde une issue de secours : AVANT l'aiguillage, à chaque tour, on teste le du pare-chocs ; s'il est écrasé, on passe en URGENCE et on coupe les — quel que soit l'état en cours. L'urgence n'est pas une flèche ordinaire : c'est une trappe percée sous TOUS les états à la fois. La leçon « maîtriser » lui donnera ses règles complètes.

🧮 Exemple guidé : le premier obstacle, vu de l'intérieur de la boucle

Ton robot explorateur démarre en EXPLORE. Un tour de boucle dure 10 ms, le seuil d'évitement est à 25 cm, le dégagement dure 1 200 ms. Un carton se dresse sur sa route. Déroule ce que fait l'aiguillage, tour par tour, journal compris.

  1. 1.t = 0 ms : boîte = EXPLORE. La branche EXPLORE agit — moteurs en avant — puis surveille : distance 140 cm, rien ; batterie 84 %, rien. Tour suivant.
  2. 2.t = 2 980 ms : la distance filtrée tombe à 24 cm — sous le seuil de 25 : la flèche s'allume. La branche écrit EVITE dans la boîte, note l'instant d'entrée, imprime « 2980 : EXPLORE, puis EVITE ».
  3. 3.t = 2 990 ms : ce tour-ci, l'aiguillage saute dans la branche EVITE : recul et pivot ; elle ne surveille QUE son horloge : 2 990 − 2 980 = 10 ms, loin des 1 200.
  4. 4.t = 4 180 ms : écart 1 200 ms atteint — « 4180 : EVITE, puis EXPLORE ». Le carton est derrière ; la branche EXPLORE reprend, sans avoir jamais su qu'on l'avait quittée.
  5. 5.Bilan : 418 tours de boucle, DEUX lignes au journal, et à chaque tour exactement une branche exécutée — jamais deux, jamais zéro.

L'aiguillage a tenu toute la promesse : une branche par tour, chaque branche agissant puis surveillant ses seules sorties, la boîte changée uniquement par les transitions — et un journal de deux lignes qui raconte tout l'épisode.

🛠 Pratiquer sur l'établi

  1. 01Dessiner les états d'un robot : explore, évite, recharge

    Trois bulles sur la feuille — EXPLORE, EVITE, RECHARGE — et sous chacune, une phrase au présent qui dit ce que font les dans cet état. Choisis des noms qui sont des actions, pas des humeurs : « EVITE », pas « PROBLEME ». La scène des zones de conduite te montre l'esprit du découpage : des situations nettes, sans recouvrement, qui couvrent tout ce qui peut arriver.

    sur l'établi
    loinprudencedangervitesse : 100 % · 95 cm

Objectifs

  • +Découper un comportement en états
  • +Définir les
  • +Coder proprement avec switch
🧪 S'entraîner dans le bac à sable

Quiz de validation

À réussir pour valider la leçon

Réponds de mémoire, sans remonter la page : c'est l'effort de rappel qui grave le cours. Les trois bonnes réponses valident la leçon.

1. Dans l'aiguillage, que surveille la branche EXPLORE ?

2. Qui a le droit d'écrire dans la variable d'état ?

3. Pourquoi tracer chaque transition sur la liaison série ?

🧠 Ce qu'il faut retenir

  • 1.Un état = ce que le robot fait maintenant ; une = l'événement qui le fait changer.
  • 2.La remplace la forêt de if imbriqués par un plan lisible et dessinable.
  • 3.Un seul état actif à la fois : c'est ce qui rend le comportement prévisible et testable.