Impossible lancer une primitive depuis une autre primitive

Je n’arrive pas à faire jouer des primitives dans cette primitive personnelle QRDanse alors que ça fonctionne avec la primitive My_Primitive donnée en exemple.
A noter que l’objectif pour QRDanse est que ce soit lancé au démarrage et que ça tourne en permanence sur une journée.

Je vous joins les deux fichiers concernés.

Merci pour votre aide.

primitive_template.py (2.0 KB)
primitive_qr_danse.py (3.3 KB)

Pouvez-vous détailler un peu plus ce qui ne fonctionne pas, quelle partie du code est concernée et comment ça se manifeste ?

Est-ce la détection des codes, les print qui ne s’affichent pas, uniquement les primitives qui ne démarrent pas … ?

Merci pour la réponse.

Le prints, qui me servent de trace, fonctionnent.

La détection de codes fonctionne, mais avec des retards parfois.

Dans la version précédente j’utilisais le module hampy pour la détection de codes et j’avais quelques problèmes, donc je suis passé au module ArUco, que j’ai testé en long et en large sur mon ordi et dans un notebook sur le robot et les performances étaient très bonnes.
Mais maintenant que j’aintègre tout ça dans une primitive ça ne marche pas bien.
Par ailleurs, j’ai l’impression que la fonction aruco.detectMarkers utilisée est celle du module hampy, car à un moment j’ai eu un message d’erreur qui venait de ce module.

Ce qui ne marche pas ce sont les primitives appelées par la rpimitive QRDanse, les lumières du robot clignotent, mais les primitives ne s’exécutent pas, alors que dans le cas de la primitive ‘my_primitive’ les sous primitives se lancent, mais parfois elles ont un comprotement étonnant, elle sont exécutées très rapidement.

Dasn la version précédente du la démo, je n’utilisais pas de primitives, mon code remplaçait le code.

Est-ce qu’on pourrait se téléphoner un moment dans l’après-midi pour discuter des problèmes ?

Il semble que j’ai un problème de latence avec la caméra de l’ordre d’une demi seconde, c’est à dire que l’image affichée par matplotplib après une capture par poppy.camera.frame est celle que j’avais il y a une demi seconde.

Il faudrait que j’ai un moyen de mesurer la latence, mais surtout de la résorber.

hampy fonctionne en arrière plan que vous utilisiez la détection ou non, donc elle peut en effet générer des erreurs. Si vous souhaitez désactiver cela vous pouvez modifier le fichier de configuraiton qui se trouve sur votre robot en retirant l’entrée marker_detector.

Concernant les primitives, j’essayerai votre programme sur un logiciel ergo v3 sous peu pour comprendre le problème mais en attendant je vous suggère de repasser temporairement sur la v2 pour votre démo si cela fonctionnait.

L’image de la caméra est récupérée aussi vite que possible par pypot pour respecter le framerate du fichier de configuration. Si le retard est un problème, vous pouvez jour avec le framerate du capteur camera dans le fichier de configuration, voire le retirer complètement pour effectuer une prise d’image via vos propres outils Python plutôt que pypot. Typiquement peut-être qu’une prise d’image à la demande avec opencv plutôt qu’une prise d’image en continue pourrait vous convenir pour votre application.

Merci pour ces premiers renseignements.
J’ai désactivé marker_detector. Mon propre détecteur prend 24ms pour lire l’image poppy.frame.camera et la décoder. J’ai configuré la caméra sur 20 fps et la latence est indétectable.
Le problème vient des primitives, qui ne fonctionnent plus après l’acquisition de codes par la caméra.
Je ne peux pas revenir à la v2, car le module AruCo n’est pas disponible pour la v2.
Je vais essayer de faire un programme Python autonome comme pour la v2 mais avec l’acquisition avec les AruCo codes.

Finalement j’ai placé mon code dans un programme Python autonome poppy_danse.py.

Le programme est lancé automatiquement via un cron, qui contrôle également toutes les deux minutes que le programme tourne toujours et qu’il n’y a pas eu d’exception. Si une exception est apparue dans les logs, le programme est tué et relancé.

Un script permet d’arrêter le cron pour pouvoir utiliser Poppy via l’API Web.