lerobot_ros2¶
LeRobot 与 ROS 2 的集成单体仓库。LeRobot 通过 ROS 2 话题与机器人通信。
文档所依据的分支
本文档对照分支 feature/sim-grasp-datagen(尖端提交 2026-09-20)。该分支新于 main;请以它为准,不要跟 main。
仓库: fiveages-sim/lerobot_ros2 @ feature/sim-grasp-datagen
README: README.md on this branch
用途¶
本仓库是单体工程,不是在仓库根目录执行一次 pip install -e . 就能装好的包。它包含:
submodules/ros2_robot_interface:独立 ROS 2 机器人接口包submodules/robot_action_composer:任务队列 YAML 与运动生成(见 robot_action_composer)lerobot_robot_ros2:LeRobot 的 ROS 2 机器人插件(ROS2Robot/ROS2RobotConfig/ROS2RobotInterfaceConfig)lerobot_camera_ros2:LeRobot 的 ROS 2 相机插件
LeRobot 核心库从 PyPI 安装。默认版本钉在 .fa-env.toml 中的 lerobot==0.5.1(首次由 .fa-env.toml.example 生成)。
前置要求¶
ROS 2(测试版本:Jazzy)
Python 3.12
uv(推荐)或 Conda
安装¶
先带 submodule 克隆,再用 init.sh。不要把仓库根目录的 pip install -e . 当作安装路径。
git clone --recursive git@github.com:fiveages-sim/lerobot_ros2.git
cd lerobot_ros2
# uv if needed: curl -LsSf https://astral.sh/uv/install.sh | sh
./init.sh all
# motion / task queue only (no LeRobot): ./init.sh all-motion
# recording / inference plugins: ./init.sh install-lerobot
source .venv/bin/activate # default backend=uv
./init.sh 不带参数会进入交互菜单(子模块、环境、安装、backend、ROS 2 工作空间)。README 中常用的非交互命令:
命令 |
作用 |
|---|---|
|
子模块 + 环境 + 任务编排 + LeRobot 插件 |
|
仅子模块 + 环境 + |
|
PyTorch + PyPI |
|
写入 |
运行时配置在本地 .fa-env.toml(已 gitignore;从示例复制)。README 中记录的键:
配置项 |
说明 |
|---|---|
|
|
|
conda 环境名(默认 |
|
uv 虚拟环境路径(默认 |
|
PyPI lerobot 版本(默认 |
|
ROS 2 工作空间;激活环境时自动 source |
个人覆盖:.fa-env.local.toml。环境说明:docs/ENV_THIS_CHECKOUT.md。在本检出的 .venv 里用 uv pip,不要用系统 pip(PEP 668)。不要把 ros2-stack / grasp-generation 装进 submodules/hug/.venv(HUG 的 Python 3.10 环境)。
手动回退
仅在必须时才跳过 init.sh。README 的 uv 路径:用 --system-site-packages 创建 .venv,本地包加 --no-deps,避免 pip 从 PyPI 拉 rclpy。ROS Python 包来自已 source 的 Jazzy overlay。
git clone --recursive git@github.com:fiveages-sim/lerobot_ros2.git
cd lerobot_ros2
git submodule update --init --recursive
uv venv --python python3.12 --system-site-packages .venv
source .venv/bin/activate
uv pip install torch==2.7.1 torchvision==0.22.1 torchaudio==2.7.1 \
--index-url https://download.pytorch.org/whl/cu128
uv pip install "lerobot==0.5.1"
uv pip install -e submodules/ros2_robot_interface --no-deps
uv pip install numpy pyyaml
uv pip install -e submodules/robot_action_composer --no-deps
uv pip install "viser>=0.2" # optional grasp-generation UI (PyPI viser, not ros2-viser launch)
uv pip install -e lerobot_robot_ros2 --no-deps
uv pip install -e lerobot_camera_ros2 --no-deps
使用:ROS2Robot
对外的机器人插件是 lerobot_robot_ros2,不是名为 lerobot_ros2 的根包。示例来自 README:
from lerobot_robot_ros2 import ROS2Robot, ROS2RobotConfig, ROS2RobotInterfaceConfig
config = ROS2RobotConfig(
id="my_robot",
ros2_interface=ROS2RobotInterfaceConfig(
joint_states_topic="/joint_states",
end_effector_pose_topic="/left_current_pose",
end_effector_target_topic="/left_target",
),
)
robot = ROS2Robot(config)
robot.connect()
# ...
robot.disconnect()
更多示例见本分支的 examples/。lerobot_robot_ros2 依赖本地已安装的 ros2-robot-interface(先装 submodules/ros2_robot_interface)。
相机插件¶
lerobot_camera_ros2 默认使用 manual 图像转换(不依赖 cv_bridge),以便配合 lerobot==0.5.1 与 numpy 2.x。若环境支持 cv_bridge,会自动尝试使用。强制走 manual 路径:
export LEROBOT_ROS2_DISABLE_CV_BRIDGE=1
uv 路径还需系统已安装 ffmpeg(例如 sudo apt install ffmpeg)。install-plugins 会额外安装 scipy>=1.14,避免 --system-site-packages 下系统 SciPy 与 numpy 2.x 不兼容。
仓库内文档(本分支)¶
文档 |
内容 |
|---|---|
只在本仓库检出环境中开发与安装 |
|
HUG 子模块说明 |
|
Wuji 重定向 |
|
Composer GRASP_GENERATION.md |
运控 + 抓取冒烟(lerobot README 中的链接) |
仿真抓取交接 / 末端对齐说明也在本分支的 docs/SIM_GRASP_*.md。