humanoidwbcvlawhole-body-controlhumanoidloco-manipulation

WBC + VLA mới nhất cho humanoid

Deep dive WholeBodyVLA, LMO RL và xu hướng WBC + VLA giúp humanoid vừa đi vừa thao tác trong không gian lớn.

Nguyễn Anh Tuấn3 tháng 6, 202615 phút đọc
WBC + VLA mới nhất cho humanoid

Bối cảnh: vì sao WBC + VLA đang nóng?

Trong robotics, Whole-Body Control (WBC) là lớp điều khiển giúp robot sử dụng cả cơ thể, không chỉ một tay hay một chân. Với humanoid, điều này có nghĩa là chân, hông, thân, đầu, hai tay và gripper phải phối hợp trong cùng một bài toán động lực học. Vision-Language-Action (VLA) lại là hướng dùng ảnh, ngôn ngữ và dữ liệu hành động để biến câu lệnh như "nhặt hộp và đặt lên xe đẩy" thành chuỗi hành động robot.

Hai hướng này đang gặp nhau rất nhanh. Trước đây, nhiều hệ thống humanoid dùng pipeline rời rạc: VLM hiểu nhiệm vụ, planner chia bước, locomotion controller đưa robot đến gần vật, manipulation policy điều khiển tay. Cách này dễ debug, nhưng có một lỗi nền tảng: khi chân không biết tay sắp làm gì, robot có thể đứng sai vị trí, mất thăng bằng lúc squat, hoặc xoay người không đủ chính xác để grasp. Khi tay không biết chân còn đang ổn định hay chưa, thao tác cũng bị lệch.

Paper đáng chú ý nhất cho chủ đề này là WholeBodyVLA: Towards Unified Latent VLA for Whole-Body Loco-Manipulation Control, dự án của Fudan University, OpenDriveLab, MMLab HKU và AgiBot. Trang dự án chính thức ở opendrivelab.com/WholeBodyVLA mô tả hệ thống chạy trên AgiBot X2, nhận ảnh egocentric và instruction, sau đó xuất latent action token để điều khiển cả dual-arm manipulation và locomotion. Repo OpenDriveLab/WholebodyVLA hiện là repo tài nguyên và danh mục paper; README ghi rõ chưa có timeline cụ thể để open-source toàn bộ codebase.

Tính đến ngày 2026-06-03, bức tranh "newest" của WBC + VLA có ba nhánh nổi bật:

Hướng Ví dụ Điểm mạnh Điểm cần thận trọng
Unified latent VLA cho loco-manipulation WholeBodyVLA Học latent action từ video không có action label, chạy task lớn trong không gian thật Code chính thức chưa mở đầy đủ
WBC foundation controller GR00T-WholeBodyControl và SONIC Có code, checkpoint, Isaac Lab, teleoperation, deployment stack Tập trung vào controller/motion foundation, không phải cùng paper với WholeBodyVLA
Physics-aware VLA/WBC PhysiFlow Nhấn mạnh semantic intent, flow matching và robust tracking Cần kiểm chứng thêm bằng code/dataset mở và real robot rộng hơn

Bài này lấy WholeBodyVLA làm trục chính, vì nó trực tiếp trả lời câu hỏi: làm sao để VLA không chỉ điều khiển tay tại chỗ, mà còn điều khiển humanoid vừa đi, vừa squat, vừa xoay, vừa thao tác.

Ý tưởng paper: học hành động toàn thân từ video rẻ hơn

Vấn đề đầu tiên của humanoid loco-manipulation là dữ liệu. Để train một VLA truyền thống, ta thường cần trajectory dạng:

observation_t = RGB image + proprioception + language
action_t      = joint targets / end-effector delta / base velocity

Với robot tay cố định trên bàn, việc thu teleoperation đã khó. Với humanoid, dữ liệu còn đắt hơn vì người vận hành phải đồng thời điều khiển base, body height, torso, hai tay và gripper. Nếu dùng MoCap, chi phí setup cao. Nếu dùng VR + joystick, operator phải có kỹ năng và robot thật dễ gặp rủi ro. Vì vậy, paper đặt câu hỏi thực tế hơn: có thể học phần "ý định chuyển động" từ video người quay bằng camera đầu, dù video đó không có action robot hay không?

WholeBodyVLA trả lời bằng unified latent learning. Thay vì ép video người thành joint action ngay, hệ thống học một Latent Action Model (LAM) để nén thay đổi giữa hai frame liên tiếp thành token rời rạc. Token này không phải "motor command" trực tiếp. Nó giống một mã mô tả rằng cảnh đã thay đổi theo kiểu nào: tiến gần vật, xoay người, hạ thấp camera, đưa tay về vật, hoặc kết hợp nhiều tín hiệu thị giác.

