VnRoboVnRobo
AboutPricingBlogContact
🇻🇳VISign InStart Free Trial
🇻🇳VI
VnRobo logoVnRobo logo

AI infrastructure for next-generation industrial robots.

Product

  • Features
  • Pricing
  • Knowledge Base
  • Services

Company

  • About Us
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 VnRobo. All rights reserved.

Made with♥in Vietnam
VnRoboVnRobo
AboutPricingBlogContact
🇻🇳VISign InStart Free Trial
🇻🇳VI
  1. Home
  2. Blog
  3. Build your first UMI gripper: 3D printing, assembly, and GoPro smoke test
manipulationumi3d-printinghardwaregoproassemblymanipulation

Build your first UMI gripper: 3D printing, assembly, and GoPro smoke test

Step-by-step guide to 3D printing and assembling a UMI handheld unit with GoPro — the verified path from the Stanford repo. Full BOM, print settings, and how to test before collecting your first demo.

Nguyễn Anh TuấnMay 28, 20267 min readUpdated: Oct 9, 2026
Build your first UMI gripper: 3D printing, assembly, and GoPro smoke test

Build your first UMI gripper: 3D printing, assembly, and GoPro smoke test

This is Part 2 in the UMI + VLA series. If you haven't read Part 1 yet, start there to understand why we're building this gripper.

Goal of this post: you'll have one complete UMI handheld unit, GoPro streaming, and the gripper opening and closing smoothly. This is the only physical step before recording demos.

Important: UMI uses GoPro — not RealSense or a regular webcam. The reason: the official SLAM pipeline needs the GoPro's built-in IMU and wide fisheye FOV. Part 6 covers when and how to upgrade to D405.

Bill of materials (1 unit)

Item Qty Notes
UMI 3D printed parts 1 set Download STL from the official UMI Hardware Guide / Onshape
Soft fingers (TPU) 2 Print with TPU 95A; geometry should match your robot's fingertip
Springs (return mechanism) 1 set Exact spec in hardware guide; measure closing force with caliper after assembly
Screws / heat-set inserts 1 set M2/M3 assorted; check the official BOM
GoPro Hero 7 Black or newer 1 Hero 10/11 better for video quality; Black edition has IMU
GoPro mount bracket (3D printed) 1 STL in UMI repo
Side mirrors (optional) 1 set Extra side view; can skip for first build
ArUco marker (gripper width) 1–2 Stick on jaw to measure gripper width via vision
Caliper 1 Measure min/max gripper width — critical for calibration

Estimated hardware cost (1 unit): ~$200–500 USD depending on GoPro model and filament quality.

Clone the repo and read the hardware guide

Before printing, clone the repo and review the official hardware documentation:

bash
git clone https://github.com/real-stanford/universal_manipulation_interface.git
cd universal_manipulation_interface

# See what scripts and configs are available
ls scripts/ scripts_slam_pipeline/ scripts_real/
ls diffusion_policy/config/task/

The hardware guide and official STL files are on Onshape (linked in the repo README). Don't use STL files from unofficial sources — the gripper geometry directly affects the observation gap during training.

Recommended print settings

Part Material Layer height Infill Support
Body / handle PETG 0.2 mm 40% Per overhang
Linkage / jaw PETG or Nylon 0.16–0.2 mm 50% Avoid on sliding surfaces
Finger shell PETG 0.16–0.2 mm 35% Per STL
Soft pads TPU 95A 0.16–0.2 mm 15–25% Usually none needed
GoPro bracket PETG 0.16–0.2 mm 50% May be needed

Print tips:

  • Print the body at 20% infill first to check fit before printing the final version.
  • Deburr all screw holes and sliding surfaces before assembly.
  • Let parts cool completely before inserting heat-set inserts.
  • For TPU, print slower (~30 mm/s) to avoid underextrusion.

Step-by-step assembly

Step 1: Prepare parts

Before assembly:

  1. Use a deburring tool to clean all screw holes.
  2. Test-fit the jaw/linkage into the body without screws — it should slide smoothly.
  3. Use a soldering iron to install heat-set inserts in all M3 holes on the body.
  4. Check the GoPro mount hole: the camera must sit tight, no rotation.

Step 2: Install linkage and spring

  1. Install the spring in the return mechanism position (see hardware guide for correct orientation).
  2. Attach the jaw to the body via the linkage pivot.
  3. Test open/close by hand: should be smooth, no binding, spring returns to closed.
  4. Use a caliper to measure gripper width when fully closed and fully open. Record both numbers — you'll need them when running scripts/calibrate_gripper_range.py later.

Step 3: Attach soft fingers

  1. Press TPU fingers into the finger mount. Glue is usually not needed — TPU friction is sufficient.
  2. Check that the fingers don't touch each other when fully closed.
  3. Check finger symmetry — if misaligned, grasping force distribution will be uneven.

