Menu

Systèmes de sécurité 2004



Vérification du robot avant le match
Détection des problèmes en cours de match
Reboot / segfault
Bug soft

Le programme du robot doit être très robuste. Il ne doit pas planter... et le robot ne doit jamais rester bloqué (en général les stratégies offensives rapportent plus de point que les stratégies défensives). Le robot doit donc vérifier en permanence qu'il fonctionne correctement et si ce n'est pas le cas il ne doit plus tenir compte des capteurs qui fonctionnent mal.

Vérification du robot avant le match

Avant le début du match le robot vérifie que toutes les cartes sont bien connectées et les capteurs sont dans un état correct (voir la fonction src/main/strategyInit.cpp Strategy::waitStart()).


Vérification en cours de match

En cours de match le robot vérifie régulièrement qu'il n'y a pas de problème mécanique ou de communication avec les cartes critiques (comme les odomètres).


Reboot - segfault

Le robot devant à tout prix bouger (il devait traverser la moitié du terrain cette année pour ne pas être forfait), il est important d'avoir un système qui détecte que le PC a rebooté ou que le programme à fait segfault et de repartir dans un mode "dégradé" permettant d'accomplir un minimum de chose en utilisant le moins de capteurs possibles.
Au départ l'idée était d'utiliser une shared memory pour savegarder l'état du robot et le rétablir en relancant le programme après avoir fait segfault.
Finalement nous avons utilisé un système plus simple: un interrupteur indique si le robot est en train de jouer un match ou non. Juste avant de mettre la jack de départ on positionne cet interrupteur en mode match. Quand le programme du robot est lancé, il commence par vérifier l'état de cet interrupteur. S'il est en mode match, le robot lance la stratégie
"StrategyDegraded" qui démarre sans attendre la jack de départ et ou le robot se déplace aléatoirement. Un gère les crash du programme de la même manière en lancant le programme principal en boucle dans un script shell. Si le programme crash, il est relancé et on détecte que l'on est en mode match grace à l'interrupteur et on lance la stratégie dégradée.

Bug soft

Pour éviter les bugs soft, toutes les classes composant du robot sont des singletons. De plus on évite au maximum les allocations dynamiques. Le programme a également été vérifier avec "valgrind" pour détecter les problèmes mémoires.
Pour éviter les problèmes de boucles infinies, toutes les boucles "while" ont été équipées d'un compteur qui vérifie qu'on ne boucle pas trop et fait sortie de la boucle si c'est le cas.
Pour éviter de rester coincer dans un coin du terrain, chaque calcul de trajectorie vérifie que la nouvelle trajectoire est différente de la précédente et que le point de départ de la trajectoire est assew éloigné du précédent point de départ utilisé lors du calcul de trajectoire précédent. Si ce n'est pas le cas, on génère une trajectoire vers un point aléatoire du terrain assez loin du point de départ.


Coupe e=m6 2004 - "Sophia Team" : ISIA-ESSI-ESINSA-EK