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.
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.
| Subsystem | Component | Role |
|---|---|---|
| Compute | NVIDIA Jetson Orin Nano (Ampere) | Policy inference, vision pre-processing, USB serial bridge to MCU. |
| Real-time IO | Arduino Mega 2560 | Stepper pulse generation, servo PWM, endstop logic, 115200 baud uplink. |
| Stepper drive | CNC Shield V3 + 4× TMC2209 | Silent, microstepped X / Y / Z / A control with stallGuard. |
| Cartesian axes | 3× NEMA 17 + MGN12 linear rails | Coarse positioning to sub-millimeter repeatability. |
| 6-DOF arm | 2× HS-488HB · 2× MG946R · 3× s52 micro | Shoulder pitch (paired), elbow, wrist roll/pitch, gripper. |
| End-effector | Rack-and-pinion gripper · hemostatic forceps | Spur Gear (14T) + Rack Gear (10T, ×2) drives jaw on the needle. |
| Vision | Arducam IMX179 (16 MP + 8 MP) | MIPI CSI stereo for vessel + needle pose estimation. |
| Power | 24 V PSU + DC-DC buck (5 V logic) | Separate motor and logic rails, common ground. |
| Frame | 1010 aluminum extrusion + PLA | Rigid base, ~30 custom 3D-printed mounts. |
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.
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.
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.
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;
Closed-loop run.
Build + sim artifacts.











