ROS2 Control分析讲解
ROS2 Control
文章目录
- 前言
- 简述
- 组成
- 安装
- 框架
- Controller Manager
- Resource Manager
- Controllers
- User Interfaces
- Hardware Components
- URDF中的硬件描述
- 机器人运行框架
- 总结
前言
ros2_control是一个使用(ROS 2)进行机器人(实时)控制的框架。它的软件包重写了 ROS (机器人操作系统)中使用的ros_control软件包。ros2_control的目标是简化新硬件的集成并克服一些缺点。1
简述
组成
ros2_control框架由以下Github仓库组成:
- ros2_control - 框架的主要接口和组件
- ros2_controllers - 广泛使用的控制器,例如前向命令控制器、关节轨迹控制器、差动驱动控制器
- control_toolbox - 控制器使用的一些广泛使用的控制理论实现(例如PID)
- realtime_tools - 用于实时支持的通用工具包,例如,实时缓冲区和发布器
- control_msgs - 常用消息接口
此外,还有以下(未发布)与入门和项目管理相关的软件包:
- ros2_control_demos - 用于平滑启动的常见用例的示例实现
- roadmap - 项目的规划和设计文档
安装
二进制安装:
sudo apt-get install
ros-$ROS_DISTRO-ros2-control \
ros-$ROS_DISTRO-ros2-controllers \
ros-$ROS_DISTRO-controller-manager
源码编译安装:
mkdir -p ~/ros2_ws/src
mkdir -p ~/ros2_ws/deps
cd ~/ros2_ws/src
git clone https://github.com/ros-controls/ros2_controllers.git -b $ROS_DISTRO
cd ~/ros2_ws
vcs import deps < ros2_controllers.$ROS_DISTRO.reposcolcon build
框架
ros2_control框架的源代码可以在ros2_control和ros2_controllers GitHub存储库中找到。下图显示了ros2_control框架的架构。

Controller Manager
Controller Manager (CM) 连接控制器和ros2_control框架的硬件抽象端。它也是用户通过ROS服务的入口点。CM实现了一个没有执行器的节点,以便可以将其集成到自定义设置中。但是,通常建议使用 controller_manager 包中的ros2_control_node文件中实现的默认节点设置。
一方面,CM管理(例如加载、激活、停用、卸载)控制器及其所需的接口。另一方面,它可以(通过资源管理器)访问硬件组件,即它们的接口。控制器管理器匹配所需接口和提供的接口,在启用时授予控制器对硬件的访问权限,或者在存在访问冲突时报告错误。
控制循环的执行由CM的 update() 方法管理。它从硬件组件读取数据,更新所有活动控制器的输出,并将结果写入组件。
Resource Manager
Resource Manager (RM)为ros2_control框架抽象物理硬件及其驱动程序(称为硬件组件)。RM使用 pluginlib 库加载组件,管理它们的生命周期以及组件的状态和命令接口。由RM提供的抽象允许重用实现的硬件组件,例如,机器人和夹具,没有任何实现,以及用于状态和命令接口的灵活硬件应用,例如,用于电机控制和编码器阅读的单独硬件/通信库。
在控制循环执行中,RM的 read() 和 write() 方法处理与硬件组件的通信。
Controllers
ros2_control框架中的控制器基于控制理论。它们将参考值与测量输出进行比较,并根据此误差计算系统的输入。控制器是从ControllerInterface(ros2_control中的 controller_interface 包)派生的对象,并使用 pluginlib -library导出为插件。有关控制器的示例,请查看ros2_controllers存储库中的ForwardCommandController实现。控制器的生命周期基于LifecycleNode类,它实现了LifecycleNode设计文档中描述的状态机机制。
User Interfaces
用户使用Controller Manager的服务与ros2_control框架进行交互。有关服务及其定义的列表,请查看 controller_manager_msgs 包中的 srv 文件夹。
虽然服务调用可以直接从命令行或通过节点使用,但存在与 ros2 cli 集成的用户友好的 Command Line Interface (CLI)。它支持自动完成,并提供一系列常用命令。基本命令是 ros2 control 。有关CLI功能的描述,请参阅Command Line Interface (CLI) documentation.。
Hardware Components
硬件组件实现与物理硬件的通信,并在ros2_control框架中表示其抽象。组件必须使用 pluginlib-library导出为插件。资源管理器动态加载这些插件并管理它们的生命周期。
有三种基本类型的组件:
System
复杂(多自由度)机器人硬件,如工业机器人。致动器组件之间的主要区别是可以使用复杂的传输,如人形机器人的手所需。此组件具有阅读和写入功能。当只有一个到硬件的逻辑通信信道时使用它(例如,KUKA-RSI)。
Sensor
机器人硬件用于感知其环境。传感器部件与关节(例如,编码器)或链路(例如,力-扭矩传感器)。此组件类型仅具有阅读功能。
Actuator
简单的(1自由度)机器人硬件,如电机,阀门等。执行器的实现仅与一个关节相关。此组件类型具有阅读和写功能。阅读如果不可能,则不是强制性的(例如,直流电机控制与Arduino板)。致动器类型也可以用于多自由度机器人,如果其硬件允许模块化设计,例如,与每个电机独立进行CAN通信。
URDF中的硬件描述
ros2_control框架在机器人的URDF文件中使用 <ros2_control> -标签来描述其组件,即,硬件设置。选择的结构允许将多个 xacro -宏一起跟踪到一个宏中而不进行任何更改。下面的示例显示了具有2-DOF(RRBot)、外部1-DOF力-扭矩传感器和外部控制的1-DOF并联夹持器作为其末端执行器的位置控制机器人。有关更多示例和详细说明,请查看ros2_control_demos site 与ROS 2 Control Components URDF Examples design document设计文档。
<ros2_control name="RRBotSystemPositionOnly" type="system"><hardware><plugin>ros2_control_demo_hardware/RRBotSystemPositionOnlyHardware</plugin><param name="example_param_write_for_sec">2</param><param name="example_param_read_for_sec">2</param></hardware><joint name="joint1"><command_interface name="position"><param name="min">-1</param><param name="max">1</param></command_interface><state_interface name="position"/></joint><joint name="joint2"><command_interface name="position"><param name="min">-1</param><param name="max">1</param></command_interface><state_interface name="position"/></joint>
</ros2_control>
<ros2_control name="RRBotForceTorqueSensor1D" type="sensor"><hardware><plugin>ros2_control_demo_hardware/ForceTorqueSensor1DHardware</plugin><param name="example_param_read_for_sec">0.43</param></hardware><sensor name="tcp_fts_sensor"><state_interface name="force"/><param name="frame_id">rrbot_tcp</param><param name="min_force">-100</param><param name="max_force">100</param></sensor>
</ros2_control>
<ros2_control name="RRBotGripper" type="actuator"><hardware><plugin>ros2_control_demo_hardware/PositionActuatorHardware</plugin><param name="example_param_write_for_sec">1.23</param><param name="example_param_read_for_sec">3</param></hardware><joint name="gripper_joint "><command_interface name="position"><param name="min">0</param><param name="max">50</param></command_interface><state_interface name="position"/><state_interface name="velocity"/></joint>
</ros2_control>
机器人运行框架
要运行ros2_control框架,请执行以下操作。示例文件可以在ros2_control_demos 仓库中找到。
- 使用控制器管理器和两个控制器的配置创建一个YAML文件。(Example configuration for RRBot)
- 使用所需的
<ros2_control>标签扩展机器人的URDF描述。建议使用宏文件(xacro)而不是纯URDF。(Example URDF for RRBot) - 创建一个启动文件以使用控制器管理器启动节点。您可以使用默认的ros2_control节点(推荐)或将控制器管理器集成到软件堆栈中。(Example launch file for RRBot)
总结
本文对于ros2_control做了总体的介绍,后续会做一个真实机器人controller driver的实现,用于针对不同的硬件做控制驱动。
Ros2 control Getting Started ros.org ↩︎
相关文章:
ROS2 Control分析讲解
ROS2 Control 文章目录 前言简述组成安装 框架Controller ManagerResource ManagerControllersUser Interfaces Hardware ComponentsURDF中的硬件描述机器人运行框架 总结 前言 ros2_control是一个使用(ROS 2)进行机器人(实时)控…...
Java TCP(一对一)聊天简易版
客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…...
2.4 C语言之运算符
2.4 C语言之运算符 一、算术运算符二、关系运算符三、逻辑运算符四、自增自减运算符五、按位运算符六、赋值运算符七、条件表达式八、运算符优先级与求值次序 一、算术运算符 二元算术运算符包括:(加)、-(减)、*(乘)、/(除)、%(取模) 整数除法会截断结果中的小数部…...
做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157
----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度,将进度大于60%的类别输出。 注: 播放进度播放时长视频时长*100%,当播放时长大于视频时长时,播放进度均记为100%。 结果保留两位小数,并按播放进…...
微信小程序map视野发生改变时切换定位点
<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…...
javaweb搭配ajax和json
ajax一般用来前端界面与后端界面交互使用。数据格式一般使用json,优点是便于对象与字符串的转化。 1.不适用json对象封装。 jsp: <script>$.ajax({url: "/LoginServlet",data: {"name":name, "pwd":password},dataType: &qu…...
VS2022 将项目打包,导出为exe运行
我有一个在 VS2022 上开发的程序,基于.net 6框架, 想打包成 .exe程序,以在另一个没有安装VS的机器上运行,另一个机器是Win7系统,上面安装了.net 6框架。 虽然网上很多教程,需要安装Project Installer,配置A…...
【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试【DP】2023C-分班【欧弟算法】全网注释最详细分类最全的华为OD真题题解
文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前…...
pr模板哪个网站好?免费Pr模板视频素材下载网站 Prmuban.com
pr模板哪个网站好?哪里可以下载免费的pr模板视频素材,PR模板网(Prmuban.com)影视后期制作模板视频剪辑素材资源网站。 包含PR模板、PR插件、PR预设、MOGRT、LUT、转场特效、音乐素材、音效素材等,更好的剪辑师必备资源…...
【论文阅读】LoRA: Low-Rank Adaptation of Large Language Models
code:GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models" 做法: 把预训练LLMs里面的参数权重给冻结;向transformer架构中的每一层,注入可训练的…...
MybatisPlus的分页插件
PaginationInnerInterceptor 此插件是核心插件,目前代理了 Executor#query 和 Executor#update 和 StatementHandler#prepare 方法。 在SpringBoot环境中配置方式如下: /*** author giserDev* description 配置分页插件、方言、mapper包扫描等* date 2023-12-13 …...
保障网络安全:了解威胁检测和风险评分的重要性
在当今数字时代,网络安全问题变得愈发突出,而及时发现和迅速应对潜在威胁成为保障组织信息安全的首要任务。令人震惊的是,根据2023年的数据,平均而言,检测到一次网络入侵的时间竟然长达207天。这引起了对安全策略和技术…...
3D摄影棚布光:Set A Light 3D Studio
Set A Light 3D Studio是一款专业的灯光模拟软件,旨在帮助摄影师和电影制片人在电脑上进行虚拟灯光布置和场景模拟,以实现更加精准和高质量的拍摄效果。该软件提供了丰富的灯光和场景模型,支持灵活调整光源位置、强度、颜色和效果等参数&…...
#HarmonyOS:应用的包名配置--应用图标和标签配置--配置链接
配置相关 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/application-component-configuration-stage-0000001478340869-V2 应用的包名配置 应用需要在工程的AppScope目录下的app.json5配置文件中配置bundleName标签,该标签用于标识应用的唯…...
docker小白第三天
docker小白第三天 docker为什么会比虚拟机快 1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在CPU、内存利用率上docker将会在效率上有明显优势。 2、dock…...
FFmpegd的AVBSF
本章主要介绍AVBSF 文章目录 结构体定义对外函数常见的过滤器 从名字我们可以知道这是个码流过滤器,我们最常用的是一个叫做h264_mp4toannexb_bsf的东东 这个过滤器的作用是把h264以MP4格式的NALU转换为annexb(0x000001) const AVBitStreamF…...
深圳三男子写字楼内吸烟被罚,快用富维AI神器,实时监控防火灾
最近,在深圳,一专项控烟督查组在福田区新华保险大厦发现三名男子在写字楼内楼道违法吸烟,并对其进行了现场处罚。根据《控烟条例》,这类室内区域严禁吸烟,但人们往往忽视这一规定,从而引发潜在的安全风险。…...
有哪些已经上线的vue商城项目?
前言 下面是一些商城的项目,需要练手的同学可以挑选一些来练,废话少说,让我们直接开始正题~~ 1、newbee-mall-vue3-app 是一个基于 Vue 3 和 TypeScript 的电商前端项目,它是 newbee-mall 项目的升级版。该项目包含了商品列表、…...
Nginx服务器配置SSL证书
本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书,具体包括下载和上传证书文件,在Nginx上配置证书文件、证书链和证书密钥等参数,以及安装证书后结果的验证。成功配置SSL证书后,您将能够通过HTTPS加密通道安全访问Nginx服务器…...
【JVM从入门到实战】(六)类加载器的双亲委派机制
一、双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢? 方式1:使用Class.forName方法,使用当前类的类加载器去加载指定的类。 方式2:获取到类加载器,通过类加载器的loadClass方法指定某个类加载器加载。 …...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
一、WebRTC与智能硬件整合趋势 随着物联网和实时通信需求的爆发式增长,WebRTC作为开源实时通信技术,为浏览器与移动应用提供免插件的音视频通信能力,在智能硬件领域的融合应用已成必然趋势。智能硬件不再局限于单一功能,对实时…...
Redis专题-实战篇一-基于Session和Redis实现登录业务
GitHub项目地址:https://github.com/whltaoin/redisLearningProject_hm-dianping 基于Session实现登录业务功能提交版本码:e34399f 基于Redis实现登录业务提交版本码:60bf740 一、导入黑马点评后端项目 项目架构图 1. 前期阶段2. 后续阶段导…...
