ROS2 Control controller_interface说明

ROS2 Control controller_interface说明

文章目录

  • 前言
  • controller_interface说明
    • Class ControllerInterfaceBase
    • Class ControllerInterface说明
    • Class ChainableControllerInterface说明
  • semantic_components说明
    • Class ForceTorqueSensor
    • Class IMUSensor
    • Class RangeSensor
  • 参考

前言

controller_interface是ROS control控制使用的硬件之上的接口,用来做上层轨迹指令的规划,从硬件接口更新状态并根据状态生成发送命令并发送给硬件接口。该interface最初是来自ros2_control1,本文将基于博主对源代码的理解完成说明。

controller_interface说明

controller_interface包含如下类,和枚举:

  • Struct InterfaceConfiguration

  • Class ChainableControllerInterface

  • Class ControllerInterface

  • Class ControllerInterfaceBase

Class ControllerInterfaceBase

控制器的基接口类。接口不能用于实现控制器。该类提供了 ControllerInterfaceChainableControllerInterface 的定义,这些定义应针对特定控制器实现和扩展。

直接子类有这两个controller_interface::ChainableControllerInterfacecontroller_interface::ControllerInterface

下边几个是比较核心的函数,该类本生继承于public rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface

virtual CONTROLLER_INTERFACE_PUBLIC InterfaceConfiguration command_interface_configuration () const =0;
// controller_manager使用的方法获取控制器使用的命令接口。每个控制器可以使用单独的方法来确定接口名称,在简单的情况下具有以下格式: <joint>/<interface> 。该方法仅在 inactive 或 active 状态下被调用,即首先必须调用 on_configure 。该配置用于检查是否可以激活控制器并从硬件声明接口。声明的接口填充在command_interfaces_成员中。virtual InterfaceConfiguration state_interface_configuration() const = 0;
// controller_manager使用的方法来获取控制器使用的状态接口集。每个控制器可以使用单独的方法来确定接口名称,在简单的情况下具有以下格式: <joint>/<interface> 。该方法仅在 inactive 或 active 状态下被调用,即首先必须调用 on_configure 。该配置用于检查是否可以激活控制器并从硬件声明接口。声明的接口填充在state_interface_成员中。virtual CONTROLLER_INTERFACE_PUBLIC bool is_chainable () const =0
// 获取信息,如果一个控制器是可链的。virtual CONTROLLER_INTERFACE_PUBLIC bool set_chained_mode (bool chained_mode)=0
// 设置可链接控制器的链接模式。此方法触发内部进程将可链接控制器切换到 “链接” 模式,反之亦然。将控制器设置为 “链接” 模式通常涉及禁用subscribers和其他外部interface,以避免输入命令中的潜在并发。virtual CONTROLLER_INTERFACE_PUBLIC bool is_in_chained_mode () const =0
// 获取有关控制器的信息,如果它当前在链接模式下使用。在chained模式下,只有内部接口可用,所有subscribers都应禁用。这可以防止从多个源同时写入控制器。

Class ControllerInterface说明

该类继承于public controller_interface::ControllerInterfaceBase没有做特殊实现,不做进一步说明

Class ChainableControllerInterface说明

public对外接口:

  CONTROLLER_INTERFACE_PUBLICreturn_type update(const rclcpp::Time & time, const rclcpp::Duration & period) final;
// 控制步骤更新。命令接口基于参考输入和当前状态进行更新。在 (实时) 控制循环中被调用。
// time - [in] 此控制循环迭代开始的时间
// period- [in] 最后一次控制循环迭代所花费的测量时间

protected内部接口:

  virtual std::vector<hardware_interface::CommandInterface> on_export_reference_interfaces() = 0;
