Nếu bạn đang sở hữu một chiếc Unitree G1 và muốn dạy nó làm những việc phức tạp như nhặt vật, di chuyển đồ đạc, hay thực hiện các thao tác với tay — bạn cần dữ liệu whole-body. Không phải chỉ dữ liệu tay, không phải chỉ dữ liệu chân — mà là toàn thân hoạt động cùng lúc.
Đó chính xác là vấn đề mà OpenWBC (github.com/jiachengliu3/OpenWBC) giải quyết: một hệ thống XR-based teleop mã nguồn mở cho phép bạn điều khiển Unitree G1 bằng Apple Vision Pro trong khi robot tự di chuyển bằng chân, đồng thời thu thập toàn bộ dữ liệu cần thiết để huấn luyện mô hình VLA toàn thân.
Bài viết này hướng dẫn từng bước — từ cài đặt SDK, cấu hình mạng, quy trình deploy 3 terminal, đến thu thập dữ liệu, convert sang LeRobot format và training GR00T N1.5.
Tại sao cần Whole-Body Teleop?
Hãy tưởng tượng bạn muốn dạy robot G1 nhặt một lon nước từ bàn và đặt vào tủ lạnh. Tác vụ này yêu cầu:
- Đôi tay: Vươn tới, nắm lon, di chuyển
- Đôi chân: Di chuyển từ bàn đến tủ lạnh
- Phối hợp: Hai thao tác phải xảy ra đồng thời và nhất quán
Nếu bạn chỉ thu thập dữ liệu tay (arm-only) hay chỉ dữ liệu di chuyển, mô hình VLA sẽ không bao giờ học được cách phối hợp toàn thân. OpenWBC giải quyết bằng cách chia đôi trách nhiệm: Apple Vision Pro xử lý thân trên, thuật toán OpenHomie xử lý thân dưới — bạn chỉ cần tập trung vào tay.
Đây là kết quả của TrajBooster (ICRA 2026) — hệ thống VLA được training từ dữ liệu thu thập bởi OpenWBC.
Kiến Trúc Dual-Mode — Ý Tưởng Cốt Lõi
OpenWBC sử dụng dual-mode control — kiểm soát kép tách biệt:
┌─────────────────────────────────────────────┐
│ UNITREE G1 ROBOT │
│ │
│ ┌──────────────┐ ┌──────────────────┐ │
│ │ THÂN TRÊN │ │ THÂN DƯỚI │ │
│ │ │ │ │ │
│ │ avp_teleoperate │ OpenHomie │ │
│ │ (Apple Vision Pro) │ (autonomous) │ │
│ │ │ │ │ │
│ │ - Vai/khuỷu │ │ - Đi bộ │ │
│ │ - Cổ tay │ │ - Giữ thăng bằng │ │
│ │ - Ngón tay │ │ - Tránh vật cản │ │
│ └──────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────┘
▲ ▲
│ │
Apple Vision Pro Policy inference
(tay người operator) (chạy trên PC)
│ │
└────────TCP/IP───────────┘
Tại sao tách biệt? Vì điều khiển chân robot humanoid cực kỳ phức tạp — cần Whole-Body Control (WBC), RL training hàng trăm giờ, và phải xử lý hàng nghìn tình huống thăng bằng. Thay vì yêu cầu người dùng học teleop cả chân lẫn tay, OpenWBC cho OpenHomie "lái chân" tự động còn operator chỉ cần điều khiển tay.

