包参考
相关源文件
以下文件被用作生成此 wiki 页面的上下文:
本文档提供了 IB-Robot 工作空间中所有 ROS2 包的全面参考。它详细说明了每个包的用途、关键组件、依赖关系以及在整体系统架构中的关系。
有关包构建和配置的详细信息,请参阅 构建项目。有关启动系统的详细信息,请参阅 启动系统。如需深入了解特定包,请参阅相应的架构章节(例如,inference_service 参阅 推理服务,action_dispatch 参阅 动作分发)。
包组织概览
IB-Robot 工作空间将包按照系统架构组织为功能层。下图展示了架构层与相应包的映射关系:
架构层中的包分布
graph TB
subgraph "Configuration Layer"
robot_config["robot_config"]
ibrobot_msgs["ibrobot_msgs"]
end
subgraph "Protocol Conversion Layer"
tensormsg["tensormsg"]
end
subgraph "Inference & Intelligence Layer"
inference_service["inference_service"]
end
subgraph "Action Execution Layer"
action_dispatch["action_dispatch"]
end
subgraph "Data Collection Layer"
dataset_tools["dataset_tools"]
robot_teleop["robot_teleop"]
end
subgraph "Motion Planning Layer"
robot_moveit["robot_moveit"]
end
subgraph "Hardware & Description Layer"
robot_description["robot_description"]
so101_hardware["so101_hardware"]
end
robot_config --> tensormsg
robot_config --> inference_service
robot_config --> action_dispatch
robot_config --> dataset_tools
robot_config --> robot_moveit
robot_config --> so101_hardware
ibrobot_msgs --> inference_service
ibrobot_msgs --> action_dispatch
ibrobot_msgs --> dataset_tools
tensormsg --> inference_service
tensormsg --> action_dispatch
tensormsg --> dataset_tools
inference_service --> action_dispatch
robot_description --> robot_moveit
robot_description --> so101_hardware
来源: README.md:44-71, src/README.md:50-87, docs/architecture.md:86-177
包依赖关系图
下图展示了包之间的具体依赖关系,使用 package.xml 文件中的实际包名:
ROS2 包依赖关系
graph TD
ibrobot_msgs["ibrobot_msgs<br/>(interface definitions)"]
robot_config["robot_config<br/>(YAML + launch builders)"]
tensormsg["tensormsg<br/>(ROS↔Tensor conversion)"]
tensormsg --> ibrobot_msgs
tensormsg --> robot_config
inference_service["inference_service<br/>(policy nodes)"]
inference_service --> ibrobot_msgs
inference_service --> tensormsg
inference_service --> robot_config
action_dispatch["action_dispatch<br/>(action dispatcher node)"]
action_dispatch --> ibrobot_msgs
action_dispatch --> tensormsg
action_dispatch --> robot_config
dataset_tools["dataset_tools<br/>(episode recorder)"]
dataset_tools --> ibrobot_msgs
dataset_tools --> tensormsg
dataset_tools --> robot_config
robot_teleop["robot_teleop<br/>(VR/Xbox/IMU control)"]
robot_teleop --> ibrobot_msgs
robot_teleop --> robot_config
robot_moveit["robot_moveit<br/>(MoveIt2 config)"]
robot_moveit --> robot_description
robot_description["robot_description<br/>(URDF/SRDF/meshes)"]
so101_hardware["so101_hardware<br/>(Feetech SDK driver)"]
so101_hardware --> robot_description
style ibrobot_msgs fill:#fff3e0,stroke:#ff9800,stroke-width:3px
style robot_config fill:#fff3e0,stroke:#ff9800,stroke-width:3px
来源: src/action_dispatch/package.xml:1-32, src/inference_service/package.xml:1-40
核心包
ibrobot_msgs
.msg, .srv, .action)src/ibrobot_msgs/用途: 定义 IB-Robot 系统中使用的所有自定义 ROS2 消息、服务和动作接口。提供节点之间的通信契约。
关键接口:
接口类型 |
名称 |
用途 |
|---|---|---|
Action |
|
用于动作分发的推理请求/响应 |
Message |
|
张量数据序列化的通用容器 |
Message |
|
单个张量/值包装器 |
依赖: - std_msgs - sensor_msgs - geometry_msgs -
trajectory_msgs - builtin_interfaces
来源: README.md:59
robot_config
src/robot_config/用途: 作为机器人规格、契约和系统配置的**唯一事实来源**。提供统一的启动入口点和配置构建器。
关键组件:
组件 |
文件路径 |
用途 |
|---|---|---|
主启动文件 |
|
统一系统入口点 |
机器人配置 |
|
每个机器人的 规格说明 |
契约构建器 |
|
自动生成 观测/动作契约 |
启动构建器 |
|
模块化启动 组合 |
配置加载器 |
|
YAML 解析和 验证 |
配置文件: - config/robots/so101_single_arm.yaml - SO-101 机器人规格 - config/calibration/*.yaml - 传感器校准数据 - config/contracts/*.yaml - 预生成的契约
启动参数:
参数 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
string |
|
机器人配置名称 |
|
string |
|
配置文件的 绝对路径 (覆盖 robot_config) |
|
bool |
|
启用 Gazebo 仿真 |
|
string |
来自 YAML |
覆盖控制模式 |
`` with_inference`` |
bool |
auto |
强制启用/禁用 推理服务 |
|
bool |
auto |
强制启用/禁用 MoveIt |
`` moveit_display`` |
bool |
|
为 MoveIt 启动 RViz |
|
bool |
|
自动激活 控制器 |
依赖: - rclpy - launch - launch_ros - Python
3.10+
协议转换层
tensormsg
src/tensormsg/用途: 提供 ROS2 消息与张量数据结构(NumPy/PyTorch)之间的双向转换。实现契约驱动的观测/动作编码和解码。
关键模块:
模块 |
用途 |
|---|---|
|
核心 ROS↔张量转换逻辑 |
|
时间同步的多话题缓冲 |
|
契约模式验证 |
核心类:
TensorMsgConverter
├── encode_value() # 张量 → ROS 消息
├── decode_value() # ROS 消息 → 张量
└── batch_encode() # 批量处理
StreamBuffer
├── add_message() # 缓冲传入消息
├── get_latest() # 获取最新同步批次
└── asof_sample() # 时间对齐采样
依赖: - rclpy - std_msgs, sensor_msgs,
geometry_msgs - ibrobot_msgs - robot_config - PyTorch
(可选,用于直接张量输出)- NumPy
推理与智能层
inference_service
src/inference_service/lerobot_policy_node - 单机/分布式边缘策略推理 - pure_inference_node - 仅云端 GPU 推理服务器用途: 为各种具身智能策略(ACT、Diffusion Policy、VLA 模型)提供模型推理服务。支持单机(单机)和分布式(设备-边缘-云端)执行模式。
关键组件:
组件 |
文件 |
用途 |
|---|---|---|
策略节点 |
|
主推理协调器 |
纯推理节点 |
|
云端 GPU 推理服务器 |
预处理器 |
|
张量预处理(CPU) |
推理引擎 |
|
模型前向传播(GPU) |
后处理器 |
|
动作张量后处理 |
协调器 |
|
执行模式编排 |
执行模式:
模式 |
节点配置 |
通信方式 |
|---|---|---|
单机 |
单个 |
进程内零拷贝 |
分布式 |
|
ROS2 话题 |
动作接口: - 动作服务器: DispatchInfer``(来自 ``ibrobot_msgs)- 输入: 空目标(由水位触发)- 结果: 包含动作块张量的 VariantsList
依赖: - rclpy, rclpy_action - ibrobot_msgs -
tensormsg - robot_config - PyTorch - LeRobot 库
(来自 libs/lerobot/ 的 lerobot 包)
来源: src/inference_service/package.xml:1-40, README.md:64, src/README.md:56-61
动作执行层
action_dispatch
src/action_dispatch/action_dispatcher_node - 基于拉取的动作分发器,带时序平滑用途: 管理动作执行队列,根据水位阈值触发推理请求,并为动作块模型应用时序平滑。作为推理与硬件控制之间的”小脑”。
关键组件:
组件 |
文件 |
用途 |
|---|---|---|
分发器节点 |
|
主执行循环和队列管理 |
时序平滑器 |
|
跨帧动作混合 |
平滑器管理器 |
|
平滑器生命周期管理 |
话题执行器 |
|
高频位置控制 |
动作执行器 |
|
基于轨迹的控制 |
节点参数:
参数 |
类型 |
默认值 |
描述 |
|---|---|---|---|
|
int |
100 |
最大动作队列长度 |
|
int |
20 |
当队列 < 阈值时触发推理 |
|
double |
100.0 |
控制循环频率(Hz) |
|
string |
|
推理动作服务器名称 |
|
string |
|
契约 YAML 路径 |
|
bool |
false |
启用跨帧平滑 |
|
double |
0.01 |
指数平滑系数 |
|
int |
100 |
动作块大小 |
通信:
方向 |
接口 |
类型 |
用途 |
|---|---|---|---|
客户端 |
`` DispatchInfer`` |
Action |
从策略节点 请求推理 |
发布 |
|
|
位置命令到 ros2_control |
发布 |
` ~/queue_size` |
|
当前队列状态 |
发布 |
|
|
平滑状态 |
订阅 |
`` /joint_states`` |
|
关节状态反馈 (可选) |
服务 |
|
|
重置队列和状态 |
服务 |
|
|
开关平滑 |
依赖: - rclpy, rclpy_action - std_msgs,
sensor_msgs, trajectory_msgs - ibrobot_msgs - tensormsg
- robot_config - PyTorch(用于张量操作)
来源: src/action_dispatch/package.xml:1-32, src/action_dispatch/README.en.md:1-447, README.md:61, src/README.md:62-66
数据采集与工具
dataset_tools
src/dataset_tools/episode_recorder - 用于片段数据录制的动作服务器 - record_cli - 录制会话的交互式 CLI - bag_to_lerobot - ROS2 bag 到 LeRobot 数据集转换器用途: 提供用于采集专家演示数据并将 ROS2 bag 数据转换为 LeRobot v3 数据集格式的工具。实现契约驱动的数据对齐和重采样。
关键组件:
组件 |
文件 |
用途 |
|---|---|---|
片段录制器 |
`` episode_recor der_node.py`` |
将多话题数据录制 到 ROS2 bag |
录制 CLI |
|
录制控制的用户界面 |
Bag 转换器 |
|
将 bag 转换为 LeRobot parquet/视频 格式 |
契约处理器 |
使用 |
确保录制与训练 对齐 |
录制模式: - 片段式: 每个片段开始/停止录制,带交互式提示 - 连续式: 后台录制,自动片段分割
输出格式: - ROS2 MCAP bag(录制)- LeRobot v3 数据集(转换): - data/ - 包含观测/动作张量的 Parquet 文件 - videos/ - MP4 编码的相机流
依赖: rclpy、rosbag2_py、ibrobot_msgs、tensormsg、robot_config、lerobot (用于数据集格式)
来源: README.md:60
robot_teleop
src/robot_teleop/vr_teleop_node - VR 控制器遥操作 - xbox_teleop_node - Xbox 游戏手柄遥操作 - imu_teleop_node - 手机 IMU 遥操作 - leader_follower_node - 主从臂控制用途: 提供多种遥操作接口用于采集专家演示数据。支持各种输入设备和控制方案。
支持的设备:
设备 |
节点 |
控制方案 |
|---|---|---|
VR 头显 |
|
6-DOF 手部追踪 |
Xbox 控制器 |
|
摇杆 + 按钮 |
手机 IMU |
|
方向追踪 |
主臂 |
|
直接位置映射 |
依赖: - rclpy - sensor_msgs, geometry_msgs -
ibrobot_msgs - robot_config - 设备特定库(游戏手柄用 SDL2 等)
来源: README.md:62
运动规划层
robot_moveit
src/robot_moveit/moveit_gateway.py - 高层位姿命令接口用途: 为 SO-101 机器人提供 MoveIt2 运动规划集成。包括 OMPL 规划器、Pilz 工业运动规划器和 IK 求解器的配置。
关键组件:
组件 |
文件 |
用途 |
|---|---|---|
MoveIt 网关 |
|
位姿 → IK → 轨迹流水线 |
启动文件 |
|
MoveIt 核心 + RViz |
SRDF |
|
语义机器人描述 |
运动学 |
|
IK 求解器配置 |
控制器 |
|
MoveIt 控制器配置 |
MoveIt 网关: - 输入: /cmd_pose``(位姿命令)- **处理**: 带方向约束的多策略 IK 求解 - **输出**: 关节轨迹到 ``action_dispatcher_node
5自由度约束处理: - 欠驱动臂的 position_only_ik 模式 - 自动方向约束松弛
依赖: - moveit_ros_planning_interface -
moveit_ros_move_group - moveit_simple_controller_manager -
robot_description - robot_config
硬件与描述层
robot_description
src/robot_description/用途: 机器人模型描述的集中仓库,包括 URDF 文件、SRDF 语义描述、STL 网格和视觉资源。
资源结构:
robot_description/
├── urdf/
│ ├── so101.urdf.xacro # 主机器人描述
│ ├── so101.ros2_control.xacro # ros2_control 配置
│ └── so101.gazebo.xacro # Gazebo 插件
├── srdf/
│ └── so101.srdf # MoveIt 语义描述
├── meshes/
│ ├── visual/ # 高质量视觉网格
│ └── collision/ # 简化的碰撞网格
└── config/
└── joint_limits.yaml # 关节限制定义
URDF 组件: - 基础 URDF: 运动学和连杆几何 - ros2_control: 硬件接口声明 - Gazebo: 传感器插件和物理属性
依赖: robot_state_publisher, joint_state_publisher (可选, 用于独立测试)
so101_hardware
src/so101_hardware/so101_hardware/SO101Hardware (ros2_control 硬件接口)用途: 使用飞特舵机 SDK 实现 SO-101 机器人的 ros2_control 硬件接口。通过串口通信提供物理舵机的位置/速度读写。
关键组件:
组件 |
用途 |
|---|---|
|
ros2_control |
飞特 SDK 集成 |
底层舵机通信 |
串口管理器 |
UART 通信处理 |
硬件接口: - 命令接口: 位置、速度(每个关节)- 状态接口: 位置、速度、力矩(每个关节)- 通信: 串口(通常为 /dev/ttyUSB0 或类似)
配置(在机器人 URDF 中):
<ros2_control name="SO101Hardware" type="system">
<hardware>
<plugin>so101_hardware/SO101Hardware</plugin>
<param name="serial_port">/dev/ttyUSB0</param>
<param name="baud_rate">1000000</param>
</hardware>
...
</ros2_control>
依赖: - rclcpp - hardware_interface - pluginlib
- robot_description - 飞特舵机 SDK(外部库)
外部依赖
lerobot(外部子模块)
libs/lerobot/用途: 为具身智能策略提供训练基础设施、数据集格式和预训练模型。被 inference_service 用于模型加载,被 dataset_tools 用于数据集格式合规。
关键特性: - ACT、Diffusion Policy、VLA 模型实现 - LeRobot v3 数据集格式(Parquet + MP4)- 训练脚本和工具
安装: 由 scripts/build.sh:162-178 以可编辑模式安装到工作空间虚拟环境。
包文件系统映射
下图展示了包与其文件系统位置和关键文件类型的映射关系:
工作空间文件系统结构
graph TB
subgraph "Workspace Root"
src["src/<br/>(submodule)"]
libs["libs/"]
scripts["scripts/"]
install["install/<br/>(build output)"]
end
subgraph "src/ Packages"
src --> rc["robot_config/<br/>Python, YAML, Launch"]
src --> tm["tensormsg/<br/>Python Library"]
src --> inf["inference_service/<br/>Python Executables"]
src --> ad["action_dispatch/<br/>Python Executables"]
src --> dt["dataset_tools/<br/>Python Executables"]
src --> rt["robot_teleop/<br/>Python Executables"]
src --> rm["robot_moveit/<br/>YAML Config, Launch"]
src --> rd["robot_description/<br/>URDF, SRDF, STL"]
src --> so["so101_hardware/<br/>C++ Plugin"]
src --> im["ibrobot_msgs/<br/>IDL Definitions"]
end
subgraph "libs/ External"
libs --> lerobot["lerobot/<br/>(Git submodule)<br/>Python ML Library"]
end
subgraph "scripts/ Tooling"
scripts --> setup["setup.sh"]
scripts --> build["build.sh"]
scripts --> cleanup["cleanup_ros.sh"]
end
rc -.->|"config/*.yaml"| rc_cfg["Robot Specifications"]
rc -.->|"launch/*.py"| rc_launch["Launch Files"]
inf -.->|"depends on"| lerobot
dt -.->|"depends on"| lerobot
构建系统集成
所有包使用支持 mixin 的 colcon 构建系统构建。构建过程由 scripts/build.sh 管理。
构建目标:
目标类型 |
包 |
构建工具 |
|---|---|---|
ament_python |
|
setuptools |
ament_cmake |
|
CMake |
Interface |
|
rosidl 生成器 |
External |
|
pip(可编辑安装) |
构建命令:
./scripts/build.sh # 默认开发构建
./scripts/build.sh --mixin release # 优化的发布构建
./scripts/build.sh --mixin debug test # 带测试的调试构建
Mixin 配置(.colcon/mixin/build.mixin.yaml): - dev
- 开发模式(符号链接安装,无测试)- release - 优化构建(-O3,NDEBUG)- debug - 调试符号(-g,无优化)- test - 启用测试 - asan - AddressSanitizer - tsan - ThreadSanitizer
包启动集成
robot_config 包作为统一的启动入口点。它根据配置和启动参数协调所有必要包的启动:
启动构建器系统
graph LR
robot_launch["robot.launch.py"]
robot_launch --> control_builder["ControlLaunchBuilder"]
robot_launch --> sim_builder["SimulationLaunchBuilder"]
robot_launch --> perception_builder["PerceptionLaunchBuilder"]
robot_launch --> execution_builder["ExecutionLaunchBuilder"]
control_builder --> controllers["ros2_control<br/>controllers"]
sim_builder --> gazebo["Gazebo<br/>(if use_sim=true)"]
sim_builder --> robot_state_pub["robot_state_publisher<br/>(robot_description)"]
perception_builder --> cameras["Camera drivers<br/>(from peripherals)"]
execution_builder --> inference["inference_service<br/>(if with_inference)"]
execution_builder --> dispatcher["action_dispatch<br/>(if model_inference)"]
execution_builder --> moveit_gateway["robot_moveit<br/>(if moveit_planning)"]
execution_builder --> teleop["robot_teleop<br/>(if teleop mode)"]
启动参数逻辑: - control_mode 决定启动哪些执行包 - with_inference / with_moveit 可覆盖自动检测 - use_sim 在 so101_hardware 和 gz_ros2_control 之间切换
汇总表
完整包参考
包 |
类型 |
语言 |
关键可执行文件 |
主要用途 |
|---|---|---|---|---|
|
Interface |
IDL |
消息/动作定义 |
|
|
Config/Launch |
Python |
唯一事实来源,启动编排 |
|
|
Library |
Python |
ROS↔张量协议转换 |
|
|
Service |
Python |
|
模型推理(ACT、Diffusion、VLA) |
|
Service |
Python |
|
动作队列 + 时序平滑 |
|
Tools |
Python |
|
数据采集与转换 |
|
Control |
Python |
|
遥操作接口 |
|
Planning |
Python/YAML |
|
MoveIt2 配置与网关 |
|
Assets |
URDF/SRDF |
机器人模型和网格 |
|
|
Driver |
C++ |
|
ros2_control 硬件接口 |
|
External |
Python |
ML 训练库(子模块) |
来源: README.md:44-71, src/README.md:20-87, docs/architecture.md:217-265