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方法指定某个类加载器加载。 …...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
