dimanche 27 octobre 2013

Circuit 24...

Non ce n'est pas pour les 24 heures du Mans !

Je vous présente le circuit envisagé pour JAG.
J'ai relevé sur papier quadrillé au centimètre près (plus ou moins!) le plan du rez-de-chaussée de ma maison, avec le mobilier, pour déterminer où le robot devait passer. Sur le plan, chaque carré vaut 10x10 cm. J'ai déterminé une zone de sécurité de 20 cm autour des murs et du mobilier, que JAG1 se doit d'éviter. Reste donc les zones d'accès en vert dans lesquelles j'ai tracé le circuit. Voici le résultat :
 Le départ et l'arrivée se feront à partir du bureau, à un point central non critique.
Chaque portion de ligne droite, fera donc l'objet d'une étape d'avancement vers la portion suivante. Chaque pivotement étant une étape supplémentaire. Pour simplifier mes explications, je situerai le nord en haut, l'est à droite...etc. Ce qui n'est pas vraiment le cas hélas !
La première étape consiste à orienter le robot vers l'ouest à l'aide de sa boussole (CMPS03)
Puis il avance jusqu'à une certaine distance du premier obstacle détecté par IR (infra-rouge) positionné vers l'avant. A ce stade pivotement à droite vers le sud, encore à l'aide du compas, et ensuite déplacement jusqu'au nouvel obstacle se présentant avec IR de devant. 
A ce moment le robot à une position calée en x et y sur le plan. Avec quelques repères ainsi définis, je peux espérer faire mon petit tour, et revenir au point de départ. Sur certaines portions, j'utilise aussi l'odométrie : comptage des pulses à l'avancement des roues, ceci permettant d'avancer d'une certaine distance, et également de définir une orientation par le différentiel d'avancement des deux roues. 
Et bien, j'ai passé des journées et des soirées à suivre JAG1 dans son dédale, sans jamais parvenir à boucler un tour complet !!! 
A force d'essayer un peu tous les réglages, j'en suis arrivé à la conclusion, que je manquais de précision.
C'est à partir de là, que j'ai décidé de repartir de zéro avec des éléments plus performants, et que JAG2 s'est dessiné dans mon esprit.
A suivre.

vendredi 18 octobre 2013

Toujours plus !

JAG1 devait se déplacer dans la maison en partant d'un point quelconque ! Je n'y suis pas encore arrivé...
Pour simplifier les opérations, au départ, je positionne toujours la bête au milieu de mon bureau, et vogue la galère... Non pas tout à fait, car j'ai adjoint un circuit electro-magnétique qui détecte le champ magnétique terrestre, et grâce à ce circuit qui renvoie les valeurs d'orientation, et avec quelques lignes de code, il est possible d'orienter le robot. Le circuit utilisé est un CMPS03.
 Voilà à quoi ressemble le compas : une carte électronique de 3 x 3 cm
Ca aide beaucoup pour obtenir une direction, mais la fiabilité à l'intérieur d'une maison n'est pas toujours au rendez-vous. A savoir que le champ magnétique est perturbé par tout ce qui est métal. Entre autre, les encadrements de mes portes étant métalliques, il n'y a aucune possibilité d'avoir un positionnement correct près de celles-ci. Il faut donc jongler entre détecteurs de distance, odométrie, et orientation. Chaque paramètre devant être réglé au plus juste pour obtenir un résultat quelquefois très aléatoire !
Entre autre, j'ai du recalibrer de nombreuses fois le compas pour obtenir des valeurs plausibles. Je vous montre ci-dessous la méthode de calibrage du compas.

Je dispose au sol une rose des vents orientée avec le champ magnétique terrestre. J'aligne le robot successivement sur les 4 points cardinaux, et j'envoie une pulse de calibrage à chaque quart de tour.
Ensuite, je crée un fichier du relevé des caps en faisant pivoter le robot de 10 degrés en 10 degrés.Un coup dans le sens horaire et ensuite dans le sens contraire...Jusqu'à ce que le résultat soit satisfaisant. Mais il reste toujours des orientations assez peu précises ! Avec l'expérience, j'arrive à orienter le robot dans les zones non perturbées à plus ou moins 5 degrés. Et ainsi, je peux diriger le robot perpendiculairement à un mur, et en déterminant la distance avec le détecteur infra-rouge, j'obtiens un repère de départ. 

