Modifications

Sauter à la navigation Sauter à la recherche
Page créée avec « {{Hack-micropython-ServoRobot-NAV}} Pour le fun, nous avons ajouté un mouvement {{fname|Hello}} à Doggy. C'est l'occasion de le documenter l'ajout d'un mouvement. ==... »
{{Hack-micropython-ServoRobot-NAV}}

Pour le fun, nous avons ajouté un mouvement {{fname|Hello}} à Doggy.

C'est l'occasion de le documenter l'ajout d'un mouvement.

== Créer une classe Hello ==
Pour commencer, nous allons ajouter la classe '''Hello''' dérivée de '''Movement''' dans le fichier {{fname|doggy.py}}.

La classe doit contenir trois méthodes:
* '''name()''' - qui retourne une liste de tous les noms connus pour ce mouvement
* '''prepare()''' - la méthode qui positionne les pattes/membres en vue de préparer le mouvement.
* '''do()''' - la méthode appelée répétitivement par Doggy.move() pour exécuter le mouvement. Il est parfois nécessaire d'appeler plusieurs fois '''do()'' pour exécuter un moment complexe (voyez la classe Forward).

<syntaxhighlight lang="python">
class Hello( Movement ):
""" Fait un signe "Bonjour" avec le Robot """
def name():
""" Retourne les noms qui s'applique à ce mouvement """
return ('HELLO','H')

def prepare( self, sdegree_max=60, wdegree=90, right=False, **kw ):
""" sdegree_max: amplitude max des pattes avant (pour stabiliser le robot)
wdegree: angle désiré pour les poignet.
right: Faire le signe avec la patte droite... sinon la patte gauche
hello_wdegree: angle du poignet de la patte faisant le signe (negatif pour mettre la patte en l'air)"""
d = self.robot
d.standup( wdegree=wdegree )
if right:
d.place_paw( d.fl, sdegree_max, wdegree )
d.place_paw( d.fr, 0, wdegree )
else:
d.place_paw( d.fr, sdegree_max, wdegree )
d.place_paw( d.fl, 0, wdegree )

delay(100)

def do( self, sdegree_min=-40, sdegree_max=85, right=False, hello_wdegree=-60, step_angle=2, **kw ):
""" Faire le signe "Bonjour" avec une amplitude d'épaule allant de sdegree_max à sdegreee_min """
d = self.robot
p = None # The hello paw
if right:
p = d.fr
else:
p = d.fl

initial_sdegree = p.shoulder.angle # Se souvenir de l'angle
initial_wdegree = p.wrist.angle
p.wrist.set( hello_wdegree )
delay( 100 )
for i in range( p.shoulder.angle, sdegree_max, step_angle ):
p.shoulder.set( i )
delay( 10 )
for i in range( sdegree_max, sdegree_min, -1*step_angle ):
p.shoulder.set( i )
delay( 10 )
for i in range( sdegree_min, sdegree_max, step_angle ):
p.shoulder.set( i )
delay( 10 )
for i in range( sdegree_max, initial_sdegree, -1*step_angle ):
p.shoulder.set( i )
delay( 10 )

p.wrist.set( initial_wdegree )
</syntaxhighlight>


{{Hack-micropython-ServoRobot-TRAILER}}
29 918

modifications

Menu de navigation