Les ingénieurs en robotique commencent souvent l’architecture des systèmes autonomes avec une certaine confiance. Une machine à états finis (FSM) ou un diagramme d’état UML semble être le plan idéal pour la logique de contrôle. Il est propre, visuel et déterministe sur papier. Cependant, lorsque ces diagrammes sont traduits en code réel fonctionnant sur du matériel physique, les résultats sont fréquemment décevants. Les systèmes bloquent, des transitions inattendues se produisent, et le débogage devient un cauchemar. Le décalage ne réside pas dans la philosophie de conception elle-même, mais dans les hypothèses faites sur l’environnement et la plateforme d’exécution. Ce guide explore les raisons techniques spécifiques pour lesquelles les diagrammes standards de machines à états peinent dans les applications réelles de robotique et comment adapter votre approche pour un déploiement robuste.

1️⃣ L’illusion de déterminisme dans les systèmes physiques
En informatique théorique, une machine à états fonctionne dans le vide. Les transitions sont instantanées, et les entrées sont parfaitement synchronisées. En robotique, le monde physique introduit toutefois une latence, du bruit et des variations. Un diagramme de machine à états suppose généralement que si le robot est dans l’état A et que l’événement X se produit, il passe à l’état B. Cette logique est valable en simulation, mais le matériel introduit des variables que les diagrammes captent rarement.
- Latence du signal :Les capteurs ne rapportent pas les données instantanément. Un capteur de distance pourrait signaler un obstacle 20 millisecondes après que le robot l’ait heurté. La machine à états perçoit l’événement en retard, ce qui peut entraîner une collision avant que la logique de transition ne s’exécute.
- Ordre des événements :Dans un environnement multithreadé, deux événements pourraient se déclencher simultanément. Le diagramme de machine à états les montre généralement de manière séquentielle, mais le processeur pourrait les traiter dans un ordre différent, entraînant des états inattendus.
- Dégradation du matériel :Un moteur pourrait consommer plus de courant que prévu, déclenchant inopinément un état de gestion de l’alimentation. Le diagramme suppose des conditions de fonctionnement nominales.
Pour atténuer cela, vous devez considérer la machine à états non pas comme la vérité absolue, mais comme une abstraction de haut niveau. Le niveau d’implémentation doit inclure le tamponnage, le filtrage des rebonds et les vérifications de temporisation que le diagramme visuel ne montre pas explicitement.
2️⃣ Concurrence et états parallèles 🔄
L’une des limitations les plus importantes des diagrammes de machines à états basiques réside dans leur nature linéaire. Les applications robotiques sont intrinsèquement concurrentes. Un robot doit naviguer tout en écoutant les commandes d’arrêt d’urgence, en surveillant le niveau de batterie et en communiquant avec une station de base simultanément. Les machines à états séquentielles traditionnelles vous obligent à créer des états imbriqués complexes ou une explosion combinatoire d’états pour représenter des comportements parallèles.
Le problème hiérarchique
Quand vous essayez de modéliser des activités parallèles en utilisant la hiérarchie UML standard, le diagramme devient illisible. Vous aboutissez à un « diagramme spaghetti » où chaque combinaison d’état de navigation et de niveau de batterie nécessite un état unique. Cette approche est fragile. Si vous ajoutez un nouveau capteur ou un nouveau protocole de sécurité, vous devez réécrire des dizaines d’états.
La solution : les régions orthogonales
Les implémentations avancées de machines à états prennent en charge les régions orthogonales. Cela permet au système d’exécuter plusieurs machines à états indépendantes en parallèle. Par exemple :
- Région 1 : Navigation (En mouvement, Arrêté, Évitement d’obstacles)
- Région 2 : Gestion de l’alimentation (Chargement, Faible batterie, Normal)
- Région 3 : Communication (Connecté, Déconnecté, Synchronisation)
Sans cette capacité, votre diagramme échoue parce qu’il ne peut pas représenter l’architecture réelle du système. Le modèle visuel doit correspondre au modèle d’exécution logique. Si l’implémentation utilise un seul fil d’exécution, le diagramme est une illusion.
3️⃣ Chronométrage et contraintes en temps réel ⏱️
Les machines à états UML ne codent pas nativement les contraintes de chronométrage. Elles décrivent ce quise produit, pas quandcela se produit. En robotique, le chronométrage est souvent plus critique que la logique. Une machine à états de navigation pourrait passer à « Arrêt d’urgence » si un obstacle est détecté. Si la logique de détection prend 100 millisecondes, le robot s’est déjà déplacé de manière significative.
Pensez aux scénarios suivants où le chronométrage casse le diagramme :
- Délais d’attente : Une machine à états pourrait attendre indéfiniment un signal. Dans le monde réel, attendre indéfiniment est une panne du système. Les temporisateurs doivent être explicites.
- Fréquences de balayage : Les capteurs balayent à des intervalles précis. Une transition d’état pourrait être déclenchée entre deux cycles de balayage, ce qui fait que la logique manque complètement l’événement.
- Jitter : La planification du système d’exploitation peut entraîner des retards. Une machine à états conçue pour une précision de 1 ms échouera si le système d’exploitation sous-jacent introduit un jitter de 50 ms.
Les diagrammes efficaces pour la robotique doivent annoter les états avec des exigences de chronométrage. Si un état nécessite une fenêtre de réponse de 50 ms, le diagramme doit refléter cette contrainte, même si l’implémentation logicielle la gère séparément.
4️⃣ Gestion des erreurs et tolérance aux pannes 🛑
La plupart des diagrammes de machines à états se concentrent sur le parcours idéal. Ils montrent comment le robot passe de Démarrer à Objectif. Ils montrent rarement ce qui se passe lorsque le moteur du bras grille, la connexion Wi-Fi tombe, ou que la tension de la batterie descend en dessous des niveaux sûrs. En logiciel, les erreurs sont des exceptions. En robotique, les erreurs sont l’état par défaut de l’univers.
États d’erreur manquants
Si votre diagramme ne modélise pas explicitement les modes de défaillance, votre système est fragile. Vous avez besoin d’états pour :
- Défaillance du capteur : Et si le lidar cessait de renvoyer des données ?
- Blocage de l’actionneur : Et si une roue était physiquement bloquée ?
- Délai d’expiration de la logique : Et si le robot se bloquait dans une boucle ?
Le filet de sécurité
Les systèmes robustes mettent en œuvre un état d’erreur global pouvant être atteint depuis n’importe quel état. Cet état est souvent appelé « Watchdog » ou « Mode sécurisé ». Si une branche logique se bloque ou produit des données invalides, le système doit forcer une transition vers cet état sécurisé. Un diagramme standard cache souvent cela derrière des détails d’implémentation, le rendant invisible aux parties prenantes et aux futurs mainteneurs.
| Fonctionnalité | Diagramme théorique | Implémentation dans le monde réel |
|---|---|---|
| Transitions | Instantané | Sujet à la latence et au jitter |
| Entrées | Binaire (Vrai/Faux) | Données bruitées, analogiques ou manquantes |
| Concurrence | Linéaire ou imbriqué | Fils et processus parallèles |
| Erreurs | Souvent omis | Doivent être explicites et prioritaires |
| Mémoire | Illimitée | Contrainte par le matériel embarqué |
5️⃣ Défis de débogage et de visualisation 🔍
Lorsqu’une machine à états échoue en production, le débogage est difficile. Les diagrammes standards sont des documents statiques. Ils ne montrent pas l’historique des états. Ils ne montrent pas le moment des événements. Ils ne montrent pas les valeurs de données qui ont déclenché une transition.
Pour rendre les machines à états déboguables en robotique, vous avez besoin de :
- Journalisation des états : Chaque transition doit être journalisée avec une horodatage et les valeurs des variables pertinentes.
- États d’historique : Le diagramme doit prendre en charge les transitions « Historique ». Si le robot était dans l’état A, est passé à l’état B, puis que l’état B a planté, il doit savoir revenir à l’état A, et non à un état par défaut.
- Traçabilité : Le code doit être traçable jusqu’au diagramme. Si la logique de transition est complexe, le diagramme doit expliquer la condition, et non seulement la flèche.
Sans ces outils, le diagramme n’est qu’une image. Ce n’est pas une spécification. Les ingénieurs reviendront à écrire la logique directement dans le code sans se référer au modèle visuel, rendant le diagramme obsolète.
6️⃣ Flux de données vs. Flux de contrôle 📊
Une erreur courante est de confondre le flux de contrôle avec le flux de données. Les machines à états contrôlent le mode du robot, mais elles ne gèrent pas le données. Le système de perception du robot, l’algorithme de planification et le système d’actionnement génèrent tous des flux de données. La machine à états doit coordonner ces flux sans devenir un goulot d’étranglement.
Si votre machine d’états tente de traiter les données du capteur directement, elle échouera. Elle devrait déclencher des événements qui provoquent d’autres processus pour gérer les données. Par exemple :
- Machine d’états : Transition de « En déplacement » vers « En balayage ».
- Fil de perception : Reçoit l’événement « En balayage » et augmente le taux d’images de la caméra.
- Fil de planification : Reçoit l’événement « En balayage » et met en pause les mises à jour de trajectoire.
Découpler la logique de contrôle de la logique de traitement des données est essentiel. Le diagramme de la machine d’états doit montrer clairement ces transferts comme des événements, et non comme des étapes de traitement des données.
7️⃣ Gérer la complexité grâce à la modularité 🧩
À mesure que le robot devient plus capable, la machine d’états grandit. Un robot simple de prélèvement et de placement pourrait avoir cinq états. Un manipulateur mobile pourrait en avoir cinquante. Une machine d’états à cinquante états est impossible à maintenir si chaque état interagit avec tous les autres.
Adoptez une approche modulaire. Divisez le système en sous-systèmes :
- Machine d’états de locomotion : Gère les roues, les jambes ou les chenilles.
- Machine d’états de manipulation : Gère les bras, les pinces ou les outils.
- Machine d’états de communication : Gère les échanges réseau et les liaisons de données.
Ces sous-systèmes communiquent par des événements. Cela réduit la charge cognitive sur l’ingénieur. Vous pouvez vérifier la machine d’états de locomotion indépendamment de la machine d’états de manipulation. Cette modularité est la seule façon d’échelonner les architectures de machines d’états pour la robotique complexe.
8️⃣ Documentation et maintenance 📝
Un diagramme de machine d’états est un document vivant. Le code change, les exigences évoluent, et le matériel évolue. Si le diagramme n’est pas mis à jour en parallèle avec le code, il devient une source d’information erronée. Cela entraîne le problème du « diagramme spaghetti » où le modèle visuel ne ressemble en rien à la logique exécutable.
Les meilleures pratiques pour la maintenance incluent :
- Contrôle de version : Traitez le fichier de diagramme comme du code. Validez les modifications avec la même rigueur.
- Génération de code : Là où c’est possible, générez du code à partir du diagramme ou utilisez un cadre qui les maintient synchronisés.
- Journaux de modifications : Lorsqu’une transition est ajoutée ou supprimée, documentez la raison. S’agissait-il d’une correction de sécurité ? D’une optimisation de performance ?
La documentation ne doit pas seulement décrire les états. Elle doit décrire le pourquoi. Pourquoi cette transition est-elle protégée ? Pourquoi cet état a-t-il la priorité sur cet autre ? Ces décisions sont critiques pour les ingénieurs futurs qui n’ont pas écrit le code d’origine.
9️⃣ Le facteur humain dans la conception 👥
Enfin, envisagez l’opérateur humain. La machine d’états détermine le comportement du robot, ce qui détermine la manière dont les humains interagissent avec lui. Si le robot entre dans un état « Occupé » pendant 10 minutes, l’opérateur pourrait penser qu’il est défectueux et tenter d’intervenir. Si le robot passe en état « En pause » sans lumière d’état claire, l’opérateur pourrait supposer qu’il est bloqué.
La machine d’états doit correspondre aux attentes humaines. Les transitions doivent être visibles, audibles ou signalées d’une manière que l’opérateur humain comprenne. Cela est souvent négligé dans les diagrammes techniques, qui se concentrent uniquement sur la correction logique plutôt que sur l’expérience utilisateur. Un robot logiquement correct mais difficile à utiliser est un produit défaillant.
🔟 Rendre votre architecture résistante aux évolutions futures 🚀
La technologie robotique évolue rapidement. De nouveaux capteurs, de nouveaux actionneurs et de nouveaux modèles d’IA sont constamment introduits. Votre architecture de machine d’états doit être suffisamment souple pour intégrer ces changements sans réécriture complète.
Évitez de coder en dur les noms d’états. Utilisez des énumérations ou des constantes. Évitez de coder en dur les conditions de transition. Utilisez des fichiers de configuration ou des paramètres lorsque cela est possible. Cela vous permet d’ajuster le comportement sans recompiler l’ensemble du noyau logique. Cela vous permet également de tester différentes configurations d’états en simulation avant de les déployer sur du matériel.
En vous concentrant sur ces principes architecturaux, vous dépasserez les limites du diagramme UML standard. Vous créerez un système résilient, maintenable et suffisamment robuste pour le monde physique.











