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

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_controlros2_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框架中的控制器基于控制理论。它们将参考值与测量输出进行比较,并根据此误差计算系统的输入。控制器是从ControllerInterfaceros2_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 仓库中找到。

  1. 使用控制器管理器和两个控制器的配置创建一个YAML文件。(Example configuration for RRBot)
  2. 使用所需的 <ros2_control> 标签扩展机器人的URDF描述。建议使用宏文件(xacro)而不是纯URDF。(Example URDF for RRBot)
  3. 创建一个启动文件以使用控制器管理器启动节点。您可以使用默认的ros2_control节点(推荐)或将控制器管理器集成到软件堆栈中。(Example launch file for RRBot)

总结

本文对于ros2_control做了总体的介绍,后续会做一个真实机器人controller driver的实现,用于针对不同的硬件做控制驱动。


  1. Ros2 control Getting Started ros.org ↩︎

相关文章:

ROS2 Control分析讲解

ROS2 Control 文章目录 前言简述组成安装 框架Controller ManagerResource ManagerControllersUser Interfaces Hardware ComponentsURDF中的硬件描述机器人运行框架 总结 前言 ros2_control是一个使用&#xff08;ROS 2&#xff09;进行机器人&#xff08;实时&#xff09;控…...

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语言之运算符 一、算术运算符二、关系运算符三、逻辑运算符四、自增自减运算符五、按位运算符六、赋值运算符七、条件表达式八、运算符优先级与求值次序 一、算术运算符 二元算术运算符包括&#xff1a;(加)、-(减)、*(乘)、/(除)、%(取模) 整数除法会截断结果中的小数部…...

做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157

----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度&#xff0c;将进度大于60%的类别输出。 注&#xff1a; 播放进度播放时长视频时长*100%&#xff0c;当播放时长大于视频时长时&#xff0c;播放进度均记为100%。 结果保留两位小数&#xff0c;并按播放进…...

微信小程序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&#xff0c;优点是便于对象与字符串的转化。 1.不适用json对象封装。 jsp: <script>$.ajax({url: "/LoginServlet",data: {"name":name, "pwd":password},dataType: &qu…...

VS2022 将项目打包,导出为exe运行

我有一个在 VS2022 上开发的程序&#xff0c;基于.net 6框架, 想打包成 .exe程序&#xff0c;以在另一个没有安装VS的机器上运行&#xff0c;另一个机器是Win7系统&#xff0c;上面安装了.net 6框架。 虽然网上很多教程&#xff0c;需要安装Project Installer&#xff0c;配置A…...

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试【DP】2023C-分班【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 幼儿园两个班的小朋友在排队时混在了一起&#xff0c;每位小朋友都知道自己是否与前…...

pr模板哪个网站好?免费Pr模板视频素材下载网站 Prmuban.com

pr模板哪个网站好&#xff1f;哪里可以下载免费的pr模板视频素材&#xff0c;PR模板网&#xff08;Prmuban.com&#xff09;影视后期制作模板视频剪辑素材资源网站。 包含PR模板、PR插件、PR预设、MOGRT、LUT、转场特效、音乐素材、音效素材等&#xff0c;更好的剪辑师必备资源…...

【论文阅读】LoRA: Low-Rank Adaptation of Large Language Models

code&#xff1a;GitHub - microsoft/LoRA: Code for loralib, an implementation of "LoRA: Low-Rank Adaptation of Large Language Models" 做法&#xff1a; 把预训练LLMs里面的参数权重给冻结&#xff1b;向transformer架构中的每一层&#xff0c;注入可训练的…...

MybatisPlus的分页插件

PaginationInnerInterceptor 此插件是核心插件,目前代理了 Executor#query 和 Executor#update 和 StatementHandler#prepare 方法。 在SpringBoot环境中配置方式如下&#xff1a; /*** author giserDev* description 配置分页插件、方言、mapper包扫描等* date 2023-12-13 …...

保障网络安全:了解威胁检测和风险评分的重要性

在当今数字时代&#xff0c;网络安全问题变得愈发突出&#xff0c;而及时发现和迅速应对潜在威胁成为保障组织信息安全的首要任务。令人震惊的是&#xff0c;根据2023年的数据&#xff0c;平均而言&#xff0c;检测到一次网络入侵的时间竟然长达207天。这引起了对安全策略和技术…...

