VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. Thu demo đơn tay với UMI và chạy SLAM pipeline chính thức
manipulationumislamdata-collectiongoprodiffusion-policyreplay-buffermanipulation

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

Hướng dẫn từng bước thu demo UMI đơn tay, chạy toàn bộ 8 script SLAM pipeline chính thức (00-07), kiểm tra chất lượng data, và xuất replay_buffer.zarr.zip để train policy.

Nguyễn Anh Tuấn31 tháng 5, 20268 phút đọcCập nhật: 14 thg 6, 2026
Thu demo đơn tay với UMI và chạy SLAM pipeline chính thức

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

Đây là bài 3 trong series UMI + VLA. Bài này giả sử bạn đã có 1 UMI handheld unit hoạt động (xem bài 2).

Mục tiêu: bạn sẽ thu được ít nhất 20 demo chất lượng và xuất ra file replay_buffer.zarr.zip — đầu vào cho bài train policy ở bài 4.

Cài đặt môi trường

# Clone repo nếu chưa có
git clone https://github.com/real-stanford/universal_manipulation_interface.git
cd universal_manipulation_interface

# Tạo conda environment
conda create -n umi python=3.10 -y
conda activate umi

# Cài dependencies (theo README chính thức)
pip install -e .

Nếu repo có environment.yml hoặc requirements.txt riêng, dùng file đó thay cho pip install -e .. Kiểm tra README để xem version dependencies hiện tại.

Thiết lập workspace trước khi thu demo

1. Chọn task rõ ràng

Bắt đầu với task đơn giản, có kết quả quan sát được rõ ràng. Ví dụ tốt:

  • Nhặt một khối hình vuông (20 cm x 20 cm) từ vị trí A đặt vào vị trí B
  • Mở nắp hộp đơn giản
  • Xếp vật thể vào khay

Tránh task mà success/failure khó đánh giá tự động.

2. Chuẩn bị workspace

[ ] Bàn phẳng, đủ diện tích (~60cm x 60cm workspace)
[ ] Ánh sáng đồng đều — tránh bóng mạnh từ 1 phía
[ ] Không có vật chuyển động trong background
[ ] Object được đặt trong vùng mà robot arm có thể reach
[ ] Calibration board (ChArUco/AprilTag) đặt cạnh workspace

3. Calibration trước khi thu

Chạy calibration một lần cho mỗi setup mới:

# Kiểm tra gripper range (min/max width)
python scripts/calibrate_gripper_range.py --help

# Kiểm tra latency giữa video và IMU
python scripts/calibrate_uvc_camera_latency.py --help

# Hand-eye calibration (UMI gripper trong world frame)
python scripts/calibrate_slam_tag.py --help

Đọc --help cho từng script để biết đối số cần thiết. Mỗi script có output file riêng (JSON calibration data). Lưu vào calib/ folder và không xóa.

Thu demo: quy trình chuẩn

Bước 1: Thiết lập GoPro

  • Bật GoPro, chọn mode: Video, 4K hoặc 1080p, 60fps, Linear hoặc Fisheye mode
  • Kiểm tra battery đầy hoặc cắm nguồn
  • Kiểm tra SD card còn đủ dung lượng (~1-2 GB per 10 phút video)
  • Bật GoPro trước khi bắt đầu demo — để IMU warm up

Bước 2: Đặt ArUco calibration board

Đặt calibration board trong góc workspace, visible từ camera GoPro trong ít nhất 10 giây đầu và 10 giây cuối mỗi demo. SLAM cần board này để khởi tạo coordinate frame.

Bước 3: Thu demo

Cầm UMI gripper, đứng trước workspace:

  1. Hướng camera về calibration board ~2 giây (để SLAM khởi tạo)
  2. Thực hiện task chậm và có chủ ý — tốc độ vừa phải, không nhanh hay giật cục
  3. Mở/đóng gripper rõ ràng tại điểm grasp và release
  4. Giữ trong 1-2 giây ở điểm grasp/release để encoder data ổn định
  5. Sau task, đưa camera về board thêm 1-2 giây
  6. Dừng recording

Số lượng demo tối thiểu:

