What MAGNUS is
MAGNUS is a robot that plays chess on a real board against a person and says its moves out loud in Spanish. I’m building it for PRONAFECYT 2026, Costa Rica’s national science fair, and the voice is there for accessibility: you can follow the game without looking at a screen. I started on february with my first 3D models. Today it plays full games by itself and narrates them.
About the hours
Hackatime only logged about 8.5 h, because it only counts time in the code editor when i downloaded the app. Most of the work was CAD, printing, assembling and testing the arm. My log puts the real total at 350+ hours
Vision
Every piece is a 22.5 mm disc with an ArUco 4x4_50 marker and a white ring around it for contrast. The four board corners have their own markers, so the board is found from any camera angle. The camera is my phone through Iriun. A piece only counts after 5 detections in a row, and a GameTracker compares what the camera sees against every legal move to work out what the human played, including castling and en passant.
Engine
Stockfish runs through python-chess with 10 difficulty levels. Stockfish can’t play below about 1320 Elo, so the four easiest levels choose worse moves on purpose. Every move comes with metadata for captures, castling, en passant and promotion, so the arm never has to know any chess.
The arm
Shoulder and elbow use the encoder motors from the mBot2 kit on a CyberPi, with a LEGO Technic frame plus printed parts. I tried a 3:1 reduction on the shoulder, couldn’t make it work, and direct drive turned out to be enough. Instead of inverse kinematics I recorded the motor angles for all 64 squares once (teach and playback), with the motors powered, because the arm bends differently when you move it by hand. The encoders are incremental, so the arm homes against physical stops every time it starts.
Magnets and the gripper
The arm carries a 12x3 mm N52 magnet that grabs a piece from about 8 mm away. Each piece has two 10x2 mm magnets, one on top for the arm and one underneath for the board, and every square has a 6x3 mm magnet below it. Neighboring pieces 32 mm away don’t move. A servo lowers the magnet, lifts the piece and releases it. Without the lift step the arm dragged pieces and knocked over the neighbors.
Problems I had to solve
Magnet holes modeled at exactly 10 mm were too tight, so I made them 10.1 to 10.2 mm to allow for FDM tolerance.
The CyberPi doesn’t report its IP, so my Mac runs a TCP server and the CyberPi connects to it as a client.
The CyberPi only sees 2.4 GHz WiFi.
mBlock’s mlink kept the serial port locked until I ran pkill -f mlink.
How the software is organized
There are three nodes (vision, engine and arm) that talk through typed messages, ROS2 style. Each hardware part has a fake backend, so the 482 tests run without the robot, and there’s a fully simulated pipeline for testing a whole game.
What’s next
Tuning arm precision: re-recording the squares where the magnet doesn’t land centered and testing the robot more with people with blind people. Also im working on a demo video with the robot working coming soon
Comments 1
demo video coming soon
Sign in to join the conversation.