De la Mécanique à ROS 2 : Mon Plongeon dans la Robotique avec le Projet Robo-Pointer

Allez, je me lance ! J'ai décidé de tenir une sorte de journal de bord de ma reconversion. Pour ceux qui débarquent, petit topo : à la base, je suis concepteur mécanicien. BTS, Licence Pro, j'ai passé pas mal de temps sur SolidWorks et CATIA. J'aime bien ça, la mécanique, c'est concret. Mais voilà, depuis un moment, ça me titillait ailleurs. L'IA qui pointe son nez partout, la programmation (Python est devenu un bon pote), l'électronique que j'avais touchée en bureau d'études... J'avais envie de connecter tout ça.
Le Déclic : Connecter les Mondes (et Sortir de la Frustration)
Ce qui m'a vraiment décidé, c'est cette frustration de voir le potentiel de l'IA d'un côté, et mon quotidien de l'autre. Fallait faire le pont. J'ai donc fait un truc un peu radical : quitter mon job pour me jeter à l'eau, en mode auto-formation totale, sur mes propres économies. Disons que ça met une certaine pression pour pas traîner !
Et puis, la robotique, c'est le domaine parfait pour moi, je crois. Ça mélange tout ce que j'aime : la mécanique, l'électronique, le code. Et surtout, il y a cette dimension qui me parle vraiment. D'abord, le plaisir presque immédiat de voir une ligne de code se traduire par un mouvement physique. C'est pas juste un résultat sur un écran, c'est un moteur qui tourne, un bras qui bouge. Il y a un côté 'ça marche pour de vrai !' qui est hyper motivant. Et au-delà de ça, l'idée qui me porte vraiment, c'est de bosser sur des machines qui, à terme, aident concrètement les gens. Pas forcément des trucs révolutionnaires tout de suite, mais contribuer à créer des outils qui ont un impact positif, qui facilitent la vie. C'est un peu ça, pour moi, 'construire le futur' dans ce domaine.
Le Projet : "Robo-Pointer Visuel" - Mon Crash Course ROS 2
Pour vraiment apprendre, il me fallait un projet concret. Pas un truc trop fou au début, mais quelque chose qui me force à utiliser les outils du métier. L'idée : un bras robotique qui utilise une caméra pour repérer un objet rouge et le suit. Le "Robo-Pointer Visuel".
L'objectif N°1, c'était clairement de démystifier ROS 2. Comprendre enfin cette "bête" : les nœuds, les topics, comment on lance les trucs, comment on débogue (surtout comment on débogue !). C'était aussi l'occasion de toucher à OpenCV pour la vision, de coder une première boucle de contrôle, et de me frotter à l'enfer (parfois) de faire causer le logiciel et le matériel. Bref, le but, c'était de mettre les mains dans le cambouis pour de vrai, avant de rêver à des robots qui plient le linge.
Le Matos et le Système : Le Choix de la Raison (et de la Communauté)
Pour le bras, j'ai opté pour le SO-100 (la version LeRobot/Hugging Face). Les raisons sont assez simples :
Il ne coûte pas un bras (c'est le cas de le dire !).
On peut imprimer les pièces en 3D – super important quand on débute et qu'on risque de casser des trucs.
La communauté ! Ça, c'est crucial. Savoir qu'il y a du monde qui utilise le même matos et qui peut potentiellement aider, ça change tout.
Et il a assez de degrés de liberté pour s'amuser.
Côté logiciel, ROS 2 Humble sur mon Ubuntu 22.04. C'est un peu le standard, donc autant partir là-dessus. L'environnement de dev, c'est du classique : Python 3.10 dans un environnement Conda (nommé lerobot
pour rester simple) et mon éditeur fétiche, VS Code.
L'Archi ROS 2 : Chacun son Job !
Pour essayer d'y voir clair, j'ai découpé le code en plusieurs morceaux, des nœuds ROS 2 :
vision_node
(Les Yeux) :Il chope les images de la caméra USB (fixée sur le poignet).
Il utilise OpenCV pour trouver les machins rouges.
Il balance les coordonnées (x,y) du plus gros sur un topic
/detected_target_point
(typegeometry_msgs/Point
). Il publie aussi les images brutes (/image_raw
) et de débug (/image_debug
).
robot_controller_node
(Le Cerveau Basic) :Il récupère les coordonnées de la cible depuis
/detected_target_point
.Il calcule l'erreur par rapport au centre de l'image.
Il décide d'une commande simple (genre "va à droite", "monte") qu'il publie sur
/robot_control_signal
(typegeometry_msgs/Vector3
).
real_robot_interface
(Les Muscles... et les Nerfs) :Lui, il écoute les ordres du contrôleur sur
/robot_control_signal
.Son boulot (le plus dur, on verra pourquoi !) : traduire ces commandes en ordres pour les moteurs Feetech du robot et les envoyer via le port série (
/dev/robot_arm
).
Cette structure permet de travailler sur chaque partie sans tout casser (en théorie !).
Première Victoire : Ça Bouge (dans le Bon Sens !) - Le Contrôle Pan
Le moment où tu te dis "Ok, je suis pas complètement à la ramasse", c'est quand le robot fait enfin ce que tu lui demandes. Pour moi, ça a été avec le Contrôle Pan (la rotation de la base, moteur ID 1). J'ai fait un contrôleur Proportionnel (P-Control), le truc le plus simple : si la cible est trop à droite (error_x > 0
), tu envoies une commande pour tourner à droite, proportionnelle à l'erreur (command_pan = Kp_pan * error_x
).
Après avoir codé ça dans les nœuds, lancé le tout... et ajusté le gain Kp_pan
une bonne dizaine de fois pour éviter que le robot soit soit une limace, soit pris de tremblements incontrôlables... ça a marché ! Le robot suivait l'objet rouge de gauche à droite. Énorme satisfaction ! Ça validait que l'architecture tenait la route, que les messages passaient, et que l'interface réussissait au moins à parler à UN moteur. Ouf !
Et Après ? La Conquête de la Verticalité (et des Maths !)
Bon, c'est cool, mon robot sait tourner la tête. Mais pour suivre un objet qui monte ou descend, il faut qu'il lève ou baisse le bras. Et là, fini le contrôle simpliste. Il faut coordonner deux moteurs (l'épaule et le coude), et ça, ça demande de se plonger dans la cinématique robotique (FK et IK). Un nouveau chapitre, avec son lot de maths et probablement de nouvelles galères... On en parle la prochaine fois !
Subscribe to my newsletter
Read articles from Koensgen Benjamin directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
