ErgoJr in the browser

ergo-jr
Tags: #<Tag:0x00007fae8a9d3010>

#19

Effectivement mais n’importe qui dans le monde pourrait programmer un ergo virtuel en cliquant seulement sur un lien… plutôt pas mal comme impact et pour disséminer le projet. Mais comme tu dis, c’est beaucoup de dev et plein de trucs non-compatibles avec les robots physiques.

Mon avis est que faire du tout JS serait un petit changement de focus du projet car cela risque d’inciter fortement les profs à ne faire que du Snap/ErgoJr en ligne. Il me semble que l’on veut transmettre plus que du simple code sur un ordi avec la dimension robotique, tangible, modifiable, hackable etc… Il faut donc que le robot physique soit présent dès le début de l’initiation et à tout age, idéalement avec un “framework” cohérent du primaire aux écoles d’ingénieur. Je pense donc qu’il vaut mieux concentrer les efforts dans ce sens.

Si j’ai bien compris, tu dis qu’une alternative au tout JS c’est de créer un serveur virtuel pour chaque connection avec un pypot qui tourne et fait le lien entre ErgoJS et Snap?

Tu penses que c’est fesable avec des temps de latence correcte?


#20

Ca dépend de où tu es positionné par rapport à ton serveur, mais si tu as un FAI pas trop mauvais, le principal temps de latence vient du wifi entre ton routeur et ton ordi. Mon idée est de s’inspirer du fonctionnement de tmpnb et de sagemathcloud (explication de l’architecture).


#21

Oui tu as raison. Mais l’avantage potentiel d’avoir une version utilisable tout de suite en deux clicks en ligne, c’est que cela peut permettre à des nouveaux venus de voir très vite concrètement le potentiel et l’utilisabilité du système de programmation des robots. Dans cette perspective, la solution proposée par @theo, même si elle n’a pas une latence optimale, pourrait faire le job.

Pour la solution 1) évoquée par @Pierre (on lance un programme en cliquant sur un fichier d’un dossier qu’on a simplement copié-collé sur l’ordi), est-ce-qu’on a déjà une solution permettant de packager ce serveur python pour Windows et Max et Linux?


#22

Du fait de scipy et numpy (et bientôt opencv) ce n’est pas si simple et on a rien de ça aujourd’hui, mais je me suis pas mal penché sur les différentes possibilités et je pense m’en occuper dès la fin de mon stage.


#23

J’ai maintenant bcp joué avec Physijs et c’est pas gagné du tout, enfin c’est même mort. Physijs, et les autres moteurs physiques du même type, sont globalement bon pour gérer les formes de base (cube, sphere, cylindre, …), mais dès qu’on passe sur des formes complexes comme celle de l’ergo ça devient compliqué à mettre en place, instable, et coûteux en temps de calcul.

J’avais bon espoir car Physijs est un des seuls qui gère les formes convexes et même concave. Et il est de loin le mieux intégré avec THREE.js. Une super feature était la possibilité de rajouter des contraintes, genre hinge. Avec possibilité de fixer des limites min/max sur les angles ainsi que de simuler un “moteur angulaire” controllé en vitesse avec une constante d’accélération paramétrable. Cela marche bien pour un moteur, mais dès que j’enchaine deux contraintes en série ça devient très instable…

Voici quelques vidéos pour vous faire une idée:

1 Moteur + U convex

1 Moteur + U concave

2 Moteurs

De plus, les temps de calculs augmentent rapidement avec les modèles convexes et pire pour les concaves. Et malheureusment les modèles Cube, Sphere, Cylindre, ne sont pas assez paramétrable pour s’adapter au STL. Je ne rentre pas plus dans les détails.

Tout cela explique en partie pourquoi on ne voit pas encore de simulateur de robot un peu générique dans les navigateurs.

Je vais encore essayer un dernier trucs en mixant physique et non physique. L’idée est d’avoir seulement l’outil modélisé physiquement et quelques objects simple dans l’environement.

Mais la solution la plus sage est probablement de rester sur une version sans physique, qui tournera sur la plupart des PCs correctement. Elle servirait pour la prise en main et le test de quelques comportements de base.


#24

Oui, et c’est déjà énorme, crois-moi, ça va rendre beaucoup de service dans les bahuts.


#25

Grâce à la version jr = PoppyErgoJr(simulator='threejs', use_http=True) de @Pierre, j’ai pu debugger l’option remote du simulateur. Elle est en ligne et testable très rapidement chez vous. On peut customiser l’IP, le PORT, et la Fréquence de mise à jour. Voila ce que ça donne:

Il faut s’en servir à 20Hz environ, ça rame à 50Hz pour l’instant. Mais cela suffit largement pour tester d’interfacer avec Snap!