Yêu Cầu Hệ Thống
Phần Cứng
| Thành phần | Bắt buộc | Ghi chú |
|---|---|---|
| Unitree G1 (29 DoF) | ✅ | Model tiêu chuẩn |
| Dex-3 Dexterous Hand | ⚪ Tuỳ chọn | Cần cho tác vụ cầm nắm phức tạp |
| Apple Vision Pro | ✅ | XR teleop interface |
| Linux Host (CUDA) | ✅ | x86_64 hoặc ARM64, CUDA cho inference |
| Camera gắn cổ tay | ⚪ Khuyến khích | Cải thiện depth perception cho VLA |
Phần Mềm
| Package | Phiên bản | Mục đích |
|---|---|---|
| Python | 3.8+ | Runtime chính |
| CMake | 3.16+ | Build Unitree SDK2 |
| GCC/G++ | C++14 | Compile SDK2 |
| Unitree SDK2 | Latest | Giao tiếp với robot |
| LeRobot | Latest | Data conversion + training |
Cài Đặt Từng Bước
Bước 1: Clone Repository và Init Submodules
git clone https://github.com/jiachengliu3/OpenWBC.git
cd OpenWBC
git submodule update --init --recursive
Lệnh --recursive quan trọng — OpenWBC phụ thuộc vào nhiều submodule (avp_teleoperate, OpenHomie, OpenWBC_to_Lerobot) và chúng sẽ không được tải nếu bỏ flag này.
Bước 2: Build Unitree SDK2 (C++)
Unitree SDK2 là lớp giao tiếp low-level với robot, phải compile từ nguồn:
cd unitree_sdk2
rm -rf build # xóa build cũ nếu có
mkdir build && cd build
cmake ..
make -j$(nproc) # dùng tất cả CPU cores để build nhanh hơn
Sau khi build xong, file thực thi nằm tại:
unitree_sdk2/build/bin/g1_control— điều khiển G1unitree_sdk2/build/bin/hand_control— điều khiển Dex-3 hand
Bước 3: Cài g1_gym_deploy
cd ../../ # về thư mục gốc OpenWBC
cd g1_gym_deploy && pip install -e .
pip install -e . (editable mode) cho phép bạn sửa code mà không cần reinstall — rất tiện khi tuning policy.
Bước 4: Cài LeRobot (cho Data Conversion)
pip install lerobot
Bước 5: Init Submodule Converter
cd OpenWBC_to_Lerobot
pip install -e .
Submodule này chứa script convert_to_lerobot.py để chuyển dữ liệu thô OpenWBC sang định dạng LeRobot Dataset — cần thiết cho training GR00T.
Cấu Hình Mạng
OpenWBC dùng TCP/IP để kết nối Robot ↔ PC. Cần xác định IP của cả hai:
# Chạy trên cả robot lẫn PC
ifconfig | grep inet
Sau đó update IP trong code. Mặc định robot G1 thường có IP dạng 192.168.123.x. Đảm bảo robot và PC trong cùng subnet.
Lưu ý: Apple Vision Pro cũng cần cùng mạng WiFi với PC để stream dữ liệu tay/đầu.
Quy Trình Triển Khai — 3 Terminal
Chuẩn Bị Trước Khi Deploy
Trước khi chạy bất cứ gì, phải tắt tiến trình điều khiển mặc định của G1 bằng chuỗi phím gamepad:
1. L1 + A → thoát mode hiện tại
2. L2 + R2 → vào transition mode
3. L2 + A → robot nâng tay lên (xác nhận thành công)
4. L2 + B → robot mất force control (chuẩn bị cho chương trình tùy chỉnh)
Không bỏ qua bước này — nếu tiến trình mặc định vẫn chạy, chương trình của bạn sẽ conflict và robot có thể hành động không kiểm soát được.
Robot-Side: 3 Terminal Chạy Song Song
Terminal 1 — Khởi động điều khiển robot:
cd unitree_sdk2/build/bin
./g1_control eth0
# Nếu eth0 không hoạt động, thử: ./g1_control eth1
Chương trình này mở kết nối low-level với G1, nhận và gửi lệnh điều khiển.
Terminal 2 — Chạy policy inference:
python g1_gym_deploy/scripts/deploy_policy.py
Thread này chạy OpenHomie policy để robot tự cân bằng và di chuyển. Đây là "não" điều khiển chân.
Terminal 3 — Khởi động image server (cho AVP):
cd avp_teleoperate/teleop/image_server
python image_server.py
Server này stream hình ảnh từ camera robot lên Apple Vision Pro để operator thấy góc nhìn của robot.
Robot Operations
# Sau khi 3 terminal đã chạy:
# Nhấn R2 trên gamepad → robot đứng thẳng
# Nhấn R2 lần 2 → bắt đầu accept control từ AVP

