使用 Basic Joint Controller

从 arms_ros2_control 运行关节位置控制器(HOME / HOLD / MOVEJ)— Basic Joint Controller(basic_joint_controller)。

权威来源

下列步骤和话题摘自 basic_joint_controller/README.md(及 README_zh.md)。

/fsm_command 是 std_msgs/Int32,不是 String。

在公开的 open-deploy-ws arx-lift2s 分支上,basic_joint_controller 出现在 README 的 colcon build --packages-up-to 列表中(仿真与真机)。Lift2S 的 分体 / 全身 在 ./quick_start.sh 中选择 — 见 ARX Lift 2S 和 分体控制 vs 全身控制。

前提条件

  • 工作空间中已有 arms_ros2_control(例如执行 ./init_repo.sh 之后的 open-deploy-ws)

  • 已编译该软件包:colcon build --packages-up-to basic_joint_controller --symlink-install

启动(README 演示)

source ~/open-deploy-ws/install/setup.bash   # or your workspace install/

ros2 launch basic_joint_controller demo.launch.py robot:=fiveages_w1
# Head only
ros2 launch basic_joint_controller demo.launch.py robot:=fiveages_w1 enable_body:=false
# Body only
ros2 launch basic_joint_controller demo.launch.py robot:=fiveages_w1 enable_head:=false

参数

默认值(README / launch)

robot

fiveages_w1

type

空(末端 / 拓扑;为空时不向 xacro 传 type)

hardware

mock_components (gz / isaac / mock_components)

enable_head / enable_body

true

此 demo 只声明 type,没有 left_type / right_type。左右不同末端在 OCS2 的 demo / split_body / full_body 上,见 robot_common_launch。

切换 FSM

ros2 topic pub --once /fsm_command std_msgs/msg/Int32 "data: 1"   # HOLD → HOME
ros2 topic pub --once /fsm_command std_msgs/msg/Int32 "data: 2"   # → HOLD
ros2 topic pub --once /fsm_command std_msgs/msg/Int32 "data: 4"   # HOLD → MOVEJ (canonical)

取值

动作(README)

1

HOME(仅能从 HOLD 进入)

2

HOLD(从 HOME / MOVEJ 进入)

4

MOVEJ(仅能从 HOLD 进入;与全身栈相同的规范值)

3

本控制器独立运行时为 MOVEJ;在混合 OCS2/WBC 栈上 3 表示 OCS2

MOVEJ 只能回到 HOLD(2)。完整表与 Home 构型 100+ 命令见 Basic Joint Controller。

在 MOVEJ 中命令关节

话题带控制器名称空间。README 示例:

ros2 topic pub --once /my_controller/target_joint_position \
  std_msgs/msg/Float64MultiArray "{data: [0.1, 0.2, 0.3]}"

类型是 std_msgs/Float64MultiArray,不是 sensor_msgs/JointState。可选轨迹:/{controller}/target_joint_trajectory(trajectory_msgs/JointTrajectory)。手 / 腰话题见参考页(README §5–6)。