Ce serait pas mal de faire un petit tuto/doc déjà pour utiliser cette version, c’est pas bien long normalement car grâce à @Pierre on peut jouer avec Pypot et ErgoJS en 7 lignes: https://github.com/poppy-project/poppy-ergo-jr/blob/master/simulator/test_remote.py

@Pierre si tu veux voir pour la partie qui fait des requetes sur pypot c’est dans https://github.com/poppy-project/poppy-ergo-jr/blob/master/simulator/js/ergo/pypot.js


#26

La Nasa vient de un site web qui permet de contrôler Curiosity sur Mars en navigant sur une carte générée à partir des images des caméras de la sonde.
Le truc génial c’est que ça tourne dans le navigateur, c’est fluide alors qu’il semble avoir de la physique et que la gestion des caméra fonctionne très bien.
Ils utilisent Blend4Web, qui permet apparemment de porter “directement” des scenes de Blender e WebGL… A tester !


#27

C’est effectivement hyper efficace


#28

Je n’ai pas de robot à moi mais je vais aux Samedis Robots du Carrefour numérique à la Villette une fois par mois. Par ailleurs, je travaille avec des enfants d’école primaire avec Scratch et nous prévoyons de commencer l’apprentissage de la robotique avec un robot Thymio (en attendant mieux !) très bientôt.

Ayant beaucoup galéré ce soir pour réussir à utiliser Snap et V-rep conjointement, je rêve de pouvoir un jour commander un Poppy virtuel, voire réel, aussi simplement que ce que l’on voit sur ce simulateur ! Bravo pour ce travail, et cette ergonomie.
J’ai juste mis quelques minutes à comprendre que le clic droit permettait le déplacement vertical et horizontal mais je suis un peu fatiguée… :wink:

Cependant, pour cette simulation de PoppyErgoJr, je n’ai pas bien compris ce que vous souhaitez obtenir au final. D’après ce que j’ai lu ici, commander le robot réel avec javascript a l’air compliqué à mettre en place. Interfacer avec Snap permettra-il de résoudre ce problème et si ce n’est pas le cas, comment envisagez-vous la chose ?

Je trouve que s’il s’agit juste de déplacer quelques curseurs, cette fois, ça devient un peu trop simple et effectivement moins intéressant pédagogiquement, même avec des enfants assez jeunes.
Ce qui pourrait être utile pour des apprentis en robotique, et pas trop compliqué à implémenter au stade que je vois ici, c’est de proposer à côté des curseurs un bouton montrant le code python équivalent (en vue d’apprendre à l’utiliser ensuite avec ipython-notebook). Qu’en pensez-vous ?

Dans le cas du robot de la Nasa, très sympa, la facilité de manipulation est compensée par les explications sur les différentes parties du robot et sur l’exploration.

A noter quand même que si les jeunes auront relativement facilement accès à des robots style ErgoJr dans leur écoles, collèges ou lycée, ils ne les auront sans doute pas à la maison, et donc, le virtuel peut-être utile pour réviser des notions ou s’intéresser au sujet.


#29

Ce simulateur est en effet en beta mais il est déjà controllable via python et pypot d’une façon très similaire au simulateur V-rep.

Si vous vous rendez sur la page du simulateur: http://poppy-project.github.io/poppy-ergo-jr/simulator/

Il y a un onglet Remote Control. Lorsque le champ Enable est activé (en cliquant dans la case associée), le robot va demander la position de ses moteurs à une adresse IP donnée (par default 127.0.0.1, qui est votre ordinateur en local, vous n’aurez pas à la changer normalement). On peut ensuite créer via python un serveur qui va répondre à ces requêtes et envoyer la position des moteurs.

Cela semble complexe mais @Pierre à fait en sorte que ce soit transparent pour les utilisateurs.

Je vous renvoi à la video du post 25: ErgoJr in the browser à regarder en entier pour un example où ce bout de code est utilisé pour prendre le controle du robot:

import time

from poppy.creatures import PoppyErgoJr

jr = PoppyErgoJr(simulator='threejs', use_http=True) # Création du robot avec option simulateur web

# Magie Python pour lancer le server web en background (A recopier)
from threading import Thread
t = Thread(target=jr.http.run)
t.daemon = True
t.start()

jr.dance.start()  # Lance la primitive de dance du robot, on peut utiliser pypot comme avec tout les autres robots

# Attente sans fin pour ne pas finir le programme tout de suite (Ctrl-C pour quitter)
while True:
    time.sleep(1000)

Tout se passe comme pour un robot physique, on utilise juste l’option: simulator='threejs', use_http=True à la création de PoppyErgoJr

Enfin je conseille de baisser la fréquence si les mouvements ne sont pas fluide, toutjours dans l’onglet Remote Control.


