VASARA Vasara_9dan v18 CAD render: 3-DOF Cartesian gantry with 6-DOF arm and rack-and-pinion gripper
AUTONOMOUS MICROSURGERY · 2025 to 2026

VASARA

A 3-DOF Cartesian gantry plus a 6-DOF arm for autonomous microvascular suturing on 1 to 3 mm synthetic vessels. PPO trained in NVIDIA Isaac Sim, deployed sim-to-real onto a Jetson Orin Nano + Arduino Mega stack with a custom hemostatic-forceps end-effector.

CoreXY Isaac Sim PPO · RL Jetson Orin Nano Arduino Mega Fusion 360 Synopsys SCVSEF · Mar 2026
0.18 mm
Mean radial error · sim, n=60
0.24 mm
Mean radial error · physical, n=40
15.7 ms
Physical control-loop · σ 1.75
$< 500
Total bill of materials
VASARA research poster: clinical problem, hardware architecture, vision-based control, methodology, results, and conclusions
Research poster · Synopsys SCVSEF 2026 Click to enlarge
01 · HARDWARE

Two coupled kinematic chains.

A 3-DOF Cartesian gantry on MGN12 linear rails coarse-positions the workspace. A 3D-printed 6-DOF arm rides the Z carriage, ending in a custom rack-and-pinion gripper built around hemostatic forceps. The whole system targets 1 to 3 mm synthetic venous tissue.

SubsystemComponentRole
ComputeNVIDIA Jetson Orin Nano (Ampere)Policy inference, vision pre-processing, USB serial bridge to MCU.
Real-time IOArduino Mega 2560Stepper pulse generation, servo PWM, endstop logic, 115200 baud uplink.
Stepper driveCNC Shield V3 + 4× TMC2209Silent, microstepped X / Y / Z / A control with stallGuard.
Cartesian axes3× NEMA 17 + MGN12 linear railsCoarse positioning to sub-millimeter repeatability.
6-DOF arm2× HS-488HB · 2× MG946R · 3× s52 microShoulder pitch (paired), elbow, wrist roll/pitch, gripper.
End-effectorRack-and-pinion gripper · hemostatic forcepsSpur Gear (14T) + Rack Gear (10T, ×2) drives jaw on the needle.
VisionArducam IMX179 (16 MP + 8 MP)MIPI CSI stereo for vessel + needle pose estimation.
Power24 V PSU + DC-DC buck (5 V logic)Separate motor and logic rails, common ground.
Frame1010 aluminum extrusion + PLARigid base, ~30 custom 3D-printed mounts.
02 · CAD

Designed across 18 revisions.

The full assembly is parametric in Fusion 360. Drag the model below to orbit. Pinch or scroll to zoom. The component tree underneath is exported live from the latest design.

LOADING MODEL…
FIG 01 · Vasara_9dan v18 · Fusion 360 export Drag · scroll · pinch
Detail of the 6-DOF arm with paired shoulder servos and the rack-and-pinion gripper
FIG 02 · 6-DOF arm + rack-and-pinion gripper · work in progress Mar 2026
Two synthetic vessel specimens on a surgical mat, one sutured and one cut
FIG 03 · Synthetic test specimens Bench validation
03 · SOFTWARE

CAD → URDF → Isaac → Jetson → Arduino.

The Fusion 360 occurrence tree is the source of truth. A custom mapper emits a URDF and an Isaac Lab config from it; a PPO policy is trained in Isaac Sim with domain randomization; the trained policy runs on the Jetson and emits joint targets over UART to the Arduino, which generates step pulses.

CAD
Fusion 360
Vasara_9dan v18
Translate
treemapper
URDF + Isaac config
Train
Isaac Lab · PPO
Domain randomization · 256 envs
Deploy
Jetson Orin Nano
TensorRT · 115200 baud uplink
Drive
Arduino Mega
Step pulses · servo PWM · endstops

PPO reward (intent, not magic)

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. Weights are tuned per campaign.

R(s, a) =
    w_pos·Rpos(s)// puncture-site radial error
  + w_sp·Rspacing(s)// 1.0 mm ± 0.2 mm stitch interval
  + w_t·Rtension(s, a)// 0.20 to 0.50 N peak band
  + w_lat·Rlatency(s)// penalize control-loop overruns
  + w_rel·Rrelease(s, a)// clean needle release
   Ptear(s)// hard penalty: cheese-wire / lumen tear

MCU firmware

A 12-channel servo controller addresses the arm joints over digital pins D2 through D13 with two step sizes (5° coarse, 1° fine). The production firmware reuses the same servo array but speaks SLIP-framed commands over the Mega's USB-serial channel from the Jetson rather than the IR-remote prototype path.

// 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;
FIG 04 · 12-channel servo controller Arduino Mega · 164 lines
04 · DEMO

Closed-loop run.

FIG 05 · Closed-loop targeting demo · RTX path-traced 10 s · MP4