Comment avoir plusieurs robots simulés à partir d'un unique robot réel

Bonjour,

Nous disposons (à ce jour…) de 6 robots pour deux groupes de 21 élèves répartis dans deux salles de 18 postes. Il est donc nécessaire de faire appel au simulateur pour la prise en main, et la mise au point des programmes
Quelle configuration peut-on imaginer afin de minimiser le nombre d’élèves par poste (tout en gardant, concernant les procédures de prise en main par les élèves, une fiabilité acceptable et une complexité raisonnable…) ? Y a -t-il des contraintes ou des limitations quant à l’utilisation simultanée de plusieurs simulateurs ? Peut-on simuler/visualiser le comportement du robot en se passant complètement d’un robot réel ?
Merci d’avance

Bonjour @pcfc,

cette possibilité devrait être intégré par défaut dans les prochaines version des robots!

la réelle difficulté est de créer une interface permettant d’offrir une configuration optimale pour l’ensemble des utilisateurs, mais ça, c’est notre problème :wink:

la configuration en elle-même est assez simple et tient en quelques lignes de code placées au bon endroit:

Pour programmer ou visualiser un robot Poppy il vous faut une instance de celui-ci qui s’exécute quelque part

Une fois c’est software à disposition, vous pouvez lancer autant d’instanciation de robot que vous le souhaitez grâce à:

Cette ligne de commande:

poppy-services --poppy-simu --http --http-port 8081 --snap --snap-port 7071 -nb poppy-ergo-jr

Attention, il ne peut y avoir qu’une instance par port! Ainsi, si vous souhaitez en lancer plusieurs, il vous faudra incrémenter la valeur des paramètres snap-port et http-port,
Par exemple:

poppy-services --poppy-simu --http --http-port 8082 --snap --snap-port 7072 -nb poppy-ergo-jr

ces lignes de commande doivent être exécutées dans un terminal (que vous pouvez ouvrir comme indiqué sur l’image ci-dessous)

Ensuite, compléter simplement les paramètres dans snap et dans le visualisateur, à savoir:

  • host (hôte) = <nom_du_robot>.local qui seras toujours le même (c’est la où sont hébergé les instancse des robots)
  • Port = la valeur donnée lors de l’exécution de la commande terminal. Dans notre exemple 7071 ou 7072 pour snap et 8081 ou 8082 pour le visualisateur. (n’oubliez pas, dans le visualisateur, de cocher (ou re-cocher) la case synchroniser pour actualiser les paramètres)

Si vous disposer d’un robot réel, son instance sera toujours disponible sur snap-port 6969 et http-port 8080.

En pratique, il suffira de modifier la valeur de la variable port dans votre projet snap pour contrôler tel ou tel robot ; ou même de supprimer cette variable globale pour la remplacer par une variable “local” (spécifique à un sprite) et ainsi pouvoir contrôler plusieurs robots dans le même projet snap (un robot par sprite, chacun avec une valeur de port différente)

Comment automatiser le procéder. Exécuté 10 fois la même commande à chaque début de cours sur chaque robot peut vite devenir éprouvant :confounded:, alors il vous suffit d’ajouter ces lignes de commande à la suite de celles présentes dans le fichier de lancement accessible sur votre robot à cette adresse http://<nom_du_robot>.local:8888/edit/poppy_src/puppet-master/launch.sh à la fin de chaque commande d’instanciation ajouter le symbole &, exemple:

poppy-services --poppy-simu --http --http-port 8081 --snap --snap-port 7071 -nb poppy-ergo-jr &
poppy-services --poppy-simu --http --http-port 8082 --snap --snap-port 7072 -nb poppy-ergo-jr &
poppy-services --poppy-simu --http --http-port 8083 --snap --snap-port 7073 -nb poppy-ergo-jr &

Puis redémarrer le robot. Attention une erreur dans ce fichier empêcherais le démarrage automatique des différents services du robot…

Il n’y à pas de contrainte ou de limitation particulières, outre que tous les robots (ou ordi) host soit sur le même réseau que l’ordi où seras exécuté snap et le visualisateur.

Bonjour,
et merci pour ce retour rapide…
malheureusement, et sur deux postes différents sous windows 10, la réponse de windows est la même :
ouverture de la session snap sur mozilla (est-il possible de preciser dans la commande que l’on souhaite une session snap sous chrome ?),
pas de session simulateur et
retour négatif sur le terminal :

Attempt 1 to start the robot…
‘charmap’ codec can’t decode byte 0x9d in position 8750: character maps to
Attempt 2 to start the robot…
‘charmap’ codec can’t decode byte 0x9d in position 8750: character maps to
Attempt 3 to start the robot…
‘charmap’ codec can’t decode byte 0x9d in position 8750: character maps to
Attempt 4 to start the robot…
‘charmap’ codec can’t decode byte 0x9d in position 8750: character maps to
Attempt 5 to start the robot…
‘charmap’ codec can’t decode byte 0x9d in position 8750: character maps to
Could not start up the robot…

