[ROS 系列学习教程] 建模与仿真 - ros_control 介绍

在这里插入图片描述

ROS 系列学习教程(总目录)

本文目录

  • 一、ros_control 架构
    • 1.1 hardware_interface
    • 1.2 combined_robot_hw
    • 1.3 controller_interface
    • 1.4 controller_manager
    • 1.5 controller_manager_msgs
    • 1.6 joint_limits_interface
    • 1.7 transmission_interface
    • 1.8 realtime_tools
  • 二、ros_controllers
    • 2.1 控制器列表
    • 2.2 配置控制器
  • 三、命令行工具
    • 3.1 controller_manager
    • 3.2 spawner
    • 3.3 unspawner
    • 3.4 controller_group (melodic 新增)
  • 四、加载配置并管理控制器
  • 五、ROS API
    • 5.1 controller_manager/load_controller
    • 5.2 controller_manager/unload_controller
    • 5.3 controller_manager/switch_controller
    • 5.4 controller_manager/list_controllers
    • 5.5 controller_manager/list_controller_types
    • 5.6 controller_manager/reload_controller_libraries

ros_control 是一个 ROS 功能包,是一个通用的机器人控制框架,用于实现机器人硬件接口、控制器管理和控制器接口。它提供了一套用于控制各种类型机器人(如移动机器人、机械臂等)的工具和接口。ros_control 的设计目的是为开发者提供一个灵活且可扩展的框架,使得控制算法能够独立于具体的硬件平台运行,并且可以轻松地在不同的机器人之间移植。

一、ros_control 架构

ros_control 架构图如下:
在这里插入图片描述

ros_control 由以下几个主要组件组成:

  • hardware_interface:硬件底层接口
  • combined_robot_hw:硬件包
  • controller_interface:controller接口
  • controller_manager:controller管理器
  • controller_manager_msgs:controller管理器的消息类型
  • joint_limits_interface:joints限制接口
  • transmission_interface:传动接口
  • realtime_tools:实时控制工具

1.1 hardware_interface

hardware_interface 提供了一套硬件抽象接口,使得控制器可以独立于具体的硬件实现。

1.2 combined_robot_hw

combined_robot_hwCombinedRobotHW 类实现,CombinedRobotHW 是一个硬件抽象类,允许将多个硬件接口组合在一起,从而让多个独立的硬件模块作为一个整体被控制器管理器控制。

1.3 controller_interface

controller_interface 提供了定义控制器的基础接口,用于实现具体的控制器。控制器需要继承 controller_interface::Controller 类,并实现控制逻辑。

1.4 controller_manager

controller_manager 负责管理控制器的生命周期,包括加载、启动、停止和卸载控制器。它提供了服务和话题接口,用于与控制器进行交互。

1.5 controller_manager_msgs

controller_manager_msgs 包含了与控制器管理器交互的消息类型和服务类型,例如加载、启动和停止控制器。

1.6 joint_limits_interface

joint_limits_interface 提供了一套接口,用于管理关节的限制条件(例如位置、速度、加速度和力矩限制),以确保关节在安全范围内运行。

1.7 transmission_interface

transmission_interface 提供了传动装置的抽象接口,用于处理关节和电机之间的传动关系。它定义了传动装置的结构和方法,以便在控制器中正确处理关节和电机的转换。

1.8 realtime_tools

realtime_tools 提供了一些实用工具,用于实现实时控制,包括实时缓冲区和周期性任务管理。

二、ros_controllers

ros_controllers 也是一个 ROS 功能包,提供了一组预定义的控制器,这些控制器已经为各种常见的机器人控制任务进行了优化和实现,可以用于控制不同类型的机器人,如移动机器人、机械臂和其他多关节系统。

2.1 控制器列表

