Piloter un Thymio-II avec Scratch


#1

Vous connaissez sans doute le robot autonome Thymie-II, et peut-être le langage de programmation visuelle Scratch, si bien aimé par des jeunes programmeurs. Dans Scratch on fait évoluer des sprites indépendants qui interagissent sur un scène partagé. Le comportement d’un sprite est défini par des petits programmes séquentiels, déclenchés par des événements. C’est très tentant de voir un Thymie-II comme un sprite, et de chercher à le piloter avec Scratch.

Alors je l’ai fait : j’ai écrit une extension pour Scratch 2 offline qui propose des nouveaux blocs pour piloter un Thymie-II. Mon objectif est d’explorer la grande question, quels blocs dans Scratch ont le plus de sens pour piloter un Thymio-II ? et tous vos critiques et suggestions sont les bienvenus !

Le code est sur GitHub à inirobot-scratch-thymioII.

Si vous avez du courage et un peu de patience, vous pouvez installer l’extension. Sinon il y a aussi quelques exemples de programmes, que vous pouvez regarder sans installer l’extension. L’exemple Thymio-II.sb2 permet de voir les nouveaux blocs.

Les blocs que je propose sont :

  • avancer (N) mm
  • tourner (N) degrees
  • suivre un cercle de rayon (N) mm pour (N) degrees
  • faite tourner les moteurs à (N) x (N) mm/sec pour (N) sec
  • démarrer les moteurs à (N) x (N) mm/sec
  • changer la vitesse (N) x (N) mm/sec
  • arrêter les moteurs
  • faite marche arrière (forward | backward | opposite) x (forward | backward | opposite)
  • éviter un obstacle
  • choisir (top | bottom | sensor | button | microphone | temperature) couleur (N)
  • changer (top | bottom | sensor | button | microphone | temperature) couleur (N)
  • éteindre (top | bottom | sensor | button | microphone | temperature)
  • jouer la note (N) pour (N) sec
  • jouer le son (système | spécial | enregistré) nº (N)
  • arrêter le son (système | spécial | enregistré)
  • enregistrer le son nº (N) pour (N) sec

En plus des reporteurs de valeur pour des capteurs, l’extension propose quelques-uns plus synthétiques pour faciliter la prise en main :

  • la distance d’un obstacle à l’avant ou à l’arrière, en mm (approximativement)
  • l’angle gauche-droite d’un obstacle à l’avant, en degrés (approximativement)

C’est un peu bricolé pour le moment pour faciliter l’expérimentation. Une fois que les idées sont claires, nous allons mettre tout ça dans un paquetage facile à installer.

Un projet futur serait de traduire une partie (forcement limitée) du programme Scratch en comportement autonome Thymio-II, qui peut marcher sans connexion à Scratch sur l’ordinateur.


Scratch 2—Thymio-II : versions Windows, MacOS, Linux
Vers une évolution du Thymio 2 ?
#2

@sherman : A nouveau un grand merci David pour ton adaptation de Scratch au Thymio !
On fait maintenant la même chose avec Poppy et je construis de mes mains la statue à ton effigie !
(David Sherman est directeur de recherches Inria)


#3

#4

@sherman Hello - my name is David Doak - I am big fan of both Scratch and Thymio!

I am very interested in your Scratch2 work - it looks very promising. I am using Thymio with the children in a primary school in the UK. I’ve managed to get Scratch1.4 working with Thymio in Linux Ubuntu - but your Scratch2 solution looks more future proof. Franceso Mondada directed me here.

I’ve looked at your files and instructions on github but am uncertain as to how to proceed (on a MacBook)

  1. I’m not sure how to install the necessary python libraries - for Mac I am concerned about breaking the default python installation
  2. for Mac there is no asebamedulla binary with the official aseba distribution. Is it available somewhere or does it need to be compiled?

Apologies for posting in English - my French is not good. (I am using google translate to read what you have posted)


#5

Hi David! Sorry to have taken so long to respond. It’s really great that you’ve had a look, and I’m very interested in your feedback.

First of all, the current setup is really a breadboard to help (me) quickly test different ideas for Scratch blocks, so it is pretty high in the software food chain to make it easy easy (for me!) to modify. The basic vocabulary of Scratch blocks is converging so the current setup will be replaced pretty soon by a simpler helper program I am writing, asebahttp.

