Modifications

Sauter à la navigation Sauter à la recherche
1 314 octets ajoutés ,  25 juillet 2016 à 16:16
Ligne 1 : Ligne 1 :  
{{Hack-micropython-Robot2Wheel-NAV}}
 
{{Hack-micropython-Robot2Wheel-NAV}}
 
== Installer ==
 
== Installer ==
Vous pouvez télécharger la bibliothèque et les codes d'exemples directement depuis le dépôt GitHub du PyBoard-a-roulette
+
Vous pouvez télécharger la bibliothèque et les codes d'exemples directement depuis le [https://github.com/mchobby/pyboard-a-roulette dépôt GitHub du PyBoard-a-roulette]
    
{{download-box|Télécharger PyBoard-a-Roulette.zip|https://github.com/mchobby/pyboard-a-roulette/archive/master.zip}}
 
{{download-box|Télécharger PyBoard-a-Roulette.zip|https://github.com/mchobby/pyboard-a-roulette/archive/master.zip}}
Ligne 31 : Ligne 31 :  
Petit rappel avec [[MicroPython.brochage.pyboard#Le_brochage|le schéma des broches]], si nous utilisons la sortie X3, nous devons choisir le Timer et Channel approprié pour pouvoir créer un signal PWM.
 
Petit rappel avec [[MicroPython.brochage.pyboard#Le_brochage|le schéma des broches]], si nous utilisons la sortie X3, nous devons choisir le Timer et Channel approprié pour pouvoir créer un signal PWM.
   −
<nowiki>>>> from hbridge import HBridge
+
<syntaxhighlight lang="python">
>>> MOT1_PINS = ( pyb.Pin.board.X6, pyb.Pin.board.X5 )
+
from hbridge import HBridge
>>> MOT1_PWM = {'pin' : pyb.Pin.board.X3, 'timer' : 2, 'channel' : 3 } </nowiki>
+
MOT1_PINS = ( pyb.Pin.board.X6, pyb.Pin.board.X5 )
 +
MOT1_PWM = {'pin' : pyb.Pin.board.X3, 'timer' : 2, 'channel' : 3 }
 +
</syntaxhighlight>
    
Voila, nous avons défini nos broches de commandes dans le tuple {{fname|MOT1_PINS}} et les informations de la broche PWM dans {{fname|MOT1_PWM}} pour le contrôle de la vitesse.
 
Voila, nous avons défini nos broches de commandes dans le tuple {{fname|MOT1_PINS}} et les informations de la broche PWM dans {{fname|MOT1_PWM}} pour le contrôle de la vitesse.
Ligne 39 : Ligne 41 :  
Nous allons pouvoir créer l'objet Pont-H pour le commander.
 
Nous allons pouvoir créer l'objet Pont-H pour le commander.
   −
<nowiki>>>> h = HBridge( MOT1_PINS, MOT1_PWM )</nowiki>
+
<syntaxhighlight lang="python">
 +
h = HBridge( MOT1_PINS, MOT1_PWM )
 +
</syntaxhighlight>
    
Nous allons pouvoir tester les méthodes de base:
 
Nous allons pouvoir tester les méthodes de base:
Ligne 48 : Ligne 52 :  
Laissez un peu de temps entre chacune des commandes pour pouvoir constater les effets sur votre mobile.
 
Laissez un peu de temps entre chacune des commandes pour pouvoir constater les effets sur votre mobile.
   −
<nowiki>>>> h.forward()
+
<syntaxhighlight lang="python">
>>> h.backward()
+
h.forward()
>>> h.halt()</nowiki>
+
h.backward()
 +
h.halt()
 +
</syntaxhighlight>
    
Vous pouvez maintenant tester votre deuxieme pont-H avec les commandes suivantes:
 
Vous pouvez maintenant tester votre deuxieme pont-H avec les commandes suivantes:
<nowiki>>>> MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 )
+
<syntaxhighlight lang="python">
>>> MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 }         
+
MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 )
>>> h2 = HBridge( MOT2_PINS, MOT2_PWM )
+
MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 }         
>>> h2.forward()
+
h2 = HBridge( MOT2_PINS, MOT2_PWM )
>>> h2.backward()
+
h2.forward()
>>> h2.halt()</nowiki>
+
h2.backward()
 +
h2.halt()
 +
</syntaxhighlight>
    
=== Contrôle de vitesse ===
 
=== Contrôle de vitesse ===
Ligne 71 : Ligne 79 :  
Nous allons donc revoir notre programme de commande du deuxième pont-h pour contrôler la vitesse moteur.
 
Nous allons donc revoir notre programme de commande du deuxième pont-h pour contrôler la vitesse moteur.
   −
<nowiki>>>> from hbridge import HBridge
+
<syntaxhighlight lang="python">
>>> from pyb import delay
+
from hbridge import HBridge
>>> MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 )
+
from pyb import delay
>>> MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 }         
+
MOT2_PINS = ( pyb.Pin.board.X7, pyb.Pin.board.X8 )
>>> h2 = HBridge( MOT2_PINS, MOT2_PWM )
+
MOT2_PWM = {'pin' : pyb.Pin.board.X4, 'timer' : 5, 'channel' : 4 }         
>>> for speed in range( 0, 100, 10 ):
+
h2 = HBridge( MOT2_PINS, MOT2_PWM )
>>>     h2.backward( 100-speed )
+
for speed in range( 0, 100, 10 ):
>>>     delay( 1000 )
+
     h2.backward( 100-speed )
>>> h2.halt()</nowiki>
+
     delay( 1000 )
 +
    h2.halt()
 +
</syntaxhighlight>
    
L'instruction {{fname|for speed in range( 0, 100, 10 )}} permet de faire varier la vitesse entre 0 et 100 par pas de 10.
 
L'instruction {{fname|for speed in range( 0, 100, 10 )}} permet de faire varier la vitesse entre 0 et 100 par pas de 10.
Ligne 97 : Ligne 107 :     
Allons y:
 
Allons y:
<nowiki>>>> from r2wheel import Robot2Wheel
+
<syntaxhighlight lang="python">
>>> r2 = Robot2Wheel()
+
from r2wheel import Robot2Wheel
>>> r2.forward( 80 )
+
r2 = Robot2Wheel()
>>> r2.halt()</nowiki>
+
r2.forward( 80 )
 +
r2.halt()
 +
</syntaxhighlight>
    
Dans cet exemple, nous avons demandé à la plateforme d'avancer à la vitesse de 80% avec {{fname|r2.forward(80)}} .
 
Dans cet exemple, nous avons demandé à la plateforme d'avancer à la vitesse de 80% avec {{fname|r2.forward(80)}} .
Ligne 106 : Ligne 118 :  
Vous l'aurez compris, pour passer la marche arrière, il suffit de...
 
Vous l'aurez compris, pour passer la marche arrière, il suffit de...
   −
<nowiki>>>> r2.backward()</nowiki>
+
<syntaxhighlight lang="python">
 +
r2.backward()
 +
</syntaxhighlight>
    
=== Un moteur tourne dans le mauvais sens! ===  
 
=== Un moteur tourne dans le mauvais sens! ===  
Ligne 117 : Ligne 131 :  
Vous pouvez inverser la commande de l'un OU l'autre OU des deux pont-H durant la création de l'objet Robot2Wheel... voici les différentes syntaxes à votre disposition.
 
Vous pouvez inverser la commande de l'un OU l'autre OU des deux pont-H durant la création de l'objet Robot2Wheel... voici les différentes syntaxes à votre disposition.
   −
<nowiki>r2 = Robot2Wheel( reverse_mot2 = True )
+
<syntaxhighlight lang="python">
 +
r2 = Robot2Wheel( reverse_mot2 = True )
 
r2 = Robot2Wheel( reverse_mot1 = True )
 
r2 = Robot2Wheel( reverse_mot1 = True )
r2 = Robot2Wheel( reverse_mot1 = True, reverse_mot2 = True )</nowiki>
+
r2 = Robot2Wheel( reverse_mot1 = True, reverse_mot2 = True )
 +
</syntaxhighlight>
    
Dans le cadre de mes tests, j'ai utilisé {{fname|1=r2 = Robot2Wheel( reverse_mot2 = True )}} pour corriger la rotation de l'un de mes moteurs.
 
Dans le cadre de mes tests, j'ai utilisé {{fname|1=r2 = Robot2Wheel( reverse_mot2 = True )}} pour corriger la rotation de l'un de mes moteurs.
Ligne 128 : Ligne 144 :  
Nous allons commencer simplement, nous allons faire tourner la plateforme 2 roues sur place... en faisant tourner un moteur dans un sens et l'autre dans l'autre sens.
 
Nous allons commencer simplement, nous allons faire tourner la plateforme 2 roues sur place... en faisant tourner un moteur dans un sens et l'autre dans l'autre sens.
   −
<nowiki>>>> r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
+
<syntaxhighlight lang="python">
>>> r2.turn( Robot2Wheel.RIGHT_ROTATE )
+
r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
>>> r2.halt()</nowiki>
+
r2.turn( Robot2Wheel.RIGHT_ROTATE )
 +
r2.halt()
 +
</syntaxhighlight>
    
Vous pouvez également indiquer une vitesse moteur durant la rotation.
 
Vous pouvez également indiquer une vitesse moteur durant la rotation.
 
+
<syntaxhighlight lang="python">
<nowiki>>>> r2.turn( Robot2Wheel.RIGHT_ROTATE, speed=60 )</nowiki>
+
r2.turn( Robot2Wheel.RIGHT_ROTATE, speed=60 )
 +
</syntaxhighlight>
    
=== La plateforme tourne dans le mauvais sens! ===
 
=== La plateforme tourne dans le mauvais sens! ===
Ligne 148 : Ligne 167 :  
Nous avons prévu un paramètre supplémentaire lors de la création de Robot2Wheel pour échanger le moteur1 et moteur2 de façon logiciel.
 
Nous avons prévu un paramètre supplémentaire lors de la création de Robot2Wheel pour échanger le moteur1 et moteur2 de façon logiciel.
   −
<nowiki>>>> r2 = Robot2Wheel( fix_rotate = True )</nowiki>  
+
<syntaxhighlight lang="python">
 +
r2 = Robot2Wheel( fix_rotate = True )
 +
</syntaxhighlight>
    
Après cela, la plateforme tournera dans le bon sens.
 
Après cela, la plateforme tournera dans le bon sens.
Ligne 168 : Ligne 189 :  
Comme pour la marche avant/arrière, vous avez la possibilité d'indiquer une vitesse (par défaut c'est 100%).
 
Comme pour la marche avant/arrière, vous avez la possibilité d'indiquer une vitesse (par défaut c'est 100%).
   −