Điểm kỹ thuật quan trọng: paper không dùng một LAM duy nhất cho mọi thứ. Họ train hai LAM riêng:

LAM Dữ liệu Vì sao tách riêng?
Manipulation LAM Dữ liệu manipulation, gồm AgiBot World Camera thường gần như đứng yên, thay đổi ảnh chủ yếu do tay và vật
Locomotion LAM Egocentric manipulation-aware locomotion video Camera chuyển động liên tục, thay đổi ảnh chủ yếu do thân người tiến, xoay, squat

Nếu dùng một LAM chung, model dễ nhầm: vật trong ảnh dịch chuyển là do tay di chuyển, hay do camera/base di chuyển? Với humanoid, nhầm lẫn này nguy hiểm. Robot có thể nghĩ cần vươn tay xa hơn, trong khi thực ra cần bước tới; hoặc nghĩ cần xoay base, trong khi tay chỉ đang điều chỉnh grasp.

Kiến trúc tổng thể

Sơ đồ tối giản của WholeBodyVLA như sau:

             Pretraining từ video không có action label
      +------------------------------------------------+
      |  Human egocentric locomotion videos            |
      |  Robot manipulation videos                     |
      +-----------------------+------------------------+
                              |
                              v
        +---------------------+---------------------+
        |  Locomotion LAM     |  Manipulation LAM  |
        |  VQ-VAE codebook    |  VQ-VAE codebook   |
        +----------+----------+----------+----------+
                   |                     |
                   +----------+----------+
                              v
        +--------------------------------------------+
        | VLA policy                                  |
        | input: image + language                     |
        | output: latent locomotion + latent manip    |
        +--------------------+-----------------------+
                             |
                             v
        +--------------------------------------------+
        | Lightweight execution decoder               |
        | output 1: upper-body joint targets          |
        | output 2: discrete locomotion command       |
        +--------------------+-----------------------+
                             |
                             v
        +--------------------------------------------+
        | LMO RL low-level controller, khoảng 50 Hz   |
        | giữ thăng bằng, bước, xoay, squat            |
        +--------------------------------------------+

Trong paper, LAM dựa trên tinh thần VQ-VAE. Encoder dùng đặc trưng thị giác, paper nhắc đến DINOv2 feature và spatio-temporal transformer. Encoder nhận frame liên tiếp, sinh latent vector liên tục, rồi quantize sang entry gần nhất trong codebook. Decoder học reconstruct frame tương lai từ frame hiện tại và latent action đã lượng tử hóa.

Pseudo-code cho LAM có thể viết như sau:

class LatentActionModel(nn.Module):
    def __init__(self, vision_backbone, st_transformer, codebook, decoder):
        super().__init__()
        self.vision = vision_backbone
        self.temporal = st_transformer
        self.codebook = codebook
        self.decoder = decoder

    def forward(self, frame_t, frame_tp1):
        feat_t = self.vision(frame_t)
        feat_tp1 = self.vision(frame_tp1)
        z_cont = self.temporal(feat_t, feat_tp1)
        z_q, token_id, vq_loss = self.codebook.quantize(z_cont)
        pred_tp1 = self.decoder(frame_t, z_q)
        recon_loss = mse(pred_tp1, frame_tp1)
        return token_id, recon_loss + vq_loss

Sau khi LAM đã tạo pseudo-label, VLA được train để dự đoán token locomotion và token manipulation từ ảnh egocentric cộng câu lệnh. Đây là điểm làm WholeBodyVLA khác với VLA chỉ thao tác tay: model không chỉ học "grasp object", mà còn học các precondition như "tiến lại gần", "xoay người", "hạ body để với tới vật", rồi mới "place".

LMO RL: vì sao low-level controller không dùng velocity tracking đơn giản?

Trong nhiều hệ locomotion RL, high-level policy xuất velocity command liên tục, ví dụ vx, vy, yaw_rate. Low-level policy học track các tốc độ này. Cách này tốt cho walking nói chung, nhưng không đủ tốt cho loco-manipulation. Khi robot cần đặt hộp vào thùng, khác biệt vài cm ở điểm dừng hoặc vài độ ở yaw có thể làm grasp thất bại. Khi robot squat, upper body tạo nhiễu quán tính; controller chỉ biết track velocity có thể bị trôi hoặc stumble.

