Với tốc độ phát triển chóng mặt của trí tuệ nhân tạo (AI) và robot, việc thu hẹp khoảng cách giữa môi trường mô phỏng và phần cứng thực tế luôn là một thách thức lớn. Bài viết này của Kalera News sẽ đi sâu vào sự kết hợp đầy đột phá giữa nền tảng LeRobot của Hugging Face và bộ công cụ phát triển phần mềm (SDK) mã nguồn mở Strands Robots (Apache 2.0) của AWS. Sự tích hợp này hứa hẹn sẽ thống nhất toàn bộ quy trình từ ghi lại các bản trình diễn, thử nghiệm mô phỏng, triển khai các chính sách điều khiển đến phối hợp đội robot đa dạng, tất cả trong một vòng lặp tác nhân duy nhất. 🤖
Điểm mấu chốt là việc chia sẻ cùng một định dạng tập dữ liệu LeRobotDataset trên đĩa giữa môi trường mô phỏng (MuJoCo) và phần cứng vật lý. Điều này biến quá trình chuyển đổi từ sim sang real trở thành một chi tiết triển khai nhỏ, thay vì phải viết lại toàn bộ kiến trúc phức tạp. Đây là một bước tiến quan trọng giúp các nhà phát triển tập trung vào cải tiến AI thay vì loay hoay với các vấn đề tương thích phần cứng. ✨
Các Khái Niệm Kiến Trúc Chính Yếu 🛠️
Để đạt được sự liền mạch từ mô phỏng đến thực tế, kiến trúc này tập trung vào một số khái niệm cốt lõi:
1. Đồng Nhất Sim-to-Real (Sim-to-Real Parity): Khi sử dụng Robot("so100"), hệ thống mặc định sẽ chạy trong môi trường mô phỏng MuJoCo an toàn. Chỉ cần thay đổi đối số thành mode="real", tác nhân sẽ điều khiển phần cứng vật lý mà không cần thay đổi bất kỳ dòng mã tác nhân nào. Điều này đảm bảo tính nhất quán và dễ dàng chuyển đổi. 2. Định Dạng Tập Dữ Liệu Thống Nhất (Unified Dataset Format): DatasetRecorder ghi lại dữ liệu mô phỏng theo đúng lược đồ parquet/MP4 mà LeRobot sử dụng trên phần cứng thực tế. Điều này loại bỏ các vấn đề về chuyển đổi định dạng và đảm bảo tính tương thích. 3. Chính Sách Hoán Đổi Linh Hoạt (Interchangeable Policies): Các chính sách điều khiển robot (như GR00T, MolmoAct2, SmolVLA, hay $\pi_0$) có thể được hoán đổi một cách trơn tru thông qua một giao diện chung. Điều này cho phép thử nghiệm và triển khai các mô hình AI khác nhau một cách dễ dàng. 4. Mạng Lưới Zenoh-Powered (Zenoh-Powered Mesh): Một mạng lưới ngang hàng (peer-to-peer) tích hợp sẵn, được cung cấp bởi Zenoh, giúp phát hiện các robot trong đội và phát sóng lệnh mà không cần một máy chủ trung tâm. Điều này tăng cường khả năng mở rộng và độ bền của hệ thống.
Chỉ với vài dòng mã Python, bạn có thể thấy sự đơn giản và mạnh mẽ của hệ thống này: ```python # Toàn bộ quy trình làm việc chỉ trong 3 dòng Python from strands_robots import Robot from strands import Agent
arm = Robot("so100") # mode="sim" (mặc định - an toàn, không cần phần cứng) agent = Agent(tools=[arm]) agent("Pick up the red cube") # Yêu cầu robot nhặt khối lập phương màu đỏ ``` Đoạn mã trên minh họa cách bạn có thể điều khiển một tác vụ robot phức tạp chỉ với vài lệnh đơn giản, ẩn đi sự phức tạp của việc tương tác phần cứng hoặc mô phỏng. ✨
Điều Kiện Tiên Quyết ⚙️
Tối Thiểu (Chỉ Mô Phỏng) 💻
* Hệ điều hành: Linux hoặc macOS (hỗ trợ Apple Silicon cho MuJoCo). * Python: Phiên bản 3.12+. * Nhà cung cấp mô hình: Amazon Bedrock, Anthropic API, OpenAI, hoặc Ollama cục bộ. * Cài đặt: Sử dụng uv pip với các thành phần cần thiết: bash uv pip install "strands-robots[sim-mujoco,lerobot,mesh]"
Nâng Cao (Phần cứng, Chính sách Thực tế & Đẩy lên Hub) 🚀
* Hugging Face Token: Yêu cầu quyền ghi để đẩy tập dữ liệu/kéo chính sách. * Phần cứng: Một cặp robot SO-101 follower/leader (hoặc robot khác được LeRobot hỗ trợ) với các tệp hiệu chuẩn được lưu dưới ~/.cache/huggingface/lerobot/calibration/. * Suy luận GR00T cục bộ: Yêu cầu GPU NVIDIA (VRAM 16 GB+) và Docker.
Hướng Dẫn Chi Tiết Từng Bước 👣
Bước 1: Thiết Lập Môi Trường 🌐
Đầu tiên, hãy clone repository và xuất Hugging Face token của bạn (tùy chọn nếu chỉ chạy mô phỏng cục bộ): bash git clone https://github.com/strands-labs/robots.git cd robots export HF_TOKEN=hf_... Các ví dụ có thể chạy được nằm tại examples/lerobot/hub_to_hardware.py và hub_to_hardware.ipynb. Bạn có thể tham khảo để bắt đầu ngay! 💡
Bước 2: Ghi Lại Các Bản Trình Diễn và Đẩy Lên Hub 📤
#### Trong Mô Phỏng 💻 Bạn có thể ghi lại các tập dữ liệu LeRobotDataset có cấu trúc trong MuJoCo mà không cần phần cứng vật lý. Điều này cực kỳ hữu ích cho việc phát triển và thử nghiệm ban đầu. ```python from strands import Agent from strands_robots import Robot
robot = Robot("so100") # mode="sim" là mặc định agent = Agent(tools=[robot])
agent( "Record a demonstration of 'pick the red cube and place it in the box' " "using the Mock policy provider at FPS 30. Write the dataset to " "my_user/cube_picking_sim and push to the Hub when done." ) ``` Lưu ý quan trọng: Chính sách Mock chỉ tạo ra các hành động khớp giả để kiểm tra đường ống. Để ghi lại hành vi thực tế, bạn cần thay thế bằng một checkpoint đã được huấn luyện như allenai/MolmoAct2-SO100_101. Điều này đảm bảo dữ liệu ghi được có ý nghĩa cho việc huấn luyện AI thực tế. 💡
Tập dữ liệu thu được có thể được tải trực tiếp bằng LeRobot: ```python from lerobot.datasets.lerobot_dataset import LeRobotDataset
dataset = LeRobotDataset("my_user/cube_picking_sim") print(dataset.features) # Đầu ra bao gồm: 'observation.state', 'observation.images.front', 'action', v.v. ```
#### Trên Phần cứng Vật lý 🦾 Để ghi dữ liệu trên phần cứng vật lý, bạn sử dụng các công cụ CLI gốc của LeRobot trực tiếp. Quy trình này yêu cầu hiệu chuẩn robot để đảm bảo độ chính xác. ```bash lerobot-calibrate --robot.type=so101_follower --robot.id=my_follower lerobot-calibrate --robot.type=so101_leader --robot.id=my_leader
lerobot-record --robot.type=so101_follower --robot.id=my_follower --teleop.type=so101_leader --teleop.id=my_leader --dataset.repo_id=my_user/cube_picking --dataset.single_task='Pick up the red cube and place it in the box' --dataset.num_episodes=25 --dataset.push_to_hub=true ``` Các lệnh này cho phép bạn ghi lại các bản trình diễn thực tế trực tiếp từ robot, sau đó đẩy chúng lên Hugging Face Hub để chia sẻ hoặc huấn luyện thêm. Đây là bước then chốt để thu thập dữ liệu chất lượng cao cho các mô hình AI.
Bước 3: Chạy Chính Sách trong Mô Phỏng 🏃
Bạn có thể chạy suy luận chính sách bằng các môi trường đóng gói (như GR00T) hoặc các chính sách cục bộ trong tiến trình.
#### Lựa Chọn A: Suy Luận GR00T Đóng Gói (Containerized GR00T Inference) 📦 GR00T cung cấp một môi trường mạnh mẽ và độc lập để chạy các mô hình phức tạp. ```python from strands import Agent from strands_robots import Robot, gr00t_inference
robot = Robot("so100") # mode="sim" là mặc định agent = Agent(tools=[robot, gr00t_inference])
agent( "Start GR00T inference on port 5555 with the cube-picking checkpoint " "from my_user/cube-picker. Then ask the robot to pick up the red cube." ) ``` Việc sử dụng GR00T cho phép bạn tận dụng sức mạnh của các mô hình lớn mà không cần quản lý phức tạp các phụ thuộc. 🚀
#### Lựa Chọn B: Chính Sách Cục Bộ Trong Tiến Trình (In-Process Local Policy) 💻 Đối với suy luận trong tiến trình (không cần Docker/ZMQ), bạn có thể sử dụng LerobotLocalPolicy. Phương pháp này hỗ trợ nhiều mô hình phổ biến như ACT, Diffusion Policy, SmolVLA, $\pi_0$, và $\pi_{0.5}$. python from strands_robots.policies import create_policy # Tự động xử lý Real-Time Chunking (RTC) nếu có rtc_config policy = create_policy("lerobot/act_aloha_sim_transfer_cube_human") Tùy chọn này mang lại sự linh hoạt và hiệu quả cho những trường hợp muốn tích hợp sâu hơn hoặc cần kiểm soát chặt chẽ hơn quá trình suy luận. Việc tự động xử lý RTC là một điểm cộng lớn, giúp tối ưu hóa hiệu suất. 👍