配置 ROS 2 控制器参数

控制器与驱动层参数写在哪里、如何查看,以及本栈如何区分仅启动 vs 运行时变更。逐参数表:控制器 ROS 2 参数。驱动层 <param> 表在各公开驱动页 — 驱动层。

话题列表和 FSM 整数值仍写在各控制器页面——本指南讲参数,以及若干控制器共用的机制。

参数写在哪里

位置

是什么

常见内容

{robot}_description/config/ros2_control/ros2_controllers.yaml

由 controller_manager 加载(与 common.yaml / {hardware}.yaml / 末端组合 / profile 的 control.patch 合并 — robot_common_launch)

控制器插件类型、joints、Home 构型、MoveL 限幅、夹爪力控键

ros2 param set / node CLI

运行中节点上的 ROS 2 参数 API

节点起来后,名称与 YAML 中相同

URDF / xacro <ros2_control> <param>

驱动层插件参数,不是 ros2 param

CAN 设备、话题名、initialize_commands_from_state、厂商 IP——插件加载时读取

{robot}_description/config/ocs2/*.info

OCS2 任务文件

baseFrame / eeFrame 默认值与 MPC 模型。不是 ROS 2 参数

OCS2 Arm Controller README 写的是 config/ocs2_arm_controller.yaml。在 arms_ros2_control 9a1da3ba 该目录只有 demo.rviz。机型取值在描述包 YAML(例如 cr5_description/.../ros2_controllers.yaml)。

arms_target_manager 还会读取 command/arms_target_manager/config/default.yaml,或机型的 config/ocs2/target_manager.yaml。

表上的 仅启动 / 运行时 标记与 arms_ros2_control #120 的公开控制器 README 一致(分支提交 e1b7a147;main 上的代码仍钉在 9a1da3ba)。该 PR 合并后,main 上的措辞相同。

查看运行中的取值

控制器插件是以控制器命名的 ROS 2 节点。启动后:

ros2 param list
ros2 param list /ocs2_arm_controller
ros2 param get /ocs2_arm_controller movel_duration
ros2 param get /left_gripper_controller force_threshold

多数驱动层 <param> 不会出现在 ros2 param list 上 — xacro 运行时已写入 /robot_description。部分公开驱动层插件也会把同名项 declare_parameter 成节点参数(ARX、HighTorque、Marvin、部分灵巧手);这些行在对应驱动页标为 运行时 — 驱动层。用 ros2 control list_hardware_interfaces 和 xacro/ros2_control/ 下的 xacro 确认插件。

仅启动 vs 运行时

YAML 中的值在控制器或驱动层插件启动时总会生效。之后 ros2 param set 会不会改行为,使用与包 README 相同的标记:

标记

含义

运行时

ros2 param set 无需重新加载即可被拾取。这些控制器对已文档化的键没有通用的 add_on_set_parameters_callback。Home / MoveJ / 腰部 duration / MoveL 在下一次进入匹配状态或收到匹配命令时用 get_parameter 重读。

仅启动

在 on_init / 构造 / 首次创建腰部规划器 / 硬件插件 on_init 时加载。改 YAML 或 xacro 后需要重新加载或重启。

未核实

已声明,但没有回调也没有清晰的重读路径。#120 的 README 没有把此前已文档化的键标成这一类。

这些运行时路径不是即时回调。

框架共性参数

Basic Joint Controller 与 OCS2 Arm Controller 共用同一套 ros2_control ControllerInterface / controller_manager 键。此处只列一次。各控制器表只保留包专有键。

Adaptive Gripper Controller 不用 joints:它声明单数 joint 并绑定 {joint}/position。arms_target_manager 是命令节点,不是 ControllerInterface。

参数

常见类型 / 默认值

含义

joints

string[]

命令/状态接口的关节名

update_rate

int(Basic Joint README 示例 1000;CR5 YAML 100)

Hz;常取 controller_manager 的值

command_interfaces

string[] / ["position"]

命令接口名。仅启动。OCS2 Arm 还用该集合判断位置 vs 力/MIX — 本栈中的 ros2_control。

state_interfaces

string[] / ["position", "velocity"]

状态接口名

command_prefix

string / 空

命令接口名的可选前缀

修改这些键需要卸载并重新加载控制器。

共用机制

若干控制器在 libraries/arms_controller_common/ 中共用的行为集中写在这里。MoveJ YAML 键写在 Basic Joint Controller 参数表(MoveJ 主页)。OCS2 Arm Controller README 的 FSM 是 HOME / HOLD / OCS2;源码会为规范命令 4 构造 StateMoveJ(有 lina_planning 时还有 IK MoveL),但 README 不把 MoveJ 当作一等模式。

运控分层(控制器 vs 驱动层,分体 vs 全身)仍见既有页面 — 术语对照、本栈中的 ros2_control、分体控制 vs 全身控制、驱动层。内部飞书运控架构图只是白板,此处不重绘。

/fsm_command 取值 3

/fsm_command 是 std_msgs/Int32。规范 MOVEJ 为 4。

当前运行的是

3 的含义

混合 OCS2 / WBC 栈(分体:OCS2 Arm Controller + 身体/头部 Basic Joint;全身:OCS2 WBC Controller)

机械臂 / WBC 节点上表示 OCS2。身体/头部的 Basic Joint 实例仍把 3 当作 MOVEJ。

独立运行的 Basic Joint Controller(包内 demo,无 OCS2 节点)

遗留 MOVEJ 别名(包 README)。请优先用 4。

向机械臂 / WBC 控制器发送 3 时表示 OCS2,不会进入 MOVEJ。完整整数表:FSM 与话题。

Home(StateHome)

Basic Joint Controller 与 OCS2 Arm Controller 都使用 arms_controller_common::StateHome。名称、默认值和何时生效见 #120 中的 arms_controller_common README。

参数

默认值

含义

home_1 … home_10

由 YAML 提供(必须有 home_1)

预设构型。仅启动(StateHome::init;之后不再重读)。

home_duration

3.0

插值时长(秒)。运行时(下次进入 HOME 或切换构型)。

home_interpolation_type

"linear"(auto_declare 与 Basic Joint README YAML)

"tanh" | "linear" | "doubles" | "none"(Home 没有 "servo")

home_tanh_scale

3.0

tanh 尺度

home_max_velocity / home_max_acceleration / home_max_jerk

2.0 / 4.0 / 20.0

限幅。运行时。写在共性 README;Basic Joint §3 YAML 示例未列出。

switch_command_base

100

HOME 构型切换。仅启动(构造时)。

OCS2 Arm 额外槽位 home_pos / rest_pos 写在该控制器自己的表里。