Bạn huấn luyện một con robot tứ chi đi lại mượt mà qua địa hình gồ ghề bằng Reinforcement Learning, tốn hàng nghìn giờ trong simulator. Policy hoạt động hoàn hảo trong test. Nhưng sau sáu tháng vận hành thực tế:
- Khớp háng phải bắt đầu mòn — biên độ chuyển động giảm còn 60%.
- Kỹ sư gắn thêm camera 3D nặng 4 kg lên lưng để thu dữ liệu.
- Địa hình bất ngờ làm robot mất thăng bằng tạm thời.
Policy RL truyền thống — được huấn luyện với phần cứng cố định — sẽ thất bại ngay lập tức. Đây không phải lỗi lập trình hay thiết kế xấu. Đây là bản chất của bài toán: policy không biết mình đang "mang" gì.
Nhóm nghiên cứu từ UC San Diego, Technische Universität Darmstadt và DFKI đã công bố Rapid Embodiment Adaptation for Quadrupedal Locomotion (arXiv 2608.01506, 08/2026) — framework giúp robot xác định trạng thái phần cứng thực tế chỉ trong 0.5 giây và tự điều chỉnh cách di chuyển mà không cần fine-tuning hay reset.
Vấn đề: Hardware Drift và Deployment Reality
Hầu hết paper về locomotion RL giải quyết hai thách thức lớn: sim2real gap (sự khác biệt giữa simulator và thực tế) và terrain generalization (khái quát hóa qua địa hình). Nhưng có một thách thức thứ ba ít được đề cập hơn: embodiment drift — sự thay đổi dần dần hoặc đột ngột của chính phần cứng robot.
Hai loại embodiment change phổ biến nhất:
1. Joint-range constraint — giới hạn biên độ khớp giảm do:
- Mòn cơ học (wear) sau hàng nghìn giờ vận hành
- Nhiệt độ làm thay đổi tính chất vật liệu
- Hỏng hóc một phần: khớp không còn đạt full range
- Va chạm hoặc tổn thương cơ học
2. Trunk mass change — thay đổi tải trọng do:
- Gắn thêm thiết bị (camera, sensor, payload arm)
- Thay đổi pin hoặc counterweight
- Thu thập vật phẩm trong lúc vận hành
Với policy RL chuẩn, cả hai đều gây ra cùng một kết quả: hành vi không ổn định, ngã, hoặc sập hoàn toàn.
Câu hỏi đặt ra: Nếu robot biết mình đang ở trạng thái phần cứng nào, liệu nó có thể tự thích nghi không?
Intuition: Robot "Cảm Nhận" Cơ Thể Của Mình
Trước khi đi vào kỹ thuật, hãy nghĩ về cách con người thích nghi.
Khi bạn gãy tay, não không cần reset toàn bộ. Nó tự nhận ra giới hạn mới — không duỗi thẳng được, cơ yếu hơn — rồi điều chỉnh mọi chuyển động trong vài giây. Tương tự, khi mang ba lô 10 kg, dáng đi thay đổi ngay: cúi người về phía trước, bước ngắn hơn, tốc độ chậm hơn.
Ý tưởng cốt lõi của Rapid Embodiment Adaptation: robot cũng có thể học cách "cảm nhận" trạng thái phần cứng qua quan sát ngắn hạn, rồi điều chỉnh policy tương ứng.
Thay vì một policy cứng nhắc, framework đề xuất hai module phối hợp:
- Cross-Embodiment Policy — policy đa năng, hoạt động trên nhiều embodiment khác nhau.
- Adaptation Module — module nhẹ, nhận lịch sử tương tác ngắn và ước lượng trạng thái phần cứng hiện tại.
Kiến Trúc Chi Tiết
Cross-Embodiment Policy: URMA
Policy đa năng sử dụng URMA (Unified Robot Morphology Architecture) — kiến trúc được thiết kế để xử lý robot với cấu trúc cơ thể khác nhau.
URMA gồm hai thành phần:
- Embodiment Encoder: mã hóa thông tin về cấu trúc robot (topology xương, giới hạn khớp, trọng lượng) thành một vector latent.
- Action Decoder: nhận vector latent + observation hiện tại → sinh ra joint targets.
Điểm mấu chốt: trong training, policy nhận ground-truth embodiment descriptor φ (vector mô tả chính xác trạng thái phần cứng). Nhờ đó, nó học cách điều chỉnh gait dựa trên embodiment — nhưng không tự ước lượng được φ từ cảm biến. Đó là nhiệm vụ của Adaptation Module.
Adaptation Module: LSTM + Transformer + MLP
Đây là "bộ phận cảm nhận" của hệ thống. Architecture gồm ba tầng:
Tầng 1 — LSTM Encoder:
- Input: lịch sử 20 timestep (≈0.4 giây ở 50 Hz)
- Mỗi timestep: vector 8 chiều cho từng khớp (joint position, velocity, torque, v.v.)
- Embedding dimension F = 128
Tầng 2 — Transformer Backbone:
- Self-attention xuyên chiều joint (joint-wise attention)
- Capture mối quan hệ giữa các khớp: khi khớp háng bị hạn chế, khớp gối phải compensate
Tầng 3 — Dual MLP Decoder:
- Per-joint head: ước lượng thông số cục bộ (giới hạn biên độ từng khớp)
- Global head: ước lượng thông số toàn thân (trunk mass offset)
Output: φ̂ — vector ước lượng embodiment — được đưa vào Cross-Embodiment Policy thay cho ground-truth φ.
Tại sao chọn LSTM thay vì Transformer thuần? Nhóm đã benchmark nhiều kiến trúc encoder (MLP, GRU, LSTM, Transformer). LSTM đạt RMSE tốt nhất ở 2.02×10⁻² — nhờ khả năng nhớ temporal pattern ngắn hạn vượt trội.
Quy Trình Training: Hai Giai Đoạn Độc Lập
Framework training diễn ra theo hai giai đoạn độc lập, cho phép thay thế từng module mà không cần train lại từ đầu.
Giai Đoạn 1: Cross-Embodiment Policy với PPO
Môi trường: IsaacLab simulator, robot Unitree Go2.
Algorithm: PPO (Proximal Policy Optimization) với curriculum tăng dần độ khó.
Embodiment Randomization: mỗi episode, sample ngẫu nhiên:
joint_limit_scale∈ [0.0, 0.5] — biên độ khớp bị thu nhỏ (0.0 = khóa hoàn toàn)trunk_mass_offset∈ [-3.0, +7.0] kg — thêm/bớt tải trọng thân
PD Controller: Kp = 20, Kd = 0.5 cho joint tracking.
Reward function:
| Term | Weight | Mục đích |
|---|---|---|
| Velocity tracking | +2.0 | Đi đúng hướng, đúng tốc độ |
| Yaw tracking | +1.0 | Giữ hướng đầu |
| Pitch/roll penalty | -5.0 | Tránh nghiêng/lật thân |
| Base height penalty | -30.0 | Giữ chiều cao ổn định |
| Joint constraint violation | -200.0 | Không vượt giới hạn khớp |
# Pseudo-code: embodiment randomization trong IsaacLab
def reset_episode(env):
joint_scale = np.random.uniform(0.0, 0.5)
mass_offset = np.random.uniform(-3.0, 7.0) # kg
# Áp dụng lên simulation
env.robot.joint_pos_limit_scale = joint_scale
env.robot.trunk_mass += mass_offset
# Trả về embodiment descriptor ground-truth
phi = np.array([joint_scale, mass_offset])
return phi
Nhờ curriculum tăng dần, policy đầu tiên học với embodiment gần normal, dần dần tiếp xúc với các trường hợp cực đoan hơn. Điều này ngăn policy "từ bỏ" sớm vì bài toán quá khó.
Giai Đoạn 2: Adaptation Module (Supervised Learning Offline)
Sau khi có policy đa năng, nhóm tạo dataset offline bằng cách roll out policy:
- 36 embodiment configurations (lưới đều trong không gian [joint_scale, mass_offset])
- 4,096 trajectories × 1,000 timesteps mỗi cấu hình
- Train/val split: 80%/20%
Objective: Supervised regression — minimize MSE giữa φ̂ (ước lượng) và φ (ground-truth):
L = E_t[ ‖ f(h_t) − φ_t ‖² ]
Toàn bộ adaptation module training không cần robot thật — chỉ cần trajectories từ simulator. Đây là điểm quan trọng: bạn có thể cải thiện khả năng thích nghi mà không tốn thêm hardware time.
# Adaptation Module (PyTorch)
import torch.nn as nn
class AdaptationModule(nn.Module):
def __init__(self, n_joints=12, feature_dim=8, embed_dim=128):
super().__init__()
self.lstm = nn.LSTM(
input_size=n_joints * feature_dim,
hidden_size=embed_dim,
batch_first=True
)
self.transformer = nn.TransformerEncoderLayer(
d_model=embed_dim, nhead=4, batch_first=True
)
self.per_joint_head = nn.Linear(embed_dim, n_joints)
self.global_head = nn.Linear(embed_dim, 1)
def forward(self, history):
# history: (batch, 20 timesteps, n_joints * features)
lstm_out, _ = self.lstm(history) # (batch, 20, 128)
attn_out = self.transformer(lstm_out) # (batch, 20, 128)
last = attn_out[:, -1, :] # (batch, 128)
return self.per_joint_head(last), self.global_head(last)
Triển Khai: Control Loop Thời Gian Thực
Deployment không cần fine-tuning hay calibration. Workflow đơn giản ở 50 Hz:
1. Collect joint observations của 20 timestep gần nhất → h_t
2. Adaptation Module: φ̂_t = f(h_t) [<1ms, chạy trên CPU]
3. Cross-Embodiment Policy: a_t = π(s_t, φ̂_t)
4. Gửi joint commands xuống PD controller
Khi phần cứng thay đổi đột ngột (khớp bị kẹt mid-run, thêm tải), Adaptation Module nhận ra trong vòng 0.4 giây và cập nhật φ̂ — không cần dừng, không cần reset.
Kết Quả Thực Nghiệm
Simulation: Adaptation Theo Sát Oracle
Nhóm đánh giá hai kịch bản trên Go2 trong IsaacLab:
Kịch bản 1 — Joint-range constraint:
- Sweep
joint_limit_scaletừ 0.0 đến 0.8 - Phương pháp thích nghi theo sát oracle performance (biết ground-truth φ chính xác)
- Non-adaptive baseline sụp đổ khi scale < 0.4
Kịch bản 2 — Trunk mass change:
- Mass offset sweep từ -3 kg đến +7 kg
- Convergence trong <0.5 giây sau khi mass thay đổi đột ngột
Real-World: Unitree Go2
Thực nghiệm thực tế với Go2 dưới hai điều kiện khắc nghiệt:

