mercredi 21 avril 2021

Bricoler un robot dessinateur BrachioGraph

Le BrachioGraph est un robot dessinateur (plotter, table traçante) qui a été spécialement conçu pour être fabriqué à très faible coût, sans outils et avec très peu de matériel: un Raspberry Pi, trois servomoteurs, deux bâtonnets, une pince à linge et un peu de colle ou de ruban adhésif suffisent à sa réalisation.


Assemblage du robot

C'est la partie la plus simple: on fixe deux palonniers de servomoteur sur un bâtonnet de bois, à 8 cm l'un de l'autre. Sur un deuxième bâtonnet, on fixe un servomoteur et une pince à linge, qui servira à tenir le crayon (on mesure encore une fois 8 cm entre la position du crayon et le moyeu du servomoteur). Vous trouverez une marche à suivre très claire et beaucoup plus détaillée sur la page officielle BrachioGaph par Daniele Procida.


Il en résulte un bras robotisé constitué de deux segments, chacun d'entre pouvant tourner dans un plan horizontal. Le 3e servomoteur sert à soulever le crayon lorsqu'on doit le déplacer sans faire de marque sur la feuille de papier.


Branchements des servomoteurs au Raspberry Pi

Les trois servomoteurs sont alimentées par une des sorties 5 V du Raspberry Pi. 

  • Le servomoteur "épaule" (celui qui demeure immobile) est branché à la broche GPIO 14.
  • Le servomoteur "coude" (qui fait le lien entre les deux bâtonnets) est branché à la broche GPIO 15.
  • Le servomoteur qui soulève le crayon est branché à la broche GPIO 18.

Installation des logiciels dans le Raspberry Pi

Il y a beaucoup de trucs à installer mais, encore une fois, tout est expliqué sur la page de BrachioGraph:

On colle tout ça dans le terminal:

sudo apt install -y python3-venv pigpiod libjbig0 libjpeg-dev liblcms2-2 libopenjp2-7 libtiff5 libwebp6 libwebpdemux2 libwebpmux3 libzstd1 libatlas3-base libgfortran5 git

Et ensuite:

python3 -m venv env
source env/bin/activate

On clone la bibliothèque BrachioGraph:

git clone https://github.com/evildmp/BrachioGraph.git

On entre dans le nouveau répertoire "BrachioGraph":

cd BrachioGraph
pip install -r requirements.txt


Mise à l'essai

Pour démarrer le brachiograph, il faut démarrer le démon pigpiod ainsi qu'un environnement python:

sudo pigpiod
source env/bin/activate
python
from brachiograph import BrachioGraph
bg = BrachioGraph()


À partir de là, on peut écrire des commandes en Python, ligne par ligne (mais à la longue, considérant toutes les commandes de calibrations nécessaires, c'est plus simple d'exécuter un script en python: le site brachio.me présente des exemples de scripts).

L'instruction "bg.box()" ordonne au BrachioGraph de tracer un rectangle. Voici le premier "rectangle" que j'ai obtenu...


Calibration

Il est assez normal d'obtenir ce genre de résultat très approximatif lors de vos premiers essais: le BrachioGraph a besoin d'être calibré pour fonctionner correctement.

Par exemple, le logiciel suppose que vos servomoteurs tournent de 1° chaque fois que la durée des impulsions pwm varie de 10 µs, mais en fait ça varie d'un servomoteur à l'autre.

En faisant quelques tests (qui pourraient être refaits avec une bien meilleure précision), j'ai constaté que:

  • Mon premier servomoteur tournait de 1° pour une variation d'environ 8 µs
  • Mon deuxième servomoteur tournait de 1° pour une variation d'environ 12 µs
  • Mon troisième servomoteur (celui qui était responsable de soulever le crayon) avait rendu l'âme!

J'ai modifié ces paramètres de façon logicielle en écrivant:

bg.servo_1_degree_ms = -8
bg.servo_2_degree_ms = 12

Suite à ces modification, le rectangle tracé par le Brachiograph, sans être parfait, s'était un peu amélioré  (je n'avais pas encore remplacé le 3e servomoteur, d'où le gribouillis indésirable à droite du rectangle).


Il serait possible d'améliorer encore la calibration de mon traceur: 

  • en mesurant avec une meilleure précision le nombre de microsecondes correspondant à une rotation de 1°
  • en tenant compte de la non-linéarité de mes servomoteurs
  • en compensant l'hystérésis
  • en minimisant le mouvement du crayon lorsqu'il est soulevé. 

Évidemment, tout ça est expliqué en détails sur la page de BrachioGraph. Je n'ai rien fait de tout ça, parce que ma patience est somme toute assez limitée...

Reproduire l'illustration d'un fichier .jpeg

On peut s'amuser un certain temps à tracer des formes simples en utilisant des commandes comme "bg.drive_xy()", mais là où ça devient vraiment rigolo, c'est quand on utilise le BrachioGraph pour reproduire une image.

Pour ce faire, il faut d'abord convertir l'image en un fichier .json qui décrit toutes les lignes qui devront être tracées par le BrachioGraph.

(voici un extrait d'un fichier json:)


Le répertoire "BrachioGraph" créé sur votre Raspberry Pi contient les programmes nécessaires à cette conversion, mais j'ai préféré utiliser le site "brachio.me" de Rob Bricheno: vous y téléchargez votre fichier (jpeg, png ou autre), et il le transforme en un fichier json prêt à l'emploi.

Vous pouvez alors copier ce fichier json dans le répertoire BrachioGraph du Raspberry Pi, puis le faire tracer par la commande: 

bg.plot_file("nom_du_fichier.json")


Résultat: à la fois impressionnant...et un peu brouillon

Sur figure ci-dessous, de gauche à droite: le fichier original (format jpeg), la version vectorisée par le site brachio.me et, finalement, la copie réalisée, avec une certaine dose d'impressionnisme, par mon BraccioGraph. Il faudrait que j'améliore la calibration (surtout à gauche), mais c'est assez amusant, malgré tout.


Pour terminer, une vidéo montrant mon BrachioGraph au travail, pendant le début de l'illustration (environ 5 minutes sont nécessaires pour réaliser l'illustration complète).


Ressources:
À lire également

Avec du matériel similaire, vous pouvez fabriquer un robot quadrupède.


Yves Pelletier (TwitterFacebook)

Aucun commentaire:

Enregistrer un commentaire