DigitalSpirit / Blog

Dernières avancées de Bleuette

Un petit billet pour vous donner des nouvelles de Bleuette...

Alimentation

Pour fonctionner correctement, Bleuette à besoin d'une tension de 5V@1A pour alimenter son cerveau (un RaspberryPi) et d'une autre tension de 6V@3A pour alimenter les servos et la guirlande de led.

Le développement d'une seconde carte fille permettant de générer les alimentations est prévue mais pour le moment, j'ai fait au plus simple, ainsi, pour le 6V, j'ai branché en parallèle 2 modules régulateurs de tension à découpage facilement trouvable sur le net, notamment, sur DealExtreme, ce sont des modules très pratiques que j'utilise assez souvent, ils sont capables de débiter 3A en pointe, mis en parallèle, nous avons donc théoriquement 6A, c'est amplement suffisant pour Bleuette qui comme dit plus haut doit avoir besoin de 3A maximum.

Note: Concernant la mise en parallèle des régulateurs à découpage, prenez garde à parfaitement bien régler la même tension sur les 2 modules à l'aide d'un multimètre fiable.

Pour le 5V du Raspberry, j'ai fait très simple en récupérant le régulateur inclu dans une prise allume cigare, voir Régulateur à découpage à très faible coût.

La source de tension est un accu LiPo de 11.1V @ 1.3A, c'est plutôt faible mais je n'ai que ça sous la main pour le moment...

Logiciel embarqué : le Pic

Sur la carte BleuettePi se trouve un Pic 18F452 qui est là afin d'assurer les mêmes tâches que sur la version Arduino (Bleuette Shield) mais avec quelques différences :

  • Les ports utilisés pour piloter les servos ne sont pas les mêmes
  • Le RaspberryPi n'ayant pas de convertisseur Analogique / Numérique, c'est le Pic qui s'en charge et met à disposition 8 entrées analogiques
  • Il surveille la tension de la batterie et prévient le RaspberryPi (via INTD) en cas de passage sous un seuil
  • Il surveille le courant consommé par les servos et prévient le RaspberryPi (via INTD) en cas de dépassement d'un seuil

La communication avec le Pic se fait via une liaison série à l'aide de commande :

Divers :

  • Version Retourne la version du micrologiciel
  • Status Retourne des informations courantes sur le système

Spécifique au pilotage des servos :

  • Init Initilisation
  • Pause Met en pause les servos
  • Resume Sort d'une pause
  • Clear Passe à 0 toutes les consignes
  • Set Spécifie les positions des servos

Spécifique au convertisseur analogique :

  • Current Retourne la dernière valeur du courant consommé par les servos
  • Set Max Spécifie la valeur max du courant à ne pas dépasser
  • Read x Lit la valeur de l'entrée analogique (x vaut de 0 à 7)

Logiciel : le RaspberryPi

Avec l'utilisation de BleuettePi, la programmation de Bleuette se fait directement en Python, quel bonheur de développer en haut niveau sans les innombrables contraintes que j'avais sur Arduino, plus de limitation en taille, en vitesse, en programme qu'il faut compiler à chaque itération puis envoyer à la carte Arduino...

J'ai repris la même logique que sur l'Arduino pour l'enregistrement des séquences, un tableau est utilisé pour stocker les positions des pattes à chaque étapes (une structure en C sur la version Arduino) qui est contenu dans une classe Python (une autre structure pour la version en C), toutes les positions sont envoyées par la liaison série.

Bleuette est maintenant pilotable via une interface web tournant grâce à Tornado (un framework web en Python), toute la communication se fait via un websocket, et Bleuette pousse régulièrement toutes les informations issues de ses capteurs (tension, courant consommé, valeur du magnétomètre, de l'accéléromètre, etc...).

Sur l'interface, il est possible de régler finement la position des servos (trims), de régler les valeurs limites à ne pas dépasser, et même de voir une vue 3D de Bleuette et des mouvements de ses pattes (grâce à l'utilisation de Three.js) etc...

Voici les captures d'écran des différentes pages :

Page d'accueil Vue des mouvements de pattes Réglage des positions limites des pattes Mouvement des pattes Vue des capteurs Vue 3D de Bleuette et des mouvements

Un mode de test permet de tester le logiciel sans avoir de Bleuette sous la main, il vous suffit de suivre les instructions de cette page : Tester le serveur.

Problèmes rencontrés

Chevauchement des ordres

