接口与编排

Isaac USD 场景起来之后,数据采集不会在 Python 里按名字去调 OCS2 或 Nav2 服务端。YAML task_queue 块解析成已注册技能;技能产出 StageTarget 序列,再经 ROS2RobotInterface 发出。

下列 API 来自 robot_action_composer @ feature/dex-grasp-generator 及其 docs/。不要发明 ActionSequence / actions.MoveJ 这类类。

ros2_robot_interface(运动与录制)

Repository: fiveages-sim/ros2_robot_interface

composer README:纯运动 / 队列路径依赖 ROS2RobotInterface(ctx.interface),不依赖 LeRobot 的 ROS2Robot 类。录制时机器人运动仍走同一接口;LeRobot 插件只负责写 episode(下一页)。

典型安装用 lerobot_ros2 脚本,不要在系统 Python 上随手 pip:

cd lerobot_ros2
./init.sh all-motion    # ros2_robot_interface + robot_action_composer

参考:ros2_robot_interface、Python 接口操作指南。

robot_action_composer(task_queue + 技能)

Branch: feature/dex-grasp-generator

在 lerobot_ros2 monorepo 里这个包是 submodules/robot_action_composer。两层:

层

职责

motion_generation

几何 → StageTarget / ArmTarget 序列;execute_stage_sequence 调用 ROS2RobotInterface(笛卡尔、双臂、MoveJ、夹爪节拍)。

task_runtime

runner.run_task_queue:连接 → FSM → 可选 Isaac reset → 每个 YAML 块 → get_skill → 执行。未知 skill: 名会抛带已注册列表的 KeyError。

YAML 在 robots/<Robot>/task_configs/**/*.yaml(可选厂商分组 robots/<Vendor>/<Robot>/)。发现、合并规则与 robot.yaml:TASK_CONFIG_YAML.md、ROBOT_CONFIG.md。

技能名(README 索引中的例子;参数见 SKILLS_REFERENCE.md):

类别

已注册的 skill: 名

单臂

single_arm.pick, single_arm.place, single_arm.move_to_pose, single_arm.move_relative, single_arm.move_to_object, single_arm.goto_cache_pose, single_arm.drawer.pull_open, single_arm.drawer.close_push

双臂

dual_arm.carry, dual_arm.parallel_pick, dual_arm.handover, dual_arm.place, dual_arm.bimanual_align, dual_arm.goto_cache_pose

导航

nav.navigate_to_pose, nav.navigate_to_object, nav.navigate_relative, nav.send_nav_goal, nav.wait_nav_arrived

关节 / 会话 / 环境

joint.movej_to_config, joint.goto_cached_joints, robot.cache_ee_pose, robot.send_mode_command, env.randomize_object_local_xyz, …

README 使用的数据采集工作区是 lerobot_ros2 里的 examples/IsaacSim(含 robots/)。机型说明(含轮臂 FiveAges W2 双臂任务)就在那些目录旁(例如 robots/FiveAges_W2/README.md)。

官方 Nav2,不是自研导航栈

composer 不实现 Nav2 服务端。nav.* 技能封装的是 ROS2RobotInterface 的 Nav2 客户端 API。场景级 launch 与任务 YAML 分开。

摘自 docs/ROS2_STACK.md:

  • 不要在任务队列 YAML 里写 ros2_stack。

  • 合并:robot.yaml → ros2_stack:,再叠叶子目录 .meta/ros2_stack.yaml。

  • 运控 preset:ocs2-fullbody / ocs2-split-body / ocs2-demo(ocs2_arm_controller 的 launch)。

  • 导航:navigation.profile 为 default 或 map_only,展开成 nav2_profile:=…。默认 launch:robot_common_launch / navigation/navigation_isaac_gt.launch.py(该仓 main 上有此文件;见 robot-descriptions-common)。

  • navigation.required: auto 仅当 task_queue 含 nav.* 技能时才启动 Nav2。

这就是机器人工作区已经在用的官方 Nav2 安装/启动方式,不是 FiveAges 自研规划器。

CLI(跑完 ./init.sh 之后)

composer pyproject.toml 中的 console scripts:motion-generation、ros2-stack、grasp-generation、check-isaac-pose、check-robot-status。

在包含 robots/ 的目录下运行(通常是 examples/IsaacSim):

cd examples/IsaacSim

# Scene-level OCS2 + Nav2 (background logs under .ros2_stack/<robot>/)
ros2-stack --lang zh launch
ros2-stack status
ros2-stack stop

# Task queue (dry motion; optional --ensure-ros2-stack)
motion-generation
motion-generation --robot dobot_cr5 --task-key pick_place --scene default
motion-generation --robot fiveages_w2 --task-key transfer_blade --ensure-ros2-stack

grasp-generation serve … 是该分支上可选的抓取配置 UI(GRASP_GENERATION.md);它不是录制入口,也不是 ros2-viser。

Isaac 实体位姿 / 关节转储助手(check-isaac-pose、check-robot-status)需要仿真以及 composer README 所写的 /get_entity_state。

完整 CLI 参数列表:robot_action_composer 参考。

流水线下一步

录制是叠在这条队列上的 extra:同一套 YAML task_queue,再加上 LeRobot 插件。继续看 LeRobot 录制与导出。