le comportement est le même si on demande une simulation avec vrep et la commmande
poppy-services --vrep --http --http-port 8081 --snap --snap-port 7071 poppy-ergo-jr

qui retourne “Connection to V-REP failed!”

il semble pourtant que les installations de logiciels nécessaires sur les pc se soient bien passées…
merci d’avance…

Bonjour @pcfc

pas vraiment, vous pouvez, soit modifier le navigateur par defaut de votre ordinateur, soit ajouter le paramètre -nb à la commande terminale puis entrer manuellement l’adresse dans votre navigateur chrome

parlez vous de v-rep ou de python pypot etc?

concernant le simulateur, il ne s’ouvre pas automatiquement, vous devez vous rendre à cette adresse : Visualisateur Poppy Ergo Jr

si je comprend bien, vous allumez un robot réel, vous le connectez (via un router ? directement avec un ethernet sur l’ordi ? par wifi ? …) à votre ordinateur. Vous vous rendez sur le home page: http://<nom_du_robot>.local puis ouvrez un terminal via la page http://<nom_du_robot>.local/jupyter et entrez la commande que je vous ai donné dans le post précédent. La réponse vient donc du robot :wink:

De mémoire je n’ai jamais rencontré ce log… pouvez vous me confirmer que le process indiqué pour connecter et visualiser un robot réel (comme indiqué dans ce post: Connecter / appareiller - Snap, le Visualisateur et Ergo-jr - #2 by tibo ) à fonctionné, et que donc ce log ne concerne que les instances simulées du robot? merci

Bonjour,

et merci de ce retour…
oui, oui, ce log ne concerne que les instances simulées du robot. Puisque apparemment il est possible de simuler le robot sans robot physique, nous nous concentrons sur une configuration uniquement logicielle pour le moment. Il n’y a donc pas de robot connecté.
Les installations des logiciels python avec miniconda3 (‘conda install numpy scipy notebook jupyter matplotlib’) et pypot (‘pip install poppy-creature --upgrade --no-deps’) à partir d’un terminal windows) semblent s’être bien passées (et vrep aussi d’ailleurs, mais vrep n’est de toute façon pas impliqué si on invoque uniquement le visualisateur (?..))
La configuration est celle d’un pc connecté au routeur (box) (en wifi ou non, la reponse de windows est la même)

merci d’avance (encore)

bonjour @pcfc,

étant donnée que vous disposé d’un robot réel, et que tout vos postes son sur le même réseau que ce robot, la meilleur option pour vous est, je pense, de lancer plusieurs robot simulé depuis un unique robot réel.

Car, je n’ai pas réussis à reproduire votre bug, je n’y ai donc pas encore de solution. Pourriez vous exécuter la commande python ci-dessous et me copier/coller le code erreur complet (avec les commanded précédente ce message est tronqué)

PoppyErgoJr(simulator="poppy-simu")

autres questions, votre os est bien in windows10 ? votre version de python est bien la 2.7? vous avez installé pypot, poppy-creature et poppy-ergo-jr ? vous avez accé à internet et donc au visualisateur à cette adresse : http://simu.poppy-project.org/poppy-ergo-jr/
pourriez vous me décrire étape par étape votre procédure de lancement ? …

merci d’avance

Bonjour,