Les ordres reçus depuis l'interface utilisateur sur l'ordinateur distant arrivent dans Bleuette au travers d'un websocket, ces informations sont asynchrones, on ne peut pas savoir quand elles vont arriver et des fois, elles pouvaient se chevaucher, ainsi, si j'envoie un ordre pour modifier la position des servos (16 octets : 1 commande, 14 positions, 1 contrôle) et que pendant l'envoi d'un octet de la trame, une autre commande est exécutée, l'ordre de position va échouer (somme de contrôle erronée), des octets vont rester en attente, la communication série va expirée, remonter une exception, etc...

Exemple concret: Le programme du Pic fait des lectures régulières du courant consommé par les servos, si la valeur dépasse un seuil, le Pic déclenche une interruption à destination du Raspberry (INTD), ce dernier va alors faire une demande de lecture de Status (voir au dessus) au Pic lui permettant de savoir quel type d'interruption à été levé mais cette demande passe bien entendu par la ligne série et comme elle peut survenir n'importe quand, elle peut aussi survenir lors de l'envoi du longue trame de positionnement de patte.

Pour palier à cela, j'ai créé un thread portant le doux nom de Servo_Sequencer qui se charge de l'envoi des positions, seul lui est capable de le faire, chaque position envoyée est mise en cache et dès que la communication est possible, elle est envoyée, il est également possible de faire des sortes de transaction à l'aide du concept de context manager de Python.

Exemple :

with ServoSeq:
    ServoSeq.setPosition(0, 120)
    ServoSeq.setPosition(2, 120)

Une fois sortie du contexte introduit par with, les positions sont ajoutées dans le buffer et seront transmises par ordre d'arrivée au contrôleur de servos.

Ligne série saturée

La liaison série est pas mal occupée lorsque Bleuette marche car toutes les communications du Raspberry au Pic inclu dans BleuettePi se font par celle-ci, or, pour lire les tensions analogiques, il faut passer par cette liaison, il est difficile de faire une demande de lecture analogique au moment ou Bleuette doit déplacer une patte sans que cela n'induise des latences.

Pour ces 2 problèmes, chevauchement des ordres et saturation de la ligne série, la prochaine évolution sera l'ajout du Pic sur le bus I2C permettant ainsi de garder la ligne série uniquement pour le pilotage de Bleuette.
J'envisage aussi d'ajouter un convertisseur analogique numérique I2C évitant ainsi au Pic d'avoir à faire les conversions...

Amplificateur audio

La carte BleuettePi inclu un amplificateur audio (LM386) permettant ainsi de donner la voix à Bleuette, le problème est l'utilisation d'une clef Usb Wifi qui rayonne assez fort et qui vient gentiment ronronner dans la partie audio, lorsque du son est émis, pas de souci, le ronronnement est noyé mais dans le cas contraire, c'est plutôt gênant.

Je pense donc déplacer la partie amplification sur une carte fille, j'utiliserai certainement un amplificateur un peu plus puissant.

Carte fille accéléromètre / magnétomètre

La carte fille (GY-27) comprenant un accéléromètre et un magnétomètre est fixée sur BleuettePi via un simple connecteur (type barette sécable), il sera certainement déporté afin d'être fixé au corps de Bleuette pour éviter qu'elle ne vibre et renvoie des informations non fiables.

Grâce à la récente acquisition d'un four à refusion, il est également possible que la future carte BleuettePi intégre directement les capteurs.

La liste des évolutions de Bleuette sera maintenue sur cette page : BleuettePi : Future version

Ouvrir l'article

Avancée de l'hexapode Bleuette

Voici un billet pour vous tenir informé des évolutions de Bleuette.

Les supports de pattes

Liste des modifications :

  1. Simplification du design des support de pattes, ils sont maintenant symétriques permettant d'avoir les même supports à gauche ou à droite du robot, cela à impliqué de devoir faire une seconde fente pour laisser passer le bras permettant de bouger la patte via un servo et de faire en sorte de pouvoir changer le guignol qui permet à la patte de tourner.
  2. L'avantage est que cela permettra aussi de changer le guignol si il casse ou encore de pouvoir faire des essais de longueur beaucoup plus facilement.
  3. Pour finir, les supports de servos ont été légèrement modifiés.

Vue de l'ancienne et de la nouvelle version :
Vue de comparaison entre l'ancienne version à gauche et la nouvelle à droite, voir texte pour les différences

Comparaison vue du dessous :
Comparaison vue de dessous

Vue d'un guignol, on aperçoit à droite la queue d'aronde qui permet de le glisser sous le support de servo afin de le bloquer :
Le guignol qui vient s'emboiter sous le support de servo

Le support de pattes monté avec le support de servo et le guignol :
Support de servo entièrement monté.

Le corps

