ROS2 Control分析讲解

news2024/11/25 6:13:27

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.repos

colcon 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 ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1310978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【亚马逊云科技】通过高性能低延迟对象存储 S3实现网站资源托管

本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 亚马逊云科技开发者社区, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言1 S3 介绍1.1 优点 2 使用步骤2.1 注册账户2.2 创建存储桶2.2.1 打开控制…

WEB服务器介绍

Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器连到服务器上并请求文件时&#xff0c;服务器将处理该请求并将文件发送到该浏览器上&#xff0c;附带的信息会告诉浏览器如何查看该文件&#xff0c;即文WEB服务器件类型。服务器使用HTTP进行信息交流&#xff0c…

springboot获取配置文件属性值

Value&#xff1a; 作用&#xff1a;属性注入&#xff0c;需要每个值上进行书写变量名 ConfigurationProperties 指定外部属性文件。在类上添加&#xff0c;常与ConfigurationProperties 配合使用

RK3568平台 OTA升级原理

一.前言 在迅速变化和发展的物联网市场&#xff0c;新的产品需求不断涌现&#xff0c;因此对于智能硬件设备的更新需求就变得空前高涨&#xff0c;设备不再像传统设备一样一经出售就不再变更。为了快速响应市场需求&#xff0c;一个技术变得极为重要&#xff0c;即OTA空中下载…

Python占位符%详解:格式化字符串的利器

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在Python中&#xff0c;%占位符是一种强大的工具&#xff0c;用于格式化字符串。本文将深入解析Python中占位符的使用方法&#xff0c;包括字符串格式化、数字格式化、日期格式化等多个方面。通过丰富的示例代码…

FolkMQ 国产消息中间件,v1.0.21 发布

简介 采用 “多路复用” “内存运行” “快照持久化” “Broker 集群模式”&#xff08;可选&#xff09;基于 Socket.D 网络应用协议 开发。全新设计&#xff0c;自主架构&#xff01; 角色功能生产端发布消息&#xff08;Qos0、Qos1&#xff09;、发布定时消息&#xff…

【多线程】线程池详解

文章目录 什么是线程池生活案例理解线程池为什么使用线程池线程池的优点 自定义线程池内置线程池总结 什么是线程池 线程池其实就是一种多线程处理形式&#xff0c;处理过程中可以将任务添加到队列中&#xff0c;然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过…

【经验分享】gemini-pro和gemini-pro-vision使用体验

Gemini Gemini已经对开发者开放了Gemini Pro的使用权限&#xff0c;目前对大家都是免费的&#xff0c;每分钟限制60条&#xff0c;至少这比起CloseAI的每个账户5刀限速1min3条要香的多&#xff0c;目前已于第一时间进行了体验 一句话总结&#xff0c;google很大方&#xff0c;但…

影视动画行业发展现状与方向:AI技术推动动画工业化体系新变革

工业化体系 是国产动画强国的必经之路 中国动画的百年历程不仅是创作者们展现艺术才华的历程&#xff0c;也是一代代中国动画人不懈追求动画工业体系建设的历程。 为什么现在的中国动画需要建立工业化体系呢&#xff1f; 举个例子&#xff0c;在建立工业化体系之前&#xff…

Colorful Grid Codeforces Round 910 (Div. 2) C

Problem - C - Codeforces 题目大意&#xff1a;有一个n*m的网格&#xff0c;要求从(1,1)走到(n,m)&#xff0c;同时要求路径的长度必须为k1&#xff0c;然后给每个两点之间的路径染成红色或蓝色&#xff0c;要求任意两个相邻线段颜色不能相同&#xff0c;求涂色的方案 3<…

MSF学习

之前的渗透测试中 其实很少用到 cs msf 但是在实际内网的时候 可以发现 msf cs 都是很好用的 所以现在我来学习一下 msf的使用方法 kali自带msf https://www.cnblogs.com/bmjoker/p/10051014.html 使用 msfconsole 启动即可 首先就是最正常的木马生成 所以这里其实只需…

Selenium三大等待(详解版)

一、强制等待 1.设置完等待后不管有没有找到元素&#xff0c;都会执行等待&#xff0c;等待结束后才会执行下一步 2.实例&#xff1a; driver webdriver.Chrome()driver.get("https://www.baidu.com")time.sleep(3) # 设置强制等待driver.quit() 二、隐性等待 …

【Spring】04 国际化

文章目录 1. 定义2. Spring 的支持1&#xff09; MessageSource接口2&#xff09; ResourceBundleMessageSource 3. 配置国际化1&#xff09;配置MessageSource Bean2&#xff09;创建资源文件3&#xff09;在Bean中使用国际化消息 4. 使用占位符和参数结语 Spring 为我们提供了…

深入理解C语言的函数参数

1、一个简单的函数 int Add(int x, int y) {return x y; }int main() {printf("%d", Add(2, 3, 4, 5, 6));return 0; } 这一段足够简单的代码&#xff0c;闭眼都能知道运行结果会在屏幕上打印 5 。那编译器是怎么处理后面的 4、5、6 &#xff1f; 我们再看看这个函…

【系统架构】集群、分布式概念及系统架构演进过程

集群、分布式概念&#xff1a; 对食物没有太高要求的人在肚子饿的时候一般都会选择去兰州拉面、沙县小吃等小饭馆&#xff0c;这类小饭馆有个很显著的特点&#xff1a;洗菜、切菜、炒菜都是同一个人完成&#xff0c;如果厨子不舒服可能饭馆还会歇业。而一些人流量较大的饭馆的分…

【Qt之QNetworkAccessManager】概述及示例

概述 QNetworkAccessManager类允许应用程序发送网络请求和接收应答 网络访问API是围绕一个QNetworkAccessManager对象构建的&#xff0c;该对象为它发送的请求保存通用配置和设置。它包含代理和缓存配置&#xff0c;以及与此类问题相关的信号&#xff0c;以及可用于监视网络操…

【Linux API 揭秘】container_of函数详解

我的圈子&#xff1a; 高级工程师聚集地 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强企业&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; …

leetcode-21-合并两个有序链表(C语言实现)

题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] 输出…

不用再找,这是大模型 LLM 微调经验最全总结

大家好&#xff0c;今天对大模型微调项目代码进行了重构&#xff0c;支持ChatGLM和ChatGLM2模型微调的切换&#xff0c;增加了代码的可读性&#xff0c;并且支持Freeze方法、Lora方法、P-Tuning方法、「全量参数方法」 微调。 PS&#xff1a;在对Chat类模型进行SFT时&#xff…

一款计算机顶会爬取解析系统 paper info

一款计算机顶会爬取解析系统 paper info 背景项目实现的功能 技术方案架构设计项目使用的技术选型 使用方法本地项目部署使用ChatGPT等大模型创建一个ChatGPT助手使用阿里云 顶会数据量 百度网盘pfd文件json文件 Q&A github链接 &#xff1a;https://github.com/codebricki…