Je ne sais pas si Snap est utilisable avec ce simulateur @Theo ?


#30

Ok, je comprends le principe ! Ca remplacerait V-rep, finalement.

Il me manque la librairie poppy.creatures pour pouvoir faire le test et je n’ai pas le temps de le faire immédiatement.
Je suppose qu’une fois que je l’aurai installée, je pourrai utiliser ipython notebook comme pour V-rep.

Je pensais qu’il serait possible (avec encore pas mal de boulot) avec cette interface de faire de la programmation encore plus simple que Snap pour contrôler le vrai robot.

Ce qui serait cool, si vous arrivez à le faire avec Snap, ce serait à terme d’avoir le robot virtuel dans la fenêtre de Snap (est-ce en js ?)


#31

Oui c’est du full js. J’avais essayé 5 minutes d’intégrer dans la fenêtre de Snap, leur code n’est pas facile à décortiquer. Mais ça doit être possible en théorie.

P-t que @Theo s’y penchera un jour :wink:


#32

J’ai installé la librairie poppy-ergo-jr avec pip, ouvert le simulateur et coché “enable”.

Avec ipython notebook, cette commande me renvoie le code suivant:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
in ()
----> 1 jr = PoppyErgoJr(simulator=‘threejs’, use_http=True)

/usr/local/lib/python2.7/dist-packages/poppy/creatures/abstractcreature.pyc in __new__(cls, base_path, config, simulator, scene, host, port, id, use_snap, snap_host, snap_port, snap_quiet, use_http, http_host, http_port, http_quiet, use_remote, remote_host, remote_port, sync)

72 if simulator is not None:
73 if simulator != ‘vrep’:
—> 74 raise ValueError(‘Unknown simulation mode: “{}”’.format(simulator))
75
76 from pypot.vrep import from_vrep

ValueError: Unknown simulation mode: "threejs"

#33

Vous n’avez probablement pas la dernière version de poppy-creature. Le simulator ‘threejs’ est bien pris en charge dans la version sur github: https://github.com/poppy-project/poppy-creature/blob/master/software/poppy/creatures/abstractcreature.py#L88

Je ne sais pas si c’est la version sur pip qui n’est pas à jour. Une possibilité est de cloner le repo https://github.com/poppy-project/poppy-creature et de faire une installation manuelle python setup.py install

Mais il vaut p-t mieux attendre demain pour avoir un retour de @Pierre là-dessus.


#34

Merci, à bientôt !
Je ne sais pas si j’aurai le temps de tester pendant la semaine, mais je m’en occupe dès que possible.


#35

Effectivement cette fonctionnalité est toujours en développement et n’a donc pas été intégré à la version sur pip. Il y a une branche avec la version threejs ici: https://github.com/poppy-project/poppy-ergo-jr/tree/demo-live-threejs

Cela dit, son utilisation reste encore assez “cachée”. Nous espérons avoir une version propre et documentée de tout ça début 2016.


#36

Pour tester le Poppy4dofArmMini, j’ai mis à jour ma version de poppy-creature et maintenant, il y a du mieux dans le script, puisque je peux faire sans erreur le code suivant :
import time
from poppy.creatures import PoppyErgoJr
jr = PoppyErgoJr(simulator=‘threejs’, use_http=True) # Création du robot avec option simulateur web
# Magie Python pour lancer le server web en background (A recopier)
from threading import Thread
t = Thread(target=jr.http.run)
t.daemon = True

C’est ensuite que ça se gâte, quand je lance:
t.start(), j’obtiens un message d’erreur qui se supprime presque tout de suite mais se confirme avec:
jr.dance.start()

Ce message commence par
ERROR:tornado.general:Uncaught exception, closing connection.

Mais bon, il y a du progrès !


#37

Sinon, est-ce que ce ne serait pas possible de s’inspirer de ce qui se fait pour Arduino où le simulateur et l’éditeur de code sont au même endroit ? Il y a sans doute d’autres simulateurs web du même type, mais je ne les ai pas testés.

Certes, ça ne permet pas la commande du matériel réel mais pour faire des tests, c’est plutôt bien.

Après, il “suffirait” de copier-coller le code produit dans ipython-notebook ou autre pour que ça marche sur le robot réel.


ErgoJr, Threejs et Snap!
#38

Je voudrais savoir s’il y a la possibilité de ajouter un bouton pour sauvegarder des positions. Par exemple imaginons que sur le simulator je fais une position et je veux récupérer cette position pour ma programmation sur python. Est-ce que vous avez déjà fait quelque chose de pareil ?
est-ce que vous avez envisagé la possibilité d’importer une autre créature de Poppy?
Merci d’avance.