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 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_msgsREADME
全身控制(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 与话题。