IA & Robotique đ€ : Piloter l'Esieabot via le protocole MCP
1. Introduction : Le projet Esieabot
Section intitulĂ©e « 1. Introduction : Le projet Esieabot »LâEsieabot est le robot pĂ©dagogique emblĂ©matique de lâESIEA. BasĂ© sur un micro-ordinateur Raspberry Pi, il est le terrain dâexpĂ©rimentation privilĂ©giĂ© pour lâapprentissage de lâĂ©lectronique, du rĂ©seau et de la programmation systĂšme.
Traditionnellement, un robot se pilote via une tĂ©lĂ©commande ou un script prĂ©-enregistrĂ©. Lâobjectif de ce projet est de briser cette barriĂšre : permettre Ă une Intelligence Artificielle (Claude) de âprendre possessionâ du robot pour exĂ©cuter des ordres complexes donnĂ©s en langage naturel.
2. Le Concept : Quâest-ce que le protocole MCP ?
Section intitulĂ©e « 2. Le Concept : Quâest-ce que le protocole MCP ? »Le Model Context Protocol (MCP) est une innovation majeure introduite par Anthropic.
GrĂące au MCP, lâIA ne se contente pas de âparlerâ du robot : elle peut interroger ses capteurs et actionner ses moteurs en comprenant dâelle-mĂȘme les capacitĂ©s du matĂ©riel.
3. Architecture Technique : Le choix de lâautonomie
Section intitulĂ©e « 3. Architecture Technique : Le choix de lâautonomie »Pour ce projet, jâai implĂ©mentĂ© une architecture dite âembarquĂ©eâ. Le but Ă©tait de faire tourner le serveur MCP directement sur le Raspberry Pi du robot, plutĂŽt que dâavoir un serveur externe sur un PC qui communiquerait avec le robot via SSH ou une API.
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ ARCHITECTURE A â MCP SUR LE PI ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€â ââ Votre PC Raspberry Pi ââ âââââââââââââââââ HTTP (port 8000) ââââââââââââââââââââ ââ â Claude â âââââââââââââââââââââââș â Serveur MCP â ââ â Desktop â JSON-RPC 2.0 â (server.py) â ââ â (client MCP) â â â â ââ âââââââââââââââââ â ⌠â ââ â ââââââââââââââ â ââ â â pigpiod â â ââ â â (GPIO) â â ââ â âââââââââââââ†â ââ â â Moteurs â â ââ â â Servos â â ââ â â CamĂ©ra â â ââ â ââââââââââââââ â ââ ââââââââââââââââââââ ââ ââ â
Tout est sur le robot, autonome ââ ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââPourquoi ce choix ?
Section intitulée « Pourquoi ce choix ? »En plaçant le serveur MCP directement sur le Raspberry Pi du robot, celui-ci devient une entité intelligente indépendante sur le réseau. Je trouvais cette architecture plus fun !
4. Réalisation du systÚme
Section intitulée « 4. Réalisation du systÚme »La structure modulaire
Section intitulĂ©e « La structure modulaire »Le code a Ă©tĂ© conçu pour ĂȘtre robuste et facile Ă maintenir, en sĂ©parant strictement chaque fonction vitale du robot :
- Pilotage Moteur (
motors.py) : Gestion des dĂ©placements (Avancer, tourner, sâarrĂȘter). - Vision Artificielle (
camera.py) : Capture de preuves visuelles et transmission Ă lâIA. - SystĂšme Nerveux (
server.py) : Le serveur MCP qui fait le pont entre le code Python et lâIA Claude.
Répertoiremcp-esieabot/
- .gitignore
- pyproject.toml â Auto-dĂ©tection pigpio (stub / local / remote)
- server.py â Serveur MCP principal
RĂ©pertoirelivrable/ â Contient les photos âlivrableâ pour notation
- âŠ
Répertoirerobot/
- __init__.py â Auto-dĂ©tection pigpio (stub / local / remote)
- motors.py â ContrĂŽle des moteurs
- servos.py â ContrĂŽle des servomoteurs
- camera.py â Capture photo (locale ou SSH)
- stub.py â Faux pigpio pour dev local (PC)
- README.md
Gestion des risques (Safety)
Section intitulĂ©e « Gestion des risques (Safety) »Un point dâhonneur a Ă©tĂ© mis sur la sĂ©curitĂ© physique. En robotique, un bug logiciel peut entraĂźner un dommage matĂ©riel. Jâai utilisĂ© le mĂ©canisme de lifespan pour garantir quâen cas de dĂ©connexion ou dâerreur, les moteurs se coupent instantanĂ©ment (Fail-Safe).
5. LâIA au cĆur du robot : Comment Claude comprend-il le MCP ?
Section intitulĂ©e « 5. LâIA au cĆur du robot : Comment Claude comprend-il le MCP ? »Le catalogue dâoutils : La clĂ© de lâintelligence physique
Section intitulĂ©e « Le catalogue dâoutils : La clĂ© de lâintelligence physique »LâIA utilise le dĂ©corateur @mcp.tool() pour dĂ©couvrir le âcatalogueâ des fonctions du robot. Elle ne voit pas du code, mais une description structurĂ©e (JSON-RPC) qui lui indique : âVoici comment faire avancer le robot et quels paramĂštres utiliser.â
Voici quelques outils disponible sur lâesieabot :
Zoom sur un code dâoutil : identify
Section intitulĂ©e « Zoom sur un code dâoutil : identify »Rien de mieux quâun exemple pour bien comprendre le fonctionnement dâune technologie.
@mcp.tool()def identify(verbose: bool = False) -> str:"""Retourne les informations d'identification du robot."""import socketimport platform
info = f"esieabot â {socket.gethostname()}"if verbose: info += f"\n OS: {platform.platform()}" if platform.system() == "Linux": import subprocess uptime = subprocess.check_output(["uptime", "-p"]).decode().strip() ip = subprocess.check_output(["hostname", "-I"]).decode().strip().split()[0] info += f"\n IP: {ip}" info += f"\n Uptime: {uptime}" else: info += f"\n IP: {socket.gethostbyname(socket.gethostname())}" info += "\n Uptime: N/A (Windows)"return info result: "esieabot - esieabot-d1f104 OS: Linux-6.6.31+rpt-rpi-v6-armv6l-with-glibc2.36 IP: 192.168.1.105 Uptime: up 1 hour, 20 minutes"Lâoutil identify illustre parfaitement la philosophie du protocole MCP :
- Exposition dynamique : Grùce au décorateur
@mcp.tool(), la fonction est automatiquement enregistrĂ©e dans le catalogue de capacitĂ©s du robot. Claude âdĂ©couvreâ alors lâexistence de cette commande et sa documentation sans aucune configuration manuelle. - GranularitĂ© des donnĂ©es : Lâutilisation du paramĂštre
verbosepermet Ă lâIA de choisir le niveau de dĂ©tail souhaitĂ©. En mode standard, elle obtient le nom du robot ; en mode dĂ©taillĂ©, elle rĂ©cupĂšre des informations critiques pour lâadministration systĂšme (IP, OS, Uptime). - Abstraction matĂ©rielle : Le code reste simple, mais sa portĂ©e est immense : il transforme des donnĂ©es systĂšme brutes en une rĂ©ponse structurĂ©e que lâIA peut interprĂ©ter pour diagnostiquer lâĂ©tat du rĂ©seau ou de la machine.
Câest cette simplicitĂ© de mise en Ćuvre qui fait du MCP un standard redoutable pour lâIoT et la robotique.
La caméra
Section intitulĂ©e « La camĂ©ra »Notre robot est Ă©quipĂ© dâune camĂ©ra compatible CSI, offrant une rĂ©solution de 8MP. Pour capturer une photo, jâutilise la bibliothĂšque libcamera-still en subprocess qui interagit directement avec le matĂ©riel de la camĂ©ra.
import subprocessfrom pathlib import Pathfrom datetime import datetime
class CameraController: def __init__(self, capture_dir: str = "/tmp/esieabot_captures"): self.capture_dir = Path(capture_dir) self.capture_dir.mkdir(parents=True, exist_ok=True)
def capture(self) -> dict: """Prend une photo et renvoie le chemin du fichier.""" timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"capture_{timestamp}.jpg" filepath = self.capture_dir / filename
try: subprocess.run([ "libcamera-still", "-o", str(filepath), "--width", "640", "--height", "480", "-t", "500", "--nopreview", "--hflip", "--vflip" ], check=True, capture_output=True, timeout=15)
if not filepath.exists(): return {"status": "error", "message": "Le fichier n'a pas été créé."}
return { "status": "success", "path": str(filepath.absolute()) } except Exception as e: return {"status": "error", "message": str(e)}
6. Claude, lâIA qui pilote le robot
Section intitulĂ©e « 6. Claude, lâIA qui pilote le robot »Claude, dĂ©veloppĂ© par Anthropic, est une IA de nouvelle gĂ©nĂ©ration conçue pour ĂȘtre plus sĂ»re et plus contrĂŽlable que les modĂšles prĂ©cĂ©dents. GrĂące au protocole MCP, Claude peut interagir avec le robot de maniĂšre intelligente, en comprenant les capacitĂ©s du matĂ©riel et en adaptant ses commandes en fonction du contexte. Voici comment installer le client MCP sur votre machine pour communiquer avec le robot :
- Naviguer jusquâau fichier
claude_desktop_config.jsondans le répertoire\AppData\Local\Packages\Claude_pzs8sxrjxfjjc\LocalCache\Roaming\Claudesur Windows - Ajouter la configuration suivante pour le client MCP :
"mcpServers": { "esieabot": { "command": "npx", "args": [ "mcp-remote", "http://192.168.1.105:8000/mcp", "--allow-http" ] } }- Redémarrer Claude Desktop pour que les changements prennent effet.
7. Le déploiement sur le Raspberry Pi 0 : Un défi de taille (mémoire)
Section intitulĂ©e « 7. Le dĂ©ploiement sur le Raspberry Pi 0 : Un dĂ©fi de taille (mĂ©moire) »Le dĂ©ploiement du serveur MCP sur le Raspberry Pi 0 a Ă©tĂ© lâĂ©tape la plus complexe du projet. Avec seulement 512 Mo de RAM, le Pi 0 est un matĂ©riel trĂšs limitĂ©, et les bibliothĂšques modernes utilisĂ©es par le SDK MCP sont gourmandes en ressources.
Mis Ă part cela, lâinstallation a Ă©tĂ© relativement fluide, et le serveur MCP a pu ĂȘtre lancĂ© sans encombre sur le Pi 0, dĂ©montrant ainsi la viabilitĂ© de lâarchitecture choisie.
8. Test en conditions réelles
Section intitulĂ©e « 8. Test en conditions rĂ©elles »Voici une vidĂ©o de dĂ©monstration du robot en action, exĂ©cutant des commandes donnĂ©es par lâIA Claude via le protocole MCP :
9. Bilan : Arbitrage Performance vs Fonctionnalités
Section intitulĂ©e « 9. Bilan : Arbitrage Performance vs FonctionnalitĂ©s »Ce projet a Ă©tĂ© un vĂ©ritable exercice dâingĂ©nierie sous contrainte. Sur un matĂ©riel aussi modeste que le Raspberry Pi 0, chaque outil (tool) ajoutĂ© consomme des ressources critiques.
Une réflexion stratégique sur les Tools
Section intitulĂ©e « Une rĂ©flexion stratĂ©gique sur les Tools »Jâai dĂ» mener une rĂ©flexion approfondie sur le choix des outils Ă implĂ©menter :
- Optimisation du catalogue : PlutĂŽt que de multiplier les fonctions lourdes, jâai privilĂ©giĂ© des outils âatomiquesâ et lĂ©gers pour ne pas saturer le processeur lors de lâanalyse de Claude.
- RĂ©duction de la latence : Chaque import Python a Ă©tĂ© scrutĂ© pour garantir que le robot rĂ©ponde en temps rĂ©el. Un catalogue trop chargĂ© aurait rendu lâinteraction avec lâIA saccadĂ©e ou instable.
Conclusion : Ce projet dĂ©montre que lâIA physique est possible, mĂȘme sur du matĂ©riel âlow-costâ, Ă condition de faire des choix dâarchitecture cohĂ©rents. En cybersĂ©curitĂ©, cette capacitĂ© Ă optimiser des systĂšmes contraints est une force pour dĂ©ployer des solutions de terrain agiles et autonomes. Ressources du projet :
- Lien vers le code source (GitLab)
- Cours de Sébastien LARINIER & Antoine LEBLANC (un grand merci à eux pour leur enseignement inspirant et ce projet passionnant !)