Bạn đã từng thấy demo robot gắp đồ vật trông rất ngầu trên YouTube — nhưng khi đối mặt với bài toán thực tế như lắp chip bán dẫn hay tháo lắp linh kiện điện tử đòi hỏi độ chính xác dưới millimeter, các VLA model "vanilla" bắt đầu đứng hình. Chúng bị loạn vì dữ liệu huấn luyện không đồng đều, bị mất hướng khi tay robot bị khuất tầm nhìn camera, và không tự biết mình đang làm tốt hay tệ.
Robo-ValueRL — framework open-source ra mắt tháng 7/2026 bởi X-Humanoid (Beijing Innovation Center of Humanoid Robotics) kết hợp với GeWu-Lab thuộc Đại học Nhân Dân Trung Quốc — được thiết kế để giải quyết đúng ba điểm đau này. Bài viết này sẽ đưa bạn từ "tại sao framework này tồn tại" đến "cài đặt và train xong trên phần cứng thực" trong một lần đọc.
Vấn Đề: Tại Sao VLA Truyền Thống Không Đủ?
Hãy nghĩ về VLA model như một kỹ sư mới vào nghề, được học từ video của người chuyên nghiệp (imitation learning). Kỹ sư đó học được nhiều thứ, nhưng có ba vấn đề cố hữu:
Thứ nhất: Dữ liệu hỗn độn. Trong 240 giờ demo thu thập được, không phải demo nào cũng tốt như nhau. Một số lần teleop bị jitter, người điều khiển do dự giữa chừng, hoặc task thất bại nhưng vẫn được ghi lại. Khi train không phân biệt, model học luôn cả những hành vi tệ này.
Thứ hai: Không có khả năng tự đánh giá. Trong quá trình manipulation, tay robot thường che khuất object (occlusion). Model không có cơ chế nhớ lại "mình đã làm gì ở bước trước" để suy đoạn trạng thái hiện tại, dẫn đến phán đoán sai trong điều kiện visibility kém.
Thứ ba: Online adaptation không ổn định. Khi fine-tune online trên robot thực, phân phối dữ liệu thay đổi liên tục. Nếu không có cơ chế guidance, model dao động mạnh và hiệu suất thụt lùi thay vì cải thiện.
Robo-ValueRL giải quyết cả ba bằng một mechanism trung tâm: historical observation-based value estimation — một hàm giá trị điều kiện trên lịch sử hành động.
Robo-ValueRL Là Gì?
Nói đơn giản: Robo-ValueRL thêm một "giám khảo" vào pipeline VLA. Giám khảo này (value estimator) xem lại toàn bộ lịch sử hành động của robot và cho điểm: "hành động vừa rồi tốt không? Tiến triển của task đang ở đâu?"
Điểm số này được dùng để:
- Lọc dữ liệu offline: chỉ giữ demo chất lượng cao để train
- Hướng dẫn offline pretraining: model học ưu tiên hành động tốt
- Ổn định online adaptation: khi ra môi trường thực, value function làm "neo" giúp policy không bị drift
Framework này build on top của OpenPI (π₀/π₀.₅) — VLA backbone đã được chứng minh — và LeRobot v2.1, nên không cần bắt đầu từ đầu.
Kết quả benchmark:
- Chip insertion (millimeter-level precision): 86% success rate
- Block disassembly: 84% success rate
- Train từ 240 giờ demo offline + ~3,000 online rollouts

