locomotionwholebody-vlahumanoidlamegocentric-videolocomotiondata-collection

Video ego cho LAM locomotion

Cách thiết kế protocol quay video ego giá thấp cho locomotion LAM trong WholeBodyVLA.

Nguyễn Anh Tuấn10 tháng 6, 202619 phút đọc
Video ego cho LAM locomotion

Mục tiêu của bài này

Bài 1 đã dựng bản đồ pipeline WholeBodyVLA: ảnh ego và lệnh ngôn ngữ đi vào VLA, hai Latent Action Model (LAM) tạo supervision rời rạc, decoder nhẹ xuất lệnh robot ở khoảng 10 Hz, rồi LMO policy thực thi locomotion ở 50 Hz. Bài 2 đi vào câu hỏi thực dụng hơn: nếu chưa có hệ MoCap, chưa có humanoid thật để teleop nhiều giờ, ta có thể bắt đầu thu loại dữ liệu nào trước?

Câu trả lời của WholeBodyVLA rất đáng chú ý: ở giai đoạn latent pretraining, locomotion LAM có thể học từ video egocentric không có action label. Paper mô tả một pipeline thu dữ liệu giá thấp: một người vận hành, một camera monocular gắn trên đầu, các motion primitive liên quan tới humanoid như tiến, lùi, bước ngang, xoay tại chỗ và squat, cộng với chuyển động có mục tiêu về phía các điểm sẽ thao tác hoặc tiếp xúc. Manipulation LAM thì được train riêng trên dữ liệu manipulation robot thật, trong paper là AgiBot World, còn locomotion LAM dùng video ego locomotion tự thu.

Mục tiêu của bài này là giúp bạn thiết kế protocol quay video ego cho locomotion LAM mà beginner có thể làm theo. Ta không thay thế toàn bộ teleoperation; phần đó sẽ được bàn riêng trong bài 4. Nhưng ta có thể thu sớm một corpus video đủ sạch, đủ đúng góc nhìn, đủ primitive và đủ gắn với manipulation để model học "từ vựng locomotion" trước khi tốn tiền vào robot trajectory.

Nếu bạn cần bối cảnh research rộng hơn trước khi đi vào protocol, xem thêm phân tích WholeBodyVLA ICLR 2026hướng dẫn kiến trúc WholebodyVLA. Bài hiện tại là bước dữ liệu đầu tiên: biến recipe action-free trong paper thành một quy trình quay có thể kiểm tra được.

Vì sao lại là video ego action-free?

Trong robot learning, dữ liệu đắt nhất thường không phải là video, mà là action-aligned trajectory: joint target, gripper command, base command, lực tiếp xúc, trạng thái robot và timestamp được đồng bộ. Thu loại dữ liệu này cần robot, teleoperator, phần mềm điều khiển, người giám sát an toàn, reset scene và nhiều lần thử hỏng. Với humanoid loco-manipulation, chi phí còn cao hơn vì robot phải vừa đi, vừa giữ thăng bằng, vừa dùng tay.

WholeBodyVLA dùng latent action learning để giảm điểm nghẽn đó. LAM nhìn hai frame liên tiếp và học một mã rời rạc mô tả thay đổi hình ảnh giữa frame trước và frame sau. Mã này không phải action motor thật, nhưng nó có thể đóng vai trò pseudo-action label cho VLA trong giai đoạn pretraining. Khi video cho thấy người đội camera tiến về bàn, xoay sang xe đẩy, hạ thấp người để tiếp cận thùng, hoặc dừng trước tay nắm cửa, LAM học các thay đổi thị giác tương ứng với "tiến", "xoay", "squat", "dừng gần mục tiêu".

Điểm quan trọng: "action-free" không có nghĩa là video nào cũng dùng được. Paper nhấn mạnh locomotion data phải là manipulation-aware locomotion, tức người quay không chỉ đi lung tung. Họ phải di chuyển theo cách tạo tiền điều kiện cho thao tác: đến gần vật sẽ cầm, quay người để đối diện contact target, squat xuống để với tới thùng hoặc giỏ, bước ngang để căn vị trí trước khi đặt vật. Video như vậy trực tiếp phục vụ loco-manipulation learning, thay vì chỉ dạy model nhìn cảnh trôi qua.

