Aller au contenu


Sparda

Inscrit(e) (le) 17 oct. 2014
Déconnecté Dernière activité août 19 2019 09:51
-----

#101319 Robot Quadrupède intelligent.

Posté par Sparda - 08 janvier 2019 - 08:49

Je déterre ce super sujet!

Ashira, comment ce robot a avancé en presque 2 ans de temps? Il a tué beaucoup de baudruches?




#64683 Base Roulante Mark I

Posté par Sparda - 13 juin 2015 - 01:22

Dans ce post, je vous fait un petit retour sur les "difficultés" que j'ai rencontré, en espérant que ce sera utile pour quelqu'un qui souhaite effectuer une base roulante similaire.
 

En premier lieu, il faut s’assurer du bon fonctionnement des moteurs. Lors de leur utilisation avec les broches Pulse Width Modular (PWM) de l’Arduino, un bruit sonore apparait et augmente lorsque la valeur de PWM augmente (0 à 255).

Il est causé par la fréquence utilisée par la PWM. En se reportant à la documentation technique de l’Arduino Uno, il existe trois horloges contrôlant les 6 sorties PWM, la première de valeur 1kHz (par défaut) pour les pins 5 et 6, la seconde de 500Hz pour les pins 9 et 10 et la troisième de 500Hz pour les pins 3 et 11. Ces fréquences sont suffisantes pour faire clignoter des LED mais deviennent gênantes pour des systèmes résonants, tels que les moteurs. (Les valeurs par défaut sont obtenues par l’application d’un facteur de division 64).

Horloge.PNG

 

Malheureusement pour changer la fréquence, il faut atteindre le registre et changer le facteur de division (appelé prescaler en anglais)  ce qui est un peu plus compliqué que du code classique.

SettingTimer.PNG

 

Il suffit d’insérer le code suivant dans le void Setup() du programme :
CodeTimer.png
 
Le passage à la fréquence maximum fait totalement disparaitre le bruit.
Sources :
http://www.arduino.cc/en/Main/ArduinoBoardUno
http://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
http://www.pobot.org/Modifier-la-frequence-d-un-PWM.html
 
http://arduino-info.wikispaces.com/Arduino-PWM-Frequency
http://usethearduino.blogspot.co.uk/
 
En second lieu, le robot réagit à son environnement grâce aux capteurs qu’il possède (obstacle, gaz, lumière...) si leur comportement n’est pas parfaitement connu, le robot ne pourra réagir efficacement.
Le principal capteur que j’ai utilisé est le SHARP GP2Y0A21YK0F : Portée 10-80cm. Lors des acquisitions, des mesures aléatoires venaient perturber le comportement du robot (détection d’obstacle inexistant). J’ai d’abord disposé un condensateur de 10µF entre l’alimentation (Vcc) et la masse (Grd) comme préconisé dans la documentation constructeur. Les perturbations persistaient, j’ai cherché à connaitre leur origine, qui est en fait dû au mode de fonctionnement du capteur lui-même. En effet, le capteur émet en continue un rayonnement IR mais n’effectue une mesure toutes les 38.3ms +/- 9.6ms, et il faut au maximum 5ms pour que celle-ci soit stabilisé. Par conséquent, on ne peut effectuer une mesure précise seulement toutes les 53ms.
MesureCapteurIR.PNG
En ajoutant un delay de 53ms entre chaque mesure, j’ai pu réduire de façon significative ce problème, cependant de temps à autre, ce comportement revenait, provoquant l’arrêt du robot. Le moyen le plus simple, fut d’adapter l’algorithme de détection d’obstacle en moyennant des séries de mesures. Plus le nombre de points est élevé, plus le moyennage est efficace, cependant il prend plus temps et diminue la réactivité du robot.
La première adaptation fut d’acquérir plusieurs points (dans mon cas, 5) et d’effectuer moyennage brut sur celles-ci. C’est le moyen le plus simple consommant que très peu de temps (0.25s) mais le résultat peut être décevant. Une seconde possibilité, un peu plus complexe est d’acquérir les points et de les stocker dans un tableau par ordre croissant, on en extrait deux valeurs médianes que l’on peut moyenner, celui-ci est un peu plus long en termes de code mais reste aussi rapide que le premier pour un résultat meilleur.
 Sources :
http://www.gotronic.fr/pj-51.pdf
http://www.pobot.org/Capteur-IR-Sharp-GP2D120.html
https://darylrobotpr...ent-les-eviter/