Démarche
Le robot Thymio II est utilisé pour introduire la technologie auprès du grand public et des jeunes en particulier. Pour vérifier son efficiacité une étude est en cours pour analyser comment cet outil est utilisé et quel est son impact. Pour pouvoir faire des mesures d'utilisation précises, le robot Thymio II enregistre de manière anonyme divers paramètres d'utilisation, comme les temps passés dans chaque comportements ou les fonctions utilisées en programmation. Ces données sont stockées dans le robot de manière automatique et ne peuvent être récupérées qu'avec une intervention physique et volontaire. En effet il faut introduire une carte SD spéciale pour copier les données. En aucun cas les données ne peuvent être récupérées avec une autre carte, par le câble ou via internet. Nous solliciterons des volontaires lorsque nous récolterons des données. Si vous êtes intéressés, ou si vous avez des questions, n'hésitez pas à nous écrire.
Exemples de statistique
####################### START DUMP ##########################
---- Page dump
Poweron time: 0 minutes
Asebastudio time: 0 minutes
Usb-only time: 0 minutes
Poweroff time: 0 days
Switch-on count: 0
Reprogram count: 0
Mode time:
Menu 0 minutes
Explorer 0 minutes
Follow 0 minutes
Acc 0 minutes
Line 0 minutes
Rc5 0 minutes
Sound 0 minutes
Virtual Machine 0 minutes
Flags: 0x000000 (none)
Record: #0
Poweron time: 165 minutes
Asebastudio time: 3 minutes
Usb-only time: 0 minutes
Poweroff time: 1 days
Switch-on count: 4
Reprogram count: 0
Mode time:
Menu 163 minutes
Explorer 0 minutes
Follow 0 minutes
Acc 0 minutes
Line 0 minutes
Rc5 1 minutes
Sound 1 minutes
Virtual Machine 3 minutes
Flags: 0x808000 (7 15 )
Total: 1 valid record
Current active record:
Poweron time: 0 minutes
Asebastudio time: 0 minutes
Usb-only time: 0 minutes
Poweroff time: 0 days
Switch-on count: 1
Reprogram count: 0
Mode time:
Menu 0 minutes
Explorer 0 minutes
Follow 0 minutes
Acc 0 minutes
Line 0 minutes
Rc5 0 minutes
Sound 0 minutes
Virtual Machine 0 minutes
Flags: 0x000000 (none)
####################### END DUMP ##########################
Détail des statistiques
Les logs sont gardés en mémoire et sur deux pages de flash.
La partie en mémoire sert à comptabiliser les différentes statistiques pendant un jour d’utilisation. Il résiste au poweroff/poweron (c'est a dire que le contenu en mémoire est gardé même si on éteint le robot). Le contenu ne résiste pas à un reset (bouton reset, ou call _system.reset()). Si un reset a lieu, les statistiques du jours sont perdues.
Il y a un nouvel enregistrement dans les conditions suivantes:
Au démarrage, si le temps off est > 0 jours, ou si le "poweron time" > 24heures et si la tension batterie est > 3.3V.
Chaque enregistrement contient les informations suivantes:
Le (0),(1),(…) renvoie à la documentation détaillée de chaque champ.
- Temps total robot allumé en minutes (0)
- Temps total asebastudio connecté au robot (1)
- Temps total USB connecté sans asebastudio (2)
- Les flags (3)
- Nombre de fois que le robot a été allumé (4)
- Nombre de fois que le robot a été reprogrammé depuis studio (5)
- Temps passé dans le menu (6)
- Temps passé en mode amical (7)
- Temps passé en mode explorateur (8)
- Temps passé en mode peureux (9)
- Temps passé en mode enquêteur (10)
- Temps passé en mode obéissant (11)
- Temps passé en mode attentif (12)
- Temps passé en mode virtual machine (13)
- Temps éteint (14)
Temps total robot allumé en minutes (0)
Commence à compter dès l'initialisation du robot, ne compte pas le temps passé en mode bootloader. Arrête de compter dès le poweroff.
Le temps est compté en minutes, arrondi à la minute inférieure, sur 16 bits non signé saturé.
Précision: 50ppm (cristal 16Mhz).
Temps total asebastudio connecté au robot (1)
Compte lorsque:
- Le 5V USB est présent et valide
- L'usb est "configuré" (énuméré, driver windows actif).
- Le port série USB est ouvert (DTE actif)
Le temps est compté en minutes, arrondi à la minute inférieure, 16bits non signé saturé.
Précision: 50ppm (cristal 16Mhz).
Temps total USB connecté sans asebastudio (2)
Compte lorsque:
- Le 5V est présent et différent de (1)
Le temp est compté en minutes, arrondi à la minute inférieure, 16bits non signé saturé.
Précision: 50ppm (cristal 16Mhz).
Les flags (3)
Les flags suivants sont disponibles, la documenation détaillée est plus bas:
- LOG_FLAG_INTERNAL (f.0)
- LOG_FLAG_BATTERY (f.1)
- LOG_FLAG_ASEBABUG (f.2)
- LOG_FLAG_VMCODESD (f.3)
- LOG_FLAG_PLAYBACKSD (f.4)
- LOG_FLAG_FLASHVMCODE (f.5)
- LOG_FLAG_RECORDSD (f.6)
- LOG_FLAG_MOTORUSED (f.7)
- LOG_FLAG_IRUSED (f.8)
- LOG_FLAG_NTCUSED (f.9)
- LOG_FLAG_SOUND (f.10)
- LOG_FLAG_LEDIR (f.11)
- LOG_FLAG_LEDRGB (f.12)
- LOG_FLAG_LEDCIRCLE (f.13)
- LOG_FLAG_ACCUSED (f.14)
- LOG_FLAG_BUTTONUSED (f.15)
- LOG_FLAG_SOUNDTRESH (f.16)
- LOG_FLAG_RC5USED (f.17)
- LOG_FLAG_LEDBUTTON (f.18)
- LOG_FLAG_LEDOTHER (f.19)
- LOG_FLAG_EVENTNTC (f.20)
- LOG_FLAG_EVENTTIMER (f.21)
- LOG_FLAG_MOTOROVERC (f.22)
- LOG_FLAG_IRCOMM (f.23)
Les flags sont mis à 1 en fonction d'une condition propre à chacun, il ne sont jamais remis à 0 sauf lorsqu'un nouveau "Jour" commence.
Nombre de fois que le robot a été allumé (4)
Comptabilise le nombre de fois que le robot a été allumé. S'incrémente à chaque fois qu'on passe dans la routine d’initialisation du pic.
C'est un compteur 8bit "saturé" (pas d'overflow).
Nombre de fois que le robot a été reprogrammé depuis studio (5)
S’incrémente chaque fois que la machine virtuelle reçoit l'ordre "exécuter".
Compteur 8 bits "saturé".
Temps passé dans le menu, en mode amical, en mode explorateur, en mode peureux, en mode enquêteur, en mode obéissant, en mode attentif (6)-(12)
Temps, en minutes, passé dans chaque mode. Le temps est un "instantané", pris chaque minute, du mode actuellement utilisé. C'est à dire que si à l'instant du snapshot l'utilisateur est dans le mode peureux, la minute sera attribuée entièrement au mode peureux, même si durant les 59 autres secondes il était dans un autre mode.
Précision: 50ppm (cristal 16Mhz).
C'est un compteur 8bits "saturé".
Temps passé en mode virtual machine (13)
Temps en minutes passé dans le mode VM, c'est a dire que c'est la VM qui est en charge du robot, même si elle ne fait rien.
Compteur 8 bits "saturé", arrondi vers le bas sur le cristal 16Mhz (50ppm).
Temps éteint (14)
C'est le temps passé en mode "éteint". En jours, arrondi au jour inférieur (23heures 59 minutes 59.5 secondes = 0). Compteur 8bits saturé.
La précision est assez mauvaise, on se trouve sur un RC interne 32Khz (Microchip donne 20% d'erreur).
Documentation des flags
Pour ce qui est des flags basés sur le bytecode de la VM, ils sont mis à jour chaque fois que l’utilisateur charge du code dans la VM et l’exécute avec Aseba Studio, ou chaque fois que du code est chargé depuis la SD ou depuis la flash interne du micro-contrôleur. Les flags basés sur des accès à des variables Aseba sont mis à jour uniquement si pour les accès directs depuis le bytecode. Ils ne sont pas mis à jour si des fonctions natives modifient ces variables (math.*) ou si l'utilisateur modifie ces variables directement depuis Aseba Studio.
Le code est analysé "statiquement", c'est a dire que les flags sont mis à jours seulement en analysant si le bytecode utilise une variable, contient un "handler" d'évènement ou si il appelle une fonction native.
Si le code suivant est chargé:
call math.stat(prox.horizontal, min,max,mean)
if temperature == -10000 then
motor.left.target = 100
endif
Les flags NTC et moteur seront mis à 1 bien que la VM n'exécute jamais la ligne motor.left.target, puisqu'il est impossible que la température atteigne -1000°C.
Le flag IR ne sera jamais mis à 1 car c'est une fonction native qui accède à la variable prox.horizontal.
f.0: Flag tout le temps mis à 0, utilisé en interne pour savoir si l'emplacement en flash est utilisé ou pas.
f.1: Flag mis à 1 si il y a eu un "Brown-out reset". C'est à dire que la tension du PIC est descendue en dessous de 2.5V (typiquement si la batterie a coupé). Cela signifie que le temps "off" est faussé.
f.2: Flag mis à 1 si Aseba a envoyé une "VM node specific error". C'est a dire qu'une erreur de programmation de la part de l'utilisateur d'Aseba a eu lieu.
Typiquement:
- Division par 0
- Accès en dehors des bords d'un tableau
- Utilisateur erronée d'une fonction native
f.3: Flag mis à un si un code valide a été chargé depuis la SD.
f.4: Flag mis à un si un son a été lu depuis la SD (utilisateur ou système)
f.5: Flag mis à un si l'utilisateur a utilisé la fonctionnalité "Write into flash" de Aseba Studio.
f.6: Flag mis à un si l'utilisateur a utilisé la fonction sound.record avec succès. Il faut qu'une carte SD soit présente dans le robot.
f.7: Flag mis à un si l'évènement motor est présent dans le bytecode de la VM ou si les variables motor.left.target/motor.right.target son utilisée en écriture.
f.8: Flag mis à un si l'évènement prox est présent dans le bytecode de la VM ou si les variables suivantes sont utilisées en lecture:
- prox.horizontal
- prox.ground.ambiant
- prox.ground.reflected
- prox.ground.delta
f.9: Flag mis à un si la variable temperature est utilisée en lecture.
f.10: Flag mis à un si les fonctions natives suivantes sont présentes dans le code:
- sound.play
- sound.replay
- sound.system
- sound.freq
f.11: Flag mis à un si les fonction natives suivantes sont présentes dans le code:
- leds.prox.h
- leds.prox.v
f.12: Flag mis à un si les fonction natives suivantes sont présentes dans le code:
- leds.top
- leds.bottom.left
- leds.bottom.right
f.13: Flag mis à un si la fonction native leds.circle est présente dans le code.
f.14: Flag mis à un si l'évènement acc ou tap est présent dans le code ou si la
variable acc est utilisée en lecture.
f.15: Flag mis à un si les évènements suivant sont présent dans le code:
- button.*
- buttons
Ou si les variables button.* sont utilisée en lecture.
f.16: Flag mis à un si l'évènement mic est utilisé, si la variable mic.intensity est utilisée en lecture ou si la variable mic.treshold est utilisé en écriture.
f.17: Flag mis à un si l'évènement rc5 est utilisée ou si les variables suivantes sont utilisées en lecture:
- rc5.address
- rc5.command
f.18: Flag mis à un si la fonction native leds.buttons est utilisée.
f.19: Flag mis à un si les fonction natives suivantes sont présentes dans le
code:
- leds.temperature
- leds.sound
- leds.rc
f.20 Flag mis à 1 si l'évènement température est utilisé
f.21 Flag mis à 1 si les évènements timer0 ou timer1 sont utilisés.
f.22 Flag mis à 1 si un des moteurs à dépasser la limite en courant.
f.23 Flag mis à 1 si la communication IR est utilisée
On peut enregistrer 71 jours dans la flash par page.
Chaque page contient un "header" qui somme le contenu de la page précédente.
Les donnée sont les suivantes:
- Version, 16 bits. pour l'instant fixé à 2. Permet d'assurer la compatibilité binaire entre différent firmware.
- Nombre de fois que le robot a été allumé sur 16 bits
- Temps total en minute que le robot a été allumé sur 32bits
- Temps usb sur 32bits
- Temps aseba sur 32bits
- Tous les autres temps enregistré chaque jours, mais sur 16 bits.
- Les flags, or-és entre eux.
- Numéro de la page flash sur 8 bit.
Récupération des logs:
Si le robot démarre avec une carte sd qui contient le fichier suivant "_LOGDUMP.#@!", le robot va dumper à la fin de ce fichier 3072 octets qui contient les donnée brut du log (les deux pages). Cette opération remet à zéro les logs.
Si vous récupérez les logs, ce serait super de nous envoyer le ficher, afin de l’intégrer à nos analyses. Merci