Merci de vos retours.
Pour vous permettre de reproduire le bug (sans robot physique connecté) …
la configuration logicielle est la suivante :

  • OS : windows 10,

  • La version de python installée via Miniconda3 est la 3.7 ( http://conda.pydata.org/miniconda.html )

  • librairies scientifiques python installées via la commande sous terminal :
    conda install numpy scipy matplotlib

  • Librairies poppy installées via les commandes sous terminal :
    pip install pypot
    pip install poppy-ergo-jr

le package poppy-creature est-il inclus dans l’une des deux librairies précedentes ?

Le visualisateur à l’adresse https://simu.poppy-project.org/poppy-ergo-jr/

Procédure de lancement (sans robot physique connecté) :
sous chrome lancement du visualisateur

sous terminal, lancement de la commande
poppy-services --poppy-simu --http --http-port 8081 --snap --snap-port 7071 poppy-ergo-jr qui provoque …

on en est là…

Concernant le passage par python, la commande PoppyErgoJr(simulator=“poppy-simu”) a l’air de mieux réagir :

mais on en reste là et si on veut une simulation pilotée par snap, il doit falloir impliquer snap quelque part ?

Une question incidente :
Dans le cas d’un robot physique connecté, quelle différence de paramétrage envisager dans les deux cas suivants :

  • robot connecté en ethernet sur le pc, connecté en wifi au routeur (box)
  • robot connecté en ethernet au routeur et pc connecté en wifi (ou en filaire) au routeur ?

D’avance merci…

Bonjour @pcfc

oui

effectivement, il vous renvoie vers le site en ligne, ce qui explique qu’il ne trouve pas le projet, avec un robot physique snap est directement embarqué et nous y avons adjoints les projets relatif au robot.
vous pouvez ajouter --nb à votre commande (ce qui signifie ‘no browser’) et ouvrir manuellement snap (Redirecting to Snap!) puis glisser/déposer le projets blocs de base Poppy_FR.xml (88.8 KB)

intéressant… la commende terminal, exécute notamment cette commande python (car le code source du robot est en python et que in fine “il ne comprend que le python”).

si la commande python:

PoppyErgoJr(simulator=“poppy-simu”)

à fonctionné, la commande terminale:

poppy-services --poppy-simu

doit également fonctionner. donc le problème n’ai pas dans l’instanciation du robot mais dans la mise en place des serveurs de contrôle.
Aux instructions:

ergo=PoppyErgoJr(simulator=“poppy-simu”)
ergo.close()

pouvez vous ajouter, un à un et dans cette ordre les paramètre suivant::

  • use_http=True
  • use_snap=True
  • http_port=8081
  • snap_port=7071

et me dire quel est celui qui renvoie une erreur.

si la commande

ergo=PoppyErgoJr(simulator=“poppy-simu”, use_http=True, use_snap=True, http_port=8081, snap_port=7071)

fonctionne, nous passerons du statu de intéressant à étrange :sweat_smile:

Alors dans le premier cas (robot connecté en ethernet sur le pc) votre ordinateur va oculter le robot sur le réseaux. Dans cette configuration, seul l’ordinateur sur lequel est connecté le robot, peut “discuter” avec le robot.
Dans le second cas (robot connecté au routeur en ethernet ou en wifi si vous avez ajouté votre réseau cf: Danse contemporaine - School of moon - Suprimer les cables de Poppy Ergo Jr (activer wifi + batteries) + piloter plusieurs robots sur un même projet Snap! - #2 by tibo) dans ce cas, tout les ordinateurs connecté à ce routeur ont accès au robot et ses différents services.

Avez-vous réussi à créer plusieurs instances du robot à partir d’un unique robot physique puis à les visualiser, et les programmer avec snap ?

vous me remercirai quand votre problème sera résolu :wink:

Bonjour,

merci pour ces réponses…
Concernant les commandes python , c’est le parametre use_snap qui déclenche l’erreur (identique à celle du terminal, ce qui est plutôt rassurant, a priori…)
image


j’espère que ça va aider…

1 Like

bonjour @pcfc

alors pourquoi cela ne fonctionne pas sur votre poste, je ne sais pas, mais la fonction posant problème n’est pas indispensable… ainsi

rendez-vous dans le fichier ~\Miniconda3\lib\site-packages\pypot\server\snap.py
puis à la ligne 166, utilisé un # pour commenter la ligne.

[edit: après vérification j’avais déjà identifié le problème (cf V-REP Setup Problem) reste à fixer le correctif dans le code source…]

au lancement de snap, cette fonction sert à pré-paramétrer la variable host du robot dans le projet (en y inscrivant directement l’ip), là ce sera simplement affiché poppy.local… (rien de bien méchant)

Une dernière chose, snap en ligne s’exécute maintenant avec une adresse https, or, l’api du robot n’accepte que des requêtes http. depuis quelque temps (cf New version of Snap! is incompatible with Poppy blocks), par défaut, les navigateurs web bloquent le contenu http émanant d’une page https. Ceci peut s’observer par l’apparition d’un petit bouclier à l’extrémité droite de la barre d’adresse du navigateur. Il faut ainsi cliqué dessus et autorisé “les scripts à risque”.

Il existe plusieurs autre solution. Celle que je vous conseil est de télécharger les sources snap ici : https://snap.berkeley.edu/snapsource/snap.zip
décompresser le fichier (où bon vous semble) et dans le fichier
~\Miniconda3\lib\site-packages\pypot\creatures\abstractcreature.py
à la ligne 141 remplacer l’adresse 'http://snap.berkeley.edu/snapsource/snap.html ’ par le chemin d’accé vers le fichier ~\…\snap\snap.html

Tout devrait maintenant fonctionner !

bonjour @pcfc

cela a-t-il fonctionné ?

bonjour,

pris par une montagne d’autres choses, j’avais un peu lâché l’affaire…

Je viens d’essayer…

La commande sous terminal aboutit à l’instanciation (enfin c’est ce qu’elle dit…)


mais je n’ai pas plus de connexion entre snap (host 127.0.0.1 port 7071) et le visualisateur (host 127.0.0.1 port 8081) : le visualisateur ne manifeste rien et snap avoue ne pas se connecter…

Est-ce que ça ne peut pas venir du fait que la session snap est ouverte à la main après la commande terminal (pour recupérer les blocs de base Poppy_FR.xml) ?..

bonjour @pcfc,

non, peu importe où est ouvert snap! tant que vous êtes sur le même réseau et que l’url par au bonne endroit!

essayer d’utiliser l’url suivant pour récupérer la véritable ip du robot:
http://<nom_du_robot>.local:7071/ip/

utilisez vous les versions en ligne de snap et du visualisateur? si oui, avez vous pris garde au blocage par défaut fait par les navigateur sur les requête http:// issue d’une page https:// ?
cf