LeRobot documentation

Bảng tra cứu nhanh

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.6.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Bảng tra cứu nhanh

Tất cả các lệnh LeRobot được tập hợp tại một nơi. Nếu bạn quên cách sử dụng một lệnh cụ thể hoặc muốn tìm hiểu về một lệnh mới, bạn có thể thực hiện điều đó tại đây.

Đối với tất cả các lệnh được liệt kê bên dưới, hãy nhớ thay đổi các cổng/tên/id thành giá trị của riêng bạn!

Một cách tuyệt vời khác để xem tất cả các lệnh và cấu hình chúng cho thiết lập cụ thể của bạn là sử dụng Jupyter Notebook này.

Cài đặt và thiết lập

Để cài đặt, hãy xem Cài đặt LeRobot.

Công cụ hữu ích

Tìm cổng

Sử dụng lệnh này để xác định cổng serial mà robot của bạn được kết nối. Làm theo các hướng dẫn trong terminal: bạn sẽ được yêu cầu rút cáp USB và nhấn Enter. Sau đó, script sẽ phát hiện và in ra cổng serial chính xác cho robot đó.

lerobot-find-port
Tìm camera

Tìm nhanh chỉ số camera và xác minh đầu ra của chúng. Lệnh này in thông tin camera ra terminal và lưu các khung hình thử nghiệm từ mỗi camera được phát hiện vào outputs/captured_images

lerobot-find-cameras

Hiệu chuẩn

Trong hầu hết các trường hợp, bạn sẽ chỉ cần thực hiện hiệu chuẩn một lần cho mỗi robot và thiết bị điều khiển từ xa. Trước khi thực hiện hiệu chuẩn, hãy đảm bảo rằng tất cả các khớp đều ở vị trí trung tâm xấp xỉ.

lerobot-calibrate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm

Hãy đảm bảo rằng bạn sử dụng cùng các ID đã dùng trong quá trình hiệu chuẩn cho các script khác sau đó. Đó là cách LeRobot tìm thấy các tệp hiệu chuẩn.

Điều khiển từ xa

Điều khiển từ xa bằng hai camera và hiển thị dữ liệu bằng Rerun.

lerobot-teleoperate \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_leader_arm \
    --display_data=true

Ghi lại một tập dữ liệu