Tách locomotion LAM và manipulation LAM

WholeBodyVLA không train một LAM chung cho mọi video. Paper giải thích rằng manipulation và locomotion tạo ra pattern thị giác rất khác nhau. Với manipulation video, camera thường gần như tĩnh; thay đổi nằm ở tay, gripper, vật thể và contact point. Với locomotion video, camera di chuyển liên tục; cả scene dịch chuyển vì đầu hoặc thân đang tiến, xoay, bước ngang hoặc squat. Nếu trộn hai loại vào một LAM chung, model dễ học attention mâu thuẫn: lúc cần nhìn rất cục bộ vào tay, lúc cần nhìn toàn scene để hiểu ego-motion.

Vì vậy protocol của bạn nên có hai bucket ngay từ đầu:

Bucket Dữ liệu chính Mục tiêu học Không nên trộn bừa
Locomotion LAM Video ego khi người/robot di chuyển trong scene Tiến, lùi, bước ngang, xoay, squat, dừng gần target Clip chỉ quay tay thao tác tại bàn
Manipulation LAM Video thao tác vật thể, tốt nhất từ robot dataset hoặc robot thật Grasp, lift, place, push, pull, contact affordance Clip đi bộ dài không có thao tác rõ
Teleop fine-tuning Trajectory có robot state và command thật Ground latent thành joint target và locomotion command Video action-free chưa đồng bộ action

Với bài này, ta tập trung vào bucket locomotion LAM. Tuy nhiên protocol quay vẫn phải "aware" về manipulation. Mục tiêu không phải tạo dataset đi bộ thể thao; mục tiêu là tạo dataset về cách cơ thể tiến đến vị trí thao tác.

Humanoid locomotion và thao tác cần được học như một chuỗi liên tục
Humanoid locomotion và thao tác cần được học như một chuỗi liên tục

Thiết bị tối thiểu

Paper nói pipeline locomotion có thể dùng một operator với camera monocular gắn trên đầu, tránh MoCap hoặc teleoperation đắt đỏ. Trong lab nhỏ, bạn có thể bắt đầu với cấu hình rất đơn giản:

Thành phần Khuyến nghị tối thiểu Ghi chú thực tế
Camera Action cam, điện thoại gắn head strap, hoặc RGB camera nhẹ Ưu tiên hình ổn định, góc nhìn gần eye-level
Mount Head strap, helmet mount, chest-to-head adapter nếu cần Head-mounted tốt hơn chest-mounted cho ego view giống robot head
Video 1080p, 30 fps là điểm khởi đầu hợp lý 60 fps tốt hơn nếu chuyển động nhanh, nhưng tốn storage
Audio Không bắt buộc Có thể dùng để đọc instruction, nhưng cần xử lý privacy
Time sync Đồng hồ hệ thống hoặc clap marker ở đầu clip Hữu ích khi sau này nối metadata, instruction, scene log
Scene props Bàn, kệ, hộp, giỏ, xe đẩy, tay nắm, vật cần nhặt Chọn vật có ý nghĩa contact rõ

Camera đội đầu không cần RGB-D cho giai đoạn locomotion LAM, vì công thức action-free của paper nhấn mạnh monocular camera. Nếu bạn có RGB-D như RealSense D435i thì tốt, nhưng đừng biến yêu cầu phần cứng thành rào cản. Với beginner, điều quan trọng hơn là giữ video có thứ tự thời gian sạch, góc nhìn tương tự robot head và kịch bản chuyển động đúng.

Thiết kế primitive cần quay

WholeBodyVLA nhắc đến các primitive lõi cho loco-manipulation: advancing, turning và squatting. Appendix còn nói task evaluation kết hợp forward/backward walking, lateral stepping, in-place turning và squatting với manipulation một tay hoặc hai tay. Vì vậy protocol quay nên phủ ít nhất các nhóm sau:

