Poppy Ergo Jr : new software updates are available in alpha version!


Topic rédigé en français en dessous, cliquez >> ici <<


:tada: Hooray, new software updates Poppy Ergo Jr are available in alpha version!

We just published this alpha version that fixes a couple of compatibility issues with recent Python modules, new support for the Raspberry Pi 4 and with several additional handy features requested by the community. Python 2 is no longer officially supported. Also, we switched to the desktop image, so you can plug a HDMI screen to your Ergo Jr.

:left_speech_bubble: We’re excited to hear your feedback in terms of bugs and general opinion: feel free to try the updates and give your feedback by commenting this post! We’re aware of the English phrasing being awkward, please be kind while we’re fixing it :grin:

:arrow_right: Download the alpha version now

How I can test the v3.0.0alpha version on my Poppy Ergo Jr:

  1. Download the zip file on your computer
  2. Unzip it so that you get the ~7.5GB img file
  3. Flash the SD card with your computer:
    Read the docs: how to burn an image file
  4. Insert the SD card in your robot and connect to poppy.local to test it! The user interface will look like this:

Note: Please keep in mind that these are still alpha versions that might brick your robot software but it is always possible to rollback to the previous version if needed. This alpha update is not available from the Update robot button in the user interface and further updates with this button won’t work till the final release.

ChangeLog (v3.0.0alpha version)

New sd-image for poppy-creature on raspberry pi3 and pi4 !

Raspberry Pi OS (32-bit)

  • Image with desktop based on Debian Buster (10.4)
  • Version: May 2020 ; Release date: 2020-05-27 ; Kernel version: 4.19
  • Release notes

Python

  • Moved from Python 2.7 in Anaconda to regular Python 3.7.3 in a virtual environment
  • Dropped the miniconda environment
  • Created a Python virtual environment in the directory ‘pyenv’ of user Poppy
  • Activated the Python virtual environment from user Poppy’s .bashrc

Pypot

  • Updated ikpy to the latest version
  • Added optionnal path for move recorder
  • Added a self-hosted version of Snap to prevent CORS issues
  • Added Snap entry points for webcam access in the REST API
  • Added notebook ‘Another language’

Creatures

  • Dropped support of poppy.creature that must be now pypot.creatures
  • poppy-ergo-jr known bug: marker_detector sensor is disabled (will be fixed for the release)
  • poppy-ergo-jr add demo primitives

Raspoppyfication script

  • Updated all scripts for Raspbian buster and for github branch usage.
  • Wifi Hotspot : used an updated version for RPi4 and Raspbian buster.
  • Added new poppy services
    • Self-hosted off-line documentation
    • Added poppy-simu as an offline viewer
    • Added virtual robots
  • Setup puppet-master documents
  • updated Snap! version (5.4.5)

Web interface (Puppet-master)

  • display rich detailed messages to help debug disconnected/broken motors or camera
  • Disabled auto start of the robot API with Snap or the Monitor: the user is now prompted to do so
  • Remove auto stop of the robot API with Jupyter: the user is now prompted to do so
  • Pages of user interface improved as follows:

New pages:

Moved pages:

  • monitor and control (open poppy-monitor app) to monitor and control folder as primitive manager (open poppy-monitor app)
  • snap (open snap app) to programming folder
  • jupyter to programming folder, previous behavior: open jupyter root, now: open default_notebook
  • remove reset tab in index page

