Poppy héritage de classe python


#1

Bonjour,
je prépare une séquence pédagogique avec Poppy pour enseigner la Programmation Orienté Objet en utilisant le PoppyERgoJr comme support.

J’ai besoin de dériver la classe PoppyErgoJr pour ajouter de nouvelles méthodes à la classe Fille

Quel est la meilleure méthode pour réaliser ça ?


#2
from pypot.creatures import AbstractPoppyCreature
from .primitives.postures import (BasePosture, RestPosture,
                                  CuriousPosture, TetrisPosture,
                                  SafePowerUp)

class MyRobot(AbstractPoppyCreature):
    @classmethod
    def setup(cls, robot):
        robot.attach_primitive(RestPosture(robot, 2.), 'rest_posture')
    
    def saisirPion(self):
        self.m1.goal_position = 20


robby = MyRobot()
robby.saisirPion()

Lorsque je dérive la classe AbstractPoppyCreature(), il ne reconnait pas la méthode saisirPion() définit dans la classe dérivé.

Si je dérive directement PoppyErgoJr, mon objet (module ?) n’est même pas reconnu…

> from pypot.creatures import PoppyErgoJr
> 
> class MonRobot2(PoppyErgoJr):
>     def aller():
>         pass
>     
> robby = MonRobot2()
> ...
> ImportError: No module named mon_robot_2

Quelle est la meilleure méthode ?

Le but est juste de rajouter 3,4 méthodes à un poppyErgo sans modif de structure ni moteurs.
Merci d’avance,

Sébastien


#3

Salut @sepro,

les choses sont un peu complexe, en réalité, il y a plusieurs instances du robot qui tournent et se coordonnent pour permettre de contrôler physiquement les moteurs du robot via différents type d’instructions émanant de différent endroit!

À l’origine, il a étais prévus que l’utilisateur puisse créer et manager “des primitives” contrôlant le robot. Ainsi c’est plus de ce coté qu’il faut regarder:
tu peux hériter de la classe ‘primitive’, ajouter tes propres modules, etc, et manager le tout via la class ‘primitive manager’

voila un tuto pour t’aiguiller:
https://poppy-project.github.io/pypot/primitive.html
et un autre tuto que j’avais commencé à réaliser mais que je n’ai jamais finalisé :confused:
how-to_Primitive.ipynb (37.2 KB)

voila, tien nous au courant :wink:


#4

Slt tibo,
effectivement je m’étais orienté aussi vers les primitives avec le tuto pypot.
Merci pour le tuto inachevé, Il est très interessant.

Je te dis pour la suite.

[HS ] Par contre, est ce qu’il y a un truc particulier à faire avec notebook pour qu’il reload un module déjà importé ? Il ne tiens pas compte de mes modifications dans les modules une fois qu’il ont été importé.

Sébastien


#5

yep,

j’ai trouvé la doc pour la création de robot (en fait c’est presque au même endroit que pour les primitives: dans la doc pypot : https://poppy-project.github.io/pypot/ et pas dans la doc poppy creatures: https://docs.poppy-project.org/ d’ailleurs on retrouve le lien dans la section 4.3.1)

donc, ici : https://poppy-project.github.io/pypot/controlling_robot.html

ce qu’il faut surtout retenir, c’est que tu as besoin à minima dans dossier au nom de ta créature: http://poppy.local:8888/tree/poppy_src/<nom_de_le_creature>/
qui contient un fichier du nom de ta créature : http://poppy.local:8888/edit/poppy_src/<nom_de_le_creature>/<nom_de_le_creature>.py
ensuite il te faut un __init__.py au même endroit ET un autre dossier: http://poppy.local:8888/tree/poppy_src/<nom_de_le_creature>/configuration/
qui contient un fichier avec les différents attribues du robot: http://pythias.local:8888/edit/poppy_src/poppy_ergo_jr/configuration/<nom_de_le_creature>.json

si tu regarde dans le dossier http://poppy.local:8888/tree/poppy_src/poppy_ergo_jr/ tu trouvera également un fichier .urdf allant avec le dossier /vrep, et un dossier primitive (non indispensable car dans l’import de celles-ci (dans le fichier <nom_de_le_creature>.py) tu peux préciser le chemin d’import)

voila, ensuit tu instancie ta créature comme tu le ferais avec un ergo :wink:

enjoy


#6

à tester, mais, d’abord
import blabla
my_robot= PoppyErgoJr()
blabla
my_robot.close()

ensuite,
tu re-execute la cell d’import, si ca marche pas
tu re-start le kernel (la notebook), si ca marche pas
tu re-boot le robot http://poppy.local/reset, attention de bien relancer python via http://poppy.local/jupyter (par defaut c’est api de snap qui se lance), si ca marche pas
je ne sais pas quoi faire de plus…