Kiến Trúc 4 Giai Đoạn
Giai Đoạn 1: Value Estimation — "Giám Khảo" Lịch Sử
Value estimator nhận đầu vào là chuỗi hành động và ảnh từ nhiều camera trong quá khứ (multi-view, history-conditioned), sau đó predict remaining time — tức là còn bao nhiêu bước nữa thì task xong.
Đây là điểm khác biệt so với value function thông thường chỉ nhìn trạng thái hiện tại. Bằng cách sử dụng lịch sử, estimator có thể suy đoán trong điều kiện occlusion và giảm uncertainty của partial observation.
# Cấu trúc value estimator (pseudo-code)
class HistoryConditionedValueEstimator(nn.Module):
def __init__(self, obs_horizon=16, n_cameras=3):
super().__init__()
# Visual encoder xử lý ảnh từ 3 camera
self.visual_encoder = VisionTransformer(...)
# History encoder xử lý sequence hành động
self.history_encoder = TransformerEncoder(seq_len=obs_horizon)
# Value head predict remaining time
self.value_head = nn.Linear(hidden_dim, 1)
def forward(self, obs_history, action_history):
visual_feats = self.visual_encoder(obs_history) # [B, T, D]
history_feats = self.history_encoder(action_history) # [B, T, D]
fused = torch.cat([visual_feats, history_feats], dim=-1)
return self.value_head(fused.mean(dim=1)) # Remaining time prediction
Remaining time prediction được convert thành task progress (0.0 = mới bắt đầu, 1.0 = hoàn thành). Delta giữa hai timestep liên tiếp là value difference — thước đo "hành động vừa rồi tốt đến mức nào".
Giai Đoạn 2: Quality Annotation — Từ Điểm Số Thành Nhãn
Sau khi value estimator đã train xong trên một phần dataset, toàn bộ offline dataset được chạy qua để tính value difference cho từng timestep. Ba ngưỡng được xác định dựa trên phân phối:
| Nhãn | Ngưỡng | Ý nghĩa |
|---|---|---|
| GOOD | top 33% | Hành động đẩy task tiến nhanh |
| MEDIUM | middle 33% | Hành động bình thường |
| BAD | bottom 33% | Hành động không hiệu quả / sai |
Nhãn này được gắn vào từng sample trong dataset, biến tập data "thô" thành tập data có chú thích chất lượng.
Giai Đoạn 3: Offline Pretraining — Học Có Chọn Lọc
Policy được train dùng quality-conditioned consistency policy — về cơ bản là diffusion-style policy nhưng được điều kiện hóa trên nhãn chất lượng. Trong quá trình inference, luôn condition trên "GOOD" để policy học sinh ra hành động tốt nhất.
# Train offline
cd robo_valuerl
bash scripts/train_robo_valuerl_offline.sh
# Checkpoint lưu tại: outputs/offline_pretraining/
Consistency policy có ưu điểm là inference nhanh hơn diffusion đầy đủ (một bước denoising thay vì nhiều bước), phù hợp với yêu cầu real-time control.
Giai Đoạn 4: Online Adaptation — Fine-Tune Trên Robot Thực
Đây là giai đoạn quan trọng nhất và cũng hay bị "fail" nhất khi làm VLA-RL. Robo-ValueRL dùng Residual Adaptation Module kết hợp RTC (Real-Time Chunking) để ổn định quá trình này.
Residual adapter là một module nhỏ được thêm vào policy đã pretrain. Thay vì fine-tune toàn bộ network (tốn kém và dễ catastrophic forgetting), chỉ adapter được cập nhật trong mỗi online step. Value function từ giai đoạn 1 tiếp tục đánh giá các online rollout, ưu tiên sample chất lượng cao vào replay buffer.
# Online adaptation
bash scripts/train_robo_valuerl_online.sh
# Cần kết nối với robot server qua socket
Cài Đặt Môi Trường
Yêu Cầu Phần Cứng
| Thành phần | Yêu cầu |
|---|---|
| Training GPU | 8× NVIDIA A100 (80GB) |
| Inference GPU | RTX 4090 (24GB) |
| Robot | Dual-arm humanoid có 3 camera |
| RAM | 64GB+ |
| Storage | 2TB+ (cho 240h demo data) |
Nếu không có 8× A100, bạn có thể dùng ít hơn với
torchrunnhưng cần tăng gradient accumulation để bù lại batch size. Community đã report train được với 4× A100 bằng cách setgradient_accumulation_steps=2.
Clone và Setup
# Clone repo
git clone https://github.com/Open-X-Humanoid/Robo-ValueRL.git
cd Robo-ValueRL
# Cài đặt một lệnh (tạo conda env + install deps)
bash install_simple.sh
Script install_simple.sh tự động:
- Tạo conda environment
robo_valuerl - Cài LeRobot v2.1
- Cài OpenPI (π₀ backbone)
- Apply PyTorch patches cần thiết cho transformers directory
# Activate environment
conda activate robo_valuerl
# Verify install
python -c "import robo_valuerl; print('OK')"
python -c "import openpi; print('OK')"
Cấu Trúc Thư Mục
Robo-ValueRL/
├── robo_valuerl/
│ ├── value_estimator/ # Stage 1: History-conditioned value model
│ ├── quality_annotation/ # Stage 2: Rank-based labeling
│ ├── offline_pretraining/ # Stage 3: Consistency policy
│ ├── online_adaptation/ # Stage 4: Residual adapter + RTC
│ └── utils/
├── scripts/
│ ├── train_robo_valuerl_value_estimator.sh
│ ├── train_robo_valuerl_offline.sh
│ └── train_robo_valuerl_online.sh
├── configs/
│ └── default.yaml
└── install_simple.sh
Pipeline Training Step-by-Step
Bước 1: Chuẩn Bị Dataset
Dataset mong đợi format LeRobot v2.1. Nếu bạn có raw teleop data (video + joint states), convert bằng:
python robo_valuerl/utils/convert_to_lerobot.py \
--input_dir /path/to/raw_demos \
--output_dir /path/to/lerobot_dataset \
--robot_type tienkung_dual_arm \
--n_cameras 3
Dataset gốc của X-Humanoid có sẵn trên HuggingFace tại X-Humanoid/Robo-ValueRL. Download bằng:
huggingface-cli download X-Humanoid/Robo-ValueRL \
--repo-type dataset \
--local-dir ./data
Bước 2: Train Value Estimator
cd robo_valuerl
bash scripts/train_robo_valuerl_value_estimator.sh \
--dataset_path ./data/lerobot_dataset \
--obs_horizon 16 \
--n_cameras 3 \
--epochs 50 \
--batch_size 64
Training mất khoảng 6-8 giờ trên single A100. Checkpoint tốt nhất được chọn dựa trên validation loss (remaining time prediction error).
Tip: Theo dõi metric value_calibration_error trong log. Nếu > 0.15, tăng obs_horizon hoặc thêm dữ liệu.
Bước 3: Annotate Quality Labels
python robo_valuerl/quality_annotation/annotate_dataset.py \
--dataset_path ./data/lerobot_dataset \
--value_ckpt ./outputs/value_estimator/best.ckpt \
--output_path ./data/annotated_dataset \
--good_threshold 0.33 \
--bad_threshold 0.33
Script này chạy qua toàn bộ dataset, tính value difference, và gán nhãn GOOD/MEDIUM/BAD cho từng timestep. Kết quả: dataset với column quality_label bổ sung.
Bước 4: Offline Pretraining
# Distributed training trên 8 GPU
torchrun --nproc_per_node=8 \
robo_valuerl/offline_pretraining/train.py \
--dataset_path ./data/annotated_dataset \
--model_name openpi/pi0.5-base \
--batch_size 256 \
--lr 1e-4 \
--epochs 100 \
--output_dir ./outputs/offline_pretraining
Consistency policy được khởi tạo từ pretrained π₀.₅ weights, sau đó fine-tune trên annotated dataset. Quality conditioning được implement qua prefix token: [GOOD], [MEDIUM], [BAD] prepend vào sequence input.
Trong inference, luôn dùng [GOOD] token để steer policy sinh hành động tốt nhất.

