Comment se connecter à Poppy Ergo-Jr en USB?

Bonjour,

J’ai reçu un Poppy Ergo Education que j’ai monté et qui fonctionne parfaitement. Cependant il n’y a aucun câble fourni pour le connecter en USB sur un PC (pour le piloter depuis Python 2.7). J’ai tenté de connecter un câble entre mon PC et un des ports USB du Raspberry mais rien n’est détecté, ça ne marche pas non plus avec le mini-USB du Raspberry. Est-ce plutôt sur la carte Pixl qu’il faut se connecter ? Si c’est le cas quel câble acheter ? Je suis perplexe, je ne trouve aucune info là dessus alors que je pensais que c’était plutôt classique comme connexion.

Merci d’avance pour votre aide.
PS : j’ai bien installé les drivers USB2AX.

Bonjour,
On ne se connecte pas au robot en USB, mais en Ethernet. La carte Raspberry Pi est un mini-ordinateur qui exécute le code du robot. Une fois connecté sur le même réseau que toi (branché en direct sur ton ordinateur) ou sur le même routeur (ta “box” est un routeur) que toi, tu peux te rendre sur son interface web depuis ton navigateur.

Depuis la barre d’adresse de ton navigateur, tu peux te rendre sur la page d’accueil du robot en utilisant son adresse IP (http://IP) mais le plus simple est d’installer le client Zeroconf pour windows (service d’impression Bonjour) qui te permet de te connecter sur on robot avec son nom directement : http://poppy.local

Ensuite, pour le programmer en Python, le plus simple est d’utiliser les notebooks Jupyter.

Bonsoir,

Oui ça j’ai réussi à le faire c’est très pratique pour tester si tout marche bien mais j’ai aussi développé un programme Python 2.7 qui fait fonctionner l’ergo jr avec VREP et j’aimerais maintenant envoyer les instructions vers l’ergo jr reel. Je sais qu’il y a un moyen de le connecter en USB mais malheureusement je ne trouve pas l’info ni quel cable acheter :confused:

Si tu veux brancher les moteurs directement sur ton ordinateur sans passer par la Raspberry Pi, ce n’est pas trivial et c’est de la bricole.
Il faut acheter un USB2Dynamixel ou un USB2AX, qui vont permettre de faire la partie communication avec le PC. Cependant les connecteurs sur ces deux modules ne sont pas ceux des XL-320 mais ceux des AX/MX. Il faut donc faire un adaptateur entre les deux types de câbles (tu relies GND et DATA), et relier VCC et GND à une alimentation 7,5V.

Cependant, je ne comprends ce qui est gênant de passer par la Raspberry Pi ? Si vous triuvez l’interface de Jupyter dérangeante, c’est toujours possible de déposer le code sur la Raspberry pi et de l’exécuter depuis le terminal.

Bonsoir Theo,

Merci pour ces explications, en fait voila comment je voyais les choses : étant enseignant j’ai installé Python 2.7 + différents modules python + modules Poppy (Humanoid, Torso, Ergos Jr) ainsi que VREP sur les PC du lycée. Du coup les élèves peuvent s’entrainer à programmer en Python avec les robots virtuels VREP tout en utilisant n’importe quel module de Python (Tkinter, Pygame etc). Ensuite pour tester leur programme avec le robot réel je pensais simplement le connecter en USB sur le poste de l’élève concerné.

Je ne connais pas bien Jupyter mais j’ai l’impression qu’on ne peut pas faire un programme python complet avec interface Tkinter ou interface graphique pygame. Voyez-vous ce que je veux dire ? Je ne sais pas si je suis assez clair :confused:

S’il y a un moyen de faire ça simplement sans passer par l’USB alors je suis preneur :slight_smile:

Merci pour votre aide

Jupyter est simplement interface web, donc en théorie cela permet d’éxécuter n’mporte quel module Python. Si vous essayez de lancer pygame depuis Jupyter sur votre PC il n’y a aura aucun problème.
Cependant, en utilisant le Jupyter de la Raspberry Pi il y a deux soucis :

  • il n’y a pas d’interface graphique installée (ce qui fait peut-être planter Jupyter lorsque qu’on tente d’ouvrir une fenêtre GTK)
  • Même s’il y en avait une la fenêtre de Pygame ou Tkinter s’ouvrirait SUR le bureau de la Raspberry Pi, ce qui n’est pas très pratique si on a pas d’écran branché dessus…

Je vois quatre pistes :

  • installer le serveur graphique sur la Raspberry Pi et programmer directement dessus en branchant clavier, souris et écran.

  • Installer le serveur graphique et un serveur VNC sur la Raspberry Pi pour avoir l’interface graphique depuis le PC élève client

  • Faire la bricole du post plus haut, mais cela nécessite au moins d’acheter un USB2AX et quelques câbles (~50€). Je pourrais vous faire des photos si j’ai du temps d’ici deux semaines.

  • Le plus simple mais je l’avais presque oublié tellement on ne l’a peu utilisé ; on peut contrôler le robot à distance avec une instance de RemoteRobot :
    sur la RPI, il faut installer zerorpc (pip install zerorpc), puis lancer dans un terminal fuser -k /dev/ttyA* && poppy-services --remote poppy-ergo-jr
    Depuis le poste élève, il faut aussi installer zerorpc, puis en Python (en remplaçant l’IP par celle de la Raspberry Pi)

from pypot.robot import from_remote
poppy_remote = from_remote('127.0.0.1', 4242)
4 Likes

Bonjour Théo,

J’avoue que je ne suis pas très chaud pour partir vers une solution serveur graphique, j’ai le sentiment qu’à l’usage ce ne sera pas pratique.

J’ai passé commande de l’USB2AX, je verrai ce que ça donne.

Pour la solution “remote et zeropc” vous voulez dire que je pourrais réutiliser mon programme tel quel simplement en ajoutant ces deux lignes après avoir fait les installs mentionnées ?

Exemple (connexion USB) :
from pypot.vrep import from_vrep
from poppy.creatures import PoppyErgoJr
robot = PoppyErgoJr()
robot.m1.goto_position(90,1,wait=True)

Deviendrait :
from pypot.robot import from_remote
poppy_remote = from_remote(‘127.0.0.1’, 4242)
from pypot.vrep import from_vrep
from poppy.creatures import PoppyErgoJr
robot = PoppyErgoJr(simulator=‘vrep’)
robot.m1.goto_position(90,1,wait=True)

Et ça fonctionnerait en connexion ethernet au lieu de USB ?

Je ne suis pas sur de bien comprendre ton code. Pourquoi il y a des références à Vrep alors qu’on parle de contrôler le robot tangible depuis ton ordi personnel sans utiliser Jupyter notebook ?

Avec l’exemple de code du dessus (réarrangé)

from pypot.robot import from_remote
from poppy.creatures import PoppyErgoJr

poppy_remote = from_remote('127.0.0.1', 4242)

robot = PoppyErgoJr(simulator='vrep')
robot.m1.goto_position(90,1,wait=True)

Tu as deux instances de robot, robot (l’instance du robot simulé) et poppy_remote (l’instance du rebot tangible).

C’est peut-être plus simple de comprendre en expliquant comment ça fonctionne :
zerorpc permet d’encapsuler des objets Python dans un socket et de les exécuter à distance. C’est une Remote Call Procedure au dessus d’un socket ZeroMQ, d’où le nom zerorpc.
Il faut lancer le robot en mode “serveur”, et le poste client des élèves peut alors exécuter des des commandes sur le robot en se connectant dessus via l’interface pypot.robot.from_remote, mais comme il utilise le Python du poste élève cela ne pose aucun soucis pour lancer une une fenêtre Tkinter ou autre.
On ne parle toujours pas d’USB, c’est bien la Raspberry Pi qui fait l’interface avec la communication des moteurs, mais ça résout le problème mentionné.

Bonjour Théo,

En effet je me suis emmêlé dans mon code, il ne devait pas y avoir de référence à VREP. Je comprends un peu mieux avec ton exemple, je vais tester ça pendant les vacances scolaires et je reviens vers toi en cas de problème. Merci beaucoup.

Bonjour Théo,

J’ai pu tester la solution que tu me proposes. Cela fonctionne mais pas complètement, voilà les problèmes :

  1. Pour lancer “fuser -k /dev/ttyA* && poppy-services --remote poppy-ergo-jr” cela ne fonctionne pas depuis le terminal de http://poppy.local/jupyter (il ne se passe rien, je n’ai aucun message) alors j’utilise le logiciel putty pour me connecter en SSH sur poppy.local, je lance le “fuser” et là ça fonctionne j’ai le message “/dev/ttyAMA0: 4272
    Attempt 1 to start the robot…
    RemoteRobotServer is now running on: http://0.0.0.0:4242

Sais tu pourquoi cela ne fonctionne pas depuis le terminal ? (au pire c’est pas grave c’est assez simple de le lancer en SSH)

  1. Ensuite quand je teste un code python du type :
    from pypot.robot import from_remote
    poppy_remote = from_remote(‘poppy.local’,4242)

poppy_remote.m1.goal_position = 20
poppy_remote.m1.goto_position(40,1,wait=True)

alors le goal_position fonctionne mais pas le goto_position, voici le message :
“AttributeError: ‘Motor’ object has no attribute ‘goto_position’”

Quel est le problème ? Est-ce que j’ai oublié d’installer quelque chose ? C’est embêtant car je ne me sers que des fonctions goto_position :confused:

  1. ça n’a rien à voir avec le reste mais j’ai remarqué que si on entrait une couleur de led qui n’existe pas (m6.led = ‘aaaaaaa’ par exemple) il est ensuite impossible de changer la couleur des led ou de les eteindre, ça reste “planté”.

Merci d’avance pour ton aide