Hãy tưởng tượng bạn muốn dạy robot học cách cầm nắm một chiếc giày, đặt lon nước vào hộp, hay bắt tay để chuyền đồ vật — những tác vụ tưởng đơn giản với người, nhưng cực kỳ khó với robot. Thách thức lớn nhất không phải là thuật toán, mà là dữ liệu. Bạn cần hàng trăm nghìn lần thực hiện, với đủ loại môi trường, ánh sáng, vật thể — và không ai có đủ robot thực để thu thập lượng dữ liệu đó.
RoboTwin 2.0 ra đời để giải quyết đúng bài toán này.
Paper RoboTwin 2.0: A Scalable Data Generator and Benchmark with Strong Domain Randomization for Robust Bimanual Robotic Manipulation (arXiv:2506.18088, 2025) đề xuất một framework hoàn chỉnh để tự động tạo dữ liệu expert quy mô lớn cho robot hai tay (dual-arm / bimanual), với domain randomization mạnh để thu hẹp khoảng cách sim-to-real. Paper được chấp nhận tại ICLR 2026.
Tại sao dual-arm manipulation là bài toán khó?
Robot một tay (single-arm) đã đủ phức tạp — robot hai tay còn khó hơn nhiều lần. Không gian trạng thái tăng gấp đôi, hai tay phải phối hợp với nhau theo thời gian thực, và nhiều tác vụ yêu cầu cả hai tay cùng tiếp xúc với vật thể đồng thời.
Ví dụ cụ thể: để mở nắp hộp, tay trái giữ hộp trong khi tay phải xoay nắp — hai tác vụ hoàn toàn khác nhau phải được đồng bộ hoàn hảo. Thu thập dữ liệu kiểu này qua teleoperation tốn rất nhiều công sức.
Giải pháp của RoboTwin 2.0: sinh dữ liệu trong simulation với pipeline tự động, sau đó dùng domain randomization để policy học được tốt trong môi trường thực.
Kiến trúc tổng thể của RoboTwin 2.0
Framework gồm 3 tầng chính:
1. RoboTwin-OD — Thư viện vật thể 731 instances
Đây là nền tảng của toàn bộ hệ thống. Bạn không thể dạy robot cầm đồ vật nếu không có mô hình 3D của những đồ vật đó.
RoboTwin-OD bao gồm:
- 731 object instances thuộc 147 danh mục khác nhau
- 534 objects được tạo bằng RGB-to-3D reconstruction từ platform Rodin (chụp ảnh thật → mô hình 3D)
- 153 objects từ Objaverse (thư viện 3D open-source)
- 44 articulated objects (vật thể có khớp như hộp, chai, laptop) từ PartNet-Mobility
Điều đặc biệt: mỗi object đều có annotation đầy đủ — điểm đặt tay (grasping points), hướng cầm (grasp axis), điểm chức năng (functional points), và 15 câu mô tả ngôn ngữ bao gồm hình dạng, chất liệu, công năng và cấu trúc từng phần. Đây là thứ giúp MLLM code generation hoạt động được.
2. MLLM Code Generation — Tự động viết code điều khiển robot
Đây là điểm thú vị nhất của paper. Thay vì phải tay viết từng đoạn code điều khiển cho mỗi tác vụ, RoboTwin 2.0 dùng Multimodal Large Language Model (MLLM) để tự động sinh code Python điều khiển robot.
Quy trình là một vòng lặp đóng (closed-loop):
[Task Description] → [Code Agent] → [Python Program]
↓
[Simulate × 10 lần]
↓
[VLM Observer quan sát]
↓
[Phân tích thất bại]
↓
[Feedback → Code Agent]
(lặp tối đa 5 vòng)
Code Agent dùng DeepSeek-V3 hoặc moonshot-v1-32k-vision để sinh Python program từ mô tả task và API specification của simulator SAPIEN.
VLM Observer nhìn vào kết quả 10 lần chạy simulation, phát hiện chỗ thất bại (robot chưa cầm được vật? hai tay va chạm nhau?), và gửi feedback ngôn ngữ lại cho Code Agent.
Kết quả: success rate của code generation tăng từ 47.4% lên 71.3% — gần 50% improvement chỉ nhờ multimodal feedback loop này.
3. Domain Randomization — 5 trục biến thiên có hệ thống
Đây là bí quyết để synthetic data thực sự hữu ích trong môi trường thực.
| Trục randomization | Cách thực hiện |
|---|---|
| Scene Clutter | Thêm vật thể ngẫu nhiên (không liên quan task) vào bàn, đảm bảo không va chạm với vật thể chính bằng collision checking |
| Textures | 12,000 texture được tuyển từ Stable Diffusion (có kiểm tra chất lượng bằng người dùng), apply ngẫu nhiên lên bề mặt bàn, tường, vật thể |
| Lighting | Randomize màu sắc, loại đèn, cường độ, vị trí nguồn sáng — trong giới hạn vật lý thực tế |
| Tabletop Height | Sample đều từ ±3cm so với chiều cao chuẩn — giả lập bàn thực có thể cao thấp khác nhau |
| Language Instructions | Kết hợp template câu lệnh + mô tả vật thể → đa dạng phong cách ngôn ngữ cho mỗi trajectory |
Mỗi trajectory trong dataset được randomize theo cả 5 trục này, tạo ra một không gian biến thiên cực rộng mà policy phải học để generalize qua.
Benchmark: 50 tác vụ, 5 robot
RoboTwin 2.0 chuẩn hóa evaluation trên 50 bimanual manipulation tasks và 5 robot embodiments:
5 robot hỗ trợ:
- Franka (7-DoF, phổ biến trong research)
- UR5 (7-DoF, industrial standard)
- Piper (6-DoF, Agilex)
- ARX-X5 (6-DoF)
- Aloha-AgileX (6-DoF, từ Stanford/Berkeley)
Cho mỗi cặp (task, embodiment), framework sinh:
- 100 clean trajectories (không có domain randomization)
- 400 randomized trajectories (đầy đủ 5 trục randomization)
Tổng cộng hơn 100,000 expert trajectories được pre-collect sẵn và có thể download.
Cài đặt môi trường
Yêu cầu phần cứng
- OS: Linux (khuyến nghị Ubuntu 20.04/22.04)
- GPU: NVIDIA RTX (khuyến nghị để ray tracing và denoising)
- CUDA: 12.1
- NVIDIA Driver: ≥ 520
Bước 1: Tạo môi trường conda
conda create -n RoboTwin python=3.10 -y
conda activate RoboTwin
Bước 2: Cài Vulkan dependencies
sudo apt install libvulkan1 mesa-vulkan-drivers vulkan-tools
vulkaninfo # verify cài thành công
Bước 3: Clone repo và cài dependencies
git clone https://github.com/RoboTwin-Platform/RoboTwin.git
cd RoboTwin
bash script/_install.sh
Script này sẽ tự động cài SAPIEN (physics simulator), CuRobo (GPU-accelerated motion planner), và các dependencies còn lại.
Nếu cài tự động gặp lỗi, thử manual:
pip install -r requirements.txt
pip install "git+https://github.com/facebookresearch/pytorch3d.git@stable"
# Cài CuRobo trong thư mục envs/
# Sau đó sửa mplib line 807: bỏ "or collide" condition
Bước 4: Download assets
bash script/_download_assets.sh
Lệnh này download toàn bộ 3D models (731 objects), texture library (12,000 textures), và embodiment configurations vào thư mục assets/.
Nếu gặp config path issue sau khi cài:
python script/update_embodiment_config_path.py
Sinh dữ liệu (Data Generation)
Thu thập expert trajectories cho một task
Sau khi cài xong, bạn có thể chạy code generation pipeline cho task bất kỳ:
# Sinh code cho task mới (MLLM pipeline)
python scripts/generate_task_code.py \
--task "move_can_to_box" \
--robot "franka" \
--iterations 5
# Thu thập trajectories sau khi code được verify
python scripts/collect_data.py \
--task "move_can_to_box" \
--robot "franka" \
--num_clean 100 \
--num_random 400
Cấu trúc dữ liệu output
Mỗi trajectory được lưu dưới dạng HDF5 với:
- Joint positions của cả 2 arm theo timestep
- RGB images từ nhiều camera góc khác nhau
- Depth images
- Language instruction (random từ 15 annotations)
- Metadata về domain randomization đã áp dụng
Training policy
RoboTwin 2.0 hỗ trợ nhiều policy architecture phổ biến nhất hiện nay:
ACT (Action Chunking with Transformers)
# Train ACT trên dữ liệu RoboTwin
python train.py \
--policy act \
--task move_can_to_box \
--robot franka \
--data_path data/move_can_to_box_franka/ \
--num_epochs 100 \
--chunk_size 100
Diffusion Policy (DP/DP3)
python train.py \
--policy dp3 \
--task move_can_to_box \
--robot franka \
--data_path data/move_can_to_box_franka/
VLA Models (RDT, Pi0)
Với VLA (Vision-Language-Action), bạn có thể fine-tune pretrained model trên dữ liệu RoboTwin:
# Fine-tune RDT
python train_vla.py \
--model rdt \
--pretrained_path checkpoints/rdt-base \
--task move_can_to_box \
--synthetic_data data/move_can_to_box_franka/randomized/ \
--real_demos data/real/10_demos/
Đây chính là cấu hình tạo ra kết quả ấn tượng nhất của paper.
Kết quả thực nghiệm
Kết quả trên unseen scenes (môi trường chưa thấy trong training):
| Phương pháp | Success Rate | So với baseline |
|---|---|---|
| Baseline (10 real demos only) | 9.0% | — |
| Synthetic pretraining + 10 real demos | 42.0% | +367% |
| Zero-shot (synthetic only, no real demos) | 29.6% | +228% |
Những con số này rất ấn tượng. Đặc biệt, zero-shot — tức là hoàn toàn không cần thu thập demo thực — vẫn đạt 228% improvement so với baseline có 10 demo thực. Điều này mở ra khả năng deploy robot mà không cần teleoperation phase tốn kém.
Kết quả trên hardware thực (4 bimanual tasks):
- Augment 10 real demos với 1,000 synthetic trajectories → +13.5% đến +33.0% success rate
- Cải thiện nhất quán qua các mức độ khó của task
Phân tích theo embodiment:
- Piper (6-DoF): +22.7% (improvement lớn nhất)
- Aloha-AgileX (6-DoF): +13.7%
- Franka/UR5 (7-DoF): improvement nhỏ hơn vì kinematic flexibility của 7-DoF đã đủ linh hoạt
Limitations — những gì chưa làm được
Honest acknowledgment từ tác giả:
-
Articulated objects vẫn thất bại: "Open Laptop", "Shake Bottle Horizontally" → 0% success rate. Vật thể có khớp động yêu cầu force control và contact modeling phức tạp hơn position control thuần túy.
-
Precise pose constraints: MLLM code generation vẫn gặp khó với tác vụ yêu cầu góc đặt chính xác tuyệt đối (ví dụ: đặt vật vào ổ cắm với tolerance < 1mm).
-
Drop trong randomized setting: Success rate vẫn giảm 28-40% khi chuyển từ clean environment sang fully randomized — domain gap chưa được bridge hoàn toàn.
-
Platform gap: Robot 6-DoF benefit nhiều hơn 7-DoF vì thiếu kinematic redundancy. Đây là observation hữu ích khi chọn robot cho task cụ thể.
Tích hợp với workflow của bạn
Nếu bạn đang build robot manipulation system, đây là cách tích hợp RoboTwin 2.0:
Scenario 1: Có robot thực, muốn bổ sung data → Thu thập 10-20 demo thực → generate 500-1000 synthetic trajectories với RoboTwin → fine-tune VLA model → deploy
Scenario 2: Chưa có robot, muốn prototype nhanh → Dùng pre-collected 100K trajectories từ HuggingFace → train policy trong simulation → evaluate trên RoboTwin benchmark → quyết định có đầu tư hardware không
Scenario 3: Có task mới ngoài 50 tasks sẵn có → Dùng MLLM code generation pipeline → viết task description → hệ thống tự generate code → review và collect data
Liên kết tài nguyên
- Paper: arXiv:2506.18088 — Tianxing Chen et al., ICLR 2026
- GitHub: RoboTwin-Platform/RoboTwin
- Documentation: robotwin-platform.github.io/doc
- Dataset: HuggingFace — RoboTwin2.0 (100K+ trajectories)
- OpenReview: ICLR 2026 submission