ROS2 robot控制学习(一)
controller_position.yaml使用说明
- ROS 2 的 controller_manager 用途
- 典型工作流程示例
- 关键服务与话题
- 扩展功能
- JointTrajectoryController 参数详解
- 基本参数
- 轨迹参数
- 插值参数
- 前馈控制
- 代码示例
- 动态参数
- 调试参数
- ForwardCommandController 概述
- 参数解释
- `joints`
- `interface`
- `allow_nonzero_velocity_at_startup`
- `state_publish_rate`
- `command_joint_topic`
- `use_node_name_as_namespace`
- 配置示例
- 使用流程
- 注意事项
- joint_state_broadcaster
- 启动节点
- 订阅与发布的Topic
- 参数配置
- 与控制器管理器集成
- 调试与验证
- 注意事项
- 示例数据流
ROS 2 的 controller_manager 用途
controller_manager
是 ROS 2 中用于管理和协调机器人控制器的核心组件,主要功能包括动态加载、启动、停止和卸载控制器,以及对控制器生命周期的统一管理。以下是其核心用途:
-
动态加载与卸载控制器
允许在运行时根据需要加载或卸载控制器插件(如 PID 控制器、力控控制器等),无需重启整个系统。控制器以插件形式实现,通过pluginlib
动态加载。 -
生命周期管理
提供对控制器的启动(start
)、停止(stop
)、配置(configure
)等状态切换功能。控制器需遵循controller_interface::ControllerInterface
接口规范。 -
多控制器协调
支持同时运行多个控制器,并通过资源管理避免冲突(如同一关节被多个控制器控制)。controller_manager
会检查控制器的硬件资源占用情况。 -
硬件接口代理
作为控制器与硬件抽象层(hardware_interface
)之间的桥梁,将控制器的输出传递给硬件,并将硬件状态反馈给控制器。
典型工作流程示例
- 加载控制器
通过服务调用动态加载控制器插件:
ros2 service call /controller_manager/load_controller controller_manager_msgs/srv/LoadController "{name: 'joint_state_controller'}"
- 启动控制器
启动已加载的控制器:
ros2 service call /controller_manager/switch_controller controller_manager_msgs/srv/SwitchController "{start_controllers: ['joint_state_controller'], strictness: 1}"
- 配置文件示例
在 YAML 文件中定义控制器参数:
joint_state_controller:type: joint_state_controller/JointStateControllerpublish_rate: 50
关键服务与话题
-
服务接口
/controller_manager/load_controller
/controller_manager/switch_controller
/controller_manager/unload_controller
-
状态反馈
通过/controller_manager/list_controllers
服务可查询当前运行的控制器列表及其状态。
扩展功能
-
实时性支持
与rclcpp_lifecycle
结合,支持实时控制循环的优先级配置。 -
ROS 2 Control 集成
在ros2_control
框架中,controller_manager
是核心节点,负责将控制器与RobotHardware
连接。 -
参数动态重配置
支持通过rclcpp::Parameter
在运行时调整控制器参数。
JointTrajectoryController 参数详解
JointTrajectoryController
是 ROS2 中用于控制关节轨迹的核心控制器,常用于机械臂等多关节系统的运动控制。以下是其配置参数的详细说明:
基本参数
joints:- joint1- joint2
- joints:必需参数,指定控制器管理的关节名称列表。每个名称必须与 URDF 中定义的关节一致。
interface_name: position
- interface_name:指定控制接口类型,可选值包括:
position
:位置控制(默认)velocity
:速度控制effort
:力/力矩控制
轨迹参数
state_publish_rate: 50.0
- state_publish_rate:控制器状态发布频率(Hz),默认 50Hz。
action_monitor_rate: