Différences entre versions de « Hack-micropython-ServoRobot-Mouvements »
(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. ==... ») |
|||
(2 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 11 : | Ligne 11 : | ||
* '''name()''' - qui retourne une liste de tous les noms connus pour ce mouvement | * '''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. | * '''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). | + | * '''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"> | <syntaxhighlight lang="python"> | ||
Ligne 39 : | Ligne 39 : | ||
""" Faire le signe "Bonjour" avec une amplitude d'épaule allant de sdegree_max à sdegreee_min """ | """ Faire le signe "Bonjour" avec une amplitude d'épaule allant de sdegree_max à sdegreee_min """ | ||
d = self.robot | d = self.robot | ||
− | p = None # | + | p = None # La patte "hello" |
if right: | if right: | ||
p = d.fr | p = d.fr | ||
Ligne 65 : | Ligne 65 : | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | == Enregistrement de la classe == | ||
+ | En fin de fichier {{fname|doggy.py}}, il suffit d'ajouter la ligne suivante pour enregistrer la classe {{fname|Hello}} dans les mouvements disponibles. | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | MovementsCls.append( Hello ) | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Tester == | ||
+ | Maintenant, nous pouvons tester notre nouveau mouvement. | ||
+ | |||
+ | <syntaxhighlight lang="python"> | ||
+ | from doggy import * | ||
+ | from pyb import delay | ||
+ | d = Doggy() | ||
+ | |||
+ | # Dit bonjour (HELLO, H) avec la patte gauche | ||
+ | d.prepare( 'H' ) | ||
+ | d.move( 'H' ) | ||
+ | |||
+ | # Dit bonjour avec la patte droite (le faire deux fois) | ||
+ | d.prepare( 'H', right=True ) | ||
+ | d.move( 'H', right=True ) | ||
+ | d.move( 'H', right=True ) | ||
+ | |||
+ | # Mise au repos des moteurs | ||
+ | d.release() | ||
+ | </syntaxhighlight> | ||
{{Hack-micropython-ServoRobot-TRAILER}} | {{Hack-micropython-ServoRobot-TRAILER}} |
Version actuelle datée du 19 décembre 2016 à 17:10
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 )
Enregistrement de la classe
En fin de fichier doggy.py, il suffit d'ajouter la ligne suivante pour enregistrer la classe Hello dans les mouvements disponibles.
MovementsCls.append( Hello )
Tester
Maintenant, nous pouvons tester notre nouveau mouvement.
from doggy import *
from pyb import delay
d = Doggy()
# Dit bonjour (HELLO, H) avec la patte gauche
d.prepare( 'H' )
d.move( 'H' )
# Dit bonjour avec la patte droite (le faire deux fois)
d.prepare( 'H', right=True )
d.move( 'H', right=True )
d.move( 'H', right=True )
# Mise au repos des moteurs
d.release()
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.