Primitive Ví dụ clip Dấu hiệu clip tốt Lỗi thường gặp
Advance Tiến từ cửa phòng tới bàn có hộp Target lớn dần, đường đi rõ, dừng trước vùng thao tác Đi quá nhanh, dừng quá xa hoặc quá sát
Backward Lùi khỏi bàn sau khi đặt vật Camera vẫn thấy context, không quay lưng vô nghĩa Lùi dài trong cảnh trống
Lateral step Bước ngang để căn với giỏ hoặc carton Target dịch theo chiều ngang, sau đó nằm giữa FOV Bước ngang không có mục tiêu
Turn Xoay tại chỗ để đối diện xe đẩy hoặc kệ Heading đổi rõ, dừng khi target ở giữa ảnh Vừa xoay vừa đi quá nhiều khiến label mơ hồ
Squat Hạ người để tiếp cận thùng thấp Camera hạ độ cao, target thấp rõ hơn, có pha đứng lên Squat không gắn với vật cần thao tác
Approach-to-contact Tiến tới tay nắm, hộp, handle, edge bàn Dừng ở khoảng cách cánh tay với tới Chỉ đi ngang qua target

Không cần mỗi clip chỉ có một primitive. Trên thực tế, loco-manipulation là chuỗi: tiến tới bàn, bước ngang để căn vị trí, squat xuống, xoay nhẹ, dừng. Nhưng trong giai đoạn đầu, hãy quay cả clip đơn primitive và clip chuỗi. Clip đơn giúp kiểm tra LAM có phân biệt được chuyển động cơ bản; clip chuỗi giúp VLA học task context.

Một kế hoạch quay tối thiểu cho một buổi 2 giờ:

Scene A: bàn + hộp + giỏ dưới sàn
  20 clip tiến tới bàn từ 3 khoảng cách
  20 clip bước ngang trái/phải để căn với giỏ
  20 clip squat xuống trước giỏ
  20 clip chuỗi: tiến -> bước ngang -> squat -> dừng

Scene B: kệ + xe đẩy có handle
  20 clip xoay trái/phải để đối diện handle
  20 clip tiến tới handle và dừng trong tầm với
  20 clip đẩy giả lập 1-2 bước, không cần lực thật
  20 clip chuỗi: tiến -> xoay -> approach handle

Scene C: vật trên sàn hoặc thùng thấp
  20 clip squat từ nhiều góc vào
  20 clip lùi ra sau khi squat
  20 clip đổi heading rồi squat

Số lượng trên chỉ là điểm bắt đầu để kiểm thử pipeline. Paper thu khoảng 300 giờ video locomotion ego cho thí nghiệm đầy đủ, nên một lab nghiêm túc sẽ cần mở rộng nhiều scene, nhiều operator, nhiều layout, nhiều ánh sáng và nhiều target hơn.

Goal-directed: đi tới mục tiêu có thể thao tác

Phần hay nhất trong recipe của WholeBodyVLA là yêu cầu goal-directed execution. Người vận hành phải đi tới các mục tiêu có khả năng trở thành contact target. Nói cách khác, mỗi clip locomotion nên trả lời được câu hỏi: "Sau khi dừng ở đây, humanoid có thể dùng tay làm gì?"

Các target tốt:

Contact target Vì sao hữu ích
Mép bàn hoặc mặt bàn Robot cần dừng đúng khoảng cách trước khi pick/place
Giỏ, carton, thùng thấp Kết hợp approach, lateral alignment và squat
Handle xe đẩy Kết hợp xoay, đặt hai tay và đẩy về phía trước
Tay nắm cửa/ngăn kéo Cần orientation chính xác trước khi thao tác
Kệ nhiều tầng Cần thay đổi chiều cao nhìn và khoảng cách
Vật trên sàn Cần squat sâu và giữ target trong FOV

Các clip kém hơn:

Đi bộ quanh phòng không dừng trước target.
Xoay camera bằng cổ tay thay vì xoay thân.
Squat giữa không gian trống.
Chạy nhanh qua scene khiến object chỉ xuất hiện thoáng qua.
Quay clip từ tay cầm camera thấp hơn đầu quá nhiều.

