№ 10
TeleCollect là nền tảng thu thập dữ liệu và huấn luyện policy cho cánh tay robot bằng imitation learning - từ điều khiển robot trong mô phỏng để tạo demonstration, kiểm định chất lượng có người duyệt, đến huấn luyện behavior cloning và đánh giá bằng tỉ lệ hoàn thành nhiệm vụ thực tế trong simulator.
TeleCollect — Mô tả chi tiết dự án Web: https://telecollect.io.vn Tải app desktop (Windows): https://drive.google.com/drive/folders/1RR_behNMTDSdjDQ_tcsquJ3DFx4yJ_Y6?usp=drive_link Video demo: https://www.youtube.com/watch?v=eWnuH2-vsIE
Bài toán Imitation learning dạy robot bằng cách cho nó bắt chước người: đưa vào một tập demonstration (bản ghi đồng bộ giữa quan sát và hành động), robot học ra policy. Nút thắt không nằm ở thuật toán mà ở dữ liệu.
Hai chỗ tắc. Thứ nhất, thu dữ liệu cần thiết bị chuyên dụng — tay cầm VR, bộ teleoperation, cánh tay dẫn động — nên nhóm nào không có ngân sách phần cứng thì dừng ngay từ bước đầu. Thứ hai, gắn nhãn thủ công không mở rộng được: mỗi episode phải có người xem lại video rồi quyết định giữ hay bỏ, và không có gì bảo đảm hai người duyệt cho ra cùng một kết luận.
Đối tượng sử dụng Ba vai trò, quyền kế thừa nhau (admin ⊇ reviewer ⊇ operator):
Operator — thu dữ liệu: điều khiển robot, ghi episode, gắn nhãn bản ghi của mình. Reviewer — kiểm duyệt: xem lại bản ghi của bất kỳ ai, cắt đoạn thừa, duyệt hoặc từ chối, đóng gói dataset. Admin — quản trị user và danh mục task. Cách TeleCollect giải quyết Một nền tảng đưa dữ liệu đi trọn vòng đời trong cùng một chỗ:
Điều khiển robot mô phỏng → ghi đồng bộ observation + action → chấm điểm tự động → reviewer duyệt → đóng gói dataset → huấn luyện behavior cloning → đo success rate ngược lại trong sim Robot là cánh tay Panda mô phỏng bằng MuJoCo qua robosuite. Frontend Next.js, backend FastAPI, nối nhau bằng WebSocket thay vì polling REST để giữ độ trễ đủ thấp.
Điểm cốt lõi: chỉ episode đã được duyệt (approved) mới vào dataset huấn luyện. Ràng buộc này ép bằng code, không phải bằng quy ước.
Hai môi trường: web và app desktop Hệ thống chạy ở hai nơi, chia việc theo cái mà mỗi bên làm tốt hơn.
Web (telecollect.io.vn) là nơi làm việc chung của cả nhóm — kho dữ liệu, GPU và tài khoản đều ở đây:
Thu dữ liệu bằng cử chỉ tay qua webcam và thu tự động bằng scripted operator Duyệt, cắt đoạn, gắn nhãn episode của toàn nhóm Đóng gói và tải dataset Huấn luyện policy và đánh giá bằng rollout App desktop (bản cài Windows) dành cho việc thu dữ liệu tại máy:
Chạy độc lập, không cần cài Python hay Node — MuJoCo, robosuite và FFmpeg đều nằm sẵn trong bản cài Thu offline, không cần mạng lúc thu; dữ liệu nằm trong thư mục do người dùng chọn Thu xong đăng nhập vào tài khoản máy chủ rồi bấm Push để đẩy cả đợt thu lên web, hệ thống tự bỏ qua những episode máy chủ đã có App cố tình không có phần huấn luyện và đánh giá: hai việc đó cần GPU và kho dữ liệu chung của cả nhóm, nên chúng chỉ nằm trên web.
Thu tự động hoạt động như thế nào Mỗi task có một scripted operator — máy trạng thái hữu hạn biết cách giải task đó. Với task nâng khối lập phương, các pha là: tiếp cận → căn chỉnh → hạ xuống → ổn định → kẹp → nâng → giữ, kèm hai pha phục hồi khi kẹp trượt.
Chạy đi chạy lại một kịch bản sẽ cho hàng trăm episode giống hệt nhau, vô dụng cho huấn luyện. Nên hệ thống thêm perturbation theo bốn mức: clean, good, medium, poor. Nhiễu sinh từ seed cố định, nên cùng seed luôn cho đúng cùng một episode — tái lập được hoàn toàn.
Người dùng chọn task, mức chất lượng, số episode rồi bấm chạy. Backend chạy job nền, xong thì đẩy episode vào hàng chờ duyệt. Episode thất bại vẫn được ghi bình thường — tỷ lệ thành công thật là thông tin cần đo, không phải thứ để giấu.
Thu tay bằng camera hoạt động như thế nào Phần khác biệt nhất: operator điều khiển robot bằng bàn tay trước webcam, không cần bất kỳ thiết bị chuyên dụng nào.
Trình duyệt chạy MediaPipe HandLandmarker, nhận diện 21 điểm mốc trên bàn tay ngay tại máy client. Từ đó suy ra lệnh:
Cử chỉ Lệnh Vị trí lòng bàn tay trong khung hình Dịch chuyển theo trục X, Y Kích thước bàn tay (đưa gần camera thì to hơn) Dịch chuyển theo trục Z Góc xoay cổ tay (yaw) Xoay gripper Nắm tay / xoè tay Đóng / mở gripper Cử chỉ 👍 Clutch — tạm ngắt để đưa tay về vị trí thoải mái, như nhấc chuột khỏi bàn di Phải calibrate một lần để lấy tư thế tay làm gốc. Lệnh gửi qua WebSocket ở 60 Hz; backend dịch thành action 7 chiều [dx, dy, dz, drx, dry, drz, grip] cho controller OSC_POSE, step simulator, rồi trả ảnh ba camera về dạng JPEG.
Dữ liệu sinh ra Mỗi episode lưu thành một thư mục gồm:
Video mp4 ba góc camera: review_front, birdview, và camera cổ tay robot0_eye_in_hand. Chuỗi observation–action theo timestamp: vị trí khớp (qpos), vận tốc khớp (qvel), pose end-effector, trạng thái gripper, action đã thực thi. meta.json ghi metadata và số đo độ trễ của chính phiên thu đó. Luồng thu tự động ghi thẳng ra HDF5 theo cấu trúc RoboMimic: actions, rewards, dones, observations, next_observations.
Review và export RoboMimic Vòng đời episode: recording → recorded → labeled → approved / rejected.
Máy hỗ trợ người duyệt bằng ba thứ nhưng không thay người quyết định:
Auto-gate cho một trong ba phán quyết, mô tả mức độ kiểm chứng được chứ không phải mức độ "đẹp": reject là đã kiểm chứng và hỏng, approve là mọi phép kiểm tra chạy được đều đạt, review nghĩa là máy không có câu trả lời. Điểm chất lượng theo công thức score = (tích các hard check) × (1 − penalty tệ nhất). Nhân chứ không cộng, nên một lỗi nghiêm trọng cho ra 0 và không chỉ số đẹp nào kéo lại được. Auto-trim đề xuất cắt đoạn đứng yên đầu/cuối (idle filter của DROID). Luôn chỉ là đề xuất, reviewer kéo lại tay được. Khi đóng gói, hệ thống lọc episode approved, áp khoảng cắt reviewer đã đặt, rồi xuất HDF5 chuẩn RoboMimic và LeRobot v3, kèm chia tập train/validation ổn định và sha256 để đối chiếu. Dataset đã đóng gói là bất biến.
Huấn luyện và đánh giá Chọn dataset đã đóng gói, chọn kiến trúc (bc hoặc bc-rnn), đặt tham số rồi chạy — toàn bộ trên giao diện web. Job huấn luyện chạy được trên GPU thuê (RunPod) khi máy cá nhân không đủ, theo dõi bằng Weights & Biases.
Đánh giá chạy policy đã huấn luyện ngược lại trong mô phỏng, đo success rate thật trên số lần rollout đặt trước và lưu video từng lần chạy để xem lại policy hỏng ở đâu.