Step 4: Mount the GoPro

  1. Mount GoPro to bracket.
  2. Attach bracket to UMI body. Bracket must be rigid — no wobble when held.
  3. Check camera angle: open the gripper and look at the GoPro preview. The camera must see:
    • Fingertip contact zone
    • Object in front of the gripper
    • Enough background for SLAM feature tracking
  4. If GoPro is pointing too directly at the fingers, reprint the bracket with more forward tilt.

Step 5: Apply ArUco marker (gripper width)

Generate and print the ArUco tag:

bash
cd universal_manipulation_interface
python scripts/gen_aruco_tag_pdf.py

Print the tag, cut it out, and stick it on the jaw per the hardware guide. The tag must be visible from the camera view in normal operating position.

Step 6: Cable management

  1. Use a cable tie or clip to secure the GoPro USB cable to the handle. Critical: if the cable is free, it will pull the gripper off-axis during motion — adding tracking error.
  2. Leave a service loop at the wrist so wrist rotation doesn't strain the cable.

Smoke tests: verify GoPro before collecting demos

Before entering the SLAM pipeline, verify GoPro is working correctly:

Test 1: Video stream

bash
# Connect GoPro via USB-C
# Check: 60fps, 1080p or 4K, fisheye mode enabled

Test 2: IMU data exists

The GoPro IMU is extracted via the official SLAM pipeline script. To verify the tool runs:

bash
python scripts_slam_pipeline/01_extract_gopro_imu.py --help

Test 3: ArUco detection

bash
python scripts/detect_aruco.py --help
python scripts/draw_aurco_detection.py --help

If the script runs and detects the tag in frame — assembly is successful.

Test 4: Verify orientation

bash
python scripts/check_gopro_orientation.py --help

This checks that the GoPro isn't mounted upside down. Run with a test clip before collecting real data.

Common errors and fixes

Error Cause Fix
Jaw binds Print warp or rough surface Reprint, lightly sand sliding surface
Camera only sees fingers Bracket angle too steep Reprint bracket with more forward tilt
Spring too strong/weak Wrong spring spec Replace per hardware guide spec
GoPro cable pulls gripper No strain relief Clamp cable to handle
ArUco not detected Tag too small or blurry Print larger, improve lighting
Heat-set insert loose Insufficient heat Re-insert with more pressure

Definition of done — before moving to Part 3

Check this list before continuing:

text
[ ] Jaw opens/closes smoothly, no binding
[ ] GoPro streams at 60fps with fisheye mode enabled
[ ] ArUco tag is detected in camera frame
[ ] Cable doesn't create tension during wrist rotation
[ ] Min/max gripper width recorded (mm)
[ ] Camera sees fingertip area + workspace ahead
[ ] scripts/check_gopro_orientation.py runs OK

If all items are checked — you're ready for Part 3: record demos and run the SLAM pipeline.

One unit or two?

If your end goal is bimanual (two arms), you'll need 2 units. But perfect the first unit before building the second — confirm everything works, then build the duplicate. Both units must have identical geometry — same STL revision, same print settings, compare caliper measurements after assembly.

References

  • UMI project page + hardware guide
  • real-stanford/universal_manipulation_interface
  • UMI paper (Chi et al., 2024)

Related posts

  • Part 1: What is UMI? Concept and pipeline overview
  • Part 3: Record single-arm demos and run the SLAM pipeline
  • Build YUBI gripper for LeRobot VLA
NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Explore VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions
umi-vla-series — Part 2/7
← What is UMI? How to collect VLA robot data without teleopCollect single-arm UMI demos and run the official SLAM pipeline →

Related Posts

Tutorial
Collect single-arm UMI demos and run the official SLAM pipeline
umislamdata-collectionPart 3
manipulation

Collect single-arm UMI demos and run the official SLAM pipeline

Step-by-step guide to recording UMI single-arm demos, running all 8 official SLAM pipeline scripts (00–07), checking data quality, and exporting replay_buffer.zarr.zip for policy training.

5/31/20267 min read
NT
Deep Dive
Manipulation
umirealsense-d405depth-cameraPart 6
manipulation

Upgrading to D405: when to replace GoPro in UMI and how

Practical guide for deciding when to upgrade from GoPro UMI to RealSense D405: what D405 brings, what you must build yourself, and the right architecture to avoid losing data quality.

6/6/20266 min read
NT
Tutorial
Go bimanual: UMI two-arm pipeline with official scripts
umibimanualtwo-armPart 5
manipulation

Go bimanual: UMI two-arm pipeline with official scripts

Scale UMI to bimanual: build 2 units, record two-arm demos, use the official demo_real_bimanual_robots.py and eval_real_bimanual_umi.py, train with umi_bimanual config. Concrete, step-by-step, no guesswork.

6/5/20267 min read
NT
VnRobo logoVnRobo logo

AI infrastructure for next-generation industrial robots.

Product

  • Features
  • Pricing
  • Knowledge Base
  • Services

Company

  • About Us
  • Blog
  • Contact

Legal

  • Privacy Policy
  • Terms of Service

© 2026 VnRobo. All rights reserved.

Made with♥in Vietnam