VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam
VnRobo
Về chúng tôiBảng giáBlogLiên hệ
🇺🇸ENĐăng nhậpDùng thử miễn phí
🇺🇸EN
  1. Trang chủ
  2. Blog
  3. M3imic: WBC đa phương thức cho G1
wholebody-vlaM3imicUnitree G1Isaac Labwhole-body controlmultimodal imitationsim-to-realRSL-RL

M3imic: WBC đa phương thức cho G1

Hướng dẫn M3imic: ý tưởng, kiến trúc, cài đặt Isaac Lab, training, inference và kết quả trên Unitree G1.

Nguyễn Anh Tuấn15 tháng 6, 202614 phút đọc
M3imic: WBC đa phương thức cho G1

M3imic giải quyết vấn đề gì?

M3imic, hay Multi-Modal Mimic, là paper mới về huấn luyện một whole-body controller đa phương thức cho humanoid. Paper chính thức là M3imic: Learning a Versatile Whole-Body Controller for Multimodal Motion Mimicking, còn code public nằm ở repo Renforce-Dynamics/MultiModalWBC. Nền tảng chạy trên NVIDIA Isaac Sim / Isaac Lab 2.1.1, dùng RSL-RL, và robot mục tiêu là Unitree G1 29-DoF.

Nếu bạn đã đọc whole-body VLA open-source guide, deploy G1 WBC, hoặc ASAP cho Unitree G1, M3imic nằm đúng ở giao điểm giữa ba hướng đó: motion imitation, multi-modal command representation và sim-to-real cho humanoid. Điểm khác biệt là M3imic không ép mọi dữ liệu motion về một format duy nhất trước khi training. Nó học một latent command space chung để cùng một policy có thể nhận nhiều loại reference khác nhau.

Khuyến nghị công cụ

Stack train/deploy cho VLA

Train trên cloud/workstation, deploy bản tối ưu xuống Jetson hoặc robot computer.

Cloud GPU for VLA / policy training Dùng cho imitation learning, diffusion policy, RL và fine-tuning model robotics. Xem cloud GPU → NVIDIA Jetson Orin NX / Orin Nano Máy deploy edge cho perception, logging và inference đã tối ưu. Xem Jetson → Hugging Face / robotics dataset hosting Lưu dataset, checkpoint và model card để workflow LeRobot/VLA dễ chia sẻ hơn. Xem platform →

Với người mới, hãy bắt đầu từ câu hỏi thực tế: khi điều khiển humanoid, bạn muốn đưa vào controller dạng dữ liệu nào? Với locomotion kiểu walking, running hoặc dancing, dữ liệu dense robot joint trajectory rất tiện vì mỗi joint của G1 có target rõ ràng. Với teleoperation, bạn thường chỉ có sparse end-effector pose: hai tay, hai chân, chest hoặc pelvis từ mocap/VR. Với dataset human motion, bạn có SMPL-X body pose chứ không có sẵn joint angle của G1. Ba nguồn này đều hữu ích, nhưng cấu trúc khác nhau rất mạnh. Nếu convert tất cả sang robot joint bằng inverse kinematics, bạn mất tính linh hoạt và phải chạy IK lúc deployment. Nếu concatenate tất cả vào một vector rồi distill teacher-student, training phức tạp và dễ sinh mismatch giữa train/deploy.

M3imic chọn hướng thứ ba: dùng modality-specific encoders cho từng loại reference, map chúng vào shared latent space, sau đó train một policy end-to-end bằng reinforcement learning. Policy nhìn thấy proprioception của robot và latent command, rồi xuất joint position action cho G1. Paper đánh giá trên simulation và robot thật, với kết quả nổi bật: trên unseen OMOMO test set, end-effector policy đạt 98,42% success rate, còn robot-joint policy đạt pose/joint tracking error tốt nhất.

Ý tưởng M3imic: thay vì IK hoặc multi-stage distillation, học latent command space chung cho nhiều reference modality — nguồn: arXiv paper M3imic
Ý tưởng M3imic: thay vì IK hoặc multi-stage distillation, học latent command space chung cho nhiều reference modality — nguồn: arXiv paper M3imic

Mental model cho beginner

Hãy tưởng tượng bạn đang dạy G1 bắt chước chuyển động. Có ba người hướng dẫn:

Modality Dữ liệu đầu vào Khi nào hữu ích
Robot joint angles 29 joint angle của Unitree G1 Motion tracking chính xác, dataset đã retarget sang robot
Human body pose SMPL-X, 21 joints, 6D rotation Tận dụng dataset human motion lớn
End-effector poses 5 SE(3) keypoints: hands, feet, chest Teleoperation, sparse mocap/VR command

