Voyant et sons ============== **S'applique à :** :bdg-warning-line:`Robot réel` Le robot se fait comprendre avec **un voyant de couleur et deux buzzers**. Cette page explique comment tout cela fonctionne, ce que veut dire chaque couleur et chaque son, et quoi faire quand on les voit ou les entend. Rien à installer, rien à lancer : tout fonctionne dès la mise sous tension. Deux sources, un seul voyant ---------------------------- Deux programmes décident de ce que le robot montre : - **la carte** (le *ratbot_controller*) voit le **matériel** : le bouton d'arrêt, la batterie, les roues, les capteurs. Elle fonctionne **toute seule**, même quand le Raspberry Pi est éteint ou débranché ; - **le Raspberry Pi** sait ce que le robot **fait** : il roule, il explore, il a fini sa mission… Mais il n'y a **qu'un seul voyant**. La règle qui tranche : .. important:: **La carte a toujours la priorité.** Le Raspberry Pi ne peut colorer le voyant que lorsque la carte n'a rien de grave à dire. Trois règles à retenir ---------------------- - **Le son marque un changement, la lumière montre l'état.** Un son se produit **une fois**, au moment où quelque chose arrive. La couleur, elle, se lit à n'importe quel moment. - **Le voyant montre toujours la chose la plus grave.** Danger d'abord, puis panne, puis absence du Raspberry Pi, et seulement ensuite ce que fait le robot. - **Le rouge veut dire danger, et rien d'autre.** Une mission ratée ou un obstacle n'allument jamais de rouge. Ainsi, le jour où le voyant est rouge, on sait qu'il faut regarder. Les deux buzzers : deux rôles qui ne se mélangent jamais -------------------------------------------------------- .. list-table:: :header-rows: 1 :widths: 24 38 38 * - - **le buzzer d'alarme** (actif) - **le buzzer à mélodies** (passif) * - le son - un bip fort, strident, toujours la même note - des **notes** : il joue de petites mélodies * - qui le commande - **la carte seule**, jamais le Raspberry Pi - la carte **et** le Raspberry Pi * - quand il sonne - **seulement** pour « danger, arrête-toi » : le bouton d'arrêt a été enfoncé, ou la batterie est critique (sous 9,6 V) - pour **informer** : démarrage, Raspberry Pi trouvé ou perdu, mission réussie, obstacle, batterie faible… * - rythme - 200 ms de bip chaque seconde, **tant que** le danger dure - une fois, au moment où la chose arrive * - peut-on le faire taire à distance - **non**, et c'est voulu : une alarme qu'on peut couper à distance n'est plus une alarme - oui Un seul cas particulier : si la carte **plante**, le buzzer d'alarme joue **SOS** en morse (``· · · — — — · · ·``). Voir `Quand le robot plante`_. Le voyant : une échelle de priorité ----------------------------------- La carte examine la situation de haut en bas. **Le premier niveau vrai gagne**, tous les autres attendent. .. list-table:: :header-rows: 1 :widths: 8 34 30 28 * - niveau - situation - voyant - qui décide * - **1** - bouton d'arrêt enfoncé, **ou** batterie critique - **rouge, clignotement rapide**, et le buzzer d'alarme sonne - la carte * - **2** - une panne : une roue, un capteur, la mémoire ou l'horloge ; **ou** l'arrêt automatique (robot renversé, roue bloquée) - **orange, clignotement lent** - la carte * - **3** - fin du démarrage, tout va bien - **vert, un fondu de 2 s**, une seule fois - la carte * - **4** - la carte ne trouve pas le Raspberry Pi - **rouge qui « respire »**, lentement - la carte * - **5** - tout va bien et le Raspberry Pi est là - **la couleur choisie par le Raspberry Pi** — voir `Les états du robot`_ - le Raspberry Pi Et si le voyant est **éteint** : le Raspberry Pi est bien là, mais ses programmes n'ont encore rien demandé. C'est normal quelques secondes après le démarrage. Enfin, un **éclair blanc toutes les 2 secondes**, par-dessus la couleur du moment, veut dire que le **mode banc** est actif : l'arrêt automatique est en pause. Voir :doc:`arrets`. Ce que le voyant vous demande de faire ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. list-table:: :header-rows: 1 :widths: 30 70 * - vous voyez - quoi faire * - **rouge rapide**, avec l'alarme - Si c'est le bouton d'arrêt : relâchez-le, puis appuyez **5 fois sur SW1**. Si c'est la batterie : mettez-la en charge. L'alarme ne s'arrête pas tant que la cause est là. Voir :doc:`arrets`. * - **orange lent** - Une panne, ou l'arrêt automatique. Écoutez le code en bips (voir plus bas), ou lisez le détail dans ``/diagnostics``. Si c'est **6 longs** : remettez le robot à plat ou dégagez la roue, puis **5 fois SW1**. * - **rouge qui respire** - Vérifiez que le Raspberry Pi est allumé et que son câble vers la carte est branché. * - **toute autre couleur** - Rien : le robot vous dit ce qu'il fait. Les états du robot ------------------ Côté Raspberry Pi, les programmes ne choisissent **jamais une couleur**. Ils annoncent un **état** — par exemple « mission réussie » — et un fichier de réglage, ``led_states.yaml``, traduit chaque état en couleur et en mélodie : .. code-block:: text un programme annonce « mission_ok » │ ▼ status_manager ── consulte led_states.yaml ──► vert clignotant + mélodie de victoire │ │ ▼ ▼ couleur envoyée à la carte son envoyé à la carte (affichée si les niveaux 1 à 4 (joué par le buzzer à mélodies) n'ont rien à dire) La mélodie ne joue qu'**à l'entrée** dans l'état, jamais en boucle. Les états de tous les jours ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Ceux-là, le Raspberry Pi les calcule **tout seul**, en permanence. .. list-table:: :header-rows: 1 :widths: 17 23 22 38 * - état - voyant - son - quand * - ``idle`` - **bleu** fixe - — - le robot est **à l'arrêt**. C'est l'état par défaut, quand rien d'autre n'est actif. * - ``moving`` - **vert** fixe - — - le robot **roule** (plus de 2 cm/s). * - ``emergency`` - **rouge clignotant** - **aucun** - l'arrêt de **la manette** (bouton PS) est actif. Voir :doc:`arrets`. * - ``low_battery`` - **orange clignotant** - trois notes descendantes, lentes - la batterie est **sous 20 %**. Il est temps de la recharger. (Sous 9,6 V, c'est la carte qui prend le relais, avec l'alarme.) * - ``overheat`` - **orange clignotant** - une sirène, deux tons alternés - **surchauffe** : la carte dépasse 75 °C, ou le Raspberry Pi 80 °C. Les états de mission ~~~~~~~~~~~~~~~~~~~~ Ceux-là sont **annoncés par un programme** : la mission, la navigation, ou vous-même, à la main (voir `Déclencher un état à la main`_). .. list-table:: :header-rows: 1 :widths: 17 23 22 38 * - état - voyant - son - signification * - ``exploring`` - **violet** fixe - — - le robot **explore** tout seul pour dresser la carte. * - ``returning`` - **bleu clair** fixe - — - il **rentre** à son point de départ. * - ``paused`` - **jaune clignotant** - — - la mission est **en pause** : il attend qu'on la reprenne. * - ``stopped`` - **jaune** fixe - — - il a été **arrêté à la demande**. Ce n'est pas un danger, d'où le jaune et pas le rouge. * - ``navigating`` - **vert-cyan** fixe - trois notes qui montent, franches - il **part** vers une destination. * - ``goal_ok`` - **vert clair** fixe - deux notes courtes, discrètes - il a atteint **une étape** du parcours. Discret, parce que cela arrive souvent. * - ``mission_ok`` - **vert clignotant** - la seule mélodie un peu longue, **une petite fanfare** montante - **mission réussie** : il a fini ce qu'on lui avait demandé. * - ``mission_ko`` - **magenta clignotant** - quatre notes qui descendent - **mission échouée** : il n'a pas pu finir. Un échec, pas une panne — d'où le magenta et pas le rouge. * - ``obstacle`` - **bleu et magenta** en alternance - deux notes basses répétées, puis une plus grave - il est **bloqué** : son chemin est impossible. Contrarié, pas affolé. * - ``identify`` - **blanc clignotant** - un bip par seconde - on a demandé **lequel est ce robot** (``ratbot fleet identify N``, voir :doc:`flotte`). Une alerte reste prioritaire : un robot en arrêt d'urgence garde son rouge. .. note:: Un état de mission **ne dure que 2 secondes** si personne ne le répète. Ensuite, le voyant revient à l'état de tous les jours — bleu ou vert. Le programme qui veut maintenir un état le réannonce donc tant qu'il est vrai : c'est ce que fait la mission pour ``exploring``, ``returning`` et ``paused``. Ainsi, « mission réussie » se voit et s'entend comme **un vert clignotant de 2 secondes accompagné de la fanfare**, puis le robot repasse au bleu. .. note:: **Qui annonce quoi, aujourd'hui.** La mission annonce ``exploring``, ``returning`` et ``paused``. Les autres états de mission — ``navigating``, ``goal_ok``, ``mission_ok``, ``mission_ko``, ``stopped``, ``obstacle`` — sont **prêts** : leur couleur et leur mélodie sont réglées, mais aucun programme livré ne les annonce encore. Ils attendent vos propres programmes, ou un essai à la main. Quand plusieurs états sont vrais en même temps ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Le robot peut rouler **et** avoir une batterie faible. Un seul état est affiché, **le premier de cette liste** : .. code-block:: text emergency > low_battery > overheat > mission_ko > mission_ok > paused > obstacle > navigating > goal_ok > exploring > returning > moving > stopped > idle Et, rappel, cette couleur ne s'affiche elle-même que si la carte n'a rien de plus grave à montrer (niveaux 1 à 4). Déclencher un état à la main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pratique pour **voir et entendre** chaque état. Depuis le Raspberry Pi : .. code-block:: bash ros2 topic pub --once /ratbot_1/status/set_state std_msgs/msg/String "data: mission_ok" Le robot affiche l'état pendant 2 secondes, avec sa mélodie, puis revient à la normale. Remplacez ``mission_ok`` par n'importe quel nom des tableaux ci-dessus. Un nom inconnu est ignoré, et un avertissement le signale dans le journal du Raspberry Pi. Les deux « rouges clignotants », à ne pas confondre --------------------------------------------------- C'est ce qui prête le plus à confusion : .. list-table:: :header-rows: 1 :widths: 30 35 35 * - - **arrêt du robot** (son bouton) - **arrêt de la manette** (bouton PS) * - qui allume le rouge - la **carte** (niveau 1) - le **Raspberry Pi** (état ``emergency``) * - clignotement - **rapide** - plus lent * - alarme - **oui**, le buzzer d'alarme - **non**, aucun son * - si le Raspberry Pi est éteint - fonctionne quand même - ne fonctionne plus Pour les désactiver, chacun a son geste : voir :doc:`arrets`. Les sons de la carte -------------------- En plus des mélodies des états, la carte joue **ses propres sons**, sans le Raspberry Pi : .. list-table:: :header-rows: 1 :widths: 36 64 * - vous entendez - signification * - une **mélodie montante** de 4 notes - le robot démarre * - deux notes **qui montent** - la carte a trouvé le Raspberry Pi * - les mêmes deux notes **qui descendent** - elle vient de le perdre * - **une note brève et grave toutes les 5 s** - elle ne l'a toujours pas retrouvé * - **trois notes graves rapides** au démarrage - le robot s'était bloqué et s'est relancé tout seul (le « chien de garde ») * - **200 ms de bip par seconde**, strident - le buzzer d'alarme : arrêt d'urgence ou batterie critique * - un **petit bip** à chaque appui sur SW1, puis **deux notes qui montent** - le robot est réarmé, après un arrêt d'urgence ou un arrêt automatique. La confirmation est **brève** : ne la confondez pas avec les bips des appuis * - **deux notes égales**, suspendues - le mode banc s'active : l'arrêt automatique est en pause * - **la même note, puis une plus haute** - le mode banc s'arrête : la surveillance reprend .. note:: **Si vous allumez le robot avant le Raspberry Pi**, le rappel « toutes les 5 s » attend **trois minutes** avant de commencer : c'est le temps normal pour que le Raspberry Pi démarre. S'il avait déjà été vu, ou si la carte vient de se relancer toute seule, le rappel commence tout de suite. .. note:: **La carte redémarre toute seule si le Raspberry Pi ne répond pas.** Tant que ses programmes ne tournent pas, la carte se relance au bout de quelques secondes — vous entendez alors les trois notes graves. C'est voulu : elle repart ainsi d'un état propre. Tout rentre dans l'ordre dès que le Raspberry Pi est prêt. Les bips du démarrage --------------------- Quelques secondes après la mélodie de démarrage, le robot fait son **bilan**. Tout va bien : un fondu vert, sans un bruit. Quelque chose ne va pas : il **compte en bips**, comme le BIOS d'un ordinateur. **Des bips longs donnent la famille, des bips courts le détail.** Comptez d'abord les longs, puis, après un silence un peu plus marqué, les courts. .. list-table:: :header-rows: 1 :widths: 16 22 62 * - vous entendez - famille - détail * - **1 long** - roues - 1 court : roue gauche · 2 courts : roue droite · 3 courts : les deux * - **2 longs** - capteurs - 1 court : centrale inertielle · 2 courts : température · 3 courts : batterie * - **3 longs** - mémoire - 1 court : réglages illisibles, le robot tourne sur ses valeurs d'usine * - **4 longs** - horloge - 1 court : la pile de l'horloge ou son quartz ne répond pas * - **5 longs** - le robot s'est **arrêté sur une erreur** au tour précédent - 1 : pile de tâche · 2 : mémoire pleine · 3 : faute matérielle · 4 : un composant a refusé de démarrer * - **6 longs** - **arrêt automatique** : le robot s'est coupé tout seul - 1 court : **renversé** · 2 courts : **roue bloquée** · 3 courts : **roues qui patinent** · 4 courts : **choc**. Remettez-le à plat ou dégagez-le, puis 5 fois SW1 — voir :doc:`arrets` S'il y a plusieurs pannes, les codes s'enchaînent, séparés par un silence d'une seconde. Le code « 5 longs » n'est joué **qu'une fois** : au démarrage qui suit le plantage. Le code « 6 longs » n'est jamais joué au démarrage : il arrive au moment où le robot se coupe. Une panne qui **apparaît en cours de route** — un connecteur qui lâche, une roue qui décroche — rejoue son code au moment où elle arrive, puis le voyant reste orange. Quand elle disparaît, le voyant s'éteint sans un bruit. Quand le robot plante --------------------- Le buzzer d'alarme joue **SOS** en morse, en boucle. La cause est enregistrée ; le robot vous la dira en bips (5 longs) au démarrage suivant. - **S'il redémarre de lui-même** au bout de 8 s, c'est le chien de garde : la panne est survenue en cours de route. - **S'il continue à appeler indéfiniment**, elle est survenue *pendant le démarrage*, avant que le chien de garde ne soit armé : il faut couper et rallumer. Quelques situations concrètes ----------------------------- .. list-table:: :header-rows: 1 :widths: 40 60 * - vous voyez / entendez - ce qui se passe * - mélodie montante, fondu vert, rouge qui respire, puis deux notes qui montent et le voyant passe au bleu - démarrage normal : la carte démarre, fait son bilan sans panne, attend le Raspberry Pi, le trouve ; le robot est à l'arrêt, prêt * - bleu, puis vert quand vous poussez le joystick - le robot roule ; il repasse au bleu à l'arrêt * - rouge rapide et bip strident - quelqu'un a enfoncé le bouton d'arrêt du robot * - rouge clignotant, **silence** - l'arrêt de la manette est actif * - vert clignotant et petite fanfare, puis bleu - mission réussie * - magenta clignotant et notes descendantes, puis bleu - mission échouée * - orange lent, sans rien d'autre - une panne matérielle : écoutez le code, ou lisez ``/diagnostics`` * - orange lent, 6 bips longs et 2 courts - l'arrêt automatique : une roue forçait sans tourner. Dégagez-la, puis 5 fois SW1 * - orange lent, 6 bips longs et 3 courts, alors qu'il était sur sa boîte - on l'a fait **tourner** sur la boîte : ses roues tournaient, lui non, et il a cru patiner. Activez le mode banc pour tourner sur la boîte * - un éclair blanc toutes les 2 s - le mode banc est actif : le robot ne se coupera pas s'il est renversé ou bloqué * - orange clignotant et trois notes descendantes - batterie sous 20 % : à recharger bientôt * - rouge qui respire et une note toutes les 5 s - la carte n'a pas de Raspberry Pi : il est éteint, en train de démarrer, ou son câble est débranché * - voyant éteint - le Raspberry Pi est là, ses programmes n'ont pas encore parlé Savoir ce qui ne va pas exactement ---------------------------------- **Le signal dit « regarde », il ne dit pas tout.** Le détail est à une commande de là, depuis le Raspberry Pi : .. code-block:: bash ros2 topic echo /diagnostics Comment les lire : voir :doc:`diagnostics`. Et pour savoir ce qui s'est passé **quand vous n'étiez pas là**, le robot tient un journal : voir :doc:`journal`. Où se règle quoi ---------------- .. list-table:: :header-rows: 1 :widths: 40 60 * - vous voulez changer - où * - la couleur, le clignotement ou la mélodie d'un état ; l'ordre de priorité ; les seuils (batterie 20 %, températures) ; ajouter un état - ``ratbot_status/config/led_states.yaml``, sur le Raspberry Pi. Sans toucher à la carte ni la reprogrammer. Voir :doc:`statut`. * - les niveaux 1 à 4 du voyant, le buzzer d'alarme, les sons de la carte, les codes de démarrage - le programme de la carte. Volontairement difficile à changer : c'est la sécurité. Pour aller plus loin -------------------- Les durées exactes, les numéros des mélodies, les principes qui régissent les priorités et la façon d'ajouter un signal sont dans la `page « Signaux » de la documentation développeur `_.