Ligne 210 : |
Ligne 210 : |
| | | |
| Pour tourner à droite, vous pouvez utiliser les mots clés 'RIGHT', 'R'. | | Pour tourner à droite, vous pouvez utiliser les mots clés 'RIGHT', 'R'. |
| + | |
| + | === Déplacement non prédictif === |
| + | Nous avons déjà vu comment déplacer le robot Doggy d'un certain nombre de pas connu d'avance. |
| + | |
| + | Ce qui serait bien, c'est de pouvoir "avancer" jusqu'à ce que l'on rencontre un obstacle. |
| + | |
| + | La paramètre '''repeat''' de la méthode '''move()''' accepte deux type de paramètre: |
| + | * Soit une valeur entière : nombre connu d'appel répétitif à effectuer pour exécuter le mouvement. |
| + | * Soit une fonction : qui poursuit l'action répétitive jusqu'à ce que la fonction retourne False. |
| + | |
| + | Cette approche peut être vraiment utile si l'on désire avancer jusqu'à un obstacle (ex: détecter à l'aide d'un senseur infrarouge ou ultrason). |
| + | |
| + | Voici un exemple d'implémentation (à défaut d'un senseur, nous avons utilisé une valeur maximale... ). |
| + | |
| + | <syntaxhighlight lang="python"> |
| + | from doggy import * |
| + | |
| + | d = Doggy() |
| + | |
| + | # Définir une fonction callback (de rappel) pour arrêter la méthode move() |
| + | # lorsque la fonction retourne False. |
| + | def forward_until_this( robot, name, iteration ): |
| + | # Effectuer votre test de sortie une fois de temps en temps (pour éviter un ralentissement général). |
| + | # Ex: mesurer la distance avec un senseur ultrason. |
| + | if (iteration % 10) == 0: |
| + | print( 'iteration = %i' % iteration ) |
| + | |
| + | if iteration >= 50: |
| + | return False |
| + | return True |
| + | |
| + | # Faire un movement FORWARD (avancer) aussi longtemps que la fonction forward_until_this() retourne True |
| + | d.move( 'F', repeat=forward_until_this, prepare=True) |
| + | </syntaxhighlight> |
| | | |
| {{Hack-micropython-ServoRobot-TRAILER}} | | {{Hack-micropython-ServoRobot-TRAILER}} |