WholeBodyVLA đề xuất Loco-Manipulation-Oriented RL policy (LMO). Thay vì command liên tục quá rộng, interface là các intent rời rạc:

forward/backward flag
lateral flag
yaw turn flag
stance height command

Nói cách khác, high-level VLA không cần nói "đi 0.17 m/s trong 0.8 giây". Nó nói gần hơn với "bắt đầu tiến", "dừng", "sidestep", "xoay", "squat xuống". LMO biến các flag này thành chuyển động thấp tầng ổn định, có smoothing để tránh gia tốc đột ngột. Observation của LMO chủ yếu là proprioception: angular velocity của base, gravity vector, joint positions, joint velocities và action trước đó. Điều này hợp lý vì low-level balance không nên phụ thuộc vào cloud perception hay VLM latency.

Training LMO gồm hai stage:

  1. Basic gait acquisition: học gait tối thiểu để không ngã và phản hồi các command cơ bản. Upper body được đưa vào như pose target thay đổi định kỳ, giúp chân quen với nhiễu từ thân trên.
  2. Precision and stability: chuẩn hóa cruising speed, phạt yaw drift ở cuối episode, thêm perturbation có cấu trúc từ arm-motion clip, và phạt chuyển động chân thừa khi robot cần đứng yên.

Đây là phần beginner hay bỏ qua nhưng rất quan trọng. VLA mạnh đến đâu cũng không cứu được robot nếu low-level controller dừng lệch, xoay lệch, hoặc mất thăng bằng khi tay kéo vật nặng.

Cách cài đặt và tái lập thực tế

Phần này cần nói rõ: WholeBodyVLA chưa phát hành codebase đầy đủ trong repo chính thức. Bạn có thể clone repo để đọc README, citation và danh mục tài nguyên, nhưng không nên kỳ vọng chạy được training/inference nguyên bản chỉ từ repo đó.

git clone https://github.com/OpenDriveLab/WholebodyVLA.git
cd WholebodyVLA
# Repo hiện chủ yếu là project README và danh mục paper/resource.

Nếu mục tiêu là học WBC/VLA bằng code mở ngay hôm nay, nhánh thực dụng hơn là dùng NVlabs/GR00T-WholeBodyControl. Repo này có cấu trúc training/deployment rõ hơn cho WBC, gồm gear_sonic, gear_sonic_deploy, motionbricks, script tải checkpoint, docs cho Isaac Lab, MuJoCo simulation, VR teleoperation và C++ inference. Với máy phù hợp, luồng setup cơ bản là:

git clone https://github.com/NVlabs/GR00T-WholeBodyControl.git
cd GR00T-WholeBodyControl
git lfs pull
python check_environment.py

# Training cần Isaac Lab cài riêng.
pip install -e "gear_sonic/[training]"
python download_from_hf.py --training

Nếu muốn tái lập ý tưởng WholeBodyVLA ở mức nghiên cứu, nên chia thành bốn repo/module nội bộ:

wbc-vla-lab/
  data/
    ego_locomotion_videos/
    robot_manipulation_episodes/
    teleop_x2_or_g1/
  lam/
    train_locomotion_lam.py
    train_manipulation_lam.py
  vla/
    train_latent_vla.py
    finetune_decoder.py
  wbc/
    train_lmo_rl.py
    export_policy.py
  deploy/
    camera_node.py
    vla_inference.py
    low_level_bridge.py

Checklist tối thiểu:

Thành phần Beginner nên làm gì trước
Video data Thu video head-mounted đơn giản: tiến, lùi, sidestep, xoay, squat gần vật
Manipulation data Dùng dataset mở hoặc teleop một robot tay nhỏ trước
LAM Train reconstruction giữa frame liên tiếp, kiểm tra token có phân cụm hợp lý không
VLA Dùng backbone nhỏ trước, output token thay vì joint trực tiếp
Low-level control Bắt đầu trong Isaac Lab/MuJoCo, không chạy robot thật sớm
Deployment Tách high-level 5-10 Hz và low-level 50 Hz trở lên

Training pipeline chi tiết

WholeBodyVLA dùng công thức ba bước:

Stage I:  LAM pretraining
          video_t, video_t+1 -> discrete latent token

Stage II: VLA latent pretraining
          image + language -> locomotion token + manipulation token

Stage III: Real-robot finetuning
          latent tokens + robot state -> upper-body joints + locomotion command

