Modifications

Sauter à la navigation Sauter à la recherche
6 065 octets ajoutés ,  19 décembre 2016 à 16:41
Ligne 58 : Ligne 58 :  
</syntaxhighlight>
 
</syntaxhighlight>
   −
   
+
=== Etude du mouvement ===
 
+
{{ambox|text=Démarrer un mouvement, même pour un être humain, ne se fait pas n'importe comment! <br />Il faut se préparer au mouvement.}}
 +
 
 +
Par exemple, '''SI''' vous êtes assis sur un chaise et que vous voulez marcher '''ALORS''' vous passez par une étape {{underline|préparatoire}} qui consiste à vous mettre debout '''PUIS''' seulement à {{underline|faire un pas après l'autre}}.
 +
 
 +
Ce principe est repris dans les classes {{fname|RobotBase}} et {{fname|Movement}}... donc dans {{fname|Doggy}}.
 +
 
 +
Dans ServoRobot, un mouvement se prépare en appelant {{fname|prepare()}} puis s'exécute en appelant {{fname|move()}}, vous allez pouvoir admirer cette mécanique au point suivant.
 +
 
 +
L'appel à {{fname|prepare()}} configure les membres dans une position permettant de débuter le mouvement souhaité.
 +
 
 +
L'appel à {{fname|move()}} peut être appelé de différentes façons mais elle permet d'exécuter le mouvement.
 +
 
 +
{{underline|Pour les plus curieux:}}
 +
# Les mouvements sont implémentés dans des classes dérivées de Movement.
 +
# La classe Movement contient un méthode '''prepare()'''. '''prepare()''' accepte des paramètres optionnels, ce qui permet d'ajuster les paramètres du mouvement.
 +
# La classe Movement contient également une méthode '''do()''' appelée répétitivement par '''move()'''.<br />'''do()''' permet de décomposer un mouvement complexe (par exemple: la marche) en plusieurs opérations élémentaires (ou sous mouvement partiels).<br />Il faudra donc de plusieurs appels a '''Movement.do()''' pour effectuer le mouvement complet qui permet à Doggy d'avancer sur ses 4 pattes.
 +
N'hésitez pas à consulter les classes Foward, Backward, etc disponibles dans le module {{fname|doggy.py}}
 +
 
 +
=== Se lever ===
 +
Avant de faire bouger le robot, il serait peut être opportun de mettre le robot debout sur ses pattes
 +
 
 +
<syntaxhighlight lang="python">
 +
from doggy import *
 +
from pyb import delay
 +
d = Doggy()
 +
 
 +
# Nous avons besoin de connaître la position initiale
 +
d.reset()
 +
 
 +
# Laisser un peu de temps pour que les oscillations mécaniques se calme
 +
delay( 1500 )
 +
 
 +
# Place toutes les epaules à +20 et -20 degree
 +
d.align( sdegree=20, asymetric=True )
 +
 
 +
# FR: Place tous les poignets à +90 pour mettre Doggy debout
 +
d.standup()
 +
</syntaxhighlight>
 +
 
 +
=== Avancer / Reculer (version prédictive) ===
 +
Vous disposez de plusieurs approches pour faire avancer Doggy.
 +
 
 +
Nous présentons ici une approche prédictive, c'est à dire que vous savez combien de "pas" vous allez faire avant d'appeler la fonction forward.
 +
 
 +
Nous présentons ici les approches les plus simples jusqu'au plus avancées.
 +
 
 +
<syntaxhighlight lang="python">
 +
from doggy import *
 +
from pyb import delay
 +
d = Doggy()
 +
 
 +
# Place le robot en positions de marche (debout). Les épaules sont placés a angles adéquat pour commencer la marche
 +
# prepare() EST IMPORTANT AVANT DE COMMENCER UN MOUVEMENT 
 +
d.prepare('FORWARD')
 +
 
 +
delay( 2000 )
 +
 
 +
# Déplacement en marche avant (angle poignet=90) en 40 étapes (de 5 degrés chacun)
 +
for i in range( 40 ):
 +
d.move( 'FORWARD' )
 +
 
 +
delay( 2000 )
 +
 
 +
# Une autre façon de faire: appelle prepare() avant d'exécuter 40 fois l'étape de mouvement
 +
d.reset()
 +
d.move( 'FORWARD', repeat=40, prepare=True)
 +
 
 +
delay( 2000 )
 +
 
 +
# Changer les angles des mouvements des epaules (shoulder min & max)
 +
# ainsi que l'angle du poignet (a 75 degrés).
 +
# Chaque pas fait un déplacement de 2 degres
 +
#
 +
# Tous les paramètres correspondent a Forward.do()
 +
d.reset()
 +
d.prepare('FORWARD', sdegree_min=0, sdegree_max=85, wdegree=75 )
 +
for i in range( 150 ):
 +
d.move( 'FORWARD', sdegree_min=0, sdegree_max=85, wdegree=75, step_angle=2 )
 +
 
 +
 
 +
# Tout en un
 +
d.move( 'FORWARD', sdegree_min=0, sdegree_max=85, wdegree=75, step_angle=2, repeat=150, prepare=True )
 +
 
 +
delay( 2000 )
 +
 
 +
# Faisons le vraiment à la dure (obtenir l'objet Movement). Voyez comment est implémenté Doggy.move()
 +
d.reset()
 +
mov_obj = d.movement('FORWARD')
 +
mov_obj.prepare( wdegree=65 )
 +
for i in range( 50 ):                                                     
 +
    mov_obj.do( wdegree=65, step_angle=10 )
 +
</syntaxhighlight>
 +
 
 +
Vous noterez l'utilisation du mot 'FORWARD' pour avancer. Vous pouvez le remplacer par 'F'.
 +
 
 +
Pour reculer, vous pouvez utiliser les mots clés 'BACKWARD', 'BACK', 'B'.
 +
 
 +
=== Tourner ===
 +
Il est possible de faire tourner le robot Doggy à droite (RIGHT) ou à gauche (LEFT)
 +
Nous présentons ici les approches les plus simples jusqu'au plus avancées.
 +
 
 +
<syntaxhighlight lang="python">
 +
from doggy import *
 +
from pyb import delay
 +
d = Doggy()
 +
 
 +
# Place le robot en positions de marche (debout).
 +
# Les épaules sont placés a angles adéquat pour commencer à tourner à gauche
 +
# prepare() EST IMPORTANT AVANT DE COMMENCER UN MOUVEMENT  
 +
d.prepare('LEFT')
 +
 
 +
delay( 2000 )
 +
 
 +
# Tourne à gauche (angle poignet=90) en 1 étapes de 90° (valeur par défaut)
 +
d.move( 'LEFT' )
 +
 
 +
delay( 2000 )
 +
 
 +
# Une autre façon de faire: appeler prepare() avant d'exécuter 2fois l'étape
 +
# de mouvement (de 90 degrees)
 +
d.reset()
 +
d.move( 'LEFT', repeat=2, prepare=True)
 +
 
 +
delay( 2000 )
 +
 
 +
# Changer les angles des mouvements des épaules pour tourner à gauche de
 +
# 160 degree (en total) et l'angle des poignet fixé à 5 degrees.
 +
# Tous les paramètres correspondent a Left.do()
 +
d.reset()
 +
d.prepare('LEFT', wdegree=75 )
 +
d.move( 'LEFT', sdegree=160, wdegree=75 )
 +
 
 +
# Tout en un
 +
d.move( 'LEFT', sdegree=160, wdegree=75, prepare=True )
 +
 
 +
delay( 2000 )
 +
 
 +
# Faisons le vraiment a la dure (obtenir l'objet Movement). Voyez comment est implémenté Doggy.move()
 +
d.reset()
 +
mov_obj = d.movement('LEFT')
 +
mov_obj.prepare( wdegree=65 )           
 +
mov_obj.do( sdegree=60, wdegree=65, prepare=True, repeat=3 ) # repeat 3 times the turn left
 +
 
 +
# Réduire l'amplitude du mouvement de 60 degrés (valeur par défaut)
 +
# à 30 degrées & faire une rotation à gauche de 75 degrée
 +
d.move( 'L', sdegree=75, sdegree_max=30, prepare=True )
 +
</syntaxhighlight>
 +
 
 +
Vous noterez l'utilisation du mot 'LEFT' pour tourner à gauche. Vous pouvez le remplacer par 'L'.
 +
 
 +
Pour tourner à droite, vous pouvez utiliser les mots clés 'RIGHT', 'R'.
 +
 
    
{{Hack-micropython-ServoRobot-TRAILER}}
 
{{Hack-micropython-ServoRobot-TRAILER}}
29 917

modifications

Menu de navigation