Hãy tưởng tượng bạn cần bốc một quả táo để trên mặt bàn thấp, rồi đặt nó lên kệ ngang tầm vai — nghe đơn giản, nhưng với robot humanoid thì đây là bài toán ác mộng. Cánh tay phải với xuống, cả thân phải gập, chân phải duy trì thăng bằng, rồi lại phải vươn lên cao. Toàn bộ 30+ khớp phải phối hợp nhịp nhàng trong một chuỗi chuyển động liên tục. Đây chính là bài toán loco-manipulation toàn thân (whole-body loco-manipulation) — và phần lớn hệ thống hiện tại đang né tránh nó bằng cách tách rời điều khiển tay với chân.
Nhóm nghiên cứu từ Tsinghua University, Shanghai Qi Zhi Institute, và Spirit AI không né tránh. Họ ngồi xuống, thiết kế từng thí nghiệm có kiểm soát, và xuất bản kết quả dưới tên OpenHLM (arXiv 2606.22174) — một "công thức thực nghiệm" (empirical recipe) hoàn chỉnh, open-source, giúp robot Unitree G1 thực hiện whole-body loco-manipulation vượt qua cả GR00T N1.6 và Ψ₀ với chưa đến một nửa tổng số demo.
Teaser OpenHLM: Unitree G1 thực hiện loạt task loco-manipulation spanning dải dọc rộng — nguồn: openhlm-corl.github.io
Tại Sao Loco-Manipulation Toàn Thân Khó Đến Vậy?
Hầu hết robot arm công nghiệp chỉ cần điều khiển 6-7 khớp. Nhưng humanoid như Unitree G1 có 29 bậc tự do (DOF) ở toàn thân — từ ngón chân đến ngón tay. Thách thức nằm ở chỗ: muốn lấy vật trên sàn rồi đặt lên kệ cao, robot không thể chỉ duỗi tay. Nó phải cúi người, dịch trọng tâm, giữ thăng bằng, rồi vươn lên — tất cả phải diễn ra liên tục, không có điểm dừng rõ ràng giữa "giai đoạn chân" và "giai đoạn tay".
Các giải pháp thông thường giải quyết vấn đề này bằng cách tách đôi: một controller lo chân (locomotion), một controller lo tay (manipulation). Kết quả? Robot đứng yên như xe lăn có tay, thực hiện manipulation mà không tận dụng toàn bộ thân. Đây chính là giới hạn của kiến trúc decoupled — và cũng là điểm xuất phát của OpenHLM.
OpenHLM Là Gì?
OpenHLM không phải một kiến trúc mới hay một mô hình khổng lồ cần hàng ngàn GPU. Nó là một công thức thực nghiệm có hệ thống — tổ hợp của ba mảng nghiên cứu độc lập, mỗi mảng được kiểm tra theo phương pháp "thay đổi một biến tại một thời điểm" (one-variable-at-a-time), bao gồm:
- Thiết kế low-level controller và teleoperation — làm thế nào để con người dạy robot chuyển động toàn thân?
- Thiết kế VLA policy — mô hình nào phù hợp với không gian hành động 34-DOF?
- Heterogeneous co-training với HuMI — làm thế nào để mở rộng khả năng generalization mà không cần thêm quá nhiều robot demo?
Toàn bộ code, data, và model checkpoint được công khai tại:
- GitHub: github.com/OpenHLM-project/OpenHLM
- Dataset: huggingface.co/datasets/OpenHLM/OpenHLM-data
- Checkpoints: huggingface.co/OpenHLM/OpenHLM-ckpts
Stack Kỹ Thuật: Ba Module Độc Lập
Hệ thống OpenHLM gồm ba thành phần, mỗi cái là một repo con trong monorepo chính:
| Module | Vai trò |
|---|---|
GR00T-WholeBodyControl-4-OpenHLM |
Robot control stack cho Unitree G1: VR teleoperation, data collection, low-level WBC |
HuMI4OpenHLM |
Pipeline thu thập human motion qua Vive trackers + GoPro để tạo data heterogeneous |
openpi4OpenHLM |
VLA training và inference dựa trên π0.5 (openpi) |
Hardware cần thiết:
- Robot: Unitree G1 + hai gripper ChangingTek CTAG2F90-D
- Camera: Hai Intel RealSense D405 (gắn cổ tay) + một Unitree SV1-25 fisheye stereo (gắn đầu)
- Teleoperation: PICO4U VR kit (HMD + controllers + leg trackers)
- GPU cho training: RTX 5080 hoặc tương đương, tối thiểu 8GB VRAM
- OS: Ubuntu 25.04
Pha 1: Thiết Kế Teleoperation Toàn Thân

