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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用开关电源测试系统测试电源峰值电流?

一、用万用表、示波器测量峰值电流 首先将待测电路输入信号线分别连接到测试电路的输入端和地端。待测电路的电源端连接电源。然后将示波器设置为AC耦合模式&#xff0c;通道1连接待测电路输入端&#xff0c;通道2连接待测电路地端。调整数字万用表为电流测量模式。打开电源&am…

使用VeryFL【02】python环境安装

新建虚拟环境 conda create --name vfl python3.7激活新建的虚拟环境 conda activate vfl安装pytorch 安装Brownie pip install eth-brownie -i https://pypi.tuna.tsinghua.edu.cn/simple

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

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

Nginx+Tomcat实现负载均衡和动静分离

目录 前瞻 动静分离和负载均衡原理 实现方法 实验&#xff08;七层代理&#xff09; 部署Nginx负载均衡服务器(192.168.75.50:80) 部署第一台Tomcat应用服务器&#xff08;192.168.75.60:8080&#xff09; 多实例部署第二台Tomcat应用服务器&#xff08;192.168.75.70:80…

LOF基金跟股票一样吗?

LOF基金&#xff0c;全称为"上市型开放式基金"&#xff0c;是一种可以在上海证券交易所认购、申购、赎回及交易的开放式证券投资基金。投资者可以通过上海证券交易所场内证券经营机构或场外基金销售机构进行认购、申购和赎回基金份额。 LOF基金的特点是既可以像股票…

DataGrip连接Hive以及MySQL

如果连接失败&#xff0c;是因为useSSL ,改成NO或者False;

Spring Cloud + Vue前后端分离-第5章 单表管理功能前后端开发

Spring Cloud Vue前后端分离-第5章 单表管理功能前后端开发 完成单表的增删改查 控台单表增删改查的前后端开发&#xff0c;重点学习前后端数据交互&#xff0c;vue ajax库axios的使用等 通用组件开发:分页、确认框、提示框、等待框等 常用的公共组件:确认框、提示框、等待…

时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解

时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现DBO-VMD基于蜣螂优化算法优化VMD变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.利用蜣螂优化算法优化VMD中的参数k、a&…

【PostgreSQL】从零开始:(四)使用PgAdmin4连接数据库,及工具使用

登陆pgAdmin4 连接数据库 填写连接名称 填写连接信息 错误信息如下 解决办法 1.登陆数据库服务器切换到postgres用户 [rootpostgre-sql ~]# su - postgres 上一次登录&#xff1a;三 12月 13 18:10:00 CST 2023pts/0 上 [postgrespostgre-sql ~]$ 2.查看数据库进程 [postgre…

Linux——MySQL备份与恢复

一、数据库备份概述 1、数据备份的重要性 在企业中数据的价值至关重要&#xff0c;数据保障了企业业务的正常运行。因此&#xff0e;数据的安全性及数据的可靠性是运维的重中之重&#xff0c;任何数据的丢失都可能对企业产生严重的后果。通常情况下造成数据丢失的原因有如下几种…

JVM 详解(JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路)

目录 JVM 详解&#xff08;JVM组成部分、双亲委派机制、垃圾回收算法、回收器、回收类型、了解调优思路&#xff09;1、概念&#xff1a;什么是 JVM ?JVM 的作用&#xff1f; 2、JVM 的主要组成部分&#xff1f;类加载器&#xff08;Class Loader&#xff09;&#xff1a;简单…

ECharts实现数据可视化入门教程

ECharts介绍 Apache ECharts ECharts是一个使用 JavaScript 实现的开源可视化库 入门教程 第一步&#xff1a;下载echarts.js文件 下载地址&#xff1a;下载 - Apache ECharts 点击Dist 点击echarts.min.js并保存 将下载好的.js文件引入到项目的js文件中 第二步&#xff1a;…

[多线程]线程池

目录 1.前言 2. Java中的线程池以及参数介绍 2.1 核心线程数和最大线程数 2.2最大空闲存活时间 2.3任务队列和线程工厂 2.4 拒绝策略(最重要&#xff09; 2.5 线程池的类型 3.线程池的大小如何确定 4.手动写一个线程池 1.前言 我们知道.在开发过程中.为了效率,会引进很…

理解JSX:提高前端开发效率的关键(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

CGAL的最优传输曲线重构

1、介绍 此程序包实现了一种重建和简化二维点集的方法。输入是一组具有质量属性的二维点&#xff0c;可能受到噪声和离群值的干扰。输出是一组线段和孤立点&#xff0c;它们近似于输入点&#xff0c;如下图所示。质量属性与每个点的近似重要性有关。 左&#xff1a;输入点集受到…

SWPU NSS新生赛

&#x1f60b;大家好&#xff0c;我是YAy_17&#xff0c;是一枚爱好网安的小白&#xff0c;正在自学ing。 本人水平有限&#xff0c;欢迎各位大佬指点&#xff0c;一起学习&#x1f497;&#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火&#xff0c;我便是唯一的光。⭐️ 最近…

网页图标素材免费下载网站

这里是几个可以免费下载网页图标素材的的网站。这些个网站里的图表和素材&#xff0c;应该是都可以免费下载的。&#xff08;至少我下载了几个素材是没有花钱的&#xff09; Flaticon iconArchive freepik 4. iconmonstr 5. Icons and Photos For Everything 如果想下载图片&a…

在项目中,使用drawio创建一个共享协作看板

在项目中&#xff0c;使用drawio创建一个共享协作看板 drawio是一款强大的图表绘制软件&#xff0c;支持在线云端版本以及windows, macOS, linux安装版。 如果想在线直接使用&#xff0c;则直接输入网址draw.io或者使用drawon(桌案), drawon.cn内部完整的集成了drawio的所有功…

【C语言(十一)】

C语言内存函数 一、memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果sourc…

【每日一题】【12.14】2132.用邮票贴满网格图

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 2132. 用邮票贴满网格图https://leetcode.cn/problems/stamping-the-grid/ 今天的每日一题又是一道恶心的困难题目&#xff0c;花…