目前主要包含以下控制器:

  • joint_state_controller
    • JointStateController:从硬件接口获取关节状态,并将这些状态信息发布到 /joint_states 话题
  • joint_trajectory_controller
    • JointTrajectoryController:接收轨迹信息(即一系列期望的关节位置、速度和加速度),并控制机器人的关节按照这些轨迹运动。该控制器适用于需要精确轨迹跟踪的任务,如路径规划和任务执行。
  • gripper_action_controller
    • GripperActionController:控制机械手夹具的开闭位置
  • diff_drive_controller
    • DiffDriveController:控制差速驱动的机器人
  • effort_controllers
    • JointEffortController:控制单个关节的力/力矩。通过设定期望的力/力矩,使关节达到所需状态。
    • JointPositionController:控制单个关节的位置,通过力/力矩控制算法使关节达到设定的位置。
    • JointVelocityController:控制单个关节的速度,通过力/力矩控制算法使关节达到设定的速度。
    • JointGroupEffortController:控制一组关节的力/力矩。通过设定多个关节的力/力矩,使它们达到所需状态。
    • JointGroupPositionController:控制一组关节的位置,通过力/力矩控制算法使这些关节达到设定的位置。
  • velocity_controllers
    • JointVelocityController:用于控制机器人单个关节的速度
    • JointPositionController:通过PID控制速度以达到设置的位置
    • JointGroupVelocityController:用于控制机器人多个关节的速度
  • position_controllers
    • JointPositionController:直接控制单个关节的位置
    • JointGroupPositionController:直接控制一组关节的位置
  • imu_sensor_controller
    • IMUSensorController:发布 IMU 传感器的数据
  • force_torque_sensor_controller
    • ForceTorqueSensorController:发布力矩传感器的数据
  • forward_command_controller
    • ForwardCommandController:用于将单个关节的命令直接传递到硬件接口
    • ForwardJointGroupCommandController:用于将一组关节的命令直接传递到硬件接口
  • ackermann_steering_controller
    • AckermannSteeringController:接收线速度和转向角度指令,然后根据 Ackermann 转向几何原理计算并控制各个车轮的转向角和速度,使车辆能够按照预定轨迹运动
  • four_wheel_steering_controller
    • FourWheelSteeringController:接收线速度和转向角度指令,然后根据四轮转向几何原理计算并控制各个车轮的转向角和速度,使车辆能够按照预定轨迹运动

2.2 配置控制器

通过将参数加载到ROS参数服务器来配置控制器,一般先将配置写入 yaml 文件,再通过文件加载到ROS参数服务器,然后 ros_control 会解析特定参数。控制器配置示例如下:

my_robot:
	joint_state_controller:
       type: joint_state_controller/JointStateController
       publish_rate: 50

    position_trajectory_controller:
       type: position_controllers/JointTrajectoryController
       joints:
          - joint1
          - joint2
       constraints:
          goal_time: 5.0
          joint1:
              trajectory: 0.60
              goal:       0.15
          joint2:
              trajectory: 0.60
              goal:       0.15

不同控制器的参数不同,详见 http://wiki.ros.org/ros_controllers

三、命令行工具

3.1 controller_manager

管理控制器生命周期:

rosrun controller_manager controller_manager <command> <name1> <name2> ...

其中,<command> 可选如下:

  • load:加载控制器(构造和初始化)
  • unload:卸载控制器(析构)
  • start:启动控制器
  • stop:停止控制器
  • spawn:加载并启动控制器
  • kill:停止并卸载控制器

<name1> <name2> 为控制器的名称。

获取控制器的状态:

rosrun controller_manager controller_manager <command>

其中,<command> 可选如下:

  • list:按执行顺序列出所有控制器,并给出每个控制器的状态
  • list-types:列出控制器管理器知道的所有控制器类型。如果控制器不在此列表中,将无法生成。
  • reload-libraries:重新加载所有可用作插件的控制器库。当新开发控制器并想要测试新的控制器代码时,这很方便,而无需每次都重新启动机器人。这不会重新启动之前运行的控制器。
  • reload-libraries --restore:重新加载所有可用作插件的控制器库,并将所有控制器恢复到其原始状态。

3.2 spawner

自动加载并启动一组控制器,并自动停止并卸载相同的控制器:

rosrun controller_manager spawner [--stopped] <name1> <name2> ...

当运行 spawner 时,列出的控制器将被加载并启动,如果加上 --stopped 参数,控制器只会被加载不会被启动。在控制器启动时,spawner 将继续运行,当终止 spawner(如:ctrl-c)时,它将自动停止并卸载它最初启动的所有控制器。

3.3 unspawner

停止控制器,但不卸载

rosrun controller_manager unspawner <name1> <name2> ...

3.4 controller_group (melodic 新增)

controller_manager 允许开发人员在运行时切换控制器,但是当出于某些特殊目的想要从一组控制器切换到另一组控制器时,它就不那么方便了。如果在 ROS 参数 controller_groups 中定义了这样的组,controller_group 脚本就可以让这变得简单。它知道所有涉及的控制器,然后知道在从一个组切换到另一个组时需要停止和启动的控制器。因此,不同的组可以共享一些控制器。

控制器分组配置,和控制器配置一样要先加载到ROS参数服务器:

controller_groups:
  production:
    - prod_controller_1
    - prod_controller_2
  development:
    - devel_controller_1
    - devel_controller_2
    - shared_controller_3
  diagnostics:
    - diag_controller_1
    - diag_controller_2
    - shared_controller_3

运行 controller_group

rosrun controller_manager controller_group <command> <args>

其中,<command> 可选如下:

  • list :列出在 controller_groups 参数中找到的所有组定义
  • spawn <group> :加载并启动名为 <group> 的组中包含的所有控制器。这通常在 ROS 启动文件中使用
  • switch <group> :切换到名为 <group> 的组。这将停止那些在其他组中定义但未在本组中运行的控制器,并启动本组中定义的未运行的控制器。

