引言:
最近在开发一个送餐机器人,但是在电机和ros2系统交互时犯了难,不知道该怎么写才能让系统架构清晰一些,后来了解到ros2社区有一个规范的开发框架,所以我会结合个人理解来分析一下这个架构,算是我的学习笔记吧,希望能够对您有帮助!
ros2_control是什么
ros2_control 是一个硬件无关的控制框架,用于抽象第三方解决方案(如 MoveIt2 和 Nav2 系统)的硬件和低级控制,它提供了一些接口来实现标准化的硬件抽象和控制流程。
有点像是cpp的库文件,让上层系统不必关心过多细节。它通过硬件接口插件与真实设备通信,并通过控制器将硬件状态发布为ROS2话题或将ROS2指令传递给硬件。
从而让上层系统不必关心底层硬件的实现,只需要使用ros2_control提供的接口,从而让上层的应用去调用来实现实际应用中的功能。
官方文档示例
这张图就展示了这个框架的核心思想——抽象硬件接口,方便上层软件的使用,实现软硬件解耦
然后是官网文档中的举例图,
可以看到客户端可以不用去考虑硬件方面的资源开销,从而最大化在实际客户端应用程序上花费的资源。可以直接拓展自己的控制器,或者通过自定义的第三方软件进行控制操作。
这个框架的源代码可以在以下两个仓库中找到:
https://github.com/ros-controls/ros2_control
https://github.com/ros-controls/ros2_controllers
这两个仓库里面包含了一些控制器的示例,可以本地克隆下来尝试一下。
官方文档给出的ros2_control框架的架构:
可以看到明显的分成了上下两个部分,两个部分之间连接处是Controller Manager(控制器管理器)和Resource Manager(资源管理器),下面来解析一下图中的概念。
架构解析:
控制器管理器(Controller Manager 简称CM)
可以看作是用户操作硬件的“调度中心”,它知道控制器需要的接口,也知道硬件提供的接口。它管理控制器及其所需接口,而且通过资源管理器访问硬件组件的接口,“承上启下”,可以这样理解。
用户或者上层系统在这个框架下无法直接操作控制器,通过Ros2提供的服务(services)和控制器管理器交互。
CM支持自定义的集成,原生的CM是不带执行器的,一个节点想要处理回调需要执行器(Executor)来运行。比如一个节点中使用rclcpp::spin(),本质上就是创建了一个默认的执行器,这样就可以触发节点对应的回调函数。将cm嵌入到你的执行器中后,就可以在你自己的节点中可以同时启动CM的服务,即个人节点和CM在同一个进程下运行,从而避免进程间的通信开销。
资源管理器(Resource Manager 简称RM)
RM所做的事情是将物理硬件及其驱动程序(一个完整可调用的硬件模组)抽象化成硬件组件(Hardware Components),将硬件组件以插件的形式嵌入到框架之中,并管理它们的生命周期和组件的状态
硬件组件(Hardware Components)
硬件组件是物理硬件的抽象化表示,主要分为以下三种类型:System、Actuator、Sersor。
System(系统组件):相当于一个组装好的部分,控制多个自由度(比如机械臂,灵巧手),细节在内部处理,ros2_control只关心关节位置和控制命令。
必须实现read()和write()操作(因为要明确状态和下达控制指令)。
Actuator(执行器组件):通常对应一个关节,比如一个电机或者一个推杆、阀门。
每个执行器之间独立通信,通过执行器之间的组合构建出高自由度的系统。
必须实现write(),read()是可选的。
Sensor(传感器组件):对应感知类的设备,比如IMU、摄像头、编码器,这些传感器类型的硬件,通常独立于执行器组件,因为获取到的外接信息的处理往往需要单独处理。
只有read(),对于感知设备读取即可。
本篇文章的参考来源:
ros2_control官方文档:https://control.ros.org/master/doc/getting_started/getting_started.html#architecture
《通过控制器访问硬件的设计文档》:https://github.com/ros-controls/roadmap/blob/master/design_drafts/hardware_access.md
ROSCon 2025 Workshop提供的ros2_control有关的幻灯片下载:https://control.ros.org/master/_downloads/facbcb9c9cc446bc58379564f481ee37/ROSCon2025-Workshop_Fun_with_Robot_Drivers.pdf