Mục đích Số demo
Smoke test pipeline 5 demos
Kiểm tra policy có học được không 20 demos
Baseline đáng tin cậy 50 demos
Production quality 100-200 demos

Bước 4: Tổ chức file

mkdir -p data/raw/task_pick_cube/session_001
# Copy video files từ GoPro vào thư mục này
# Đặt tên theo convention: demo_001.MP4, demo_002.MP4, ...

Chạy SLAM pipeline: 8 bước chính thức

Đây là core của toàn bộ quá trình xử lý. Pipeline gồm 8 script chính thức, chạy theo thứ tự:

Script 00: Process videos

python scripts_slam_pipeline/00_process_videos.py --help

Bước này xử lý raw GoPro video: chuyển đổi format, extract frames, chuẩn bị cho SLAM.

Script 01: Extract GoPro IMU

python scripts_slam_pipeline/01_extract_gopro_imu.py --help

Trích xuất dữ liệu IMU (accelerometer + gyroscope) từ metadata của file GoPro .MP4. IMU này là thứ làm UMI khác biệt với systems chỉ dùng visual odometry.

Script 02: Create map

python scripts_slam_pipeline/02_create_map.py --help

Dùng calibration board và ORB-SLAM3 để tạo sparse map của workspace. Bước này thường cần 1-2 "mapping clip" — clip chạy chậm xung quanh workspace mà không thu demo.

Nếu bước này fail: kiểm tra calibration board có visible rõ không, ánh sáng đủ không, và GoPro fisheye mode đang bật.

Script 03: Batch SLAM

python scripts_slam_pipeline/03_batch_slam.py --help

Chạy SLAM trên tất cả demo videos để tính trajectory 6DoF của gripper. Đây là bước tốn thời gian nhất (~1-5 phút per demo tùy độ phức tạp).

Expected output: file trajectory cho mỗi demo, dạng pose_left.csv hoặc tương tự.

Kiểm tra sau khi chạy:

# Trajectory phải smooth, không có jumps lớn
# Nếu có nhiều NaN hoặc pose jump > 5cm/frame → demo đó có thể bị loại

Script 04: Detect ArUco

python scripts_slam_pipeline/04_detect_aruco.py --help

Detect ArUco marker trên jaw của gripper trong mỗi frame → tính gripper width theo thời gian.

Nếu detection rate thấp (<70%): tag có thể bị blur (tốc độ quá cao), ánh sáng không đủ, hoặc tag quá nhỏ. Giải pháp: in tag lớn hơn, thu lại với tốc độ chậm hơn.

Script 05: Run calibrations

python scripts_slam_pipeline/05_run_calibrations.py --help

Kết hợp calibration data (camera intrinsics, extrinsics, timing offset) với trajectory data. Output là calibrated poses.

Script 06: Generate dataset plan

python scripts_slam_pipeline/06_generate_dataset_plan.py --help

Tạo plan file xác định: demo nào được dùng, timing window, action representation convention. Đây là nơi bạn có thể loại bỏ demo chất lượng thấp.

Review output file của bước này — nó list ra tất cả demos và validity flags. Loại bỏ demos có:

  • Trajectory không smooth (drift > threshold)
  • Gripper width detection rate thấp
  • Duration quá ngắn (<2 giây)
  • Robot IK infeasible (nếu bạn đã setup IK filter)

Script 07: Generate replay buffer

python scripts_slam_pipeline/07_generate_replay_buffer.py --help

Script cuối cùng: tổng hợp tất cả data thành replay_buffer.zarr.zip. Đây là file bạn sẽ dùng để train Diffusion Policy ở bài 4.

Verify output:

python -c "
import zarr
z = zarr.open('replay_buffer.zarr.zip', 'r')
print(z.tree())
print('Total demos:', len(z['meta']['episode_ends']))
"

Output phải có các keys: robot0_eef_pos, robot0_eef_rot_axis_angle, robot0_gripper_width, camera0_rgb.

Kiểm tra chất lượng data

Đừng train trên raw output. Kiểm tra trước:

1. Visualize trajectory của 3-5 demo ngẫu nhiên

python scripts/slam_pose_replay.py --help

Trajectory phải smooth. Nếu thấy teleport hay drift lớn → demo đó không nên dùng.