Thu Thập Dữ Liệu với Apple Vision Pro
PC-Side Command
cd avp_teleoperate/teleop
python teleop_data_collecting.py --arm=G1_29 --hand=dex3 --record
Giải thích tham số:
--arm=G1_29: Chỉ định robot arm type — G1 với 29 bậc tự do--hand=dex3: Dùng Dex-3 dexterous hand (bỏ qua nếu không có)--record: BẮT BUỘC để ghi dữ liệu — không có flag này chương trình chỉ teleop mà không save
Dữ Liệu Được Thu Thập
Mỗi episode lưu đồng bộ:
| Loại dữ liệu | Nội dung | Tần số |
|---|---|---|
| Visual | Multi-angle camera feed (ego view + wrist cameras) | 30 Hz |
| Action | Góc tất cả 29 khớp + vị trí end-effector | 50 Hz |
| State | Pose, velocity, torque của robot | 50 Hz |
| Sync | Timestamp đồng bộ tất cả stream | — |
Gợi ý thu thập:
- Mỗi episode: 10-30 giây, 1 tác vụ cụ thể
- Mục tiêu: 50-100 episodes/task để VLA học được
- Đa dạng hoá: thay đổi vị trí vật thể, góc tiếp cận, tốc độ thực hiện
Chuyển Đổi Dữ Liệu sang LeRobot Format
Dữ liệu thô từ OpenWBC cần convert trước khi training. OpenWBC_to_Lerobot xử lý việc này:
cd OpenWBC_to_Lerobot
# Basic conversion
python convert_to_lerobot.py \
--input_dir /path/to/openwbc/dataset \
--output_dir ./lerobot_dataset \
--dataset_name "pick_cola" \
--robot_type "g1" \
--fps 30
Hoặc dùng CLI shortcut sau khi install:
wbc-convert \
--input_dir /path/to/dataset \
--output_dir ./output \
--dataset_name "my_task"
Script sẽ tạo một LeRobot Dataset chuẩn với:
data/— HDF5 files chứa observations và actionsvideos/— MP4 videos cho visual observationsmeta/— Metadata về robot modality và episode infomodality.json— Mô tả cấu trúc dữ liệu của G1
Training VLA với GR00T N1.5
Sau khi có LeRobot dataset, bạn có thể train GR00T N1.5 — foundation model của NVIDIA cho humanoid:
# Clone GR00T modified cho OpenWBC
# (đã có sẵn trong submodule gr00t_modified_for_OpenWBC)
# Training với dataset đã convert
python scripts/gr00t_finetune.py \
--dataset_path ./lerobot_dataset \
--model_name nvidia/GR00T-N1-5 \
--output_dir ./output_model \
--num_epochs 100 \
--batch_size 32
Xem hướng dẫn chi tiết training tại bài viết về thu thập dữ liệu GR00T N1 trên G1.
Cấu Trúc Thư Mục Dự Án
OpenWBC/
├── avp_teleoperate/ # Apple Vision Pro teleop (submodule)
│ └── teleop/
│ ├── image_server/ # Stream camera lên AVP
│ └── teleop_data_collecting.py # Script chính
├── OpenHomie/ # Lower body locomotion (submodule)
│ └── HomieDeploy/
│ ├── unitree_sdk2/ # Unitree SDK2 (C++)
│ └── g1_gym_deploy/ # Python deployment scripts
├── OpenWBC_to_Lerobot/ # Data converter (submodule)
│ ├── convert_to_lerobot.py # Main script
│ ├── modality.json # G1 robot modality config
│ └── requirements.txt
├── demos_all.gif # Demo animation
└── README.md
TrajBooster — Kết Quả ICRA 2026
OpenWBC không phải dự án cuối — nó là nền tảng để xây dựng TrajBooster (chấp nhận bởi ICRA 2026), một phương pháp cải thiện VLA cho whole-body manipulation.
Ý tưởng cốt lõi của TrajBooster:
Thay vì thu thập hàng nghìn giờ dữ liệu teleop từ đầu, TrajBooster:
- Lấy các dataset manipulation phong phú từ robot khác (AgBot, etc.)
- Retarget end-effector trajectory từ robot đó sang Unitree G1
- Post-pre-training trên VLA đã train sẵn với dữ liệu retarget
- Fine-tune nhỏ với dữ liệu teleop thực tế (thu thập bởi OpenWBC)
Kết quả: giảm đáng kể lượng dữ liệu teleop cần thu thập mà vẫn đạt performance cao, thậm chí có khả năng zero-shot transfer sang các tác vụ chưa thấy.
Xem thêm về pipeline dữ liệu wholebody VLA tại bài hướng dẫn WholebodyVLA và bài về OpenWBT — hệ thống teleop tương tự của Galaxy General Robotics.
So Sánh với Các Hệ Thống Teleop Khác
| Hệ thống | Lower body | Upper body | Dữ liệu | Open source |
|---|---|---|---|---|
| OpenWBC | OpenHomie (autonomous) | Apple Vision Pro | Whole-body | ✅ |
| OpenWBT | WBC trained | FISM/GELLO | Whole-body | ✅ |
| UMI | — (arm-only) | Wrist cam | Arm-only | ✅ |
| NVIDIA GROOT Sonic | WBC | HTC Vive | Whole-body | ❌ |
OpenWBC đơn giản hơn GROOT Sonic (không cần VR setup phức tạp) nhưng vẫn đủ mạnh để thu thập dữ liệu whole-body chất lượng cao.
Lưu Ý An Toàn — QUAN TRỌNG
Robot Unitree G1 nặng ~35kg và có thể di chuyển với vận tốc cao. BẮT BUỘC:
- Không bao giờ deploy mà không hiểu rõ từng file trong repo
- Lần đầu test trong không gian mở, thoáng, không có người xung quanh
- Luôn có người giám sát có kinh nghiệm
- Giữ nút dừng khẩn cấp (emergency stop) trong tay
- Đảm bảo đủ không gian xung quanh robot (tối thiểu 2m mỗi chiều)
Kết Luận
OpenWBC là một trong những hệ thống teleop + data collection whole-body mã nguồn mở hoàn chỉnh nhất cho Unitree G1. Kiến trúc dual-mode (AVP cho tay + OpenHomie cho chân) giải quyết một trong những thách thức lớn nhất của humanoid data collection: làm sao để operator tập trung vào tác vụ thay vì lo quản lý thăng bằng chân.
Pipeline từ teleop → LeRobot → GR00T N1.5 đã được validate qua TrajBooster (ICRA 2026), chứng minh rằng dữ liệu thu thập bởi OpenWBC đủ chất lượng để train mô hình VLA production-grade.
Xem thêm cách deploy mô hình sau khi training tại bài hướng dẫn GR00T N1 WBC Deploy cho G1 và pipeline LeRobot toàn thân tại LeRobot G1 + Pi0Fast Whole-Body.



