Modifications

Sauter à la navigation Sauter à la recherche
7 190 octets ajoutés ,  19 décembre 2016 à 16:41
Ligne 27 : Ligne 27 :     
Si le robot est debout sur ses pattes, la séquence d'initialisation le couche en une seule opération... et cela surprend parfois (d'où le titre "avant de sursauter!").
 
Si le robot est debout sur ses pattes, la séquence d'initialisation le couche en une seule opération... et cela surprend parfois (d'où le titre "avant de sursauter!").
 +
 +
== Tester ==
 +
La bibliothèque servorobot contient de nombreux exemples [https://github.com/mchobby/pyboard-driver/tree/master/servorobot/samples/Doggy servorobot/samples/Doggy/]
 +
 +
Les plus curieux pourrons également se pencher sur les exemples [https://github.com/mchobby/pyboard-driver/tree/master/servorobot/samples/RobotBase servorobot/samples/RobotBase] qui testent les éléments fondamentaux.
 +
 +
=== Reinitialisation ===
 +
 +
Script de base pour Doggy, l'initialisation de la classe Doggy fait un appel à la méthode de réinitialisation '''reset()'''.
 +
 +
Cette dernière positionne tous mes angles à 0° (étend les pattes à l'horizontal)
 +
 +
<syntaxhighlight lang="python">
 +
from doggy import *
 +
d = Doggy()
 +
</syntaxhighlight>
 +
 +
Mais rien ne vous empêche de faire appel directement à la méthode '''reset()'''
 +
 +
<syntaxhighlight lang="python">
 +
d.reset()
 +
</syntaxhighlight>
 +
 +
Lorsqu'un angle est sélectionné sur un servo, ce dernier le maintient activement la position.
 +
 +
Il est possible de désactiver les servos en utilisant la méthode '''release()'''
 +
 +
<syntaxhighlight lang="python">
 +
d.release()
 +
</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