Hack-micropython-ServoRobot-Mouvements
Pour le fun, nous avons ajouté un mouvement 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 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).
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 # La patte "hello"
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 )
Créé par Meurisse D. pour MCHobby.be - Created by Meurisse D. for MCHobby.be
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.