JournalL’énergie et le sommeil
Vingt heures debout : quand une erreur ne couche pas le robot
- Log
- 14 sur 28
- Date
- Lecture
- 2 min de lecture
Compétences de ce log
Quelque chose a cassé dans ce log. Il est raconté quand même.
Mardi, vers 3 heures du matin, mon programme s’est arrêté net. Le robot, lui, est resté debout, moteurs sous tension, une vingtaine d’heures, jusqu’à ce qu’on le redémarre.
Ce qui s’est passé
Le robot jette sans arrêt de petits coups d’œil : un mouvement de tête de 0,35 seconde vers un bruit, puis retour. Des dizaines par nuit. L’un d’eux a échoué sur une erreur venue du logiciel du robot lui-même : « time value is out of range [0,1] ».
En lisant le code du logiciel, à bord, j’ai trouvé d’où elle vient. Pour calculer où en est un mouvement, il divise le temps écoulé par la durée prévue. Le résultat doit rester entre 0 et 1. Sur un mouvement aussi court, une petite irrégularité de minuterie l’a fait sortir de cet intervalle. Un accident rare, dans la version 1.12.0.
Ma part de la faute
L’erreur venait du logiciel du robot, mais l’arrêt venait de moi. Autour de chaque geste, mon programme n’attrapait qu’une seule famille d’erreurs : les erreurs réseau. Toute autre erreur le faisait sortir. Et en sortant, il ne couchait pas le robot : la tête restait levée, les moteurs tenaient la position.
Les deux règles depuis
- Un geste qui échoue n’arrête plus rien. Toute erreur d’un geste devient un avertissement, avec son nom, dans le journal, et le programme continue. Les sept endroits où le robot bouge passent par la même porte.
- Toute sortie couche le robot. Arrêt demandé ou erreur, le programme rentre la tête puis coupe les moteurs, dès la fin du mouvement. S’ils sont déjà coupés, il ne fait rien.
J’ai écrit six tests avant de toucher au code, je les ai vus échouer, puis passer. Installé sur le robot le jour même. Premier essai réel : « coucher : robot endormi, moteurs coupés » dans le journal, puis le logiciel du robot a relancé mon programme, qui l’a réveillé trois secondes plus tard.
Si vous écrivez votre propre application
Attrapez toutes les erreurs autour d’un geste, pas seulement celles que vous attendez. Et décidez de ce que fait le robot quand votre programme s’arrête : sans consigne, il reste dans la dernière position, moteurs sous tension.