Bộ dữ liệu sẽ được tải lên Hugging Face Hub một cách tự động dưới repo_id. Hãy đảm bảo bạn đã đăng nhập vào tài khoản HF của mình bằng CLI (bạn có thể lấy token từ https://huggingface.co/settings/tokens), và lưu tên người dùng của bạn vào HF_USER, các lệnh bên dưới sẽ sử dụng biến này:

lerobot-record \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --teleop.type=so101_leader \
    --teleop.port=/dev/ttyACM1 \
    --teleop.id=my_leader_arm \
    --dataset.repo_id=${HF_USER}/so101_dataset_test \
    --dataset.num_episodes=30 \
    --dataset.single_task="put the red brick in a bowl" \
    --dataset.streaming_encoding=true \
    --display_data=true

Trong khi thu thập bộ dữ liệu, bạn có thể kiểm soát quy trình bằng bàn phím:

  • Nhấn Mũi tên phải (→) hoặc n: Lưu tập và chuyển sang tập tiếp theo.
  • Nhấn Phím mũi tên trái (←) hoặc r: Xóa tập hiện tại và thử lại.
  • Nhấn Escape (ESC) hoặc q: Dừng, mã hóa video và tải lên.

lerobot-record thêm ngày và giờ của phiên vào cuối --dataset.repo_id, do đó ${HF_USER}/so101_dataset_test được lưu dưới dạng ${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS. Tìm tên đầy đủ trên hồ sơ Hugging Face của bạn hoặc bằng ls ~/.cache/huggingface/lerobot/${HF_USER}, và sử dụng nó trong các lệnh huấn luyện bên dưới. Thêm --dataset.no_stamp=true để giữ nguyên tên chính xác.

Độ sâu ghi

Camera Intel RealSense (type: intelrealsense) ghi lại luồng chiều sâu khi bạn đặt use_depth: true. Chiều sâu được lượng tử hóa thành mã 12-bit và được lưu trữ dưới dạng video riêng.

lerobot-record \
    ... \
    --robot.cameras="{ head: {type: intelrealsense, serial_number_or_name: \"0123456789\", width: 640, height: 480, fps: 30, use_depth: true} }" \
    --dataset.repo_id=${HF_USER}/so101_depth_test \
    --dataset.single_task="put the red brick in a bowl" \
    --dataset.depth_encoder.depth_min=0.01 \
    --dataset.depth_encoder.depth_max=10.0 \
    --dataset.depth_encoder.shift=0.0 \
    --dataset.depth_encoder.use_log=true

Tham số mã hóa video

Các luồng RGB và chiều sâu được mã hóa độc lập thông qua các khóa --dataset.rgb_encoder.* và --dataset.depth_encoder.*.

lerobot-record \
    ... \
    --dataset.rgb_encoder.vcodec=h264 \
    --dataset.rgb_encoder.pix_fmt=yuv420p \
    --dataset.rgb_encoder.crf=23 \
    --dataset.depth_encoder.vcodec=hevc \
    --dataset.depth_encoder.extra_options='{"x265-params": "lossless=1"}'

Huấn luyện

Tùy thuộc vào phần cứng của bạn, việc huấn luyện chính sách có thể mất vài giờ. Đó là cách bạn huấn luyện chính sách ACT đơn giản:

lerobot-train \
    --dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
    --policy.type=act \
    --output_dir=outputs/train/act_so101_test \
    --job_name=act_so101_test \
    --policy.device=cuda \
    --trackio.enable=true \
    --policy.repo_id=${HF_USER}/policy_test \
    --steps=20000
  • Các loại policy phổ biến: act, diffusion, multi_task_dit, smolvla, pi0, pi05, pi0_fast, groot, xvla. Mỗi policy có trang riêng dưới Policies trong thanh bên, và Compute & Hardware Guide cho biết loại nào phù hợp với GPU của bạn.
  • Thiết bị: cuda (NVIDIA), mps (Apple Silicon), cpu

--policy.type tạo một policy mới có kiểu đó và huấn luyện nó từ đầu trên dataset của bạn (một số policy vẫn bắt đầu từ các backbone thị giác hoặc ngôn ngữ đã được huấn luyện trước, như được cấu hình trong config của chúng). Để fine-tune một model hiện có, hãy truyền --policy.path kèm theo một checkpoint cục bộ hoặc một Hub repo id: kiểu policy và config sẽ được đọc từ đó, do đó không cần --policy.type.

lerobot-train \
    --dataset.repo_id=${HF_USER}/so101_dataset_test_YYYYMMDD_HHMMSS \
    --policy.path=username/the_policy_to_finetune \
    --policy.device=cuda \
    --policy.repo_id=${HF_USER}/policy_finetuned_test \
    --output_dir=outputs/train/finetuned_so101_test \
    --steps=20000

Không có GPU cục bộ? Thêm --job.target=<flavor> (ví dụ a10g-small) vào một trong hai lệnh và lerobot-train sẽ chạy nó trên Hugging Face Jobs thay thế — công cụ sẽ tải lên một dataset chỉ dùng cục bộ cho bạn và đẩy mô hình đã huấn luyện. Liệt kê các flavor bằng hf jobs hardware. Để theo dõi các chỉ số của job, thêm --trackio.enable=true --trackio.space_id=<user>/<space>: cơ sở dữ liệu Trackio cục bộ của pod sẽ không tồn tại sau khi job kết thúc.

Để tiếp tục, chỉ --config_path đến một checkpoint và thêm --resume=true. Nó chấp nhận một đường dẫn cục bộ hoặc id repo trên Hub (checkpoint mới nhất sẽ được tải về), và hoạt động cục bộ hoặc trên một job bằng cách thêm --job.target=<flavor>:

lerobot-train --config_path=${HF_USER}/policy_test --resume=true --job.target=a10g-small

Suy luận

Inference có nghĩa là chạy chính sách/mô hình đã được huấn luyện trên robot. Để làm điều này, chúng ta sử dụng lerobot-rollout. Bạn cần cung cấp đường dẫn đến chính sách của mình. Đó có thể là đường dẫn cục bộ hoặc id kho Hugging Face, ví dụ ${HF_USER}/policy_test từ lệnh huấn luyện ở trên. Hãy sử dụng cùng cổng, --robot.id, cấu hình camera và mô tả tác vụ như khi thu thập bộ dữ liệu. --duration được tính bằng giây; nếu không được chỉ định, chính sách sẽ chạy cho đến khi bạn dừng nó.

Trên v0.5.x và các phiên bản trước đó, lerobot-rollout không tồn tại và bạn cần sử dụng lerobot-record thay thế. Thông tin chi tiết tại đây.

lerobot-rollout \
    --strategy.type=base \
    --policy.path=${HF_USER}/policy_test \
    --robot.type=so101_follower \
    --robot.port=/dev/ttyACM0 \
    --robot.id=my_follower_arm \
    --robot.cameras="{ top: {type: opencv, index_or_path: 1, width: 640, height: 480, fps: 30}, wrist: {type: opencv, index_or_path: 0, width: 640, height: 480, fps: 30} }" \
    --task="put the red brick in a bowl" \
    --duration=60
Update on GitHub