<nowiki>>>> from r2wheel import Robot2Wheel
+
<syntaxhighlight lang="python">
>>> from pyb import delay
+
from r2wheel import Robot2Wheel
>>> r2 = Robot2Wheel()
+
from pyb import delay
>>> r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
+
r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
>>> r2.turn( Robot2Wheel.RIGHT_ROTATE )
+
r2.turn( Robot2Wheel.RIGHT_ROTATE )
>>> delay( 1500 ) # pendant 1.5 secondes
+
delay( 1500 ) # pendant 1.5 secondes
>>> r2.forward()
+
r2.forward()
>>> delay( 5000 )
+
delay( 5000 )
>>> r2.turn( Robot2Wheel.LEFT_ROTATE, speed=80 )
+
r2.turn( Robot2Wheel.LEFT_ROTATE, speed=80 )
>>> r2.forward()
+
r2.forward()
>>> delay( 5000 )
+
delay( 5000 )
>>> r2.halt()</nowiki>
+
r2.halt()
 +
</syntaxhighlight>
    
Vous pourriez obtenir le même résultat avec les méthodes {{fname|right()}} et {{fname|left()}}.
 
Vous pourriez obtenir le même résultat avec les méthodes {{fname|right()}} et {{fname|left()}}.
   −
<nowiki>>>> from r2wheel import Robot2Wheel
+
<syntaxhighlight lang="python">
>>> from pyb import delay
+
from r2wheel import Robot2Wheel
>>> r2 = Robot2Wheel()
+
from pyb import delay
>>> r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
+
r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
>>> r2.right()
+
r2.right()
>>> delay( 1500 ) # pendant 1.5 secondes
+
delay( 1500 ) # pendant 1.5 secondes
>>> r2.forward()
+
r2.forward()
>>> delay( 5000 )
+
delay( 5000 )
>>> r2.left( speed=80 )
+
r2.left( speed=80 )
>>> r2.forward()
+
r2.forward()
>>> delay( 5000 )
+
delay( 5000 )
>>> r2.halt()</nowiki>
+
r2.halt()
 +