Découpe en queue d'arronde du corps de Bleuette

J'ai commencé à imprimer le corps un peu rapidement, comme expliqué dans un précédent article, le corps est trop grand pour la surface d'impression de l'imprimante 3D, il faut alors le découper en plusieurs parties et les réassembler, pour cela, j'ai réalisé une librairie de découpe en queue d'aronde afin d'avoir une liaison la plus robuste possible, un paramètre important pour générer ce genre de découpe est l'espace entre les 2 pièces à assembler (0.1mm par défaut).

Pour la découpe de Bleuette, je suis parti avec une valeur plus ou moins pifométrique, c'est après une dizaine d'heures d'impression que je me suis aperçu que l'écart était vraiment trop faible et qu'il était impossible de lier les éléments entre eux sans les endommager...

Ça m'apprendra à vouloir aller trop vite, du coup, quelques petites impressions de test plus tard et il se trouve que la bonne valeur (pas trop petite mais pas trop grande) est de 0.2mm, et là, la liaison est excellente :
Liaison par queue d'aronde

Les pattes

À l'origine, les entretoises entre chaque pattes venait simplement s'emboiter en rentrant en force dans les pattes, maintenant, elles viennent s'enclencher dans les pattes, une fois mise, elles sont piégées et ne peuvent plus sortir de leur logement, c'est ainsi plus robuste mais ça reste réversible s'il faut changer une patte...

L'ancienne entretoise et la nouvelle :
Ancienne entretoise Nouvelle entretoise

Et voici une vue de l'entretoise emboitée :
Vue de l'entretoise montée

Pour effectuer la liaison entre les 2 pièces, on enfonce l'entretoise dans la patte, on effectue une rotation à 90º et ça y est, c'est bloqué, voir animation ci-dessous :
Animation verrouillage d'une entretoise sur une patte

Les palonniers ou bras de servo

Palonnier de servo

12 servos embarqués juste pour la mobilité des pattes, ça fait 12 palonniers, et ces derniers coutent chèrs comparés à la quantité de plastique qu'ils sont : l'idée est donc de les imprimer, pas moyen de trouver une librairie OpenSCAD pour cela, chose en partie compréhensible car la tête des servos sur laquelle vient se greffer le palonnier est très fine et requiert une précision d'impression assez poussée, cependant, nul besoin d'obtenir une empreinte parfaite, avec un peu de marge, les imperfections de l'impression devraient suffir à faire en sorte que le palonnier reste en place...

Et ça marche parfaitement bien avec ma librairie OpenSCAD qui vous permet de créer des palonniers de toutes les tailles avec le nombre désiré de bras.

Les palonniers réalisés en ABS attendent leur montage :
Les palonniers de servo réalisé en ABS avec une Ultimaker.

L'électronique

Pour le moment, je ne sais pas encore si toute l'électronique sera sur une ou deux cartes, la facilité / reproductibilité m'oriente vers le premier choix (avec une carte fille compatible Arduino), la raison technique m'oriente vers 2 cartes distinctes, bien séparées, à réfléchir donc...

Voici le rôle que doit avoir l'électronique sur Bleuette en plus de l'Arduino :

  • Marche / Arrêt général
  • Génération des tensions 5V pour l'Arduino, 6V pour les servos
  • Mesure du courant consommé
  • Contrôle de la charge de la batterie (surêment en technologie LiPo)
  • Sécurité en tout genre
  • Pilotage de 14 servos (les 12 des pattes + 2 pour une tourelles mobiles par exemple)

L'électronique sera basée principalement sur une carte de gestion de 24 servos réalisée il y a maintenant quelques années.

La suite

La conception des pièces étant pour ainsi dire finie, il faut maintenant lancer la production des pièces restantes, autant dire que l'Ultimaker va avoir du boulot, en parallèle, je vais m'attaquer à la partie électronique.

Tout le développement se fait via GitHub à cette adresse : http://github.com/hugokernel/Bleuette/

Pour finir, voici un tiers de Bleuette :
Avancement de l'hexapode Bleuette

Ouvrir l'article

Un suiveur de lumière à base de PIC10F

J'ai réalisé un p'tit montage tout simple, didactique avec 2 photodiodes, un servo et... un PIC10F qui permet de suivre une source de lumière placée à proximité de ses capteurs.

La réalisation hardware et software est expliquée sur le wiki par ici : SuiveurLumiere

Suiveur de lumière à base de Pic et servo Vu du servo équipé de ses 2 capteurs de lumière


Suiveur de lumière à base de Pic et servo from hugo on Vimeo.
Ouvrir l'article