3D摄影棚布光:Set A Light 3D Studio

Set A Light 3D Studio是一款专业的灯光模拟软件&#xff0c;旨在帮助摄影师和电影制片人在电脑上进行虚拟灯光布置和场景模拟&#xff0c;以实现更加精准和高质量的拍摄效果。该软件提供了丰富的灯光和场景模型&#xff0c;支持灵活调整光源位置、强度、颜色和效果等参数&…...

#HarmonyOS:应用的包名配置--应用图标和标签配置--配置链接

配置相关 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/application-component-configuration-stage-0000001478340869-V2 应用的包名配置 应用需要在工程的AppScope目录下的app.json5配置文件中配置bundleName标签&#xff0c;该标签用于标识应用的唯…...

docker小白第三天

docker小白第三天 docker为什么会比虚拟机快 1、docker有着比虚拟机更少的抽象层。不需要Hypervisor实现硬件资源虚拟化&#xff0c;运行在docker容器上的程序直接使用的都是实际物理机的硬件资源&#xff0c;因此在CPU、内存利用率上docker将会在效率上有明显优势。 2、dock…...

FFmpegd的AVBSF

本章主要介绍AVBSF 文章目录 结构体定义对外函数常见的过滤器 从名字我们可以知道这是个码流过滤器&#xff0c;我们最常用的是一个叫做h264_mp4toannexb_bsf的东东 这个过滤器的作用是把h264以MP4格式的NALU转换为annexb&#xff08;0x000001&#xff09; const AVBitStreamF…...

深圳三男子写字楼内吸烟被罚,快用富维AI神器,实时监控防火灾

最近&#xff0c;在深圳&#xff0c;一专项控烟督查组在福田区新华保险大厦发现三名男子在写字楼内楼道违法吸烟&#xff0c;并对其进行了现场处罚。根据《控烟条例》&#xff0c;这类室内区域严禁吸烟&#xff0c;但人们往往忽视这一规定&#xff0c;从而引发潜在的安全风险。…...

有哪些已经上线的vue商城项目?

前言 下面是一些商城的项目&#xff0c;需要练手的同学可以挑选一些来练&#xff0c;废话少说&#xff0c;让我们直接开始正题~~ 1、newbee-mall-vue3-app 是一个基于 Vue 3 和 TypeScript 的电商前端项目&#xff0c;它是 newbee-mall 项目的升级版。该项目包含了商品列表、…...

Nginx服务器配置SSL证书

本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书&#xff0c;具体包括下载和上传证书文件&#xff0c;在Nginx上配置证书文件、证书链和证书密钥等参数&#xff0c;以及安装证书后结果的验证。成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问Nginx服务器…...

【JVM从入门到实战】(六)类加载器的双亲委派机制

一、双亲委派机制 在Java中如何使用代码的方式去主动加载一个类呢&#xff1f; 方式1&#xff1a;使用Class.forName方法&#xff0c;使用当前类的类加载器去加载指定的类。 方式2&#xff1a;获取到类加载器&#xff0c;通过类加载器的loadClass方法指定某个类加载器加载。 …...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

通过MicroSip配置自己的freeswitch服务器进行调试记录

之前用docker安装的freeswitch的&#xff0c;启动是正常的&#xff0c; 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

轻量级Docker管理工具Docker Switchboard

简介 什么是 Docker Switchboard &#xff1f; Docker Switchboard 是一个轻量级的 Web 应用程序&#xff0c;用于管理 Docker 容器。它提供了一个干净、用户友好的界面来启动、停止和监控主机上运行的容器&#xff0c;使其成为本地开发、家庭实验室或小型服务器设置的理想选择…...

动态规划-1035.不相交的线-力扣(LeetCode)

一、题目解析 光看题目要求和例图&#xff0c;感觉这题好麻烦&#xff0c;直线不能相交啊&#xff0c;每个数字只属于一条连线啊等等&#xff0c;但我们结合题目所给的信息和例图的内容&#xff0c;这不就是最长公共子序列吗&#xff1f;&#xff0c;我们把最长公共子序列连线起…...