四、加载配置并管理控制器

启动控制器时要注意,运行 controller_manager 来从启动文件中启动控制器时,即使启动文件被删除,控制器也会继续运行。建议使用 spawner 工具从启动文件中自动加载、启动、停止和卸载控制器,当启动 spawner 时,将加载并启动控制器。当停止 spawner 时(启动文件被删除或停止运行),将停止并卸载控制器。

<launch>
   <!-- 加载配置文件 --> 
	<rosparam file="$(find rrbot_control)/config/rrbot_control.yaml" command="load"/>

    <!-- 启动控制器 -->
 	<node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" ns="/my_robot" args="joint_state_controller position_trajectory_controller"/>
</launch>

图形化管理控制器:

rqt_controller_manager是一个 rqt 插件,允许以图形方式加载、卸载、启动和停止控制器,以及显示有关已加载控制器的信息。

它可以从 rqt 的插件菜单启动,或者作为独立可执行文件启动:

rosrun rqt_controller_manager rqt_controller_manager

五、ROS API

为了与其他 ROS 节点的控制器交互,控制器管理器提供了五个服务供调用:

5.1 controller_manager/load_controller

加载指定控制器

消息体:controller_manager_msgs/LoadController

5.2 controller_manager/unload_controller

卸载控制器,控制器仅在停止状态下才可卸载。

消息体:controller_manager_msgs/UnloadController

5.3 controller_manager/switch_controller

启动/停止 控制器

消息体:controller_manager_msgs/SwitchController

5.4 controller_manager/list_controllers

获取当前已加载的所有控制器

消息体:controller_manager_msgs/ListControllers

5.5 controller_manager/list_controller_types

获取已知的所有控制器类型

消息体:controller_manager_msgs/ListControllerTypes

5.6 controller_manager/reload_controller_libraries

重新加载所有可用作插件的控制器库

消息体:controller_manager_msgs/ReloadControllerLibraries

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

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

相关文章

Linux | buildrootfs 添加mkfs.ext3/mkfs.ext4 支持

因个人需要&#xff0c;mkfs.ext3 但是项目中还没有这个命令 所以琢磨了半天 这里将其小记一下 在buildrootfsz中&#xff0c;需要将e2fsprogs 勾选上然后重新编译就好了 make menuconfig Target packages-> Filesystem and flash utilities-> e2fsprogs

CentOS安装Node.js以及JSDOM跳坑记

笔者在一台 CentOS 7.9 的服务器上使用常规的安装命令&#xff1a;sudo yum install node 来安装 Node.js&#xff0c;到最后系统提示&#xff1a; Error: Package: 2:nodejs-20.14.0-1nodesource.x86_64 (nodesource-nodejs) Requires: libstdc.so.6(GLIBCXX_3.4.20)(64bit) …

任务调度选择之PowerJob 和 Snail Job

背景 最近在选择一款任务调度产品&#xff0c;找了几款产品进行调研&#xff0c;我对产品的要求是可以进行可视化、有角色权限、任务编排、支持http、接入成本低等&#xff0c;发现有有两款挺符合的PowerJob和Snail Job。 同类产品对比 Elastic-Jobxxl-jobPowerJobSnail Job…

YOLOv5改进 | 注意力机制 | 在主干网络中添加SOCA模块【原理+附完整代码】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 现有的基于CNN的SISR方法主要关注更宽或更深的架构设计&#xff0c;忽视了探索中间层的特征相关性&#xff0c;因此阻碍了CNN的表达能力。为…

SmartEDA VS Multisim/Proteus:电子设计江湖,谁主沉浮?

在电子设计的江湖里&#xff0c;SmartEDA、Multisim和Proteus无疑是几大门派&#xff0c;各自拥有独特的武功秘籍和门派特色。今天&#xff0c;我们就来一场巅峰对决&#xff0c;看看这些电子设计软件究竟谁能笑傲江湖&#xff0c;成为电子设计界的霸主&#xff01; 一、门派起…

Java进阶_抽象类与方法

抽象类概念 在面向对象的概念中&#xff0c;所有的对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这样的类就是抽象类。 抽象类除了不能实例化对象之…

使用Nextjs学习(学习+项目完整版本)

创建项目 运行如下命令 npx create-next-app next-create创建项目中出现的各种提示直接走默认的就行,一直回车就行了 创建完成后进入到项目运行localhost:3000访问页面,如果和我下面页面一样就是创建项目成功了 整理项目 将app/globals.css里面的样式都删除,只留下最上面三…

Git:从配置到合并冲突