Changed pages:

  • index (== HomePage) changed tab, add sub-tab, show above…
  • jupyter root (== MyDocuments) show screenshot
    • create symlink to
      • Moves recorded
      • Snap project
      • Robot primitives
      • My Pictures
      • poppy-viewer and poppy-docs in poppy_src folder
    • rename poppy_src to poppy source-code
    • move
      • notebooks to notebooks folder
      • snap and poppy monitor to root of poppy source-code folder
  • settings show screenshot
    • add function
      • set language (all is not translated)
      • set wifi
      • set hotspot
      • set API auto-starting
      • set virtual instance auto-starting
      • set state for first-page
      • set motor
    • add button
      • open an terminal
      • restarte services (jupyter, puppet-master, docs and viewer services)
      • reboot raspberry
      • shutdown raspberry
  • what happened show screenshot
    • manage logs
      • display control (‘show more’ / ‘show less’)
      • save in file
      • add logs for all virtual instance, for viewer, docs and jupyter service
    • add button
      • start / stop / reset APi
      • toggle camera
      • luanch n virtual instances / open multiview / open viewer for instance n
      • open viewer / open docs / open jupyter
      • open an terminal / restarte services / reboot raspberry / shutdown raspberry

Screenshot page:

5 Likes

:tada: Hourra, de nouvelles mises à jour logicielles Poppy Ergo Jr sont disponibles en version alpha!

Nous venons de publier cette version alpha qui corrige quelques problèmes de compatibilité avec les modules Python récents, la nouvelle prise en charge du Raspberry Pi 4 et plusieurs autres fonctionnalités pratiques demandées par la communauté. Python 2 n’est plus officiellement pris en charge. De plus, nous sommes passés à l’image desktop, vous pouvez donc brancher un écran HDMI sur votre Ergo Jr.

:left_speech_bubble: Nous sommes ravis d’entendre vos commentaires en termes de bugs et d’opinion générale: n’hésitez pas à essayer les mises à jour et à donner votre avis en commentant ce post! Nous sommes conscients que certaine formulations de texte sont maladroites, veuillez être indulgents pendant que nous les corrigeons :grin:

:arrow_right: Téléchargez la version alpha maintenant

Comment puis-je tester la version v3.0.0alpha sur mon Poppy Ergo Jr:

  1. Téléchargez le fichier zip sur votre ordinateur
  2. Décompressez-le pour obtenir le fichier img ~7,5 Go
  3. Flashez la carte SD avec votre ordinateur:
    Lisez la documentation: comment graver un fichier image
  4. Insérez la carte SD dans votre robot et connectez-vous à poppy.local pour la tester! L’interface utilisateur ressemblera à ceci:

Remarque: Veuillez garder à l’esprit qu’il s’agit toujours de la versions alpha qui pourraient «brick» les logiciels du robot, mais il est toujours possible de revenir à la version précédente si nécessaire. Cette mise à jour alpha n’est pas disponible à partir du bouton Mettre à jour le robot dans l’interface utilisateur et les autres mises à jour avec ce bouton ne fonctionneront pas avant la version finale.

ChangeLog (version v3.0.0alpha)

Nouvelle image sd pour les créatures poppy sur raspberry pi3 et pi4!

Raspberry Pi OS (32 bits)

  • Image avec bureau basée sur Debian Buster (10.4)
  • Version: mai 2020; Date de sortie: 2020-05-27; Version du noyau: 4.19
  • Notes de version

Python

  • Migration de Python 2.7 sous Anaconda vers Regular Python 3.7.3 sous un environnement virtuel
  • Suppression de l’environnement miniconda
  • Création d’un environnement virtuel Python dans le répertoire ‘pyenv’ de l’utilisateur Poppy
  • Activation de l’environnement virtuel Python à partir du .bashrc de l’utilisateur Poppy

Pypot

  • Mise à jour d’ikpy vers la dernière version
  • Ajout d’un chemin optionnel pour l’enregistreur de mouvement
  • Ajout d’une version auto-hébergée de Snap pour éviter les problèmes CORS
  • Ajout de points d’entrée Snap pour l’accès à la webcam dans l’API REST
  • Ajout notebook «Une autre langue»

Créatures

  • Suppression du support de poppy.creature qui doit maintenant être pypot.creatures
  • bug connu poppy-ergo-jr: le capteur marker_detector est désactivé (sera corrigé pour la version)
  • poppy-ergo-jr: ajoute des primitives de démonstration