Một controller truyền thống thường muốn command rõ ràng kiểu "joint này đi đến angle này". Nhưng teleoperation không luôn có thông tin đó. Nếu người vận hành chỉ đưa tay ra trước, có nhiều cấu hình full-body hợp lệ: robot có thể hơi xoay torso, dịch pelvis, gập gối hoặc đổi stance để giữ thăng bằng. Đây là kinematic redundancy. Sparse command ít chính xác hơn ở từng joint, nhưng cho robot nhiều freedom hơn để tự cân bằng.

M3imic biến sự khác biệt này thành lợi thế. Robot-joint modality cho tracking fidelity cao. End-effector modality cho robustness cao khi motion nằm ngoài distribution training. Human-pose modality là cầu nối từ dataset người sang robot. Shared latent space buộc các encoder học representation tương thích, để cùng một actor policy không phải được train lại cho từng modality.

Một cách viết đơn giản:

reference sequence
  -> robot encoder / human encoder / keypoint encoder
  -> latent z, 64 dimensions
  -> actor(policy) + robot proprioception
  -> joint position action for Unitree G1

Paper dùng horizon ngắn gồm 10 future/reference frames, sampling cách nhau 2 step. Như vậy encoder không chỉ nhìn frame hiện tại, mà thấy một đoạn chuyển động sắp tới để policy mượt hơn. Nếu bạn đã từng train locomotion PPO, đây giống việc command không chỉ là velocity target tức thời, mà là một đoạn "motion intent" ngắn.

Kiến trúc M3imic trong paper

Kiến trúc chính có bốn mảnh: data preprocessing, multi-modal command encoder, asymmetric actor-critic và curriculum sampling.

Framework M3imic: preprocess motion data, encode nhiều modality vào latent space, train một policy và deploy qua nhiều input modality — nguồn: arXiv paper M3imic
Framework M3imic: preprocess motion data, encode nhiều modality vào latent space, train một policy và deploy qua nhiều input modality — nguồn: arXiv paper M3imic

Data preprocessing lấy LAFAN1 và 100STYLE làm training datasets. LAFAN1 chứa nhiều chuyển động người đa dạng và dynamic; 100STYLE tập trung vào nhiều kiểu walking. Paper dùng OMOMO test set cho manipulation motion chưa thấy trong training. Trước khi train, dữ liệu cần được refine qua Blender cho SMPL-X và retarget bằng GMR. Repo public cũng có script xử lý CSV/NPZ trong scripts/data/, còn dataset đã preprocess được trỏ tới ModelScope seulzx/gae_mimic_dataset.

Multi-modal command encoder có ba encoder và ba decoder. Robot input là q_t có 29 chiều. Human input là SMPL-X body pose 21 x 6, dùng 6D rotation representation thay vì axis-angle thô. End-effector input là 5 x 9, gồm root-relative 3D position và 6D rotation cho 5 keypoints. Mỗi encoder đưa reference sequence về latent z 64 chiều. Decoder dùng lại để reconstruct từng modality, tạo reconstruction loss.

Shared latent alignment là phần quan trọng nhất. Autoencoder loss có ba phần:

Loss Ý nghĩa thực tế
Reconstruction loss Encoder-decoder phải giữ đủ thông tin để khôi phục modality gốc
Alignment loss Latent của robot, human và keypoints cho cùng motion phải gần nhau
Consistency loss Khi decode latent từ modality khác về robot reference, kết quả phải nhất quán

Nói cách khác, M3imic không chỉ train policy để sống sót. Nó buộc representation của ba input modality nói cùng một "ngôn ngữ điều khiển" ở latent space. Đây là lý do paper gọi whole-body control là multi-modal sequence alignment problem.

Asymmetric actor-critic là trick quen thuộc trong sim-to-real. Actor chỉ dùng thông tin có thể có khi deploy: latent command, root rotation error, angular velocity, joint position, joint velocity và previous action. Actor cố tình không dùng global root position và linear velocity, vì ngoài đời không phải lúc nào G1 cũng có external localization ổn định. Critic thì được dùng privileged information trong simulation: root position error, body link positions/orientations và root linear velocity. Critic học tốt hơn trong sim, nhưng actor vẫn deploy được trên real robot.

Action output trong repo là joint position command. whole_body_control/robots/g1.py định nghĩa Unitree G1 bằng ArticulationCfg và ImplicitActuatorCfg, kèm joint limits, stiffness/damping theo nhóm joint và action scale. Task config GAEMimic_G1FlatEnvCfg dùng G1 cylinder asset, anchor body là pelvis, và track các body link chính như pelvis, hip roll, knee, ankle roll, torso, shoulder roll, elbow và wrist yaw.

