Lancement automatique de scripts Snap ou Python

Bonjour,

Où puis-je enregistrer un projet Snap, qui sera exécuté automatiquement au démarrage de Poppy Ergo Jr ?
Si ce n’est pas possible en Snap, comment faire cela en Python, éventuellement en appelant le script Snap depuis Python ?

Merci

Bonjour,
C’est une question intéressante mais qui n’a pas de réponse simple.

Snap! s’exécute dans un environnement JavaScript depuis un navigateur. On peut lancer Snap depuis un navigateur sans interface graphique, comme Selenium ou PhantomJS. Je ne l’ai jamais fait mais c’est certainement possible.

Une fois le code qui lance Snap réalisé à partir de Selenium ou PhantomJS, il faut lui indiquer de se lancer au démarrage du robot. Là aussi plusieurs solutions :

  • la solution standard de Linux : crée un service SystemD pour lancer le script au démarrage du système
  • la solution quick and dirty qui consiste à ajouter le code à exécuter dans un code qui s’exécute déjà au démarrage. Par exemple au lancement de la créature le fichier ~/dev/poppt_ergo_jr/poppy_ergo_jr.py (accessible depuis l’interface de jupyter) est appelé, on peut rajouter ce qu’on veut à la fin et cela va s’exécuter.

Merci pour les idées, je vais essayer la solution quick-and-dirty en premier.

Ai-je bien compris que l’on pouvait lancer un script Snap depuis le fichier poppy-ergo-jr.py ?

Il faut

Une fois validé que Snap peur se lancer sans navigateur sur la raspberry pi (ça va beaucoup la ralentir), il faut lancer ça au démarrage.

Je ne sais pas comment mettre mon projet SnapProject.xml http://localUrlOfTheProject, est-ce quelqu’un à une idée. Bien entendu c’est sur le Raspberry-Pi. Est-ce qu’un placement judicieux dans les fichiers du serveur actuel suffirait ?

Pourquoi ne pas juste avoir comme lien en plaçant le fichier au bon endroit : http://localhost:2280/snap/snap.html#open:nameOfTheProject ?

Je ne trouve aucune doc sur les directives de type #open de Snap!

J’en réussi à lancer automatiquement des scripts Snap! avec selenium dans Chromium, voici le code Python en fait très simple:

import time
from selenium import webdriver
projs_dir = "Examples"
project = "copter.xml"
driver = webdriver.Chrome()

driver.get("http://color.local/snap/snap.html")
time.sleep(1)

# reading ide object from snap's world 
driver.execute_script("ide = world.children[0]; ") 
# loading project from Examples directory
driver.execute_script("ide.openProjectString(ide.getURL(ide.resourceURL('%s', '%s')))" % (projs_dir, project))
time.sleep(2)
# Running the project, simulating click on the green flag
driver.execute_script("ide.pressStart(); ")
# waiting for project total execution
time.sleep(50)
driver.quit()

Mais mon problème de portage sur le raspberry-pi persiste car phantomJS a une bibliothèque Javascript limitée qui ne contient pas l’objet Map() utilisé par Snap!.

Je suis preneur de toute autre piste, c’est-à-dire un web-driver sans affichage avec la bonne librairie. J’ai essayé slimerjs, qui contient bien Map() mais je ne peux pas mettre de temporisation dans l’exécution des commandes. J’essaye HtmlUnit et Selenium pour Java, j’espère que Java peut fonctionner sur le raspberry.

Great !
For ES6 Map object, I saw that phantomJS will have full ES6 support in the 2.5 release (which is in currently in beta), you could maybe try to compile it in your Raspberry Pi.

I succeeded to install slimerjs and to run it with xvfb, but the script stays stuck to load my Snap! project file.

Hot to install slimerjs:

sudo apt-get udpate
sudo apt-get install iceweasel xvfb
wget http://download.slimerjs.org/releases/0.10.2/slimerjs-0.10.2.zip
unzip slimerjs-0.10.2.zip 
cd slimerjs-0.10.2/
xvfb-run ./slimerjs ../hello_slimer.js

Not too complicated !
Now I have to try other thing maybe with selenium/iceweasel/xvfb, but I will certainly have the same problem because slimerjs uses iceweasel.

I tried a lot of thing : phantomjs, dryscrape, iceweasel, chromium-browser, selenium HtmlUnitDriver, selenium server, selenium iceweasel

I obtained the best result with slimerjs, other solutions bugs, but slimerjs stays stuck . I think the rasperry is too weak to run poppy-services and a rich web browser with javascript running in a loop.

Any ideas guys !

The exposition starting today until next Tuesday will be a failure on the Poppy part. Sorry for the bad advertising about Poppy Ergo jr !!!

I think it will have been better to rewrite the demonstrations in pypot, what do you think about it ?

Snap! is not optimized in term of CPU usage, so it is a difficult task to make it work on Raspberry Pi. For comparison, Sratch team did lot of work to make it usable on Raspberry Pi, and rewrote a part of the Scratch VM.

For your problem, without rewrite everything in Python (I have no idea of the complexity of your project), why can’t you use a laptop with Snap ?

The programs are very elementary so i will rewrite them in Python, just reading a QR-Code and doing a primitive depending the code, rest is programming as usual nothing special with Snap!

The demonstration have to run without any intervention and must be easy to install with a low budget, so no laptop.

For this first exhibition I did the job with a laptop, it was OK !

I will show some pictures.

At least I successfully set a

systemd
service to start a Python script making ErgoJr reacting to commands with QR-Code. Very easy in fact. I start the service after
jupyter
.

Unfortunately, I have two Ergo-Jrs, but the oldest does not want to access to the camera. Grrrr!

Hi sir,
Thanks for sharing this excellent answer. It really helped a lot. keep it up.

Finalement, il y a eu une réponse plus complète ici:

Dans ce post précis: