当前位置: 首页 > news >正文

Ros2_control浅析——一个机器人开发通用框架的结构(1)

引言:

最近在开发一个送餐机器人,但是在电机和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

http://www.hskmm.com/?act=detail&tid=24207

相关文章:

  • 图的计数问题没做
  • 11_linux镜像下载
  • CF2152 Squarepoint Challenge (Codeforces Round 1055, Div. 1 + Div. 2) 游记
  • 框架系统在自然语言处理深度语义分析中的作用、挑战与未来展望 - 实践
  • 10_windows11安装virtualbox
  • 9_windows11安装docker
  • 英语语法填空
  • 从涌现到戏台:AI元人文构想的演进历程
  • 题解:P14124 [SCCPC 2021] Nihongo wa Muzukashii Desu
  • QBXT2025S Day3题
  • python+vue在线视频课程学习系统设计(源码+文档+调试+基础修改+答疑) - 详解
  • pdf翻译
  • 【做题记录】CF2600左右有趣的思维题1
  • 【Android】RuntimeShader 应用
  • 【Rive】rive-android源码分析
  • zkSync Era主网上线:首个zkEVM全面开放的技术突破
  • Microsoft Access SQL 查询中的通配符 - 详解
  • 洛谷P11738 [集训队互测 2015] 未来程序改
  • mcp 面试题
  • 【开题答辩过程】以《基于SpringBoot+Vue+uni-app的智慧校园服务系统的设计与搭建》为例,不会开题答辩的可能进来看看
  • 6_什么是知识图谱
  • 微信ipad协议个微机器人开发API
  • 学习方法
  • ai提交消息常用的 chore,原来是个单词(琐事/零散任务)+约定,用于非功能性提交
  • 微信开发之朋友圈自动评论的技术实现
  • 多项式定理
  • The Brain in Your Toes: Can Tiny Foot Movements Boost BDNF and Sharpen the Mind? - 教程
  • 详细介绍:Kafka09-速答-尚硅谷
  • day15 课程(继承 )
  • node菜单服务引起的后台异常表象到运维释放从库的数据库连接及驱动修改配置,重新部署生效