Cài đặt môi trường Isaac Lab

Repo yêu cầu Linux, Python 3.10, Isaac Sim 4.5.0, Isaac Lab 2.1.1 và PyTorch CUDA. Với beginner, đừng cài trực tiếp vào môi trường đang dùng cho dự án khác. Tạo env riêng:

conda create -n env_mimic python=3.10
conda activate env_mimic
pip install torch==2.7.0 torchvision==0.22.0 --index-url https://download.pytorch.org/whl/cu128

Sau đó cài Isaac Sim bằng pip theo hướng dẫn repo:

pip install 'isaacsim[all,extscache]==4.5.0' --extra-index-url https://pypi.nvidia.com
isaacsim isaacsim.exp.full.kit

Nếu GUI Isaac Sim mở được, chuyển sang Isaac Lab. Repo yêu cầu commit Isaac Lab cụ thể:

git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
git checkout 90b79bb2d44feb8d833f260f2bf37da3487180ba
./isaaclab.sh -i
./isaaclab.sh -p scripts/reinforcement_learning/rsl_rl/train.py --task=Isaac-Ant-v0 --headless

Lệnh Isaac-Ant-v0 không liên quan G1, nhưng là smoke test tốt: nếu nó chạy được, Isaac Lab, Python extension, GPU và RSL-RL integration đã tương đối ổn.

Tiếp theo, cài RSL-RL và M3imic:

cd /path/to/IsaacLab
./isaaclab.sh -p -m pip install -e /path/to/MultiModalWBC/third_party/rsl_rl

cd /path/to/MultiModalWBC/source/whole_body_control
pip install -e .

Repo cũng yêu cầu Unitree assets:

git clone https://huggingface.co/datasets/unitreerobotics/unitree_model

Hãy kiểm tra asset path trong config trước khi training. Nếu Isaac Lab không tìm thấy USD/MJCF hoặc mesh của G1, environment có thể khởi tạo lỗi hoặc robot spawn sai posture. Với G1, sai joint order/action scale nguy hiểm hơn sai texture: policy có thể học nhưng không deploy được.

Dataset và cấu trúc thư mục

README repo nói dataset preprocess có SMPL-X và keypoints ở ModelScope:

https://www.modelscope.cn/datasets/seulzx/gae_mimic_dataset

Sau khi tải, đặt dữ liệu dưới datasets/. Trong package, whole_body_control.tasks.__init__ định nghĩa:

datasets/npz_datasets
datasets/extended_datasets

Config GAEMimic_G1FlatEnvCfg mặc định đọc datasets/extended_datasets/lafan1_dataset với split train. Nếu bạn tải đủ 100STYLE, có thể mở thêm dòng 100style_dataset trong config. Với người mới, nên giữ một dataset nhỏ trước để kiểm tra pipeline:

python scripts/tools/list_envs.py

Sau đó kiểm tra task có xuất hiện không. Các task chính trong README:

Task Mục tiêu
TrackingEnvCfg Single reference motion tracking
MultiTracking_TrackingEnvCfg Multi-motion tracking từ nhiều motion clips
GAEMimic_TrackingEnvCfg Multi-modal imitation với robot, SMPL-X và SE(3) keypoints

Nếu chỉ muốn học workflow, bắt đầu từ MultiTracking-Flat-G1-v0. Nếu muốn đi đúng M3imic multi-modal, dùng task GAEMimic tương ứng trong environment list. README quick start dùng:

python scripts/rsl_rl/train.py \
  --headless \
  --task MultiTracking-Flat-G1-v0

Vì repo đang ở giai đoạn research, tên task cụ thể nên được lấy từ scripts/tools/list_envs.py sau khi install, không đoán bằng trí nhớ. Đây là thói quen quan trọng khi làm Isaac Lab: task registry được import động từ package, chỉ cần thiếu pip install -e . hoặc sai Python env là list task sẽ khác ngay.

Training policy

Runner config cho G1 dùng PPO với:

Tham số Giá trị trong repo
num_steps_per_env 24
max_iterations 30.000 cho single tracking, 50.000 cho multi/GAEMimic
Actor hidden dims [512, 256, 128]
Critic hidden dims [512, 256, 128]
Activation elu
Learning rate 1e-3, adaptive schedule
gamma, lam 0,99 và 0,95
desired_kl 0,01
Entropy coef 0,005