目录 1.前言 2.Git的下载与初始化配置 3.Git中新建仓库 4.Git的工作区域和文件状态 5.Git中查看操作和提交记录 6.Git中添加和提交文件 7.Git中回退提交版本 8.Git中查看版本间的差异 9.Git中删除文件 10.Git中忽略指定文件 11.Git中配置SSH密钥 12.Git中关联克隆仓库 13.Git中…

核心社群营销和覆盖区域选型

目录 一、背景介绍 &#xff08;一&#xff09;核心流程 &#xff08;二&#xff09;用户进群 &#xff08;三&#xff09;内容匹配 &#xff08;四&#xff09;数据追踪 &#xff08;五&#xff09;风险管控 二、业界调研 三、聚焦群覆盖区域 &#xff08;一&#xf…

【单片机毕业设计9-基于stm32c8t6的酒窖监测系统】

【单片机毕业设计9-基于stm32c8t6的酒窖监测系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇9基于stm32的酒窖监测系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -------------------…

【Modelground】个人AI产品MVP迭代平台(5)——神投手(实时投篮检测游戏)

文章目录 介绍篮框识别进球算法离屏渲染总结 介绍 神投手是我开发的一款移动端web实时投篮检测游戏&#xff0c;基于Mediapipe对象检测模型&#xff0c;提供数据集&#xff0c;训练出可识别篮框的模型。利用图像处理算法&#xff0c;检测篮球进框的场景。提供了两种模式&#…

计算机组成原理之指令寻址

一、顺序寻址 1、定长指令字结构 2、变长指令字结构 二、跳跃寻址 三、数据寻址 1、直接寻址 2、间接寻址 3、寄存器寻址 寄存器间接寻址 4、隐含寻址 5、立即寻址 6、偏移寻址 1、基址寻址 2、变址寻址 3、相对寻址

机器学习周记(第四十二周:AT-LSTM)2024.6.3~2024.6.9

目录 摘要Abstract一、文献阅读1. 题目2. abstract3. 网络架构3.1 LSTM3.2 注意力机制概述3.3 AT-LSTM3.4 数据预处理 4. 文献解读4.1 Introduction4.2 创新点4.3 实验过程4.3.1 训练参数4.3.2 数据集4.3.3 实验设置4.3.4 实验结果 5. 基于pytorch的transformer 摘要 本周阅读…

【ArcGISPro SDK】构建多面体要素

结果展示 每个面构建顺序 代码 using ArcGIS.Core.CIM; using ArcGIS.Core.Data; using ArcGIS.Core.Geometry; using ArcGIS.Desktop.Catalog; using ArcGIS.Desktop.Core; using ArcGIS.Desktop.Editing; using ArcGIS.Desktop.Extensions; using ArcGIS.Desktop.Framework;…

基于AT89C51单片机的红外防盗报警器设计

第一章 绪论1.1 选题背景 随着社会科学的不断进步和发展,人们生活水平得到很大的提高,对个人私有财产的保护越来越重视,因而对于防盗的措施提出了更高的要求。本设计就是为了满足现代生活防盗的需要而设计的应用于家庭、车库、仓库和保险柜等处进行防盗监控的无线防盗报警装…

安装搭建java版的悟空crm遇到 网络错误请稍候再试 终极解决办法(hrm人力资源模块)

java版 项目目录 ├── build – webpack 配置文件 ├── config – 项目配置文件 ├── src – 源码目录 │ ├── api – axios请求接口 │ ├── assets – 静态图片资源文件 │ ├── components – 通用组件 │ ├── directives – 通用指令 │ ├── filters –…

Objective-C之通过协议提供匿名对象

概述 通过协议提供匿名对象的设计模式&#xff0c;遵循了面向对象设计的多项重要原则&#xff1a; 接口隔离原则&#xff1a;通过定义细粒度的协议来避免实现庞大的接口。依赖倒置原则&#xff1a;高层模块依赖于抽象协议&#xff0c;而不是具体实现。里氏替换原则&#xff1…

计算机网络9——无线网络和移动网络2无线个人区域网 WPAN

文章目录 一、蓝牙系统二、低速 WPAN三、高速 WPAN 无线个人区域网WPAN(Wireless Personal Area Network)就是在个人工作的地方把属于个人使用的电子设备(如便携式电脑、平板电脑、便携式打印机以及蜂窝电话等)用无线技术连接起来自组网络&#xff0c;不需要使用接入点AP&#…

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…

彩虹易支付最新版源码

源码简介 彩虹易支付最新版源码&#xff0c;更新时间为5.1号 2024/05/01&#xff1a; 1.更换全新的手机版支付页面风格 2.聚合收款码支持填写备注 3.后台支付统计新增利润、代付统计 4.删除结算记录支持直接退回商户金额 安装环境 1.PHP版本>7.4 2.Mysql数据库 安装教…