Khi label thủ công, đừng chỉ ghi walk. Hãy ghi quan hệ với target: approach_table, align_to_basket, turn_to_cart_handle, squat_to_low_box. LAM không cần label này để train theo kiểu reconstruct frame, nhưng metadata tốt giúp bạn lọc dataset, audit failure và sau này tạo instruction cho VLA.

Một protocol quay cụ thể

Dưới đây là protocol đủ rõ để giao cho người thu dữ liệu mới.

1. Chuẩn bị scene

Chọn một scene nhỏ, không quá đông người, có ánh sáng ổn định. Đặt 3-5 contact target: một bàn, một hộp trên bàn, một giỏ dưới sàn, một xe đẩy hoặc vật có handle, và một kệ. Đánh dấu vài vị trí bắt đầu bằng băng dính trên sàn: gần, trung bình, xa; lệch trái, lệch phải; quay lệch 30-60 độ so với target.

Mục tiêu là tạo thay đổi có kiểm soát. Nếu mọi clip bắt đầu từ cùng một vị trí, model học kém generalization. Nếu scene thay đổi quá loạn ngay từ đầu, bạn khó debug. Hãy bắt đầu có cấu trúc, rồi tăng độ đa dạng.

2. Gắn camera và kiểm tra FOV

Camera nên nằm gần mắt người, hướng hơi xuống để thấy cả target thấp và vùng tay có thể xuất hiện. Nếu hướng quá cao, video chỉ thấy tường và kệ; nếu quá thấp, nó giống chest cam hơn head cam. Trước khi quay thật, đi thử một sequence và kiểm tra:

Target có ở giữa ảnh khi người dừng không?
Mặt bàn, giỏ hoặc handle có đủ rõ để nhận ra không?
Khi squat, target thấp có còn trong FOV không?
Video có bị rung đến mức motion blur liên tục không?
Timestamp file có theo thứ tự không?

Nếu camera có chống rung, bật ở mức vừa phải. Chống rung quá mạnh đôi khi làm mất cue ego-motion, nhưng rung quá nặng làm reconstruction khó. Với LAM, bạn muốn chuyển động camera thật nhưng không muốn hình bị nhòe.

3. Đọc hoặc hiển thị instruction

Mỗi clip nên có một intent ngắn. Bạn có thể đọc thành tiếng ở đầu clip, hiển thị trên điện thoại cho operator, hoặc lưu trong file CSV. Ví dụ:

clip_id,instruction,start_pose,target,primitive_sequence
A_001,"go to the table and stop within reach",far_center,table_edge,advance
A_014,"sidestep right to align with the basket",near_left,basket,lateral_right
B_008,"turn left to face the cart handle",near_angle_right,cart_handle,turn_left
C_022,"squat to reach the low box",near_center,low_box,squat

Instruction không cần phức tạp. Điều quan trọng là nhất quán giữa video và mục tiêu. Nếu nói "turn to the cart" nhưng operator lại tiến thẳng tới bàn, metadata sẽ gây nhiễu cho training hoặc evaluation sau này.

4. Quay clip ngắn, có đầu-cuối rõ

Mỗi clip nên dài khoảng 3-12 giây cho primitive đơn, 10-30 giây cho chuỗi. Bắt đầu khi camera đã ổn định, kết thúc sau khi người dừng 1-2 giây ở pose cuối. Pha dừng rất quan trọng: loco-manipulation cần robot không chỉ đến gần target, mà còn ổn định ở stance có thể thao tác.

Một format đơn giản:

0.0-1.0 s: đứng yên ở start pose
1.0-5.0 s: thực hiện primitive chính
5.0-7.0 s: dừng, target nằm trong tầm thao tác

Với clip chuỗi:

0.0-1.0 s: đứng yên
1.0-5.0 s: advance
5.0-8.0 s: turn hoặc lateral step
8.0-11.0 s: squat hoặc align
11.0-13.0 s: dừng ổn định trước target

5. Ghi metadata ngay trong buổi quay

Đừng đợi vài ngày mới nhớ clip nào là clip nào. Tạo file manifest.csv hoặc manifest.jsonl ngay trong session. Schema tối thiểu:

{
  "clip_id": "B_008",
  "video_path": "raw/session_2026_06_10/B_008.mp4",
  "scene_id": "shelf_cart_lab",
  "operator_id": "op_03",
  "camera_mount": "head",
  "camera_model": "action_cam_1080p30",
  "instruction": "turn left to face the cart handle",
  "target": "cart_handle",
  "primitive_sequence": ["turn_left", "stop"],
  "start_pose_bucket": "near_angle_right",
  "quality": "unchecked"
}

Bạn chưa cần pose 6D chính xác. Nhưng bạn cần đủ metadata để sau này lọc: chỉ lấy clip squat, bỏ clip rung, chia train/val theo scene, hoặc kiểm tra model có học quá thuộc một operator không.

Quy tắc chất lượng dữ liệu

Một protocol tốt không chỉ định nghĩa cách quay; nó còn định nghĩa khi nào phải bỏ clip. Với video action-free, lỗi dữ liệu rất dễ ẩn vì không có action label để kiểm tra. Hãy dùng checklist:

Tiêu chí Pass Fail
Temporal continuity Clip liền mạch, không jump cut Cắt ghép giữa chừng, mất frame nặng
Viewpoint Gần head-mounted ego view Handheld lắc tay, góc nhìn quá thấp
Target visibility Target xuất hiện rõ trước khi dừng Target bị che hoặc chỉ lướt qua
Primitive clarity Chuyển động chính nhận ra được Vừa tiến vừa xoay vừa cúi không có mục tiêu rõ
Final stance Có 1-2 giây dừng ổn định Kết thúc khi camera còn đang quay loạn
Manipulation relevance Dừng trong tầm với hoặc trước contact point Đi bộ không liên quan tới thao tác
Privacy/safety Không lộ mặt người ngoài, không có rủi ro va chạm Quay khu vực nhạy cảm hoặc nguy hiểm

Một mẹo đơn giản là tạo ba nhãn QA: keep, maybe, drop. Đừng cố cứu mọi clip. Với LAM, nhiều clip xấu có thể làm codebook học nhiễu: rung camera, blur, thay đổi ánh sáng đột ngột, hoặc chuyển động không liên quan.

Chia dataset để tránh leakage

Beginner thường chia train/val ngẫu nhiên theo clip. Cách đó dễ tạo leakage: cùng scene, cùng operator, cùng target và cùng lộ trình xuất hiện ở cả train lẫn validation. Validation nhìn đẹp nhưng khi đổi phòng hoặc đổi camera thì model kém.

Chia tốt hơn:

Split Cách chia Mục tiêu
Train Nhiều clip từ phần lớn scene/operator Học primitive chính
Validation in-scene Scene giống train nhưng clip khác Debug reconstruction và latent quality
Validation held-out scene Giữ lại một phòng hoặc layout Kiểm tra generalization thị giác
Validation held-out operator Giữ lại một người quay Kiểm tra bias dáng đi/góc đầu
Stress set Ánh sáng khác, target thấp/cao, đường đi lệch Tìm failure trước khi train lớn

Nếu chỉ có một phòng lab, vẫn có thể tạo held-out layout: đổi vị trí bàn, đổi màu hộp, đổi giỏ, đổi khoảng cách start. Paper WholeBodyVLA đánh giá generalization trên thay đổi start pose, object, layout và appearance; dataset locomotion của bạn cũng nên có tinh thần đó.

Preprocess tối thiểu trước khi đưa vào LAM

LAM học từ frame liên tiếp, nên preprocessing phải bảo toàn thời gian. Đừng shuffle frame riêng lẻ. Đừng crop quá mạnh khiến target biến mất. Một pipeline nhẹ:

def preprocess_clip(video):
    frames = decode_video(video, fps=10)  # hoặc sample từ 30 fps xuống 10 fps
    frames = trim_static_intro_outro(frames, keep_final_stop=True)
    frames = resize_short_side(frames, 256)
    frames = center_or_letterbox_crop(frames, size=224)
    pairs = [(frames[i], frames[i + 1]) for i in range(len(frames) - 1)]
    return pairs

