Thu thập dữ liệu robot luôn là cổ chai của mọi pipeline VLA. Mỗi episode teleoperation đòi hỏi một robot thật đang hoạt động tốt, một operator lành nghề, và hàng giờ setup — trung bình 62.1 giây mỗi demo. Cộng dồn qua hàng nghìn episode, chi phí là khổng lồ, và kỹ năng của robot vẫn bị nhốt trong một hoặc vài môi trường cố định.
EgoHumanoid — công trình từ OpenDriveLab và MMLab @ HKU, được chấp nhận tại Robotics: Science and Systems (RSS) 2026 — đặt ra câu hỏi: liệu có thể thay thế phần lớn robot teleoperation bằng egocentric demonstrations của người đội VR headset không?
Câu trả lời là có, và kết quả vượt kỳ vọng: co-training với human demos đạt 82% success rate ở môi trường chưa thấy bao giờ, cao hơn robot-only baseline tới 51 điểm phần trăm. Toàn bộ code public tại github.com/OpenDriveLab/EgoHumanoid với giấy phép Apache 2.0.
Tổng quan EgoHumanoid — nguồn: arXiv:2602.10106, OpenDriveLab & MMLab @ HKU
Vì sao người có thể dạy robot?
Humanoid được thiết kế để hoạt động giống người — hai chân đi đứng, hai tay thao tác, camera gắn trên đầu ở tầm nhìn gần giống người. Unitree G1 cao 1.3m với ZED X Mini gắn trên đầu. Người đội VR headset cao trung bình 1.7m, camera tương tự cũng gắn trên đầu.
Nếu một người bước vào phòng, nhìn bằng camera egocentric rồi cầm nắm vật thể, thì dữ liệu đó cực kỳ giống những gì G1 sẽ quan sát khi làm cùng việc. Chỉ có ba khoảng cách cần thu hẹp:
- View gap — camera người ở ~1.7m, camera G1 ở ~1.3m, góc nhìn và perspective khác nhau
- Action gap — chuyển động tay người cần được map sang end-effector commands của robot
- Navigation gap — người di chuyển tự nhiên, không có locomotion command labels
EgoHumanoid giải quyết đúng ba khoảng cách đó qua pipeline view alignment, action alignment và locomotion command extraction — tất cả tự động, không cần annotate thủ công.
Hardware setup: PICO VR + ZED X Mini
Thu thập human demonstration
Người demo đội PICO VR headset gắn 5 motion trackers theo dõi full-body pose (24 keypoints trên thân, 26 điểm mỗi bàn tay). Camera ZED X Mini stereo gắn trên đầu headset, capture egocentric RGB ở độ phân giải 960×540, tần số 20Hz. Handheld PICO controllers theo dõi wrist pose 6-DoF và trigger điều khiển Dex3 dexterous hand.
Kết quả mỗi episode human demo bao gồm: synchronized egocentric RGB + wrist poses 6-DoF + navigation commands (forward/back, lateral, yaw, stand/squat) + grasp state. Thời gian thu thập: 39.7 giây/episode — nhanh gần gấp đôi so với robot teleoperation (62.1 giây/episode).
Thu thập robot demonstration
G1 được điều khiển từ xa bằng PICO VR headset + handheld controllers — operator nhìn qua luồng camera ZED trên G1. Cùng loại dữ liệu được ghi lại nhưng tốn nhiều công hơn: phải setup robot thật, xử lý latency, và đảm bảo workspace an toàn. Dataset final bao gồm cả robot data và human data đã aligned, cùng convert sang định dạng LeRobot.

View Alignment: Thu hẹp khoảng cách góc nhìn
Đây là challenge kỹ thuật phức tạp nhất. Camera người ở 1.7m, camera G1 ở 1.3m. Nếu trộn thẳng ảnh từ hai nguồn vào train, mô hình sẽ bối rối vì cùng phòng nhìn từ hai chiều cao cho ra perspective khác nhau đáng kể — đồ vật gần camera person sẽ trông lớn hơn, góc nhìn xuống sàn khác nhau, tỷ lệ cảnh thay đổi.
Pipeline view alignment giải quyết theo 3 bước liên tiếp:
Bước 1 — Depth estimation với MoGe: MoGe (Monocular Geometric Estimator) xử lý từng frame egocentric để ước tính affine-invariant depth map. MoGe không cần camera calibration cứng và cho kết quả ổn định trên diverse indoor scenes — ưu điểm quan trọng khi human demo thu thập ở nhiều phòng khác nhau.
Bước 2 — Point cloud reprojection: Từ depth map và camera intrinsics, xây point cloud 3D của cảnh. Sau đó dịch chuyển camera xuống 0.25m (từ chiều cao người về chiều cao robot) và reproject point cloud sang 2D frame mới với G1 camera intrinsics. Trong training, thêm Gaussian noise ±0.05m vào offset height để model robust hơn với variation thực tế.
Bước 3 — Inpainting vùng thiếu: Sau khi reproject, một số vùng trong ảnh bị trống (phần dưới sàn gần camera hay vùng bị che từ góc nhìn thấp hơn). Stable Diffusion 2.0 (20 denoising steps, classifier-free guidance scale 7.5) fill những vùng đó dựa trên context xung quanh. Kết quả là ảnh semantically giống egocentric human nhưng nhìn từ góc độ của G1.