Ở Stage I, mục tiêu không phải tạo ảnh đẹp như video generation. Mục tiêu là tạo codebook đủ hữu ích để token phản ánh primitive liên quan đến điều khiển. Nếu token chỉ học ánh sáng, background, hoặc camera noise, VLA downstream sẽ yếu. Vì vậy data collection phải có chủ đích: operator đeo camera nên đi tới vật có thể thao tác, đổi hướng, squat, sidestep, tiếp cận bàn, thùng, xe đẩy, tay nắm.

Ở Stage II, VLA học cross-entropy trên token của hai LAM. Language instruction đóng vai trò điều kiện ngữ nghĩa. Ví dụ cùng một ảnh có hộp và xe đẩy, instruction "load the box onto the cart" khác "push the cart forward"; model phải chọn chuỗi latent khác nhau.

Ở Stage III, cần teleoperation robot thật để grounding latent vào command của embodiment cụ thể. Paper dùng AgiBot X2 với dual 7-DoF arms, gripper, legs, waist và camera egocentric RealSense D435i. Teleoperation trong paper được mô tả bằng VR + joystick, 50 executions mỗi task. Đây là lượng dữ liệu nhỏ hơn nhiều so với việc train end-to-end từ đầu, vì phần prior đã học từ video không có action label.

Inference: high-level chậm, low-level nhanh

Runtime của WholeBodyVLA có nhịp hai tầng:

Ảnh egocentric + câu lệnh
        |
        v
VLA policy, khoảng 10 Hz
        |
        +--> upper-body joint targets
        |
        +--> discrete locomotion command
                    |
                    v
            LMO RL controller, khoảng 50 Hz
                    |
                    v
              lower-body torques/actions

Thiết kế này thực dụng. VLM/VLA thường nặng và không cần chạy 200 Hz. Nhưng balance và motor command cần tần số cao hơn. Vì vậy VLA đưa ra intent ở nhịp thấp, còn LMO giữ ổn định ở nhịp cao. Nếu camera bị chậm một chút, robot vẫn cần đứng vững. Nếu VLA dự đoán "turn left" trong vài frame, low-level phải biến nó thành chuyển động mượt, có start-stop rõ ràng.

Một inference loop tối giản có thể như sau:

while robot.is_active():
    if timer.ready("vla", hz=10):
        image = camera.read()
        state = robot.read_state()
        latent_loco, latent_manip = vla.predict(image, instruction)
        arm_targets, loco_cmd = decoder(latent_loco, latent_manip, state)
        robot.send_arm_targets(arm_targets)

    proprio = robot.read_proprioception()
    lower_action = lmo_policy.step(proprio, loco_cmd)
    robot.send_lower_body_action(lower_action)

Trong robot thật, bạn còn cần safety layer: joint limit, torque limit, fall detection, emergency stop, stale-command timeout, và logging đồng bộ timestamp. Đây không phải chi tiết phụ. Với humanoid, một lỗi nhỏ ở đồng bộ camera-state-action có thể biến thành ngã robot.

Kết quả: WholeBodyVLA tốt hơn ở đoạn khó

Paper đánh giá ba task thật trên AgiBot X2:

Task Subgoal chính Kỹ năng cần kiểm tra
Bag Packing grasp bag, sidestep, squat, place bimanual grasp, lateral stepping, squat precision
Box Loading squat, grasp box, rise, turn, place lower body stability khi nâng vật và xoay
Cart Pushing grab handle, push cart > 50 kg sustained locomotion, heading control, interaction force

Trong bảng kết quả chính, WholeBodyVLA đạt average score 78.0%, cao hơn Modular Design 64.0%, OpenVLA-OFT với LMO 56.7%, GR00T với LMO 42.0%. Các ablation cũng rất rõ: bỏ LAM chỉ còn 39.3%; dùng velocity-based RL thay LMO còn 54.0%; dùng manipulation-only LAM đạt 63.3%; dùng shared LAM đạt 66.0%. Paper cũng nêu WholeBodyVLA vượt prior baseline 21.3% và 24.0% trong các thiết lập so sánh.

Điểm đáng học không chỉ là con số cuối. Khi nhìn vào subgoal, lợi thế lớn nằm ở các đoạn "đi để phục vụ thao tác": move & squat, rise & turn, push ahead. Đây chính là nơi pipeline modular thường hụt hơi. Robot có thể grasp tốt khi đứng đúng chỗ, nhưng lại không tự tạo được tư thế tốt cho grasp tiếp theo.

So sánh với các hướng mới khác