Script de raspoppyfication

  • Mise à jour de tous les scripts pour Raspbian buster et pour l’utilisation de la branche github.
  • Wifi Hotspot: utilisé une version mise à jour pour RPi4 et Raspbian buster.
  • Ajout de nouveaux services de poppy
    • Documentation hors ligne auto-hébergée
    • Ajout de poppy-simu en tant que visionneuse hors ligne
    • Ajout de robots virtuels
  • Configurer des documents de puppet-master
  • mise à jour de la version Snap! (5.4.5)

Interface Web (Puppet-master)

  • Afficher de messages détaillés pour aider au débogage des moteurs ou de la caméra déconnectés / cassés
  • Démarrage automatique désactivé de l’API du robot avec Snap ou le moniteur: l’utilisateur est maintenant invité à le faire
  • Suppression de l’arrêt automatique de l’API du robot avec Jupyter: l’utilisateur est maintenant invité à le faire
  • Pages d’interface utilisateur améliorées comme suit:

Pages Nouvelles:

Pages Déplacées:

  • monitor and control (open poppy-monitor app) vers monitor and control folder sous le nom primitives manager (open poppy-monitor app)
  • Snap! (open snap app) vers programming folder
  • jupyter vers programming folder (comportement antérieur: ouvre jupyter_root, maintenant: ouvre default_notebook=
  • Supression de l’onglet reset dans la page index

Pages Changées:

  • index (== HomePage) changement onglet, ajout sous-onglet, etc, voir au-dessus…
  • jupyter root (== MyDocuments) show screenshot
    • création de lien symbolique vers:
      • Moves recorded
      • Snap project
      • Robot primitives
      • My Pictures
      • poppy-viewer and poppy-docs dans poppy_src folder
    • renommage de poppy_src en poppy_source-code
    • déplacement
      • notebooks to notebooks folder
      • snap and poppy monitor to root of poppy source-code folder
  • settings show screenshot
    • ajout function
      • set language (tout n’est pas traduit)
      • set wifi
      • set hotspot
      • set API auto-starting
      • set virtual instance auto-starting
      • set state for first-page
      • set motor
    • ajout button
      • open an terminal
      • restarte services (jupyter, puppet-master, docs et viewer services)
      • reboot raspberry
      • shutdown raspberry
  • what happened show screenshot
    • manage logs
      • display control (‘show more’ / ‘show less’)
      • sauvegarde dans un fichier
      • ajout des logs pour toutes les instances virtuelles, et les services: viewer, docs et jupyter
    • add button
      • start / stop / reset APi
      • toggle camera
      • launch n virtual instances / open multiview / open viewer for instance n
      • open viewer / open docs / open jupyter
      • open an terminal / restarte services / reboot raspberry / shutdown raspberry

Capture d’écran:

2 Likes

Super ! Bravo :slight_smile:
Je testerai dés que j’ai accès à un robot.

1 Like

Félicitation !
Content de voir que le projet continu.

1 Like

Bonjour,

Sympa, en particulier pour les instances de robots virtuels et le wifi, cela va simplifier la vie :sunglasses:

C’est une version alpha: est-ce à dire que vous avez figé les nouvelles fonctionnalités?

J’avoue que pour les enregistrements de mouvements, il serait sympa de pouvoir récupérer/déposer les fichiers eux-mêmes via ftp, webDav, ou autre; enfin sans passer par les notebooks python.
Mais peut-être est-ce déjà possible?

N.

Bonjour @Nikolaos,

c’est l’objectif :wink: heureux de voir que cela fonctionne :smiley:

Cela signifie que certaines fonctionnalités sont potentiellement incomplètes, que d’autres peuvent causer des bugs inconnus, ou que certains comportements pourront être intégralement modifiés ; cela signifie surtout que cette version n’est pas proposée dans les mises à jour officielles: aucune correction ne sera proposée pour cette version, il faudra attendre la prochaine version officielle (qui se basera sur cette version alpha mais n’en sera pas la continuité)

Les enregistrements effectués se trouvent dans le dossier: My Documents/Moves Recorded, de là, tu peux upload ou download tes fichiers. Ce sont des .record (dedans, c’est un format .json) que le robot interprète comme une primitive via le module move_player.
J’espère que ça répond à ta question … si les .record t’intéresse je te conseil d’ouvrir un nouveau post avec tes questions, j’essaierai d’y répondre :wink:

Tibo

Hey,
Great work on the update! Is there a way to export the data from the recordings in order to make the movements smoother?

1 Like

Bonjour,

J’ai (un peu) “joué” avec cette nouvelle version (mon ergo est sur une pi3 revB).

Les nouvelles fonctionnalités sont plutôt sympathiques :clap: :clap:

Ce n’est pas systématique, mais je rencontre un problème en utilisant l’adresse poppy.local: impossible de résoudre l’adresse (même avec un simple ping). Par contre en utilisant l’IP du robot ou le hostname de l’ergo renseigné dans le dns de ma box, aucun souci. Pour info Je reboote la pi dans la foulée et c’est bon.

En vrac quelques (humbles) remarques:

  • La page de logs: les boutons start/reboot/stop robot api sont vraiment très utiles car j’arrive(ais) à faire tomber le “serveur” pypot assez fréquemment et cela repart (avant je devais débrancher ma pi pour tout initialiser et la requête vers /reboot ne semblait pas vraiment faire de miracle…)
    Par contre le “reboot robot services” (c’est la même chose??) semble ne rien faire/et aucun message sur l’UI.

  • Pour revenir sur les logs, la possibilité de faire un clear des logs/numéroter les lignes serait sympa pour la lisibilité en “live” (quand on a n fois le même message)

J’ai remarqué qu’il y avait une rupture d’API dans les requêtes suivantes (via l’api rest pypot):

  • pour obtenir la valeur d’un registre: /motor/$name/register/$register/list.json à la place de /motor/$name/register/$register (uniformisation des requêtes get je suppose?)
  • le retour de la requête pour obtenir les moteurs des aliases:
    • avant le retour était { alias: [‘m1’, ‘m2’, etc…] }
    • maintenant: { $alias: [‘m1’, ‘m2’, etc…] } ou $alias est le nom de l’alias. Cela va rester?

Y-en-a-t-il d’autres?

D’où au final les questions suivantes:

  • les callback derrières les start/reboot/stop robot api de l’UI semblent basée sur les requêtes /APIstart, /APIreset, /APIstop: c’est pérenne? on peut les utiliser directement?
  • J’utilise pas mal l’api rest pour mes pakages nodes et mon ui: aves-vous une idée de la date de sortie de la release de cette version?

Sinon rien à voir, je n’ai pas eu encore le temps mais Il faut que je rebranche ma caméra pour récupérer le flux vidéo; cela va vraiment être un terrain de jeu sympa :sunglasses: :sunglasses:
d’où ma dernière question: même principe que pour les autres “actions” on pourra récupérer le flux via l’api rest??

Merci d’avance,
N.

hey @B0bbi3B,

thank you for your reply.

Of course, you can import or export movements on the robot: they are in the folder: My Documents / Moves Recorded. These are .record (inside, it is a .json format) that the robot interprets as a primitive via the move_player module.

You can directly modify the .record file.
You can also use snap blocks or pypot function to play the movement faster, slower, or backwards. You can also launch several movements in series or in parallel.

For more information on .record files, please open new post about this.

Bonjour @Nikolaos,

Merci du compliment :smiley:

Si je comprends bien, tu as modifié le hostname… c’est donc tout à fait normal que poppy.local ne réponde plus: en réalité “l’adresse du robot” est au format http://$hostname.local, http://poppy.local n’étant que l’adresse par défaut. Ainsi, si tu as modifié le hostname (via la page de configuration) un message t’a proposé soit d’appliquer la modification immédiatement (ce qui a pour effet de recharger la page vers la bonne adresse) soit d’attendre le prochain redémarrage. Est-ce bien cela qui s’est passé ?

Oui c’est une réalité, dès que l’on essaie des choses pas très conventionnelles, l’API (le “serveur”) tombe assez facilement ; d’où la présence (dans l’ancienne version) du bouton “Reboot the Robot” (requête vers /reset et pas /reboot :stuck_out_tongue: ) sur la page principale de l’UI. Dans cette nouvelle version, ce bouton est remplacé par un lien vers la doc (hébergée en local). Cependant, on retrouve la fonction reset (requête vers /api/reset ) dans la page des logs agrémentés des fonctions start et stop. Ce qui est étrange, c’est que l’ancien bouton (“Reboot the Robot”) et le nouveau (“Reset API”) exécute le même code, ton problème devait venir d’ailleurs… Il serait intéressant que tu ouvres un nouveau post indiquant comment tu fais tomber l’API.
À noter que dorénavant l’UI possède également un bouton “Reboot raspberry” (requête vers /reboot) (disponible sur la page des logs et la page de config) qui t’évite de devoir débrancher / rebrancher la raspberry pour effectuer un reboot system.

Effectivement, nous avons constaté le même bug, le message feedback ne s’affiche pas après le clic sur “reboot robot services”. Celui-ci indique simplement “All services will be restarted in few seconds”. Cela sera corrigé.
Ce bouton a pour effet de redémarrer les services (sudo systemctl restart $service) servant l’UI, la doc, le visualisateur et le service jupyter. Tu peux constater leur redémarrage dans leurs logs respectifs. Cela a également pour effet de fermer les instances de robots virtuelles (et de relancer celles prévues au démarrage).
Typiquement, si tu souhaites modifier une des pages html de l’interface, tu dois redémarrer le service pour observer le résultat… cette fonction nous a donc surtout été utile à nous pour le développement. Elle a été conservée car elle pourrait s’avèrer également utile à certains utilisateurs souhaitant développer leur propre UI

Effectivement, c’est une bonne proposition! J’y jetterai un œil, mais pour gagner du temps, n’hésites pas à le faire toi-même et à nous envoyer une pull request sur github :wink: (la branche concernée est la branche dev_gen2 ; si tu as besoin de plus d’info pour savoir comment contribuer au code, n’hésite pas à ouvrir un nouveau post)

C’est étrange, il n’y a eu aucune modification concernant ces urls: elles fonctionnent toujours et ont toujours le même comportement…

A priori oui, c’est une vieille erreur de typo, ce changement de version est l’occasion de la corriger.

A priori, non.

oui

Cela devrait rester dans cet état.

:rofl: décembre 2019 lorsque j’ai fini ma thèse :sweat_smile:
Plus sérieusement, cette version est en préparation depuis de nombreux mois, mais actuellement plus aucun membre de l’équipe n’est financé à temps plein sur le projet.
Pour la petite histoire, les membres de l’équipe Flowers Inria à l’origine du projet Poppy sont aujourd’hui pour majeure partie au sein de la startup Pollen Robotics ; les membres de l’équipe Flowers Inria à l’origine du projet Poppy Éducation sont aujourd’hui engagés sur d’autres projets. L’équipe Flowers Inria a cédé la gestion de l’écosysteme Poppy à l’association Poppy Station.
Nous sommes encore en pleine transition, cette nouvelle version intègre les contributions apportées par nos équipes ou par la communauté depuis 2017 et marque le début d’une nouvelle étape. J’espère que celle-ci facillitera la prise en main et surtout l’intégration directe de nouvelles contributions par la communauté!

Nous ne pouvons pas encore donner de date précise pour cette version, mais nous ne comptons plus en mois, mais en semaines :wink:

:thinking: sujet épineux… alors on ne peut pas récupérer directement le flux vidéo: celui-ci est monopolisé par le robot qui considère la camera comme l’un de ses senseurs.
Ainsi, pour afficher “un flux vidéo” dans l’UI nous passons par la l’API snap.py:
nous y avons défini l’url suivante: http://poppy.local:6969/frame.png qui retourne la dernière frame disponible en png.
La page html de l’UI intégre juste une balise <img> qu’elle rafraichi en continue.
si tu souhaites effectuer un traitement sur l’image pour en déduire de l’information (typiquement détecter une personne, un objet, une couleur, etc), je te conseil de le réaliser directement le traitement sur le robot en créant une url spécifique et de retourner quelque chose de plus simple.
Typiquement:

        path='/home/poppy/pyenv/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml'
        faceCascade = cv2.CascadeClassifier(path) 
        @self.app.get('/face_detect')
        def face_detect():
            frame= rr.robot.camera.frame
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            faces = faceCascade.detectMultiScale(
                gray,
                scaleFactor=1.1,
                minNeighbors=5,
                minSize=(80, 80),
                flags = cv2.CASCADE_SCALE_IMAGE)
            if len(faces)>0:
                return ';'.join(','.join(str(pos) for pos in face) for face in faces)
            else:
                return 'NONE'

Dans les jours à venir, je dois justement intégrer la detection de couleur (qui sera basée sur la procédure de marker_detector qui exploite les primitives du robot) cela te donnera l’exemple d’une autre méthode.

J’espère n’avoir rien oublié.
Tibo

Bonsoir,

Alors dans le désordre en espérant ne rien oublier:

hostname poppy.local

Je n’étais pas clair: j’ai plus l’impression que le service Zeroconf ne se lance pas/voir met un certain temps sur la pi: impossible de résoudre des hostname en .local. Mais comme je n’ai pas le mode opératoire 100% reproductible (de plus, je ne peux pas certifier que ce n’est pas un problème réseau de mon côté, même si le fait qu’en utilisant directement l’IP cela fonctionne me faisait pencher pour cette raison.)
Edit: J’ai finalement le même souci aléatoirement avec la version précédente => sûrement mon réseau.

API REST

Ruptures d’API:

Effectivement, dans la version courante, pour mes requêtes vers les registres, je n’avais pas préfixé avec /list.json. et cela marchait. Sur la nouvelle, cela semble donc moins permissif.
Ccl: une seule rupture sur la réponse pour la composition d’un alias donc.

Serveur rest down

Quand on veut écrire dans les registres, l’api rest pypot (p8080) laisse tout passer, contrairement à l’api rest de snap qui râle si le type de valeur n’est pas bon.
J’avais remarqué, notamment pour le registre des couleurs, qu’une valeur non gérée le mettais par terre,
J’ai longtemps, pour le registre ‘compliant’ envoyé ‘true’ et ‘false’ plutôt que 0 et 1.
Et probablement d’autres requêtes POST ou j’envoyais n’importe quoi…
==> j’ai ensuite eu pas mal de problème récurent, notamment quand les moteurs était en état ‘stiff’ ==> reboot de la pi pour tout relancer.

Problème que j’avais toujours avec cette alpha => je me suis résolu à faire un reset de mes moteurs et tout refonctionne normalement. Je ne maîtrise pas trop les registres du moteurs mais c’est comme si les valeurs non conforme ou type de valeurs écrasais des valeurs proche dans la eeprom.

A ma “décharge”, la documentation officielle sur le montage de l’ergo parle d’une à deux heures, j’y avais passé une bonne demi-journée, donc j’étais peu enclin à retirer les câbles de mes moteurs pour les réinitialiser :smiley: :smiley:

Pour les logs, avec la branche github, si j’ai le temps, je ferais une pr pas trop sale j’espère :smiley:

Pour la caméra, je verrai plus tard mais je réitère, cela à l’air sympa dans les utilisations potentielles :sunglasses:

Merci de votre retour,
N.