Bước 5: Online Adaptation
Giai đoạn này yêu cầu kết nối thực tế với robot. Architecture dùng policy server / robot client thông qua socket:
# Terminal 1: Start policy server (trên GPU machine)
python robo_valuerl/online_adaptation/policy_server.py \
--checkpoint ./outputs/offline_pretraining/best.ckpt \
--port 8765
# Terminal 2: Start robot client (trên robot controller)
python robo_valuerl/online_adaptation/robot_client.py \
--server_ip 192.168.1.100 \
--port 8765 \
--robot_config configs/tienkung_dual_arm.yaml
Online adaptation diễn ra tự động: robot execute policy, value estimator đánh giá kết quả, high-value samples được thêm vào replay buffer, residual adapter được update mỗi N rollouts.
Lưu ý safety: Config max_correction_magnitude trong configs/default.yaml giới hạn mức độ correction của residual adapter. Bắt đầu với giá trị nhỏ (0.1) và tăng dần khi đã verify robot behavior.
Kết Quả Thực Nghiệm

Hai task chính được benchmark:
Chip Insertion — task đặc trưng cho precision manipulation công nghiệp:
- Tolerance: ±0.5mm
- Success rate: 86% (so với baseline behavior cloning: ~61%)
- Recovery từ failed grasp: policy tự adjust trajectory nhờ value guidance
Block Disassembly — task đánh giá generalization:
- Cần sequence of actions dài hơn
- Success rate: 84%
- Notably: policy generalize sang orientation variations không có trong train set
Ablation quan trọng: Khi loại bỏ history conditioning (chỉ dùng single-frame observation), success rate giảm về 71% trên chip insertion — chứng minh rằng lịch sử quan sát là yếu tố then chốt, đặc biệt trong occlusion scenarios.
So sánh với các phương pháp liên quan như SimpleVLA-RL và ProcVLM dense reward: Robo-ValueRL tập trung vào value reliability thay vì chỉ reward density, dẫn đến online adaptation ổn định hơn khi không có reward function tường minh.
Hardware Setup: X-Humanoid TienKung
Framework được thiết kế cho dual-arm humanoid TienKung của X-Humanoid, nhưng architecture socket-based policy server/client có thể adapt sang robot khác bằng cách:
- Viết
RobotClientcustom implement interfaceBaseRobotClient - Chỉnh
robot_config.yamlcho joint limits và action space - Map camera setup (framework mặc định 3 camera: wrist-left, wrist-right, overhead)
# configs/tienkung_dual_arm.yaml
robot:
n_arms: 2
dof_per_arm: 7
cameras:
- name: wrist_left
resolution: [640, 480]
fps: 30
- name: wrist_right
resolution: [640, 480]
fps: 30
- name: overhead
resolution: [1280, 720]
fps: 30
action_space: joint_positions # hoặc end_effector
control_freq: 50 # Hz
Ứng Dụng Thực Tế
X-Humanoid công bố framework nhắm vào ba industry vertical:
- Semiconductor assembly — lắp chip IC, soldering điểm nhỏ, kiểm tra PCB
- Precision electronics — tháo lắp connector, cắm cáp ribbon, lắp ráp camera module
- Medical devices — lắp ráp dụng cụ y tế yêu cầu sterile và chính xác cao
Điểm mạnh so với robot arm công nghiệp truyền thống (ABB, FANUC): Robo-ValueRL không cần jig fixture cứng nhắc. Policy học thích nghi với variation trong positioning của object, giảm setup time và chi phí fixture.
Tài Nguyên
- GitHub: Open-X-Humanoid/Robo-ValueRL
- Project Page: gewu-lab.github.io/Robo-ValueRL
- Paper (arXiv): arXiv:2607.09866 — Robo-ValueRL: Reliable Value Estimation for Offline-to-Online RL
- HuggingFace Models: X-Humanoid/Robo-ValueRL
- HuggingFace Dataset: X-Humanoid/Robo-ValueRL (dataset)
- X-Humanoid: x-humanoid.com
Kết Luận
Robo-ValueRL đại diện cho một hướng đi thực tế và có thể deploy ngay: thay vì thiết kế reward function phức tạp hay thu thập hàng triệu rollout, framework tận dụng value estimation từ dữ liệu teleop có sẵn để bootstrap một policy đủ tốt cho precision manufacturing.
Ba điểm đáng nhớ:
- History conditioning giải quyết occlusion và partial observability — không cần SLAM hay explicit state estimation
- Quality annotation tự động từ value difference — không cần human reannotate data
- Residual adapter cho online adaptation nhẹ và ổn định — không cần retrain cả backbone
Nếu bạn đang làm manipulation task đòi hỏi precision cao và đã có teleop demo dataset, Robo-ValueRL là điểm khởi đầu đáng thử nghiêm túc.