// 每个可chainable控制器应实现以导出其可chainable接口的虚拟方法。每个chainable控制器实现此方法,其中导出所有输入 (命令) 接口。该方法与hardware_interface::SystemInterface或hardware_interface::ActuatorInterface中的 export_command_interface 方法具有相同的含义。virtual bool on_set_chained_mode(bool chained_mode);
// 每个可链接控制器实现此方法以在 “链接” 和 “外部” 模式之间切换。在 “链接” 模式下,禁用所有外部接口,如subscriber和service的服务器,以避免输入命令中的潜在并发。virtual return_type update_reference_from_subscribers() = 0;
// 每个可链接控制器实现此方法,当不处于链接模式时更新来自订阅者的引用。virtual return_type update_and_write_commands(const rclcpp::Time & time, const rclcpp::Duration & period) = 0;
// 执行控制器的计算并更新命令接口。
// 可链控制器的更新方法。在此方法中,假设 \reference_interfaces_ 保存当前控制步骤中用于计算命令的值是有效的。这意味着如果controller未处于链接模式,则在 \update_reference_from_subscribers之后调用此方法。

private私有变量:

  bool in_chained_mode_ = false;
// 用来记录当前是否chained模式状态

semantic_components说明

semantic_components包含如下类:

  • Class ForceTorqueSensor
  • Class IMUSensor
  • Class RangeSensor
  • Template Class SemanticComponentInterface

Class ForceTorqueSensor

该类继承自public semantic_components::SemanticComponentInterface< geometry_msgs::msg::Wrench >

// 构造函数如下inline ForceTorqueSensor(const std::string &interface_force_x, const std::string &interface_force_y, const std::string &interface_force_z, const std::string &interface_torque_x, const std::string &interface_torque_y, const std::string &interface_torque_z)
// 名称应按以下顺序排列: 力X,力Y,力Z,扭矩X,扭矩Y,扭矩Z。

geometry_msgs::msg::Wrench 是 ROS 2 中的一个消息类型,用于表示作用在一个刚体上的力(force)和力矩(torque)。这个消息类型常用于描述机器人末端执行器所受的外力和力矩,或者用于控制力反馈系统等应用场景。

geometry_msgs::msg::Wrench 消息包含以下字段:

geometry_msgs::msg::Vector3 force:表示作用在刚体上的三个方向(x、y、z)上的力的分量。
geometry_msgs::msg::Vector3 torque:表示作用在刚体上的三个方向(x、y、z)上的力矩(或转矩)的分量。

Class IMUSensor

该类继承自public semantic_components::SemanticComponentInterface< sensor_msgs::msg::Imu >

sensor_msgs::msg::Imu 是 ROS 2 中用于表示惯性测量单元(Inertial Measurement Unit, IMU)数据的消息类型。IMU 通常包含加速度计、陀螺仪和其他传感器,用于测量设备的加速度、角速度以及可能的磁场强度。这种消息类型在机器人导航、姿态估计、运动控制等多个领域都有广泛应用。

sensor_msgs::msg::Imu 消息包含以下字段:

std_msgs::msg::Header header:标准头部信息,包含时间戳和坐标系标识。
geometry_msgs::msg::Quaternion orientation:表示设备的姿态(四元数形式),通常由融合算法计算得出。
sensor_msgs::msg::Covariance3D orientation_covariance:表示姿态估计的不确定性。
geometry_msgs::msg::Vector3 angular_velocity:表示设备的角速度(绕 x、y、z 轴的旋转速度)。
sensor_msgs::msg::Covariance3D angular_velocity_covariance:表示角速度估计的不确定性。
geometry_msgs::msg::Vector3 linear_acceleration:表示设备的线性加速度(沿 x、y、z 方向的加速度)。

Class RangeSensor

该类继承自public semantic_components::SemanticComponentInterface< sensor_msgs::msg::Range >

sensor_msgs::msg::Range 是 ROS 2 中的一个消息类型,用于表示传感器的测量范围数据,如超声波传感器或红外线距离传感器的读数。这个消息类型包含了传感器测量的距离、辐射强度以及其他相关信息。

sensor_msgs::msg::Range 消息包含以下字段:

Header header:包含标准的头部信息,如时间戳和坐标系标识。
float32 radiation_type:辐射类型,通常用于标识传感器的类型(如超声波、红外线等)。ROS 2 中定义了两个常量:
sensor_msgs::msg::Range::ULTRASOUND 表示超声波传感器。
sensor_msgs::msg::Range::INFRARED 表示红外线传感器。
float32 field_of_view:传感器的视场角(Field of View),单位为弧度。
float32 min_range:传感器可以检测到的最小范围。
float32 max_range:传感器可以检测到的最大范围。
float32 range:传感器测量到的距离,单位为米。

参考


  1. GitHub - ros-controls/ros2_control at humble ↩︎

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

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

相关文章

Jacoco的XML报告详解

使用jacococli完成jacoco测试报告生成后,会看到有一个.xml结尾的文件,这个就是xml格式的覆盖率报告。除了xml还有csv、html格式的报告,本文进介绍xml报告。 DTD文件 在介绍jacoco的xml报告之前,我们应该先看一下对应的DTD文件的内容。(DTD的全称为Document Type Definitio…

Java应用的数据库连接池连接池性能测试

Java应用的数据库连接池连接池性能测试 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 数据库连接池的性能测试是确保Java应用能够高效运行的关键步骤。性能测试可以帮助我们评估连接池在高并发…

Rust 所有权 借用与引用

文章目录 发现宝藏1. 所有权&#xff08;Ownership&#xff09;2. 引用&#xff08;References&#xff09;2.1 不可变引用2.2 可变引用2.3 引用的规则 3. 悬垂引用&#xff08;Dangling References&#xff09;4. 借用&#xff08;Borrowing&#xff09;结论 发现宝藏 前些天…

个人学习笔记7-5:动手学深度学习pytorch版-李沐

#人工智能# #深度学习# #语义分割# #计算机视觉# #神经网络# 计算机视觉 13.10 转置卷积 例如&#xff0c;卷积层和汇聚层&#xff0c;通常会减少下采样输入图像的空间维度&#xff08;高和宽&#xff09;。然而如果输入和输出图像的空间维度相同&#xff0c;在以像素级分类…

【App】React Native

React Native 的优势&#xff1a; 开发体验好 用统一的代码规范开发移动端程序&#xff0c;不用关注移动端的差异.开发成本低 开发一次&#xff0c;可以生成 Android 和 IOS 俩个系统上的 App学习成本低 只要掌握 JavaScript 和 React 就可以进行移动端开发 React Native 的不…

【物联网技术大作业】设计一个智能家居的应用场景

前言&#xff1a; 本人的物联网技术的期末大作业&#xff0c;希望对你有帮助。 目录 大作业设计题 &#xff08;1&#xff09;智能家居的概述。 &#xff08;2&#xff09;介绍智能家居应用。要求至少5个方面的应用&#xff0c;包括每个应用所采用的设备&#xff0c;性能&am…

2023级JavaScript与jQuery

第三课&#xff1a;JavaScript对象编程 一.预习笔记 1.Date对象 对象创建&#xff1a;var myDatenew Date() 输出显示当前日期的标准时间 对象创建&#xff1a;var myDatenew Date(“2024/09/14”) 对象创建&#xff1a;var myDatenew Date(2024,9,14) 当前对象创建时&…

TiDB从0到1学习笔记(精华篇)

历时四个月&#xff0c;恭喜赵老师的《TiDB从0到1》 系列文章顺利完结&#xff0c;小编再次梳理一遍文稿&#xff0c;并附注解分享给大家。 整体架构 从 TiDB 1.0 到 8.0&#xff0c;TiDB 的体系结构一直在不断演进。接下来让我们一起看看整体架构的变化。 TiDB v1 TiDB v1&…

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code&#xff08;简称 VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构、调试等功能&#xff0c;非常适合开发者使用。VSCode 通过安装扩展&#xff08;Extension…

node.js实现阿里云短信发送

效果图 实现 一、准备工作 1、官网直达网址&#xff1a; 阿里云 - 短信服务 2、按照首页提示依次完成相应资质认证和短信模板审核&#xff1b; 3、获取你的accessKeySecret和accessKeyId&#xff1b; 方法如下&#xff1a; 获取AccessKey-阿里云帮助中心 4、获取SignNa…

变量取值范围

通常意义上&#xff0c;任何一种类型都有自己的取值范围&#xff0c;但跟着变量类型本身的范围太大&#xff0c;有时&#xff0c;不希望取值有这么大&#xff0c;就可以定义枚举&#xff0c;但枚举也不是万能&#xff0c;能准确规定范围是更安全的选择。 Ada编程语言是一门为安…

【LabVIEW学习篇 - 24】:生产者/消费者设计模式

文章目录 生产者/消费者设计模式案例&#xff1a;控制LED等亮灭 生产者/消费者设计模式 生产者/消费者是多线程编程中最基本的一种模式&#xff0c;使用非常普遍。从软件角度看&#xff0c;生产者就是数据的提供方&#xff0c;而消费者就是数据的消费处理方&#xff0c;二者之…

微信小程序开发——比较两个数字大小

在这里我们使用的工具是 需要自行安装和配置。 在微信小程序中比较两个数字大小有以下几种方式&#xff1a; 一、普通条件判断 在小程序的.js 文件中&#xff0c;先定义两个数字&#xff0c;如let num1 5; let num2 3;。通过if - else if - else语句&#xff0c;根据num1与…

elementui 单元格添加样式的两种方法

方法一 <el-table-column fixed prop"name" label"姓名" width"120"> <<template scope"scope"> <span :class"{red:scope.row.color1,yell:scope.row.color2,green:scope.row.col…

文件管理系统DCC与泛微OA系统集成案例

一、项目背景 上海某半导体有限公司主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片等。 公司内部有DCC文件管理系统和OA系统&#xff0c;由SAP PO平台进行中间管理&#xff0c;DCC系统对接泛微OA系统推送文件等操作&#xff0c;提高公司内部各自系统…

智能智造和工业软件研发平台SCSAI功能介绍

用爱编程30年&#xff0c;倾心打造工业和智能智造软件研发平台SCIOT,用创新的方案、大幅的让利和极致的营销&#xff0c;致力于为10000家的中小企业实现数字化转型&#xff0c;打造数字化企业和智能工厂&#xff0c;点击上边蓝色字体&#xff0c;关注“AI智造AI编程”或文末扫码…

vue缓存用法

Store 临时缓存 特点&#xff1a;需要定义&#xff0c;有初始值、响应式、全局使用、刷新重置 Pinia官方文档 https://pinia.vuejs.org 创建 store 缓存 示例代码 import {defineStore} from pinia import {store} from //storeexport const useMyStore defineStore({// 定义…

lightdm , xrandr , startx 桌面管理器,窗口管理器

问题&#xff1a; 了解这几个的含义。 显示服务器 这个不是很明白 显示管理器&#xff0c; 知道就行了&#xff0c;也不是很明白。 窗口管理器。 桌面管理器。 这个其实就是 桌面环境了&#xff0c; 我们的板卡上使用的是xface 。 这个 xface 是一个集合&#xff0c;这里面…

MATLAB中的异常处理机制:掌握错误和警告的管理

在MATLAB编程中&#xff0c;异常处理是一个关键组成部分&#xff0c;它允许程序员管理和响应在程序执行过程中可能发生的错误和警告。MATLAB提供了一套完整的机制来捕获、处理和引发异常&#xff0c;这些机制基于try/catch语句&#xff0c;以及error和warning函数。 1. 异常处…

亚马逊IP关联及其解决方案

在电子商务领域&#xff0c;亚马逊作为全球领先的在线购物平台&#xff0c;吸引了众多商家和个人的参与。然而&#xff0c;随着业务规模的扩大&#xff0c;商家在使用亚马逊服务时可能会遇到IP关联的问题&#xff0c;这不仅影响账户的正常运营&#xff0c;还可能带来一系列不利…