Tốc độ sample phụ thuộc model và compute. Nếu sample quá thưa, frame-to-frame change quá lớn; nếu quá dày, nhiều pair gần như giống nhau. Với VLA chạy khoảng 10 Hz trong WholeBodyVLA, việc nghĩ về video ở mức 10 fps là điểm khởi đầu hợp lý. Tuy nhiên, bạn nên thử vài tốc độ và đo reconstruction/relative gain thay vì chọn theo cảm giác.

Metadata cũng nên được giữ song song:

processed/
  frames/
    B_008/
      000000.jpg
      000001.jpg
  pairs.jsonl
  manifest.jsonl
  qa_report.csv

Đừng thu MoCap đầu tiên nếu mục tiêu là LAM

MoCap rất hữu ích cho retargeting, imitation và đánh giá chuyển động toàn thân. Nhưng nếu câu hỏi trước mắt là train locomotion LAM theo recipe action-free của WholeBodyVLA, MoCap không phải bước đầu bắt buộc. LAM cần thay đổi thị giác có cấu trúc từ ego video; nó không cần skeleton 3D cho mọi frame.

So sánh nhanh:

Hướng thu dữ liệu Chi phí Phù hợp với giai đoạn Rủi ro
Head-mounted monocular video Thấp Locomotion LAM pretraining Cần QA tốt để tránh clip nhiễu
Robot manipulation dataset Trung bình đến cao nếu tự thu, thấp nếu dùng dataset mở Manipulation LAM Domain khác robot đích
Teleoperation robot thật Cao Decoder grounding, fine-tuning Tốn robot time và operator
MoCap whole-body Rất cao Retargeting, motion prior, evaluation Không tự động cho ra ego visual latent

Nói ngắn gọn: nếu bạn đang ở ngày đầu của dự án, hãy quay video ego đúng protocol trước. Khi pipeline LAM chạy được, bạn mới quyết định cần MoCap cho phần nào: retarget, reward, hoặc benchmark. Cách này phù hợp với tinh thần của paper: dùng video action-free giá thấp để mở rộng pretraining, rồi dùng teleoperation có chọn lọc để ground latent vào robot thật.

Checklist trước khi bắt đầu buổi quay

[ ] Đã chọn scene có target thao tác rõ: bàn, giỏ, thùng, handle, kệ.
[ ] Camera gắn trên đầu, FOV thấy target thấp khi squat.
[ ] Có danh sách primitive: advance, backward, lateral, turn, squat, approach-to-contact.
[ ] Mỗi clip có instruction hoặc metadata intent.
[ ] Mỗi clip bắt đầu và kết thúc bằng 1-2 giây đứng yên.
[ ] Có manifest để ghi clip_id, scene_id, operator_id, target, primitive.
[ ] Có quy tắc QA: keep/maybe/drop.
[ ] Có split held-out scene hoặc held-out operator.
[ ] Không quay thông tin riêng tư hoặc khu vực nguy hiểm.

Kết luận

Video ego cho locomotion LAM là một bước dữ liệu rẻ nhưng không hề tùy tiện. Muốn bám đúng WholeBodyVLA, bạn cần giữ ba nguyên tắc: một là action-free nhưng phải temporally clean; hai là locomotion phải manipulation-aware, tức đi, xoay, bước ngang và squat để tới contact target; ba là tách locomotion LAM khỏi manipulation LAM vì hai loại video có pattern thị giác khác nhau.

Khi làm đúng, dataset này giúp VLA học trước các latent liên quan đến tiến, xoay, căn vị trí và hạ thấp người, trước khi bạn phải thu nhiều trajectory robot thật. Đó là ý nghĩa thực tế của recipe: không bỏ qua teleoperation, mà dùng video giá thấp để giảm lượng teleoperation cần thiết và làm cho giai đoạn fine-tuning có nền tảng tốt hơn.

Nguồn kỹ thuật chính

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

Bản đồ pipeline WholeBodyVLA
wholebody-vla

Bản đồ pipeline WholeBodyVLA

10/6/202616 phút đọc
NT
Teleop toàn thân: TWIST và HOMIE
humanoid

Teleop toàn thân: TWIST và HOMIE

10/6/202617 phút đọc
NT
Đánh giá VLA toàn thân
wholebody-vla

Đánh giá VLA toàn thân

10/6/202615 phút đọc
NT