Here are the bits you’ll need today to install the breadboard on your Mac:

  • The Scratch 2 offline editor; also needs Adobe Air as describe at MIT
  • The dbus message system. I use Fink to install but Homebrew might be easier if you don’t already use a package manager
  • fink install dbus dbus1.3-dev
  • A bunch of Perl (not Python) packages, I use CPAN to install but precompiled packages might exist depending on your package manager
  • sudo cpan Mojolicious Net::DBus Time::HiRes List::Util XML::Twig
  • The asebamedulla switch from the Aseba tools

The breadboard is: Scratch 2 learns its new extension blocks by reading ext-scratch-thymioII.json; Scratch 2 talks to my helper aseba-scratch-dbus.perl, which runs a micro http server that converts Scratch 2 extension blocks to DBus messages; asebamedulla converts DBus messages to Aseba messages; the Thymio-II listens to Aseba messages on its USB port, and uses thymio_native_events.aesl to interpret them.

My script start-medulla-macosx.sh tries to start the DBus, asebamedulla, and daemons aseba-scratch-dbus.perl.

Cheers,
David


#6

David,

Many thanks for the reply.

After much updating and installing I’m getting closer but still not quite there.

I used Homebrew for dbus (and also to get aseba https://aseba.wikidot.com/en:sourceinstall). I needed to make some changes to get dbus running (your start-aseba-scratch-helper.sh script refers to a FINK variable)

I used CPAN as you suggested for the other packages. Seemed to work.

However, even with a compiled version of Stéphane Magnenat’s aseba repository - I have no asebamedulla executable.

So when I run your start script:

bash-3.2$ ./start-aseba-scratch-helper.sh 
DBUS_SESSION_BUS_ADDRESS=unix:path=/tmp/launch-D4iUbz/unix_domain_listener
./start-aseba-scratch-helper.sh: line 30: asebamedulla: command not found
 1482 ??         0:00.01 dbus-daemon

Any suggestions? Where did you get your OS X asebamedulla binary? :wink:

Cheers,

David


#7

I had the same problem when I tried Stéphane’s Homebrew tap. I suspect that Homebrew is being too clever: since asebamedulla depends on DBus, and DBus is (it thinks) absent on MacOS, there is no need to compile asebamedulla.

My solution was to compile the Aseba tools by hand using cmake, using the instructions in aseba-community/aseba/readme.md.

If Homebrew left the source and build directories in place, and DBus is already installed as you say, it might be enough to re-run cmake in the build-aseba directory.

dashel_DIR=../build-dashel/ cmake ../aseba/    \
  -Ddashel_DIR=../build-dashel/                \
  -DDASHEL_INCLUDE_DIR=../dashel/              \
  -DDASHEL_LIBRARY=../build-dashel/libdashel.a \
  -DENKI_INCLUDE_DIR=../enki/                  \
  -DENKI_LIBRARY=../build-enki/enki/libenki.a  \
  -DENKI_VIEWER_LIBRARY=../build-enki/viewer/libenkiviewer.a
make

(no, I don’t know why I had to specify dashed_DIR in two ways!)


#8

I have opened an issue on my homebrew tap about that:
https://github.com/stephanemagnenat/homebrew-aseba/issues/1
Probably the simplest is to make aseba depends on D-Bus, but I have to check that it actually works. Feel free to fork my tap and submit pull requests! Thanks


#9

This should be fixed by this commit. Please do:

brew update
brew reinstall aseba

or if you want the master head:

brew update
brew reinstall --HEAD aseba

#10

I have added an example test server to Dashel. It is a minimalistic HTTP/1.0 server, and only supports GET, but is a proof of concept showing how to implement HTTP in Dashel. I could be the base for a pure-Dashel asebahttp.


#11

J’ai remplacé cette première version par un logiciel indépendant qui n’a plus ce pénible ensemble de dépendances. Vous trouverez dans Scratch2-ThymioII-0.5.1.dmg un app bundle pour MacOSX. Il suffit normalement de brancher le robot, lancer l’auxiliaire Scratch2-ThymioII puis ouvrir l’exemple de scène Thymio-II.sb2.

Ce travail est toujours dans un état préliminaire et tous vos commentaires seront les bienvenues !


#12

Bonjour David,

Merci beaucoup pour cette superbe intégration, c’est très chouette !

J’ai quelques questions / commentaires ;

  • Quelle est la fréquence de la boucle d’exécution de Scratch sur le Thymio ? Par exemple, j’ai fait un programme simple qui démarre au drapeau, qui a une boucle infinie, et qui teste un bouton. Si ce dernier est pressé, le robot devient vert pour une seconde. Ce programme a l’air de fonctionner seulement parfois, pas tout le temps, et avec une grande latence.
  • La palette des blocs de base suppose un sprite/une tortue virtuelle en 2D. Pourrait-on les remplacer par les blocs Thymio dans les catégories de base ? Je ne suis pas sûr qu’il y ait un cas d’utilisation qui mixe les sprites 2D de Scratch et le Thymio. D’ailleurs, ça me donne des idées sur des choses chouettes en réalité augmentée avec plusieurs Thymios.
  • Les blocs Thymio combinent différents niveaux d’abstraction (avance X mm et éviter les obstacles) et de durée d’exécution. Probablement que d’un point de vue éducatif il faudrait ordrer ces différents blocs.
  • Est-il possible dans Scratch d’avoir des blocs utilisateurs qui sont des événements ? Cela permettrait de mieux lier VPL et Scratch.

Voilà pour le moment, je vais y réfléchir et jouer un peu plus quand j’aurai un moment, et je te donnerai probablement du retour supplémentaire.


#13

Bonjour;
très jolie projet :smile:
Je participe régulièrement avec ma fille aux “atelier goûter du code” sur Marseille ou nous utilisons scrath.
Le papa noël a eu la bonne idée de lui apporter un joli thymio.
Pouvez vous m’aider a installer l’extension a scrath offline pour le faire fonctionner avec le robot sous win.
Merci


#14

Bonjour,

Mon garçon possède, depuis noël, un Thymio et celui-ci se programme très bien avec l’interface VPL… Mais pour qu’il aille un peu plus loin dans la programmation de ce robot je me suis lancé dans le développement d’une interface, semblable à Scratch, à partir de Blockly (https://code.google.com/p/blockly/) et d’un traducteur vers ASEBA script.

J’ai découvert ce forum en cherchant des solutions techniques au développement de mon projet et je suis impressionné de la communauté qui s’active autour de ce petit robot.
Mon projet n’en est qu’au début, mais je vous tiendrais informé, si vous le désirez, de l’avancé de celui-ci.


#15

Bonjour @Okimi ! et merci beaucoup. Tenez nous au courant de votre projet de connecter Blockly à Thymio, cela nous intéresse beaucoup !


#16

#17

Salut la communauté de Thymio scratcheurs,

je me demandais si avec les quelques retours d’expériences il n’y aurait pas une petite formation pour utiliser Scratch2 avec ThymioII, où s’il était possible de rencontrer un enseignant qui travaille déjà .

Algorithmement


#18

Bonjour,

J’ai posté un article à propos de mon projet Blockly et Thymio sur ce forum : Nouvel environnement de programmation pour Thymio : Blockly4thymio

Cet article est accompagné d’une vidéo de présentation d’un premier exmple: faire clignoter les LEDs de Thymio.


#19

Bonjour David,

Je suis stagiaire à la cité des télécoms de Pleumeur-Bodou. Et je fais actuellement des recherches sur différents robots qui sont programmables avec Scratch pour mettre en place un atelier robotique pour un publique de fin de primaire début collège.
Je constate que Thymio 2 offre pas mal de possibilités, mais je crois qu’il est seulement possible de le faire fonctionner avec Scratch en le laissant branché en USB.
Alors je me demandais s’il était déjà possible de faire fonctionner Thymio 2 avec scratch en enlevant le cable USB, après le téléchargement du programme? Ou même s’il était possible d’enregistrer le programme sur carte SD.

Cordialement


#20

Bonjour,
Scratch et Snap pour le thymio sans fil, c’est en cours. Dès que le thymio sans fil sera disponible (novembre 2015), l’adaptation sera également disponible.
Pour en savoir plus : @cbarraud, @smagnenat , @sherman.