Lancement d'un programme au démarrage du robot pour le rendre totalement autonnome

Bonjour @Marlene_Pecondon,

ErgoJr autonome, résumons:

Batteries

pour rendre votre robot totalement autonome, la première étape était donc de passer sur batterie. cf Quelle batterie utiliser pour un poppy ergo jr?

Wifi

Pour le pilotage à distance, pour la robotcup l’activation du wifi, comme indiqué ci-après, est interdit!

Vérifier si vous disposez d’une version avec un terminal opérationnel (cf Probleme terminal shell command not found)

Lancement au démarage

Programme Snap!

Tu souhaites donc simplement lancer un programme (snap!) au démarrage, mais comme l’as constaté @lpierron

Traduction en python

La solution la plus simple était donc de traduire ton code snap en code python, comme je te le suggéré ici:

(à noter que sur la version en ligne de Snap! vous pouvez ouvrir le projet exemple “Codification” qui permet une traduction automatique des bloc de base)

C’est donc la solution que tu as retenu.

Intégration du code

Maintenant tu souhaite connaître la marche à suivre pour éxécuter ce code python au démarrage, voici donc la méthode pour

Première étape, création d’une primitive

Dans le répertoire http://poppy.local:8888/tree/poppy_src/poppy_ergo_jr/primitives

créer un fichier primitive_template.py similaire à celui-ci :

# -*- coding: utf-8 -*
import time
from pypot.primitive import Primitive

class My_primitive(Primitive):
    # Dans ce contexte notre robot s'appel "self.robot"

    def setup(self):
        # ici, ce que mon robot va faire au lancement de la primitive
        # Exemple:
        for m in self.robot.motors: # je parcourt la liste des 6 moteurs
            m.compliant = False # moteur m en mode non compliant (stiff)
            m.led = "red" # led du moteur m en rouge 
            m.goto_position(0, 0.5, wait=False) # moteur m va dans la position O degres, en 0.5 seconde, sans attendre (que la position soit atteinte pour poursuivre l'execution du code.)
        
    def run(self):
        # ici, ce que mon robot va faire au durant la primitive
        while not self.should_stop(): # tant qu'on me demande pas de m’arrêter
            if self.should_pause(): # si on me demande de mettre en pause
                self.wait_to_resume() # alors j’attends qu'on me dise de reprendre

            # ajouter ici tout ce qu'il vous plaira ;)
            # Exemple
            for m in self.robot.motors: # je parcourt la liste des 6 moteurs
                m.led = "pink" # led du moteur m en rouge
                time.sleep(.2) # attendre 0.2 seconde
                m.led = "off"
                
    def teardown(self):
        # ici, ce que mon robot va faire quand la primitive sera stoppé
        # Exemple:
        for m in self.robot.motors: #je parcourt la liste des 6 moteurs
            m.compliant = True #moteur m en mode compliant
            m.led = "green" # led du moteur m en vert 

(à noter, que vous pouvez définir une nouvelle fonction dans ce même fichier et l’appeler dans votre primitives)

Deuxième étape, attacher et exécuter votre primitive

(cette étape est facultative et sert juste à tester votre primitive, via un notebook par exemple)

une fois votre robot instancier

from poppy.creatures import PoppyErgoJr
poppy = PoppyErgoJr()

importer votre primitive:
from poppy_ergo_jr.primitives.primitive_template import My_primitive

attacher là au robot:
poppy.attach_primitive(My_primitive(poppy), 'my_primitive')

démarrer et stoper là:

poppy.my_primitive.start()
poppy.my_primitive.stop()

Troisième étape, lancement au démarrage

Dans le fichier http://poppy.local:8888/edit/poppy_src/poppy_ergo_jr/poppy_ergo_jr.py

  • à la ligne 13: ajouter
try: 
    from .primitives.primitive_template import My_primitive
except Exception as err:
    print(err)
  • à la ligne 52: ajouter:
try: 
    robot.attach_primitive(My_primitive(robot), 'my_primitive')
    robot.my_primitive.start()
except Exception as err:
    print(err)

Pour info

après cette manip,
vous verrez apparaître votre primitive directement depuis le monitor ( http://poppy.local/monitor )
vous pouvez également la commander directement via ces url:
http://poppy.local:8080/primitive/my_primitive/start
http://poppy.local:8080/primitive/my_primitive/stop
ou voir la liste complète des primitives attachées:
http://poppy.local:8080/primitives
ou seulement celles actuellement actives:
http://poppy.local:8080/primitives/running

1 Like