OCS2 WBC Controller¶
Whole-body MPC — 全身控制 (ocs2_wbc_controller) — for wheeled dual-arm robots, using ocs2_wheel_humanoid.
Access Required
controller/ocs2_wbc_controller in arms_ros2_control is a private submodule (ocs2-wbc-controller). Topics, FSM values, and launch names are in that package README after access. The in-tree loader on the public side is full_body.launch.py.
Role¶
Unified 全身控制 stack: one
ocs2_wbc_controllerinstead of arm MPC plus separate body/head joint controllersMotion library:
ocs2_wheel_humanoid(see ocs2-humanoid)
Contrast with 分体控制: OCS2 Arm Controller + Basic Joint Controller via split_body.launch.py.
Launch (from ocs2_arm_controller)¶
There is no public README listing a ros2 launch ocs2_wbc_controller … entry point. The in-tree path that loads this controller is:
ros2 launch ocs2_arm_controller full_body.launch.py robot:=<robot>
full_body.launch.py (launch_mode full_body) spawns ocs2_wbc_controller when the robot’s controller_manager type is ocs2_wbc_controller/Ocs2WbcController.
The same file declares type and create_robot_profile_launch_arguments() (left_type / right_type, use_profile_eef). End-effectors: OCS2 Arm Controller and robot_common_launch. Planning URDF is the same xacro path (planning_urdf_path); static urdf/{robot}_{robot_type}.urdf lookup was removed.
split_body.launch.py is the split (分体) path; whole-body control uses full_body.launch.py.
Public command surface¶
Extra FSM states stay in the private package README after access. From public sources, 全身 uses:
Cartesian body / head:
/body_target*,/head_target*(arms_target_manager)/mode_command(std_msgs/String) and/ocs2_wbc_controller/current_state(WbcCurrentState)Shared action / service types:
arms_ros2_control_msgsREADME
Whole-body (WBC) availability
These topics need ocs2_wbc_controller and that robot’s 全身 launch/config. Default mock demos (demo.launch.py) and 分体 (split_body.launch.py) do not imply they are present. Capability bits (WbcCapability) are machine-dependent. Public Taku mock uses split_body.launch.py robot:=taku (arm MPC + body/head basic + grippers), not WBC. full_body.launch.py robot:=taku needs the private WBC submodule; shipping config/ocs2/fixed_base_tcp.info is not enough. When that config and the private module are present, Taku full-body default headMode is HEAD_GAZE (gaze on head_camera_mid_optical_frame); target_manager.yaml has enable_head_control: false. Head 6D tracking (HEAD_TRACKING) is only there when head_tracking_ee_enabled is true. Taku body-relative rest is around x≈−0.21, not Bot2 [0, 0.25]. Full tables: FSM and Topics.