manipulationumi3d-printinghardwaregoproassemblymanipulation

Lắp UMI gripper đầu tiên: in 3D, assembly, và smoke test GoPro

Hướng dẫn từng bước để in 3D và lắp ráp một UMI handheld unit với GoPro — đường đi đã được kiểm chứng từ repo Stanford. BOM đầy đủ, print settings, và cách test trước khi thu demo đầu tiên.

Nguyễn Anh Tuấn28 tháng 5, 20268 phút đọcCập nhật: 6 thg 6, 2026
Lắp UMI gripper đầu tiên: in 3D, assembly, và smoke test GoPro

Lắp UMI gripper đầu tiên: in 3D, assembly, và smoke test GoPro

Đây là bài 2 trong series UMI + VLA. Nếu bạn chưa đọc bài 1, hãy đọc trước để hiểu tại sao chúng ta cần cái gripper này.

Mục tiêu của bài này: bạn sẽ có một UMI handheld unit hoàn chỉnh, GoPro stream chạy được, và gripper mở/đóng mượt. Đây là bước vật lý duy nhất trước khi thu demo.

Quan trọng: UMI dùng GoPro — không phải RealSense hay webcam. Lý do: pipeline SLAM chính thức cần IMU của GoPro và FOV fisheye rộng. Bài 6 sẽ đề cập khi nào nên upgrade sang D405.

Bill of materials (1 unit)

Vật tư Số lượng Ghi chú
UMI 3D printed parts 1 set Tải STL từ UMI Hardware Guide / Onshape chính thức
Soft fingers (TPU) 2 In bằng TPU 95A; geometry nên giống fingertip của robot bạn dùng
Springs (return mechanism) 1 set Spec cụ thể trong hardware guide; đo lực đóng với caliper sau khi lắp
Screws / heat-set inserts 1 set M2/M3 assorted; đọc BOM chính thức để chính xác
GoPro Hero 7 Black (trở lên) 1 Hero 10/11 tốt hơn cho video quality; cần bản Black để có IMU
GoPro mount bracket (in 3D) 1 STL trong UMI repo
Side mirrors (optional) 1 set Cho extra side view; có thể bỏ qua cho lần đầu
ArUco marker (gripper width) 1-2 Dán lên jaw để đo gripper width qua vision
Caliper 1 Đo max/min gripper width — quan trọng cho calibration

Tổng chi phí phần cứng (1 unit): ~$200–500 USD tùy GoPro model và chất lượng filament.

Clone repo và đọc hardware guide

Trước khi in, hãy clone repo và xem hardware documentation chính thức:

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

# Xem danh sách scripts và configs có sẵn
ls scripts/ scripts_slam_pipeline/ scripts_real/
ls diffusion_policy/config/task/

Hardware guide và file STL chính thức nằm trên Onshape (link trong README của repo). Đừng dùng STL từ nguồn không chính thức — hình học của gripper ảnh hưởng trực tiếp đến observation gap sau này.

Part Material Layer height Infill Support
Body / handle PETG 0.2 mm 40% Theo overhang
Linkage / jaw PETG hoặc Nylon 0.16–0.2 mm 50% Tránh support trên sliding surface
Finger shell PETG 0.16–0.2 mm 35% Theo STL
Soft pads TPU 95A 0.16–0.2 mm 15–25% Thường không cần
GoPro bracket PETG 0.16–0.2 mm 50% Có thể cần

Mẹo in:

  • In thử body ở 20% infill trước để kiểm tra fit trước khi in bản final.
  • Deburr tất cả lỗ vít và sliding surface trước khi lắp.
  • Để part nguội hoàn toàn trước khi lắp heat-set inserts.
  • Với TPU, in chậm hơn (~30 mm/s) để tránh underextrusion.

Quy trình assembly từng bước

Bước 1: Chuẩn bị parts

Sau khi in xong, trước khi lắp:

  1. Dùng deburring tool hoặc dao nhỏ để làm sạch tất cả lỗ vít.
  2. Thử fit jaw/linkage vào body mà chưa lắp screw — phải trượt mượt.
  3. Dùng soldering iron để gắn heat-set inserts vào tất cả lỗ M3 trên body.
  4. Đo lỗ GoPro mount: camera phải ngồi chắc, không xoay được.

Bước 2: Lắp linkage và spring

  1. Lắp spring vào vị trí return mechanism (xem hardware guide để biết đúng orientation).
  2. Gắn jaw vào body qua linkage pivot.
  3. Test mở/đóng bằng tay: phải mượt, không vướng, spring tự đưa về đóng.
  4. Dùng caliper đo gripper width ở trạng thái đóng hoàn toàn và mở tối đa. Ghi lại 2 số này — bạn sẽ cần khi chạy scripts/calibrate_gripper_range.py sau.

Bước 3: Gắn soft fingers

  1. Press TPU fingers vào finger mount. Không dùng keo nếu không cần — TPU friction thường đủ.
  2. Kiểm tra fingers không chạm nhau khi đóng hoàn toàn.
  3. Kiểm tra fingers có symmetry — nếu lệch, force distribution khi grasping sẽ không đều.