Mais voilà : un problème succédant à un autre, je n'ai plus assez de connections disponibles sur le microcontrôleur. Au diable l'avarice, comme je commence à maîtriser l'Arduino UNO, j'en commande un second. Premier déboire, il est d'une nouvelle génération, et je ne comprends pas pourquoi il refuse de fonctionner. Après enquête, mon logiciel n'est pas à jour. On recommence, et là le problème est de faire dialoguer les 2 micros entre eux. Je m'essaye avec des commandes de niveau logique entre les 2, mais j'y perds vite mon latin (que je n'ai jamais pratiqué). 
Les microcontrôleurs ont été développés avec des entrées sorties logiques permettant de dialoguer avec de nombreux composants suivant différents protocoles : liaisons série, I2C, SPI, BUS "un fil". Après diverses réflexions, j'opte pour une liaison I2C qui se fait à l'aide de 2 lignes de signal (SDA et SCL), l'échange des informations s'effectuant en série avec un débit de 100 kilobits par seconde. Un microcontrôleur étant "maître" des opérations et pouvant gérer jusqu'à 128 périphériques dits "esclaves".
Le micro "maître" gérera le compas lui aussi en I2C , les interruptions des compteurs odomètriques et le dialogue avec le micro "esclave" qui lui relèvera les valeurs des IR,  des contacteurs, et commandera les servomoteurs des roues et de la caméra.
Avec tout ça en place...ça devait carburer !
A suivre...

vendredi 11 octobre 2013

Suite des améliorations...

L'amélioration suivante consistait à visualiser sur PC ce que le robot voyait lui-même.
J'avoue que c'était vraiment pour le 'fun', car je n'envisageais pas de diriger JAG1 depuis mon bureau. Peut-être qu'un jour j'aborderai la reconnaissance environnementale par imagerie! J'ai donc décidé d'installer une "caméra espion" sur le robot. Celle-ci fut d'abord positionnée sur le haut du véhicule. Les détecteurs de distance étant situés à un niveau inférieur : la caméra butait sur les obstacles non détectés et placés au-dessus des IR. Copie revue, je déplace la caméra à l'avant du robot, avec un servo de rotation horizontale placé sur la platine précédemment rajoutée. Un second servo fixé sur le premier permettant un balayage vertical. Et tout fonctionne après installation d'un convertisseur vidéo vers PC. Je suis toujours émerveillé quand la technique fonctionne ! C'est beau, mais ça n'aide pas beaucoup JAG1 à aller où je voudrai.

Etape suivante : l'alimentation.
Quand il faut changer les piles tous les 8 jours, d'une part ce n'est pas pratique et ça coûte.
J'installe donc 8 accus 1,2 v. en série sous le dessous de la platine inférieure. Cette alim délivrant une tension supérieure à 10 v, je prévois 2 adaptateurs DC-DC pour délivrer d'une part 5 v aux servos et aux IR et d'autre part 9 v pour la platine Arduino et la caméra....Ce qui entraîne la modification de toute l'implantation des circuits...Mais au bout du compte c'est un plus.
La réalisation des adaptateurs DC-DC se fait à l'aide d'un LM350, et sur le net pas de problème pour trouver un shéma fonctionnel.

Pour améliorer les déplacements de JAG1 j'envisage d'implanter l'odométrie. Ce terme signifiant le suivi de la rotation des roues à l'aide d'un comptage de pulses.
Pour ce faire, je réalise sur papier glacé un disque comportant 2 pistes avec 16 secteurs alternativement noirs et blancs, et chaque piste étant décalée d'un demi-secteur par rapport à l'autre. La détection des changements de couleur est réalisée avec des détecteurs IR QTR-1A et un IC 7474 pour mise en forme des signaux.
Sur la photo ci-dessus ( platine supérieure enlevée) on voit le disque collé à la roue et les 2 détecteurs QTR-1A positionnés sur le côté de celle-ci.
Le signal du détecteur odométrique sera contrôlé avec un interrupt de l'Arduino.
L'opération est répétée sur la seconde roue.
Reste à déterminer si la gestion programme de l'interrupt n'alourdira pas trop la détection infra-rouge des obstacles.

Un second microcontrôleur sera envisagé pour alléger certaines fonctions...
Plus plus plus....
Jusqu'où ira-t'on ?

samedi 5 octobre 2013

Améliorons JAG 1

Pour faire mieux, que fallait-il ?

En priorité, je voulais qu'il ne bute pas dans les obstacles, mais qu'il les détecte afin de les éviter.
J'ai donc décidé d'adjoindre des détecteurs de distance. Mais que choisir? La première décision à prendre est de choisir entre infra-rouges ( IR ) et ultra-sons ( US ). Les IR ont un cône de détection plus étroit que les US, mais sont aussi plus sensibles à l'environnement. Côté programmation avec l'Arduino : une seule instruction est nécessaire pour mesurer la distance entre le détecteur IR et l'obstacle :
 distance = analogRead(pin)
Concernant le prix, les IR étaient moins onéreux que les US, mais tout dépend des modèles. Récemment j'ai acheté des US type SRF04 sur ebay avec un marchand à Hong-Kong à moins de 1 euro pièce et sans frais de port ! Mais il ne faut pas en avoir un besoin urgent.
Bref, j'ai d'abord installé 2 IR (modèle Sharp GP2Y0A) en opposition sur une tourelle pilotée par servomoteur. Je pensais qu'en effectuant des rotations droite-gauche il serait possible de détecter les obstacles, et aussi de caler le déplacement de mon bolide parallèlement à un mur. Mais j'ai dû revoir ma théorie, car c'était sans compter avec le temps nécessaire à la rotation du servo de la tourelle. Ou alors, il fallait avancer le robot, l'arreter, faire des mesures, et repartir. Ca ne collait pas avec mes envies. Je voulais un déplacement plus fluide.
On efface tout et on recommence différemment. J'abandonne le servo qui servira plus tard pour une caméra espion, et je rajoute 2 IR. Le modèle d'origine n'étant plus dispo, je patiente, puis change de modèle après trois semaines d'attente. Et j'installe quatre IR : 1 devant, 1 derrière, 1 à droite et 1 à gauche. Et là : c'est déjà beaucoup mieux, mais toujours très imparfait.
Parallèlement à la détection IR située à 20 cm au-dessus du sol, les contacteurs mécaniques permettent  la détection rase-motte des obstacles, et le programme s'en alourdi d'autant. Sachant que le programme du microcontrôleur tourne en boucle infinie, avec de nombreux  paramètres à gérer tels :
- obstacle de face (mesure de distance )
- distance à respecter le long du mur,
- tester l'état des contacteurs
- agir sur les déplacement droite, gauche, ou arrêt des roues.
Tout ne peut se contrôler au même instant.
Autre souci rencontré, avec les IR : les distances mesurées sont fluctuantes : d'une part suivant l'environnement, mais aussi avec le niveau de la tension les contrôlant. Ce qui est bon à 15h (batterie neuve, lumière du jour) ne l'est plus à 20h (batterie faible, lumière artificielle)

Bref c'est un peu galère. Mais ça occupe !
JAG1 est perfectible et il le sera...Je le veux.
A suivre...