2. Check gripper width

Width signal phải:

  • Không bị stuck ở 0 hoặc max trong suốt demo (trừ lúc grasp/release)
  • Smooth, không noisy đột ngột
  • Khớp với timing bạn nhớ khi thực hiện demo

3. Check frame count

Mỗi demo phải có frame count hợp lý cho duration. Nếu FPS thực tế thấp hơn expected → video processing có vấn đề.

Cấu trúc file sau khi xử lý

data/
├── raw/
│   └── task_pick_cube/
│       └── session_001/
│           ├── demo_001.MP4
│           ├── demo_002.MP4
│           └── ...
├── processed/
│   └── task_pick_cube/
│       ├── trajectories/
│       ├── gripper_width/
│       └── dataset_plan.json
└── replay_buffer.zarr.zip   ← output cho bài 4

Lỗi thường gặp

Lỗi Nguyên nhân Fix
SLAM tracking fail Không đủ features trong background Thêm texture vào workspace (dán sticker pattern)
ArUco detection rate thấp Motion blur hoặc ánh sáng Thu chậm hơn, đèn tốt hơn, tag lớn hơn
Replay buffer thiếu key Pipeline bị interrupt Chạy lại từ script 06-07
Demo bị reject hàng loạt Workspace quá nhỏ Mở rộng workspace, tránh IK limits
IMU data missing GoPro model không support Dùng GoPro Hero 7 Black trở lên

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

[ ] Ít nhất 20 demo chất lượng đã collect
[ ] Tất cả 8 SLAM scripts đã chạy thành công
[ ] replay_buffer.zarr.zip có đầy đủ keys
[ ] Visualize 3-5 trajectories → smooth
[ ] Gripper width signal hợp lý
[ ] Dataset plan không có too many rejected demos

Nếu checklist OK — tiếp tục bài 4: train Diffusion Policy.

Nguồn tham khảo

  • real-stanford/universal_manipulation_interface
  • ORB-SLAM3 paper
  • UMI paper (Chi et al., 2024)

Khuyến nghị công cụ

Stack train/deploy cho VLA

Train trên cloud/workstation, deploy bản tối ưu xuống Jetson hoặc robot computer.

Cloud GPU for VLA / policy training Dùng cho imitation learning, diffusion policy, RL và fine-tuning model robotics. Xem cloud GPU → NVIDIA Jetson Orin NX / Orin Nano Máy deploy edge cho perception, logging và inference đã tối ưu. Xem Jetson → Hugging Face / robotics dataset hosting Lưu dataset, checkpoint và model card để workflow LeRobot/VLA dễ chia sẻ hơn. Xem platform →

Bài viết liên quan

  • Bài 2: Lắp gripper đầu tiên
  • Bài 4: Train Diffusion Policy và test trên robot
NT

Nguyễn Anh Tuấn

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

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions
umi-vla-series — Phần 3/7
← Lắp UMI gripper đầu tiên: in 3D, assembly, và smoke test GoProTrain Diffusion Policy đầu tiên với UMI và test trên robot arm →

Bài viết liên quan

Tutorial
Lên hai tay: UMI bimanual pipeline với scripts chính thức
umibimanualtwo-armPhần 5
manipulation

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

Scale UMI lên bimanual: in 2 unit, thu demo với cả hai tay, dùng demo_real_bimanual_robots.py và eval_real_bimanual_umi.py chính thức, train với config umi_bimanual. Cụ thể, step-by-step, không guesswork.

5/6/20267 phút đọc
NT
Tutorial
Train Diffusion Policy đầu tiên với UMI và test trên robot arm
umidiffusion-policytrainingPhần 4
manipulation

Train Diffusion Policy đầu tiên với UMI và test trên robot arm

Hướng dẫn train Diffusion Policy từ replay_buffer.zarr.zip của UMI, đọc hiểu training metrics, và deploy policy lên robot arm thật với eval_real_umi.py — dùng configs chính thức đã được verify.

3/6/20266 phút đọc
NT
Tutorial
Lắp UMI gripper đầu tiên: in 3D, assembly, và smoke test GoPro
umi3d-printinghardwarePhần 2
manipulation

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.

28/5/20268 phút đọc
NT
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam