ros2_control是使用(ros2)对机器人进行(实时)控制的框架。
它的包是ros(机器人操作系统)中使用的ros_control包的重写。
ros2_control的目标是简化新硬件的集成并克服一些缺点。
如果您不熟悉控制理论,请对其有所了解(例如,在维基百科上),以熟悉本手册中使用的术语。
体系结构
Controller Manager
控制器管理器(CM)连接ros2_control框架的控制器和硬件抽象端。
它还作为用户通过ROS服务的入口点。
CM实现了一个没有执行器的节点,因此可以将其集成到自定义设置中。
不过,对于标准用户,建议使用controller_manager包中ros2_control_node文件中实现的默认节点设置。
本手册假定您使用此默认节点设置。
一方面,CM管理(例如,加载、激活、停用、卸载)控制器和所需的接口。
另一方面,它可以访问硬件组件(通过资源管理器),即它们的接口。
控制器管理器匹配所需和提供的接口,在激活时为控制器提供硬件访问权限,或在存在访问冲突时报告错误。
控制循环的执行由CM的update()方法管理。
该方法从硬件组件读取数据,更新所有活动控制器的输出,并将结果写入组件。
Resource Manager
资源管理器(RM)为ros2_control框架抽象物理硬件及其驱动程序(称为硬件组件)。
RM使用pluginlib库加载组件,管理其生命周期以及组件的状态和命令界面。
RM提供的这种抽象使已实现的硬件组件(例如机器人和抓取器)可以重用,而无需对状态和命令接口进行任何实现和灵活的硬件应用,例如用于电机控制和编码器读取的独立硬件/通信库。
在控制循环执行中,RM的read()和write()方法处理与硬件组件的通信。
Controllers
ros2_control框架中的控制器具有控制理论中定义的相同功能。
他们将参考值与测量的输出进行比较,并基于此错误计算系统的输入(有关更多详细信息,请访问Wikipedia)。
这些控件是从ControllerInterface(ros2_control中的controller_interface包)派生的对象,并使用pluginlib库导出为插件。
例如,ros2_controllers存储库中的控制器上检查ForwardCommandController实现。
控制器的生命周期基于实现状态机的LifecycleNode类,如节点生命周期设计文档中所述。
执行控制循环时,将调用 update()
方法。该方法可以访问最新的硬件状态,并使控制器能够写入硬件的命令接口。
User Interfaces
用户使用Controller Manager的服务与ros2_control框架交互。
有关服务及其定义的列表,请检查controller_manager_msgs包中的srv文件夹。
虽然可以直接从命令行或通过节点使用服务调用,但存在一个用户友好的命令行界面(CLI),它与ros2 CLI集成。
这支持自动完成,并提供一系列常用命令。
基本命令是ros2控件。
有关CLI功能的描述,请参阅自述文件。
ros2controlcli包的md文件。