GR00T-WholeBodyControl/SONIC nên được xem là nền WBC mở hữu ích. Repo NVIDIA cho thấy hướng "foundation controller": train policy tracking motion lớn, hỗ trợ teleoperation, kinematic planner, C++ inference, Isaac Lab và deployment. Nếu bạn cần code để bắt đầu với Unitree G1 hoặc muốn hiểu WBC engineering, đây là nguồn rất thực tế. Nhưng nó không thay thế trực tiếp WholeBodyVLA, vì WholeBodyVLA tập trung vào unified latent VLA cho task semantically guided loco-manipulation.

PhysiFlow, công bố tháng 3 năm 2026 trên arXiv, đi theo hướng physics-aware multi-brain VLA, dùng semantic-motion intent và latent flow matching để nối VLA với robust tracking. Đây là dấu hiệu xu hướng rõ ràng: cộng đồng đang nhận ra VLA không thể chỉ là transformer xuất action; nó cần tầng vật lý hiểu balance, contact và tracking.

Neon VLA trên PyPI, phát hành 0.1.5 ngày 2026-03-31, cũng cho thấy nhu cầu open-source VLA cho humanoid G1. Tuy nhiên, với beginner, nên phân biệt package thử nghiệm alpha, repo controller mở, và paper có kết quả real robot. Không nên gom tất cả thành một "model biết điều khiển humanoid" duy nhất.

Beginner nên bắt đầu từ đâu?

Nếu bạn mới học, đừng bắt đầu bằng robot thật. Lộ trình hợp lý hơn:

  1. Đọc lại nền tảng VLA: observation, language embedding, action head và imitation learning.
  2. Hiểu RL locomotion: reward, domain randomization, proprioception và sim-to-real.
  3. Đọc riêng paper WholeBodyVLA để nắm unified latent learning và LMO RL.
  4. Thử training stack mô phỏng trước khi nghĩ đến robot thật.

Một bài tập nhỏ nhưng rất hữu ích là train "toy LAM" trên video đơn giản. Bạn không cần humanoid ngay. Dùng camera điện thoại quay các đoạn tiến lại gần bàn, xoay trái, cúi xuống, đưa tay lấy vật. Sau đó train model phân cụm thay đổi frame. Nếu latent token phân biệt được "camera moving forward" và "hand moving", bạn đã hiểu hạt nhân của unified latent learning.

Kết luận

WholeBodyVLA quan trọng vì nó chuyển câu hỏi từ "VLA điều khiển tay robot như thế nào?" sang "VLA điều khiển cả cơ thể để tạo điều kiện cho thao tác như thế nào?". Với humanoid, đây là bước chuyển bắt buộc. Robot hình người không thể chỉ đứng tại chỗ và vươn tay; nó phải bước, xoay, squat, giữ thăng bằng, chịu lực tương tác và vẫn hiểu instruction.

Thông điệp kỹ thuật chính là: VLA cần latent action học từ dữ liệu rẻ hơn, WBC cần interface phù hợp với manipulation, và inference phải tách high-level semantic reasoning khỏi low-level stability. Các hệ mới như WholeBodyVLA, SONIC/GR00T-WholeBodyControl và PhysiFlow cho thấy tương lai gần của humanoid sẽ không còn là "planner gọi từng skill", mà là policy nhiều tầng, trong đó ngôn ngữ, thị giác, latent motion và physical control được thiết kế cùng nhau.

Bài viết liên quan

NT

Nguyễn Anh Tuấn

Robotics & AI Engineer. Building VnRobo — sharing knowledge about robot learning, VLA models, and automation.

Khám phá VnRobo

Bài viết liên quan

NEWDeep Dive
VLA-RFT: RL Fine-Tune VLA trong World Simulator
vlavla-rftreinforcement-learningworld-modelgrpoliberoopenhelixmanipulation

VLA-RFT: RL Fine-Tune VLA trong World Simulator

VLA-RFT dùng world model làm simulator để fine-tune VLA bằng GRPO, reward kiểm chứng và code GitHub trên LIBERO.

3/6/202614 phút đọc
NEWTutorial
Chạy Wall-OSS-0.5 với LeRobot
wall-ossvlalerobotmanipulationzero-shot

Chạy Wall-OSS-0.5 với LeRobot

Hướng dẫn chạy Wall-OSS-0.5, VLA 4B open-source zero-shot cho robot manipulation, từ paper đến LeRobot training và inference.

3/6/202613 phút đọc
NEWDeep Dive
SafeContract: Giám sát action VLA
vlalerobotsafecontractsmolvlaopenvlarobot-safety

SafeContract: Giám sát action VLA

Cách dùng SafeContract để kiểm tra, hiệu chỉnh và chặn action nguy hiểm khi deploy SmolVLA/OpenVLA trên LeRobot.

3/6/202614 phút đọc