Menu
Log
Afin de pouvoir deboguer le robot et comprendre ce qu'il a fait en match, les données et choix du robot sont enregistrées en permanence sur le chipdisk.
Tout type d'information peut être stoqué:
- Des messages de types chaine de caractères. Il existe différents types de messages suivant leur criticité: OK, WARNING, ERROR, INFO, DEBUG
- Des informations ponctuelles correspondant à des actions du robot: sortir le bras gauche...
- Des informations enregistrées périodiquements par un callback enregistré sur robotTimer: position du robot, consignes moteurs...
Le programme principal du robot stoque crée ces messages (src/log/log.cpp). Il les envoye par socket vers le programme qui les compresse et les enregistre sur le disque (src/log/logger.cpp).
Après le match on peut relire les logs avec le système de visualisation du terrain (src/log/logViewer.cpp) et le programme qui convertit le log en une série de message visualisable avec un navigateur internet (src/log/log2html.cpp).
Pour pouvoir deboguer il est important de visualiser la position du robot en 2D sur la carte du terrain et de pouvoir en même temps analyser les toutes les actions du robot avec le système de log texte.

Structure de données des logs
Voir src/include/log.h
Pour avoir un système évolutif, chaque "log" est composé d'un entête de taille fixe et de données de taille variable.
Entête:
typedef struct LogPacketHeader {
int magic; // entier pour se recaller en cas de problème de communication
LogType type; // Type de message
struct timeval timeStamp; // Date du message
int length; // Longueur des données qui vont suivre avant le prochain LogPacketHeader
} LogPacketHeader;
Exemple de données suplémentaires:
typedef struct LogPacketPosition {
Millimeter x, y;
Radian theta;
} LogPacketPosition;
Par la suite les systèmes de lecture de log peuvent ignorer les types de messages qu'ils ne peuvent pas traiter. Il leur suffit de sauter les données est d'aller au paquet suivant.