| Kịch bản | Rapid Adaptation | Non-Adaptive |
|---|---|---|
| Khóa khớp trước-phải (scale 0.3) | 100% | 25% |
| Thêm tải 5 kg | 62.5% | 0% |
Số liệu nói lên tất cả:
- Khi khớp bị khóa gần hoàn toàn (chỉ 30% biên độ): policy thích nghi đạt 100% — gấp 4 lần baseline.
- Khi thêm 5 kg tải: baseline hoàn toàn thất bại (0%), policy thích nghi đạt 62.5%.
Điều thú vị là framework không đạt 100% trong kịch bản payload — vẫn còn không gian cải thiện. Nhưng 62.5% so với 0% là khoảng cách đủ lớn để chứng minh giá trị thực tế.
Cài Đặt Môi Trường IsaacLab
Bạn có thể tái hiện framework này với IsaacLab và Go2:
# 1. Cài đặt Isaac Sim + IsaacLab
git clone https://github.com/isaac-sim/IsaacLab.git
cd IsaacLab
./isaaclab.sh --install
# 2. Kích hoạt conda environment
conda activate isaaclab_env
# 3. Cài thư viện bổ sung
pip install torch torchvision
pip install stable-baselines3 # hoặc skrl cho PPO
Với robot Go2, IsaacLab đã có sẵn Unitree Go2 asset và environment. Bạn cần mở rộng locomotion environment để support embodiment randomization và thêm Adaptation Module vào inference loop.
Một điểm quan trọng khi setup: IsaacLab chạy trên Isaac Sim, yêu cầu GPU NVIDIA. Với dataset offline lớn (36 configs × 4096 traj × 1000 steps), training Adaptation Module có thể làm trên CPU — chỉ cần khoảng vài giờ.
Ý Nghĩa và Hướng Phát Triển
Tại sao đây là bước ngoặt?
Hầu hết các framework locomotion hiện tại (Walk These Ways, DribbleBot, Parkour policies) huấn luyện tốt trong simulator nhưng giả định phần cứng không đổi. Ngoài thực tế, giả định này không bao giờ đúng lâu dài.
Rapid Embodiment Adaptation chứng minh robot có thể học "self-awareness" về phần cứng — bước tiến quan trọng hướng đến:
- Long-term deployment — robot vận hành hàng tháng mà không cần re-calibration định kỳ
- Graceful degradation — khi linh kiện hỏng, robot giảm hiệu suất từ từ thay vì sập hoàn toàn
- Hardware-agnostic policies — một policy dùng được cho nhiều variant: Go2 standard, Go2-W, custom payload configs
Hướng mở tiếp theo: framework hiện xử lý 2 loại embodiment change (joint range + trunk mass). Phiên bản tương lai có thể handle motor failure, terrain-induced compliance, worn-out foot pads — bất kỳ thứ gì làm thay đổi dynamic của robot.
Nếu bạn đang nghiên cứu về RL cho robot tứ chi hay muốn triển khai sim2real transfer cho locomotion, đây là reference bắt buộc cho giai đoạn deployment thực tế dài hạn.
Paper: arXiv 2608.01506
Project page: embodiment-adaptation.github.io
Authors: Dichen Li, Bo Ai, Nico Bohlinger, Jan Peters, Hao Su, Henrik I. Christensen
Institutions: UC San Diego · TU Darmstadt · DFKI