Đây là câu hỏi tưởng như đơn giản: "Làm thế nào để con người dạy robot chuyển động toàn thân?" Nhóm OpenHLM thử ba phương án:
So sánh ba kiểu teleoperation:
Phương án A — Decoupled (21-DOF): Điều khiển tay và chân độc lập. Cánh tay robot mapping theo tay người, chân robot có locomotion riêng. Kết quả: không tận dụng được phối hợp toàn thân.
Phương án B — VR 3-point (24-DOF): Dùng 3 điểm VR tracking (đầu + 2 tay) để suy ra tư thế. Giao diện đơn giản hơn nhưng thiếu thông tin về tư thế thân dưới.
Phương án C — Joint-based whole-body (32-DOF): Người điều khiển mặc một bộ motion capture rig gọn nhẹ, tracking toàn thân. Hệ thống ánh xạ trực tiếp joint angles của người sang joint angles của robot.
Kết quả: Joint-based (32-DOF) vượt trội rõ rệt so với hai phương án còn lại. Lý do trực giác: nếu bạn muốn dạy robot "cúi người + với tay + đứng lại", bạn cần capture toàn bộ chuyển động đó — không thể suy luận từ 3 điểm hay điều khiển tay-chân riêng biệt.
Với hệ thống joint-based, operator đứng trong không gian an toàn, mặc PICO4U VR kit (HMD + controllers + leg trackers), và robot G1 phản chiếu chuyển động trong thời gian thực. Action space thu thập là 32-DOF — bao gồm cả tư thế chân, thân, tay, và đầu.
Pha 2: Thiết Kế VLA Policy Cho Whole-Body
Khi đã có data 32-DOF, câu hỏi tiếp theo là: mô hình nào để train?
OpenHLM dựa trên π0.5 (pi05) từ Physical Intelligence — một diffusion-based VLA pretrained trên lượng lớn dữ liệu robot arm tĩnh và wheeled dual-arm. Điều thú vị là mô hình này không được train trên bất kỳ humanoid data nào, nhưng vẫn transfer tốt sang G1 khi fine-tune.
Hai phát hiện quan trọng:
1. Non-humanoid pretraining vẫn transfer tốt sang humanoid: Nhiều người cho rằng cần pretraining trên humanoid data để có kết quả tốt. OpenHLM bác bỏ giả định này: π0.5 pretrained trên static arm + wheeled dual-arm vẫn cho kết quả tốt sau fine-tune trên 32-DOF whole-body data. Pretrained knowledge về "cách cầm vật, cách tiếp cận mục tiêu" có thể transfer qua khoảng cách embodiment khá xa.
2. Multi-step inference > one-step inference (~+20 điểm task progress): Diffusion model có thể chạy theo hai chế độ: one-step (một bước denoising duy nhất, nhanh hơn) hoặc multi-step (nhiều bước denoising, chậm hơn nhưng chính xác hơn). Trong bối cảnh whole-body control với action space 34-DOF và horizon 50 timesteps, multi-step inference cho kết quả cao hơn khoảng 20 điểm task progress. Không gian hành động phức tạp cần nhiều bước để "điêu khắc" ra hành động chính xác.
Cấu hình model:
| Tham số | Giá trị |
|---|---|
| Action dim | 34 (G1 full body) |
| Action horizon | 50 timesteps |
| Batch size | 256 |
| Learning rate | Cosine decay: 1e-4 → 1e-5 |
| Training steps | 30,000 |
| Num workers | 16 |
Pha 3: HuMI Co-Training — Heterogeneous Data Không Cần Robot