GAEMimic policy trong repo dùng RslRl_Triple_AE_PPOPolicyCfg. Các dimension đáng chú ý:

robot signal dim:     290
human signal dim:     1260  # 126 x 10 frames
keypoints signal dim: 450   # 5 keypoints x 9 dims x 10 frames
latent dim:           64

Trong config public, activate_signals="robot" được ghi chú là dùng robot signals cho zero-shot training. Khi bạn muốn thử modality khác, hãy đọc kỹ implementation của actor_sonic.py, actor_critic_triple_ae.py và task observations để biết input nào đang active, input nào dùng cho alignment/reconstruction. Không nên chỉ sửa một string rồi kết luận model đã chạy multi-modal đầy đủ.

Lệnh train thực tế nên bắt đầu nhỏ:

python scripts/rsl_rl/train.py \
  --headless \
  --task MultiTracking-Flat-G1-v0 \
  --num_envs 256 \
  --max_iterations 1000 \
  --video \
  --video_interval 500

Khi đã ổn, tăng num_envs lên 2048 hoặc 4096, bỏ --video nếu cần tốc độ, và chạy đủ 50.000 iteration. Paper dùng 4096 parallel environments cho evaluation; ablation train 50.000 iteration trên 4 RTX 4090. Nếu bạn chỉ có một GPU 24 GB, kỳ vọng training sẽ chậm hơn và cần giảm num_envs.

Reward trong paper gồm tracking reward và regularization:

Nhóm reward Ý nghĩa
Root velocity/orientation Bám vận tốc và orientation của root
Body position/orientation Bám pose các link chính
Body velocity/angular velocity Bám dynamic motion, không chỉ pose tĩnh
Action rate penalty Giảm action giật
Joint limit penalty Tránh vượt soft joint limits
Collision penalty Tránh contact không mong muốn

Domain randomization gồm friction [0.1, 1.6], push robot đến khoảng [-0.5, 0.5] m/s, base COM/mass variation, default joint position noise, anchor orientation noise, base angular velocity noise, joint position noise và joint velocity noise. Đây là phần bắt buộc nếu bạn muốn policy có cơ hội sống trên G1 thật. Simulation đẹp nhưng không randomize thường chỉ là video đẹp.

Inference và export policy

Sau khi có checkpoint trong logs/rsl_rl/<experiment_name>/..., dùng play.py:

python scripts/rsl_rl/play.py \
  --task MultiTracking-Flat-G1-v0 \
  --num_envs 16 \
  --checkpoint /path/to/model.pt \
  --video \
  --video_length 400

Script play.py load checkpoint bằng OnPolicyRunner, lấy inference policy, sau đó export cả TorchScript và ONNX:

<run_dir>/exported/policy.pt
<run_dir>/exported/policy.onnx

Đây mới là điểm bắt đầu cho sim-to-real. Trước khi đưa lên Unitree G1 thật, bạn cần tối thiểu bốn lớp kiểm tra:

  1. Sim replay: policy chạy trong Isaac Lab với cùng dataset reference, không fall, action không saturate.
  2. Sim-to-sim: nếu có MuJoCo/Unitree sim, kiểm tra joint order, PD gains, action scale, control frequency.
  3. Low-power real test: đứng yên, small-amplitude motion, emergency stop, logging đầy đủ.
  4. Teleoperation test: chỉ tăng độ khó sau khi sparse command không gây drift hoặc crouch quá sâu.

Paper report real-world deployment không cần thu teleoperation data riêng để train. Với in-domain tracking, robot encoder được dùng để track dancing, running, walking. Với OOD teleoperation, nhóm dùng optical mocap lấy end-effector data từ người vận hành. Kết quả real-world trung bình: robot-joint policy đạt 41.63 mm, 0.095 rad, 0.260 m/s; end-effector policy đạt 43.22 mm, 0.105 rad, 0.268 m/s. Sai số end-effector cao hơn nhẹ, nhưng interface thực dụng hơn cho teleoperation.

Teleoperation thật với optical motion capture: bending, raising hands, walking, jogging, boxing, squatting và pushing objects — nguồn: arXiv paper M3imic
Teleoperation thật với optical motion capture: bending, raising hands, walking, jogging, boxing, squatting và pushing objects — nguồn: arXiv paper M3imic

Kết quả cần nhớ

Trên training datasets LAFAN1 + 100STYLE, M3imic đạt:

Method Success MPKPE MPJAE Velocity error
HOVER 87,35% 128,20 mm 0,686 rad 0,481 m/s
ExBody2 98,12% 53,25 mm 0,146 rad 0,285 m/s
OmniH2O 97,78% 62,75 mm 0,154 rad 0,307 m/s
TWIST2 98,89% 51,65 mm 0,121 rad 0,267 m/s
M3imic 99,54% 46,05 mm 0,112 rad 0,256 m/s