Bước 4: Gắn GoPro

  1. Lắp GoPro vào bracket.
  2. Gắn bracket vào body UMI. Bracket phải cứng — không được lắc khi cầm.
  3. Kiểm tra góc camera: mở gripper ra, nhìn vào màn hình GoPro hoặc preview trên điện thoại. Camera phải thấy được:
    • Vùng contact của fingertip
    • Object phía trước gripper
    • Đủ background để SLAM track features
  4. Nếu GoPro quay quá thẳng vào fingers thì reprint bracket với góc nghiêng hơn về phía trước.

Bước 5: Dán ArUco marker (gripper width)

UMI đo gripper width qua ArUco tag vision. Tạo tag:

cd universal_manipulation_interface
python scripts/gen_aruco_tag_pdf.py

In tag ra giấy, cắt và dán vào jaw (vị trí theo hardware guide). Tag phải visible từ góc nhìn camera khi gripper ở trạng thái bình thường.

Bước 6: Cable management

  1. Dùng cable tie hoặc clip để cố định dây USB GoPro vào handle. Quan trọng: nếu cable tự do, nó sẽ kéo lệch gripper khi bạn vận động — gây sai số tracking.
  2. Để service loop đủ dài ở wrist để cổ tay xoay không bị căng dây.

Smoke test: kiểm tra GoPro trước khi thu demo

Trước khi bước vào pipeline SLAM, phải verify GoPro hoạt động đúng:

Test 1: Video stream

# Kết nối GoPro qua USB-C
# Mở GoPro app trên điện thoại hoặc dùng GoPro Webcam mode
# Kiểm tra: 60fps, 1080p hoặc 4K, fisheye mode bật

Test 2: IMU data có sẵn

IMU của GoPro được trích xuất qua script chính thức trong bước SLAM pipeline. Để kiểm tra sơ bộ rằng metadata tồn tại:

cd universal_manipulation_interface

# Ghi 1 clip ngắn (~30 giây), sau đó kiểm tra metadata
python scripts_slam_pipeline/01_extract_gopro_imu.py --help

Test 3: ArUco detection

python scripts/detect_aruco.py --help

# Nếu repo có script test detection live:
python scripts/draw_aurco_detection.py --help

Nếu script chạy được và detect được tag trong frame — assembly thành công.

Test 4: Verify orientation

python scripts/check_gopro_orientation.py --help

Script này kiểm tra GoPro có bị mount ngược hay không. Chạy với 1 clip thử trước khi collect data thật.

Lỗi thường gặp và cách xử lý

Lỗi Nguyên nhân Fix
Jaw bị kẹt Print warp hoặc surface rough Reprint, sand nhẹ sliding surface
Camera thấy toàn fingers Bracket angle quá steep Reprint bracket, nghiêng về phía trước
Spring quá mạnh / yếu Sai spec spring Thay spring theo hardware guide
GoPro cable kéo lệch gripper Không có strain relief Clamp cable vào handle
ArUco không detect Tag quá nhỏ hoặc mờ Print lại to hơn, cải thiện lighting
Heat-set insert lỏng Không đủ nhiệt Nung lại, press chắc hơn

Definition of done — trước khi sang bài 3

Kiểm tra checklist này trước khi tiếp tục:

[ ] Jaw mở/đóng mượt, không vướng
[ ] GoPro stream 60fps, fisheye mode bật
[ ] ArUco tag detect được trong camera frame
[ ] Cable không tạo tension khi cổ tay xoay
[ ] Đã ghi lại min/max gripper width (mm)
[ ] Camera thấy fingertip area + workspace phía trước
[ ] scripts/check_gopro_orientation.py chạy OK

Nếu tất cả checklist đã tick — bạn đã sẵn sàng cho bài 3: thu demo và chạy SLAM pipeline.

Một unit hay hai?

Nếu mục tiêu cuối của bạn là bimanual (hai tay), bạn cần in 2 units. Nhưng hãy hoàn thiện unit đầu tiên trước — đảm bảo mọi thứ hoạt động đúng, rồi mới in unit thứ hai để tiết kiệm thời gian nếu phải reprint.

Hai units phải có hình học giống hệt nhau — dùng cùng STL revision, cùng print settings, đo caliper so sánh sau khi lắp.

Nguồn tham khảo


Bài viết liên quan

NT

Nguyễn Anh Tuấn

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

Khám phá VnRobo

Bài viết liên quan

Thu demo đơn tay với UMI và chạy SLAM pipeline chính thức
manipulation

Thu demo đơn tay với UMI và chạy SLAM pipeline chính thức

31/5/20268 phút đọc
NT
Upgrade lên D405: khi nào nên thay GoPro trong UMI và cách làm
manipulation

Upgrade lên D405: khi nào nên thay GoPro trong UMI và cách làm

6/6/20267 phút đọc
NT
Lên hai tay: UMI bimanual pipeline với scripts chính thức
manipulation

Lên hai tay: UMI bimanual pipeline với scripts chính thức

5/6/20267 phút đọc
NT