Đây là phần sáng tạo nhất của OpenHLM. HuMI (Human Motion Imitation) là pipeline thu thập data không cần robot:
- Người thực hiện thao tác thật sự (nhặt, đặt vật...)
- 5 HTC Vive trackers gắn trên cơ thể người tracking chuyển động toàn thân
- 2 GoPro cameras ghi lại góc nhìn từ cổ tay (giống wrist camera của robot)
- Phần mềm IK (inverse kinematics) xử lý tín hiệu tracker → joint angles tương ứng của G1
- Video GoPro align với joint trajectory → tạo ra demo dataset
Điểm then chốt: HuMI data hoàn toàn không cần robot, chỉ cần người + tracker + camera. Chi phí thu thập rẻ hơn robot teleop nhiều lần, và người thực hiện tự nhiên hơn vì không cần mặc VR headset hay kiểm soát robot từ xa.
Ba loại data trong co-training:
| Loại data | Mô tả | Ưu điểm |
|---|---|---|
| Full-body teleop | Robot thực hiện task, người điều khiển qua VR | Ground truth robot motion |
| Stationary teleop | Robot đứng yên, chỉ điều khiển tay | Dễ thu thập, nhiều variation vật thể |
| HuMI | Người thực hiện không có robot, track bằng Vive | Scale cao, không cần robot time |
Kết quả co-training với HuMI: 84-89% task progress trên held-out tasks so với 36% baseline khi chỉ dùng full-body teleop. Nói cách khác, HuMI mở rộng khả năng generalization sang vật thể và ngôn ngữ instruction mới mà robot chưa từng thấy trong quá trình teleop.
Cài Đặt Từng Bước
1. Setup PC-side environment
# Clone repo chính
git clone https://github.com/OpenHLM-project/OpenHLM.git
cd OpenHLM
# Setup teleop environment
cd src/GR00T-WholeBodyControl4OpenHLM/
uv pip install --python .venv_teleop/bin/python -e ./gear_sonic/thirdparty/GMR
uv pip install --python .venv_teleop/bin/python -e ./openpi-client
# Build video sender tool
cd ./gear_sonic/thirdparty/XRoboToolkit-Orin-Video-Sender
sudo apt update && sudo apt install build-essential pkg-config libopencv-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libglib2.0-dev \
libzmq3-dev libssl-dev
make
2. Setup robot-side
git clone https://github.com/Tendourisu/hardware4OpenHLM.git
cd hardware4OpenHLM
uv run hardware_setup
3. Setup VLA training environment
cd src/openpi4OpenHLM
GIT_LFS_SKIP_SMUDGE=1 uv sync
GIT_LFS_SKIP_SMUDGE=1 uv pip install -e .
# Fix transformers compatibility
cp -r ./src/openpi/models_pytorch/transformers_replace/* \
.venv/lib/python3.11/site-packages/transformers/
# Download π0.5 pretrained checkpoint
uv run examples/convert_jax_model_to_pytorch.py \
--checkpoint_dir gs://openpi-assets/checkpoints/pi05_base \
--config_name pi05_aloha \
--output_path ~/.cache/openpi/openpi-assets/checkpoints/pi05_base_pytorch
Thu Thập Dữ Liệu
Robot teleoperation data
# Terminal 1: Trên robot (G1 side)
cd path/to/hardware4OpenHLM
uv run hardware_setup
# Terminal 2: Trên PC side
cd src/GR00T-WholeBodyControl4OpenHLM/scripts
bash launch_data_collection.sh
Lưu ý an toàn: Bắt đầu với gain thấp. Robot G1 nặng 35kg, chuyển động sai có thể gây tai nạn nghiêm trọng. Luôn có người ở bên cạnh robot với tay trên nút dừng khẩn cấp.
HuMI pipeline
# Streaming IK online từ Vive trackers
uv run online-ik pick --rpc-address tcp://<windows_machine_ip>:4242
# Align GoPro video và tạo dataset plan
uv run run-pipeline data/<humi_session> --gopro_timezone +08:00
# Export sang OpenHLM format
uv run generate-final data/<humi_session>
HuMI cần: 5 HTC Vive trackers, 1 Windows machine chạy SteamVR, 2 GoPro (gắn cổ tay), và 1 Linux/macOS machine xử lý IK.
Training Pipeline
Bước 1: Convert data sang LeRobot format
# Một dataset
uv run examples/unitree_g1/convert_g1_data_to_lerobot.py \
--data_dir ./example_demonstration/20260520_1602_example_1 \
--repo_name OpenHLM/example
# Nhiều dataset cùng lúc
uv run examples/unitree_g1/convert_g1_data_to_lerobot_multi.py \
--parent_dir ./example_demonstration \
--dataset_folders 20260520_1602_example_1 20260520_1602_example_2 \
--repo_name OpenHLM/example
Bước 2: Tính normalization statistics
CUDA_VISIBLE_DEVICES=0 uv run scripts/compute_norm_stats.py \
--config-name openhlm_example \
--max-frames 500000
Bước 3: Train model
CUDA_VISIBLE_DEVICES=0,1,2,3 uv run torchrun --standalone --nnodes=1 \
--nproc_per_node=4 scripts/train_pytorch.py \
openhlm_example \
--save-interval 10000 \
--batch_size 128 \
--no-enable-gradient-checkpointing \
--enable-training-compile \
--pytorch-weight-path ~/.cache/openpi/openpi-assets/checkpoints/pi05_base_pytorch \
--exp-name openhlm_example
Training cần 4 GPU (RTX 5080 hoặc tương đương), mất khoảng vài giờ cho 30,000 steps.
Inference Và Deploy
Khởi động policy server
cd src/openpi4OpenHLM
CUDA_VISIBLE_DEVICES=0 uv run scripts/serve_policy.py \
--env SONICG1 \
--num-steps 10 \
policy:checkpoint \
--policy.config=openhlm_example \
--policy.dir=path/to/trained/checkpoint
Chạy trên robot
# Terminal 1: Low-level control server
cd src/GR00T-WholeBodyControl4OpenHLM/scripts
bash deploy_stream.sh
# Terminal 2: OpenPI deployment client
python openpi-eval/main.py \
--control_hz 30 \
--max_steps 10000 \
--save_video \
--instruction "pick up the apple and place it on the shelf" \
--exp_name openhlm_example
Policy server chạy trên GPU, nhận observation từ cameras, xuất action sequence 34-DOF ở 30Hz. Low-level WBC controller nhận action và thực thi trên robot.
Dùng checkpoint có sẵn
Nếu không muốn train từ đầu, tải checkpoint từ HuggingFace:
| Checkpoint | Mô tả |
|---|---|
12tasks_12full-teleop |
12 tasks, 12 robot demo/task |
12tasks_8full-teleop_4humi |
12 tasks, mix teleop + HuMI data |
12tasks_8full-teleop_4stationary_teleop |
12 tasks, mix teleop + stationary |
20fruit-arrangement_20full-teleop |
Long-horizon task (sắp xếp trái cây) |
20fruit-arrangement_6full-teleop_14humi |
Long-horizon với HuMI data |
Kết Quả: Vượt GR00T N1.6 Với Chưa Đến Nửa Demo
Nhóm OpenHLM đánh giá trên HLM-12 benchmark — 12 task có điều kiện ngôn ngữ (language-conditioned), yêu cầu phối hợp toàn thân spanning dải dọc rộng (từ sàn lên kệ cao).
So sánh với baseline:
| System | Task Progress | Demo time so với OpenHLM |
|---|---|---|
| GR00T N1.6 | thấp hơn đáng kể | >2× nhiều hơn |
| Ψ₀ (Psi0) | thấp hơn đáng kể | >2× nhiều hơn |
| OpenHLM | 87.5% (long-horizon) | 1× (baseline) |
| OpenHLM + HuMI | 84–89% (held-out tasks) | <0.5× |
Điểm nổi bật: OpenHLM đạt 87.5% task progress trên task fruit arrangement dài hơi (sắp xếp 5 loại trái cây lên kệ theo thứ tự), vượt cả hai baseline mạnh nhất hiện tại — với chưa đến một nửa tổng thời gian demo. Trung bình trên tất cả 12 tasks, task progress vượt 90%.
Bài Học Kỹ Thuật Quan Trọng
Đọc xong paper OpenHLM, có ba insight đáng nhớ cho bất kỳ ai làm robot learning:
1. Không gian hành động quan trọng hơn số lượng demo: Joint-based 32-DOF teleop cần nhiều công thiết lập hơn nhưng cho chất lượng demo cao hơn nhiều so với task-space hay decoupled. Garbage in, garbage out — với robot learning, chất lượng data đầu vào quyết định ceiling của policy.
2. Transfer learning qua embodiment gap lớn hơn bạn nghĩ: π0.5 được train trên robot arm tĩnh và xe có tay, nhưng fine-tune tốt sang humanoid 34-DOF. Điều này gợi ý rằng các primitive như "cầm vật", "đặt xuống", "tiếp cận mục tiêu" là knowledge có thể transfer, dù embodiment khác nhau hoàn toàn.
3. HuMI giải quyết bottleneck data thu thập: Demo robot thật tốn kém (cần robot, không gian, người vận hành VR). HuMI thu thập từ người bình thường làm thao tác tự nhiên, scale dễ hơn 10× mà vẫn cải thiện generalization đáng kể. Đây là hướng đáng đầu tư cho bất kỳ lab nào thiếu robot time.
Nếu bạn đang nghiên cứu về whole-body VLA, có thể tham khảo thêm về kiến trúc WBC trong GR00T N1 architecture và cách kết hợp với teleoperation trong Gear Sonic Humanoid WBC. Để hiểu rõ hơn về WholebodyVLA approach từ OpenDriveLab, xem WholebodyVLA tutorial.
Kết Luận
OpenHLM không cố gắng build mô hình AI lớn nhất hay robot tốt nhất. Thay vào đó, nó trả lời một câu hỏi thực tế: "Nếu bạn có Unitree G1 và muốn teach nó whole-body loco-manipulation, bạn nên làm gì?"
Ba pha thực nghiệm — joint-based teleoperation 32-DOF, VLA π0.5 với multi-step inference, và HuMI co-training — cho kết quả vượt cả GR00T N1.6 lẫn Ψ₀ mà dùng ít hơn một nửa demo time. Đây là điểm chuẩn mới cho whole-body humanoid control — và quan trọng hơn, nó được open-source hoàn toàn.
Paper: arXiv 2606.22174 | Code: GitHub | Data: HuggingFace



