I. Stakes
Microvascular suturing is precise work: vessels 1 to 3 mm across, stitch spacing measured in fractions of a millimeter, forces that tear tissue if they drift outside a narrow band. VASARA tests how much of that a $500 machine can do on its own: a trained policy that plans and places stitches with no operator in the loop.
II. Constraints
- BudgetUnder $500 total bill of materials
- Tissue1 to 3 mm synthetic venous vessels
- ComputeJetson Orin Nano for inference, Arduino Mega for real-time IO
- Control loop15.7 ms physical loop time (σ 1.75, measured)
- Frame1010 aluminum extrusion, ~30 custom 3D-printed mounts
III. Decisions
Two coupled kinematic chains
A Cartesian gantry on MGN12 linear rails does the coarse positioning; a 3D-printed 6-DOF arm rides the Z carriage and does the fine work, ending in a rack-and-pinion gripper built around hemostatic forceps. Splitting coarse and fine motion means neither chain has to be good at the other's job, which is what makes sub-millimeter repeatability possible on hobby-grade parts.


| Subsystem | Component | Role |
|---|---|---|
| Compute | NVIDIA Jetson Orin Nano | Policy inference, vision pre-processing, serial bridge |
| Real-time IO | Arduino Mega 2560 | Stepper pulses, servo PWM, endstops, 115200 baud uplink |
| Stepper drive | CNC Shield V3 + 4× TMC2209 | Silent microstepped X/Y/Z/A with stallGuard |
| Axes | 3× NEMA 17 + MGN12 rails | Coarse positioning, sub-millimeter repeatability |
| Arm | 2× HS-488HB · 2× MG946R · 3× s52 micro | Shoulder (paired), elbow, wrist roll/pitch, gripper |
| End-effector | Rack-and-pinion gripper + hemostatic forceps | 14T spur, 2× 10T racks driving the jaw |
| Vision | Arducam IMX179 (16 MP + 8 MP) | Stereo vessel + needle pose estimation |
| Power | 24 V PSU + DC-DC buck | Separate motor and logic rails, common ground |
One pipeline from CAD to step pulses
The Fusion 360 occurrence tree is the single source of truth. A custom mapper emits a URDF and an Isaac Lab config from it; a PPO policy trains in Isaac Sim against 256 domain-randomized environments; the trained policy runs on the Jetson and streams joint targets over UART to the Arduino, which generates the step pulses.
- 01 · CADFusion 360 · Vasara_9dan v18
- 02 · Translatetreemapper → URDF + Isaac config
- 03 · TrainIsaac Lab · PPO · domain randomization, 256 envs
- 04 · DeployJetson Orin Nano · TensorRT · 115200 baud uplink
- 05 · DriveArduino Mega · step pulses, servo PWM, endstops
Shaping the reward
A naive distance reward collapses into cheese-wiring: the agent rips the vessel because it gets to the target fastest.
The shaped reward keeps speed in tension with vessel safety, and the weights are tuned per campaign. Every term below exists because the policy found a way to cheat without it.
R(s, a) =
w_pos · R_pos(s) # puncture-site radial error
+ w_sp · R_spacing(s) # 1.0 mm ± 0.2 mm stitch interval
+ w_t · R_tension(s,a) # 0.20 to 0.50 N peak band
+ w_lat · R_latency(s) # penalize control-loop overruns
+ w_rel · R_release(s,a) # clean needle release
− P_tear(s) # hard penalty: cheese-wire / lumen tear
IV. What shipped
The full loop runs: camera to policy to UART to step pulses, closed-loop on physical hardware. The MCU firmware drives twelve servo channels on pins D2 through D13 with coarse and fine step sizes; production firmware speaks SLIP-framed commands from the Jetson over USB serial, replacing the IR-remote prototype path shown below.
// Arduino Mega · 12-channel servo controller
#include <Servo.h>
#include <IRremote.hpp>
// Digital pins 2-13 each drive one servo channel.
const uint8_t servoPins[12] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
Servo servos[12];
int servoAngles[12];
const int DEFAULT_ANGLE = 90;
const int STEP_COARSE = 5;
const int STEP_FINE = 1;
V. Results
The money result
0.18 mm in sim, 0.24 mm on hardware. The gap is the finding.
Sim-only claims are free; the physical number is what counts. Mean radial error at the puncture site, measured across independent runs on the assembled machine.
The 0.06 mm sim-to-real gap held up because the things that break transfer, latency, backlash, servo slop, were either measured and modeled or randomized away during training. The judges at SCVSEF gave the project the Dr. Michael V. McCusker Award and an Honorable Mention in Biological Science & Engineering.
VI. What I learned
- Reward shaping is failure-mode engineering. Every term in the reward exists because the policy found a way to cheat without it. The cheese-wiring penalty taught me more about RL than any tutorial.
- The sim-to-real gap is a measurement, not a vibe. Publishing both numbers with sample sizes, 0.18 sim against 0.24 physical, is more credible than either number alone.
Colophon
- Dr. Michael V. McCusker Award
- Honorable Mention, Biological Science & Engineering
- Research poster, Synopsys SCVSEF 2026