</syntaxhighlight>
    
=== Les virages ===
 
=== Les virages ===
Ligne 211 : Ligne 234 :  
Lorsqu'il n'y a qu'un seul paramètre de vitesse, ce paramètre {{fname|speed}} mentionne la différence de vitesse entre les deux moteurs.
 
Lorsqu'il n'y a qu'un seul paramètre de vitesse, ce paramètre {{fname|speed}} mentionne la différence de vitesse entre les deux moteurs.
   −
<nowiki>>>> from r2wheel import Robot2Wheel
+
<syntaxhighlight lang="python">
>>> from pyb import delay
+
from r2wheel import Robot2Wheel
>>> r2 = Robot2Wheel()
+
from pyb import delay
>>> r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
+
r2 = Robot2Wheel()
>>> r2.turn(Robot2Wheel.RIGHT_BEND, speed=40)
+
r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
>>> delay( 15000 )
+
r2.turn(Robot2Wheel.RIGHT_BEND, speed=40)
>>> r2.forward()
+
delay( 15000 )
>>> delay( 5000 )
+
r2.forward()
>>> r2.halt()</nowiki>
+
delay( 5000 )
 +
r2.halt()
 +
</syntaxhighlight>
    
Il est également possible de contrôler la vitesse du mobile durant un virage en précisant 2 vitesses. Lorsqu'il y a deux vitesses mentionnées: la vitesse globale du mobile est précisée avec {{fname|speed}}, puis la différence de vitesse entre les deux moteurs dans {{fname|speed2}}.
 
