cozmo-sdk-gerer-les-animations-feature-image

Cozmo SDK : gérer les animations

Cette entrée a été publiée dans Cozmo, Education, Tutoriels en robotique, et marquée avec , , , , , , , le par .

Cozmo est un  concentré de technologie et d’émotions. Il est fourni avec une bibliothèque très complète d’expressions et d’animations. Le robot Cozmo est très expressif : curieux, joyeux, mécontent, fâché, désolé, boudeur ou surexcité, … il se fait comprendre grâce à ses yeux, ses bruits et ses mouvements.

L’API permet de déclencher ces comportements et mouvements. Nous allons voir comment faire.

Objectif : comprendre le fonctionnement des animations sur Cozmo

  • Durée : 30 minutes
  • Niveau de difficulté :  débutant
  • Compétence acquises : gestion des animations

Les prérequis

Où se trouve la bibliothèque d’animations de Cozmo ? 

Les émotions et les petites mimiques que vous avez vu sur Cozmo sont embarquées. Cette bibliothèque d’animations est accessible de deux façons :

L’intérêt des Triggers (déclencheurs) est qu’un Trigger va pouvoir déclencher une animation parmi plusieurs de façon appropriée et générer de la variété dans les réactions de Cozmo.

Pour rendre votre robot plus vivant, l’utilisation des Triggers est recommandée.

Le déclenchement des animations par leur nom via l’API est susceptible d’être modifié dans le futur.

Il existe un troisième type d’animation, les behaviors (comportements). Les exemples ci-après montre comment les déclencher. Un prochain TP expliquera plus en détails le fonctionnement des behaviors. Les behaviors se trouvent dans cozmo.behavior.BehaviorTypes.

Exécuter des animations par des Triggers ou par leur noms

Nous allons détailler ci-dessous les deux façons de jouer des animations sur le robot Cozmo : par le biais d’un Trigger ou via le nom de l’animation.

Les triggers

C’est la méthode recommandée. Vous utiliserez la méthode play_anim_trigger.

Dans cet exemple on joue le trigger OnSpeedtapRoundPlayerWinHighIntensity.

    # Jouer une animation à partir d'une Trigger
    print("Exécution de la trigger : OnSpeedtapRoundPlayerWinHighIntensity")
    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapRoundPlayerWinHighIntensity).wait_for_completed()

Remarque : on peut jouer une animation tout en bloquant les chenilles de Cozmo grâce à la variable ignore_body_track=True à l’appel de play_anim_trigger.

Le nom d’une animation et la fonction play_anim()

Dans ce cas c’est la méthode play_anim qui est utilisée. Dans cet exemple on joue l’animation anim_greeting_happy_03.

    # # Jouer une animation par son nom.
    print("Exécution de l'animation : anim_greeting_happy_03")
    robot.play_anim(name="anim_greeting_happy_03").wait_for_completed()

Vous pouvez retrouver sur notre repository GitHub tous les exemples de code. Ci-dessous, l’exemple complet.

def cozmo_program(robot: cozmo.robot.Robot):

    # Jouer une animation à partir d'une Trigger
    print("Exécution de la trigger : OnSpeedtapRoundPlayerWinHighIntensity")
    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapRoundPlayerWinHighIntensity).wait_for_completed()
    robot.say_text("une autre", duration_scalar=0.5).wait_for_completed()

    # # Jouer une animation à partir d'une Trigger en ignorant le mouvement des roues
    print("Exécution de la trigger : OnSpeedtapGameCozmoWinHighIntensity (sans body track)")
    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapGameCozmoWinHighIntensity, ignore_body_track=True).wait_for_completed()
    robot.say_text("et encore une", duration_scalar=0.5).wait_for_completed()

    
    # # Jouer une animation à partir d'une Trigger avec le mouvement des roues
    print("Exécution de la trigger : OnSpeedtapGameCozmoWinHighIntensity (avec body track)")
    robot.play_anim_trigger(cozmo.anim.Triggers.OnSpeedtapGameCozmoWinHighIntensity, ignore_body_track=False).wait_for_completed()
    robot.say_text("une dernière ", duration_scalar=0.5).wait_for_completed()

    # # Jouer une animation par son nom.
    print("Exécution de l'animation : anim_greeting_happy_03")
    robot.play_anim(name="anim_greeting_happy_03").wait_for_completed()

Obtenir la liste des animations

Les animations sont jouées aléatoirement par le robot lors de l’appel de certaines fonctions. Vous pouvez accéder à ces animations et en récupérer la liste.

Le code ci-dessous permet de lister les triggers ainsi que les noms des animations et de les stocker dans une liste. Elle sera affichée sur votre écran.

Vous pouvez aussi accéder à la liste des Triggers dans la documentation du SDK sur le site de Anki.

Il est également possible d’accéder à cette liste via un explorateur web (voir en fin d’article).

def cozmo_program(robot: cozmo.robot.Robot):
    try:
        global animations
        global triggers

        # parcourir la liste des Triggers
        for t in dir(cozmo.anim.Triggers):
            if '__' not in t:
                triggers += t + ','
        triggers = triggers[:-1]
        print(triggers)

        print("\n" , "#########################", "\n")
        
        # parcourir les noms des animations
        for a in robot.conn.anim_names:
            animations += a + ','
        animations = animations[:-1]
        print(animations)

    except KeyboardInterrupt:

Astuce !

Les Triggers sont des objets aussi si vous souhaitez utilisez le nom de la Trigger et donc utiliser la string vous pouvez exécuter cette Trigger avec ce petit bout de code en utilisant la fonction getattr.

Using getattr
trigger="PeekABooMedIntensity"

def play_trigger():
    robot.play_anim_trigger( getattr( cozmo.anim.Triggers, trigger) ).wait_for_completed()

L’explorateur d’animations

Nous vous recommandons d’utiliser ce browser d’animations, de triggers et de behaviors disponible sur github : Cozmo Animation Explorer by Grinning Hermit

Les animations, triggers et behaviors seront ainsi accessibles via un navigateur grâce à Flask et accessible à l’adresse 127.0.0.1:5000 en local.

Accéder aux triggers et aux behaviors Cozmo via Flask