Trên unseen OMOMO test set:

Policy Success MPKPE MPJAE Velocity error
M3imic robot-joint pi^r 95,98% 71,52 mm 0,139 rad 0,341 m/s
M3imic human-pose pi^h 95,23% 72,21 mm 0,140 rad 0,339 m/s
M3imic end-effector pi^e 98,42% 75,52 mm 0,142 rad 0,337 m/s

Kết luận thực tế là: dense robot reference bám pose chính xác hơn, còn sparse end-effector reference thường robust hơn khi distribution shift. Đây là insight rất đáng nhớ cho teleoperation và VLA: nếu high-level model chỉ biết "tay phải đến vị trí này", đừng vội ép nó thành full-body joint target bằng IK cứng. Cho low-level controller một không gian command đủ mềm đôi khi tốt hơn.

t-SNE latent space cho nhiều motion category trong 100STYLE, cho thấy encoder tách được các nhóm chuyển động — nguồn: arXiv paper M3imic
t-SNE latent space cho nhiều motion category trong 100STYLE, cho thấy encoder tách được các nhóm chuyển động — nguồn: arXiv paper M3imic

Checklist chạy thử an toàn

Nếu bạn muốn reproduce ở lab nhỏ, thứ tự nên là:

  1. Cài Isaac Sim 4.5 và Isaac Lab đúng commit.
  2. Cài repo M3imic bằng pip install -e.
  3. Chạy scripts/tools/list_envs.py.
  4. Tải dataset preprocess, đặt đúng datasets/extended_datasets.
  5. Train với --num_envs 256 --max_iterations 1000 để debug.
  6. Bật video ngắn, kiểm tra robot không spawn sai, không action saturate.
  7. Train lớn hơn với 2048-4096 envs.
  8. Dùng play.py export ONNX/TorchScript.
  9. Chỉ sim-to-sim và hardware test sau khi đối chiếu joint order, control rate, PD gain, action scale và emergency stop.

M3imic không phải shortcut để bỏ qua robotics cơ bản. Nó là một cách tổ chức representation và training tốt hơn cho whole-body policy. Phần nguy hiểm nhất khi deploy G1 vẫn là những thứ rất đời thường: joint mapping sai, delay khác simulator, torque limit, network jitter, robot chưa được treo dây an toàn, hoặc reference motion có foot contact phi vật lý.

Bài viết liên quan

  • Whole-body VLA open-source guide
  • Deploy G1 whole-body controller
  • ASAP: train agile skills cho Unitree G1
NT

Nguyễn Anh Tuấn

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

Khám phá VnRobo

Fleet MonitoringROS 2 IntegrationAMR Solutions

Bài viết liên quan

NEWDeep Dive
Kiến trúc SONIC cho WBC humanoid
GR00TSONICwhole-body controlPhần 1
wholebody-vla

Kiến trúc SONIC cho WBC humanoid

Bóc tách GR00T-WholeBodyControl qua decoupled_wbc, gear_sonic và gear_sonic_deploy để hiểu SONIC từ paper đến repo.

13/6/202614 phút đọc
NT
NEWTutorial
ASAP: train agile skills cho Unitree G1
ASAPUnitree G1sim-to-real
wholebody-vla

ASAP: train agile skills cho Unitree G1

Hướng dẫn ASAP của LeCAR-Lab: motion tracking, delta action model, fine-tuning và deploy sim-to-real cho Unitree G1.

12/6/202615 phút đọc
NT
NEWTutorial
OASIS: Thu thập dữ liệu humanoid trong Isaac Lab
OASIShumanoidIsaac Lab
wholebody-vla

OASIS: Thu thập dữ liệu humanoid trong Isaac Lab

Hướng dẫn OASIS: dựng asset, teleop trong Isaac Lab, render domain randomization, train policy toàn thân và deploy zero-shot cho Unitree G1.

11/6/202616 phút đọc
NT
VnRobo logo

Hạ tầng AI cho robot công nghiệp thế hệ mới.

Sản phẩm

  • Tính năng
  • Bảng giá
  • Kiến thức
  • Dịch vụ

Công ty

  • Về chúng tôi
  • Blog
  • Liên hệ

Pháp lý

  • Chính sách bảo mật
  • Điều khoản sử dụng

© 2026 VnRobo. Bảo lưu mọi quyền.

Được tạo với♥tại Việt Nam