Action Alignment: Map chuyển động người sang robot action space
Người demo không điều khiển robot, nên không có robot action labels nào được ghi sẵn. EgoHumanoid suy ra actions tương đương từ wrist pose tracking và body keypoints:
Upper body — Delta end-effector (6-DoF per arm)
Wrist pose 6-DoF từ PICO controllers được xử lý thành delta end-effector commands:
# Giả mã quá trình action alignment upper body
wrist_poses = load_pico_controller_data(episode) # 100Hz
# Smooth trajectory với Savitzky-Golay filter
smoothed = savgol_filter(
wrist_poses,
window_length=11, # 110ms window
polyorder=3, # bậc 3 — đủ mịn, không quá smooth
axis=0
)
# Delta EEF trong SO(3) — dùng log/exp maps để interpolation đúng
delta_translation = smoothed[1:] - smoothed[:-1]
delta_rotation = SO3.log(SO3.exp(smoothed[:-1]).inv() * SO3.exp(smoothed[1:]))
# Downsample 100Hz → 20Hz (control freq của G1)
delta_eef = downsample(np.cat([delta_translation, delta_rotation], axis=-1), factor=5)
Savitzky-Golay với window 11 (110ms) và bậc 3 loại bỏ jitter tay người hiệu quả — tay người dao động ~5-10Hz trong quá trình cầm nắm, G1 controller không xử lý được jitter đó.
Lower body — Discretized locomotion commands
Người di chuyển liên tục, không có discrete velocity commands. EgoHumanoid đơn giản hóa thành 3-bin discretization:
| Channel | Bins | Ý nghĩa |
|---|---|---|
| Forward velocity | 3 | backward / still / forward |
| Lateral velocity | 3 | right / still / left |
| Yaw velocity | 3 | clockwise / still / counter-clockwise |
| Height | 2 | stand / squat |
Phân loại dựa trên body keypoint velocity từ motion trackers. Height binary (stand/squat) từ pelvis height thresholding. Đây là đơn giản hóa có chủ ý — G1's low-level locomotion controller nhận bin commands, không phải raw velocity, nên discretization là format đúng.
Gripper control
Binary open/close state từ finger curvature của Dex3 hand. Threshold được calibrate theo anatomy của người demo — mỗi người có curvature tự nhiên khác nhau khi "open" so với "gripping".
Policy model: Fine-tune π₀.₅
Sau khi human demo đã qua view + action alignment và convert sang LeRobot format bằng data_alignment/convert_to_lerobot.py, pipeline co-train π₀.₅ (pi-zero-5, open-source VLA từ Physical Intelligence) trên mixed dataset:
Kiến trúc action output
18-D action vector ở mỗi step:
[0:6] → delta EEF tay trái (3D translation + 3D rotation)
[6:12] → delta EEF tay phải (3D translation + 3D rotation)
[12:14] → locomotion (forward, lateral)
[14] → yaw rotation
[15:17] → gripper state (left, right) — binary open/close
[17] → height delta (stand/squat)
Action chunk size = 50 steps (~2.5 giây ở 20Hz) — mô hình predict 50 actions liên tiếp mỗi inference call, giúp smooth trajectory và giảm latency bottleneck.
Training hyperparameters
| Tham số | Giá trị |
|---|---|
| Input image size | 224×224 RGB |
| Input text | Language instruction |
| Learning rate | 5×10⁻⁵ (AdamW) |
| Batch size | 256 |
| Training steps | 20,000 |
| Hardware | 8× NVIDIA A100 |
| Mixed precision | bfloat16 |
VRAM requirements
| Mode | VRAM tối thiểu |
|---|---|
| Inference | >8 GB |
| LoRA fine-tuning | >22.5 GB |
| Full fine-tuning | >70 GB |
Với RTX 4090 (24GB VRAM), LoRA là lựa chọn thực tế. Với A100/H100 80GB, có thể full fine-tune. Paper dùng 8× A100 cho co-training nhưng inference có thể chạy trên một GPU consumer-grade đủ mạnh.
Cài đặt và chạy thử
# Clone repo
git clone https://github.com/OpenDriveLab/EgoHumanoid.git
cd EgoHumanoid
# Cài đặt dependencies (khuyến nghị conda env Python 3.10)
pip install -e .
# Download sample dataset từ HuggingFace (gồm cả robot và human demo)
# Xem README để lấy link cụ thể
# BƯỚC 1: Chạy toàn bộ human data alignment pipeline
bash data_alignment/human_data_process/run_human_data_pipeline.sh \
--input_dir /path/to/raw_human_demos \
--output_dir /path/to/aligned_demos
# Pipeline gồm các sub-steps:
# - view_alignment/viewport_transform_batch_h5.py (MoGe depth → reproject)
# - view_alignment/cache_3d.py (cache depth computation)
# - action_alignment/process_navigation_pipeline.py (locomotion command extraction)
# - action_alignment/add_hand_status.py (gripper label từ finger curvature)
# BƯỚC 2: Convert sang LeRobot format
python data_alignment/convert_to_lerobot.py \
--input_dir /path/to/aligned_demos \
--output_dir /path/to/lerobot_dataset \
--robot_data_dir /path/to/robot_demos # mix robot + human
# BƯỚC 3: Fine-tune π₀.₅ (cần GPU với VRAM lớn)
python scripts/train.py \
--config configs/egohumanoid_g1.yaml \
--dataset_path /path/to/lerobot_dataset
# BƯỚC 4: Serve policy (inference server)
python scripts/serve_policy.py \
--checkpoint /path/to/checkpoint \
--port 8000
# BƯỚC 5: Deploy lên G1 (chạy trên robot)
python scripts/deploy.py \
--policy_server http://<server_ip>:8000 \
--robot_ip <g1_ip>
Lưu ý quan trọng: View alignment (MoGe + SD 2.0 inpainting) tốn khoảng 2-3 phút/episode trên A100. Với 1000 episodes human data, cần ~40-50 GPU-giờ chỉ cho preprocessing. Plan trước compute budget cho bước này.
Kết quả: 51% improvement ở môi trường mới
In-domain performance (môi trường đã thấy trong training)
| Method | Avg Success Rate |
|---|---|
| Robot-only baseline | 59% |
| EgoHumanoid co-training | 78% |
Unseen environment generalization
| Method | Avg Success Rate |
|---|---|
| Robot-only baseline | 31% |
| EgoHumanoid co-training | 82% |
| Cải thiện | +51 điểm % |
Khi test ở phòng/setup chưa thấy trong training, robot-only gần như fail (31%), trong khi co-training duy trì 82%. Lý giải trực tiếp: human demos thu ở nhiều phòng khác nhau → VLA học được visual diversity phong phú → generalize sang môi trường mới tốt hơn rất nhiều.