Il est également possible de contrôler la vitesse du mobile durant un virage en précisant 2 vitesses. Lorsqu'il y a deux vitesses mentionnées: la vitesse globale du mobile est précisée avec {{fname|speed}}, puis la différence de vitesse entre les deux moteurs dans {{fname|speed2}}.
   −
<nowiki>>>> from r2wheel import Robot2Wheel
+
<syntaxhighlight lang="python">
>>> from pyb import delay
+
from r2wheel import Robot2Wheel
>>> r2 = Robot2Wheel()
+
from pyb import delay
>>> r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
+
r2 = Robot2Wheel()
>>> r2.turn(Robot2Wheel.LEFT_BEND, speed=70, speed2=40)
+
r2 = Robot2Wheel( reverse_mot2 = True ) # inverser la commande du moteur moteur
>>> delay( 15000 )
+
r2.turn(Robot2Wheel.LEFT_BEND, speed=70, speed2=40)
>>> r2.forward()
+
delay( 15000 )
>>> delay( 5000 )
+
r2.forward()
>>> r2.halt()</nowiki>
+
delay( 5000 )
 +
r2.halt()
 +
</syntaxhighlight>
    
Dans l'exemple ci-dessus, nous tournons à gauche avec une vitesse globale du mobile de 70% et une différence de vitesse de 40%. Le moteur droit fonctionne donc à 70% et le moteur gauche à 70%-40%, soit 30%.
 
Dans l'exemple ci-dessus, nous tournons à gauche avec une vitesse globale du mobile de 70% et une différence de vitesse de 40%. Le moteur droit fonctionne donc à 70% et le moteur gauche à 70%-40%, soit 30%.
Ligne 238 : Ligne 265 :     
=== Corriger la dérive ===
 
=== Corriger la dérive ===
{{ambox|text=Ce point devient pertinent uniquement si vous avez besoin de parcourir des distances relativement importante en ligne droite.}}  
+
{{ambox|text=Ce point n'est pertinent que si vous avez besoin de parcourir des distances relativement importantes en ligne droite.}}  
+
==== Qu'est-ce que la dérive ====
 
Deux moteurs d'un même fabricant et d'un même modèle ne sont {{underline|jamais totalement}} identiques.
 
Deux moteurs d'un même fabricant et d'un même modèle ne sont {{underline|jamais totalement}} identiques.
   Ligne 250 : Ligne 277 :  
[[Fichier:RB-2-WHEEL-MOVE-Derive.jpg|900px]]
 
[[Fichier:RB-2-WHEEL-MOVE-Derive.jpg|900px]]
    +
==== Comment corriger la dérive ====
 
{{underline|'''La solution consiste'''}} à ralentir le moteur qui est trop rapide (ou parcours trop de distance), c'est pour cela que nous avons besoin du contrôle PWM... pour pouvoir contrôler la dérive.
 
{{underline|'''La solution consiste'''}} à ralentir le moteur qui est trop rapide (ou parcours trop de distance), c'est pour cela que nous avons besoin du contrôle PWM... pour pouvoir contrôler la dérive.
   Ligne 260 : Ligne 288 :  
Il vous faudra donc procéder par essai/erreur, en ajustant la valeur de la dérive jusqu'à ce que votre plateforme parcours une ligne droite relativement importante comme attendu.  
 
Il vous faudra donc procéder par essai/erreur, en ajustant la valeur de la dérive jusqu'à ce que votre plateforme parcours une ligne droite relativement importante comme attendu.  
   −
{{traduction}}
+
Voici deux exemple avec corrige de dérive, l'un appliquée sur un moteur... et l'autre sur l'autre moteur:
 +
 
 +
<syntaxhighlight lang="python">
 +
robot = Robot2Wheel( reverse_mot2 = True, derivative_fix = 5 )
 +
robot.forward()
 +
delay( 15000 )
 +
robot.halt()
 +
</syntaxhighlight>
 +
 
 +
<syntaxhighlight lang="python">
 +
robot = Robot2Wheel( reverse_mot2 = True, derivative_fix = -3 )
 +
robot.forward()
 +
delay( 15000 )
 +
robot.halt()
 +
</syntaxhighlight>
 +
 
 +
==== D'autres options ====
 +
Il est possible de contrôler partiellement la dérive en utilisant des moteurs avec encodeur. L'encodeur sert à compter précisément la rotation des moteurs... il est donc possible de savoir exactement quand chaque moteur à fait rotation de 360°. Cela permet de contrôler la dérive au niveau moteur... mais pas celle issue des roues, de l'alignement des moteurs, des forces de glissement (des pneu sur le sol).
 +
 
 +
Une autre façon de contrôler la dérive est d'utiliser une centrale inertielle (IMU)... et donc de savoir si l'on s'écarte de la trajectoire voulue... et de corriger au besoin :-)
    
== Bibliothèque r2wheel et hbridge ==
 
== Bibliothèque r2wheel et hbridge ==
704

modifications

Menu de navigation