Meet Rupert: 5-DOF 3D-printed arm with Isaac Sim sim-to-real mirroring, MicroPython firmware, and an MCP server for natural language control
I've been building Rupert, a 5-axis 3D-printed robotic arm, and Isaac Sim ended up being the centerpiece of the project. Sharing it here because the sim-to-real loop is where most of the interesting engineering happened.
The setup
- 5 DOF arm, fully 3D printed
- MG90S servos on wrist/gripper, larger servos on base/shoulder
- Raspberry Pi Pico running MicroPython for low-level servo control
- USB serial bridge between the Pico and the host running Isaac Sim
- Per-servo duty cycle calibration table on the firmware side (MG90S units are wildly inconsistent)
Three control modes, same hardware
- Direct Python scripting — host sends joint targets straight to the Pico. Useful for repeatable trajectories and calibration sweeps.
- Isaac Sim sim-to-real mirroring — the URDF runs in Isaac Sim and the physical arm mirrors joint states in real time. This is the mode I use to validate motions before they touch the hardware.
- Natural language via an MCP server — a Claude MCP server exposes the arm's motion primitives as tools, so I can describe a motion in plain English and it gets decomposed into joint commands.
Things that bit me along the way
- RTX 5060 (Blackwell) was not playing nice with Isaac Sim until I downgraded to NVIDIA driver 591.59.
pyserialimport errors disappear once you use Isaac Sim's bundled Python interpreter instead of the system one.- Movement fluidity is dominated by firmware-side trajectory shaping, not by control loop rate.
Repo (code, URDF, firmware, MCP server, architecture diagram): https://github.com/RaoneGSC/rupert
Happy to go deep on any part of the pipeline — especially the Isaac Sim integration if anyone's setting up something similar. Feedback welcome.