Task-by-task: 4 loco-manipulation tasks
Bốn task được test trên G1 trong thực tế: đặt gối lên sofa, bỏ rác vào thùng, chuyển đồ chơi, xếp hàng vào giỏ. Mỗi task có 2-4 subtasks tăng dần độ phức tạp. Co-training đạt 100% ở các subtask navigation-dominant (đi đến vị trí, dịch chuyển) và 50-60% ở các subtask precision manipulation (gắp chính xác, đặt đúng chỗ).
Observation quan trọng: navigation skills transfer gần như hoàn toàn từ human data, trong khi manipulation precision vẫn bị hạn chế bởi action alignment gap giữa tay người và Dex3 hand.
Optimal data mixing ratio
| Loại task | Tỉ lệ tối ưu (robot:human) |
|---|---|
| Manipulation-heavy (precision cao) | 2:1 |
| Navigation-heavy (di chuyển nhiều) | 1:2 |
Rule of thumb: dùng nhiều robot data hơn khi precision manipulation là bottleneck; dùng nhiều human data hơn khi navigation diversity là bottleneck.
Scene diversity quan trọng hơn volume
Tăng số scene thu human demo từ 1 → 3 → 5 phòng: success rate ở unseen env tăng đơn điệu từ ~57% → ~70% → ~82%. 100 episodes ở 5 phòng khác nhau tốt hơn 500 episodes cùng 1 phòng — bài học scalability quan trọng cho bất kỳ lab nào đang plan data collection.
EgoHumanoid vs. các approach thu thập dữ liệu khác
| Approach | Cần robot? | Cần operator chuyên nghiệp? | Generalize unseen env? | Speed |
|---|---|---|---|---|
| OpenWBT full teleop | Bắt buộc | Rất cao | Kém | 62s/ep |
| TWIST2 PICO teleop | Bắt buộc | Cao | Kém | 62s/ep |
| EgoHumanoid | Một phần | Thấp (bất kỳ ai) | 82% | 39.7s/ep |
| Motion retarget | Bắt buộc | Không | Phụ thuộc retarget | Varies |
| Synthetic sim data | Không | Không | Sim2real gap | N/A |
Ưu điểm độc đáo của EgoHumanoid: bất kỳ ai đội PICO VR và thao tác trong phòng đều có thể tạo ra training data — không cần biết điều khiển robot, không cần workspace đặc biệt.
Những hạn chế cần lưu ý
1. Manipulation precision còn giới hạn: Subtask đòi hỏi precision <5mm (như đặt vật nhỏ vào lỗ) vẫn chỉ đạt ~50%. Action alignment từ tay người sang Dex3 hand vẫn có residual error.
2. Compute-intensive preprocessing: View alignment (MoGe + SD 2.0 inpainting) tốn 2-3 phút/episode trên A100. 1000 episodes human data cần ~40-50 GPU-giờ chỉ để preprocess — cần plan trước.
3. Dex3 hand dependency: Dataset và pipeline được tối ưu cho Dex3. Adapt sang gripper khác (Inspire, Shadow, v.v.) cần re-calibrate action alignment module.
4. Full fine-tune yêu cầu >70GB VRAM: A100 80GB hoặc H100 80GB mới đủ. Với hardware phổ biến hơn, LoRA là lựa chọn thực tế dù kết quả có thể kém hơn một chút.
5. Chỉ verify trên G1: Paper không test cross-embodiment. Chuyển sang humanoid khác (Fourier GR2, Booster T1...) cần re-calibrate toàn bộ alignment pipeline vì camera position và action space khác nhau.
Tại sao EgoHumanoid quan trọng với lab/startup nhỏ
Lab hay startup robotics ở Việt Nam thường có 1-2 robot humanoid và thiếu operator có kinh nghiệm teleop. EgoHumanoid mở ra hướng thu thập dữ liệu scalable và accessible hơn nhiều:
- Chi phí hardware thấp: PICO 4 Enterprise (
$1,000) + ZED X Mini ($400) so với chi phí vận hành G1 liên tục - Không cần chuyên gia: Bất kỳ nhân viên nào sau 30 phút training có thể tạo demo tốt
- Scalable về diversity: 10 người đi vào 20 phòng khác nhau tạo ra 200× scene diversity so với 1 robot trong 1 phòng
- An toàn: Human demo không làm hỏng robot, không có downtime, không cần workspace clearance đặc biệt
Pipeline đầy đủ được public và có license Apache 2.0 — có thể dùng ngay trong production.
Kết luận
EgoHumanoid đặt ra một precedent quan trọng: bottleneck dữ liệu trong whole-body VLA không cần thiết phải là robot teleoperation. Với framework alignment đủ tốt, egocentric human demonstrations — rẻ, diverse, và scalable — có thể thay thế phần lớn robot data và thậm chí cải thiện generalization đáng kể.
Đây là bước dịch chuyển quan trọng trong cách robotics community nghĩ về data flywheel: thay vì "có nhiều robot → thu được nhiều data → robot tốt hơn", EgoHumanoid cho thấy vòng lặp đó có thể được bootstrap bằng human data rẻ và diverse, rồi dần dần tăng tỉ lệ robot data khi pipeline hoàn thiện.
Paper gốc: EgoHumanoid: Unlocking In-the-Wild Loco-Manipulation with Robot-Free Egocentric Demonstration — Modi Shi, Shijia Peng, Jin Chen, Haoran Jiang, Tianyu Li, Di Huang, Ping Luo, Hongyang Li, Li Chen — OpenDriveLab & MMLab @ HKU, RSS 2026.
Bài viết liên quan
- OpenWBT: Whole-Body Teleop cho G1 trong MuJoCo và Isaac — Điểm xuất phát traditional: teleop full-robot trước khi có human demo
- EgoHumanoid Step-by-step trong Series Lab — Build pipeline EgoHumanoid từ đầu với code chi tiết
- OpenWBC: Unitree G1 VR Teleop Whole-Body VLA — Approach song song: tối ưu VR teleop thay vì dùng human demo



