OCS2 WBC Controller

全身 MPC — 全身控制(ocs2_wbc_controller)— 面向轮式双臂,使用 ocs2_wheel_humanoid。

需要访问权限

arms_ros2_control 中的 controller/ocs2_wbc_controller 是私有子模块(ocs2-wbc-controller)。话题、FSM 取值和 launch 名在开通后的包 README 里。公开侧的仓内加载器是 full_body.launch.py。

作用

  • 统一的全身控制栈:一个 ocs2_wbc_controller,而不是手臂 MPC 加独立的身体/头关节控制器

  • ocs2-humanoid

对照 分体控制:OCS2 Arm Controller + Basic Joint Controller,通过 split_body.launch.py。

启动(来自 ocs2_arm_controller)

公开 README 没有列出 ros2 launch ocs2_wbc_controller … 入口。仓库内加载该控制器的路径是:

ros2 launch ocs2_arm_controller full_body.launch.py robot:=<robot>

当机器人 controller_manager 的 type 为 ocs2_wbc_controller/Ocs2WbcController 时,full_body.launch.py(launch_mode 为 full_body)会拉起 ocs2_wbc_controller。

同一文件还声明 type 和 create_robot_profile_launch_arguments()(left_type / right_type、use_profile_eef)。末端:OCS2 Arm Controller 与 robot_common_launch。规划 URDF 同样走 xacro (planning_urdf_path);静态 urdf/{robot}_{robot_type}.urdf 查找已移除。

split_body.launch.py 是分体路径;全身控制用 full_body.launch.py。

公开指令面

额外 FSM 状态开通后见私有软件包 README。公开来源里,全身使用:

  • 身体 / 头部笛卡尔:/body_target*、/head_target*(arms_target_manager)

  • /mode_command(std_msgs/String)以及 /ocs2_wbc_controller/current_state(WbcCurrentState)

  • 共用的 Action / Service 类型:arms_ros2_control_msgs README

全身控制(WBC)可用性

这些话题需要 ocs2_wbc_controller 以及该机型的全身启动/配置。默认 mock 演示(demo.launch.py)和分体(split_body.launch.py)并不表示它们可用。能力位(WbcCapability)取决于机型。公开的 Taku mock 使用 split_body.launch.py robot:=taku(臂 MPC + 身体/头 basic + 夹爪),不是 WBC。full_body.launch.py robot:=taku 需要私有 WBC 子模块;描述里有 config/ocs2/fixed_base_tcp.info 并不够。当该配置和私有模块都在时,Taku 全身默认 headMode 是 HEAD_GAZE(注视 head_camera_mid_optical_frame);target_manager.yaml 里 enable_head_control: false。头部 6D 跟踪(HEAD_TRACKING)只有 head_tracking_ee_enabled 为真时才有。Taku 身体相对静止位大约在 x≈−0.21,不是 Bot2 的 [0, 0.25]。完整表格:FSM 与话题。