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

news2024/12/24 20:44:18

在这里插入图片描述

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.coloradmin.cn/o/1807328.html

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

相关文章

LLVM Cpu0 新后端9 objdump readelf

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

Android——热点开关(优化中)

SoftAP打开与关闭 目录 1.三个名词的解释以及关系 Tethering——网络共享&#xff0c;WiFi热点、蓝牙、USB SoftAp——热点(无线接入点)&#xff0c;临时接入点 Hostapd——Hostapd是用于Linux系统的软件&#xff0c;&#xff0c;支持多种无线认证和加密协议&#xff0c;将任…

AI大模型在健康睡眠监测中的深度融合与实践案例

文章目录 1. 应用方案2. 技术实现2.1 数据采集与预处理2.2 构建与训练模型2.3 个性化建议生成 3. 优化策略4. 应用示例&#xff1a;多模态数据融合与实时监测4.1 数据采集4.2 实时监测与反馈 5. 深入分析模型选择和优化5.1 LSTM模型的优势和优化策略5.2 CNN模型的优势和优化策略…

LangChain + ChatGLM 实现本地知识库问答

基于LangChain ChatGLM 搭建融合本地知识的问答机器人 1 背景介绍 近半年以来&#xff0c;随着ChatGPT的火爆&#xff0c;使得LLM成为研究和应用的热点&#xff0c;但是市面上大部分LLM都存在一个共同的问题&#xff1a;模型都是基于过去的经验数据进行训练完成&#xff0c;无…

R语言统计分析——数据集概念和数据结构

参考资料&#xff1a;R语言实战.第2版 1、数据集的概念 数据集通常是由数据构成的一个矩形数组&#xff0c;行表示观测&#xff0c;列表示变量。 不同行业对于数据集的行和列叫法不同。统计学称为观测&#xff08;observation&#xff09;和变量&#xff08;variable&#xff…

Nginx高级配置及重写功能

文章目录 一、高级配置网页的状态页Nginx第三方模块变量访问日志Nginx压缩功能https功能自定义小图标 二、重写功能&#xff08;rewrite&#xff09;if指令return指令set指令break指令rewrite指令防盗链 一、高级配置 网页的状态页 状态页显示的是整个服务器的状态而非虚拟主…

LabVIEW在高校中的应用

LabVIEW 作为一款功能强大的图形化编程工具&#xff0c;在高校中有广泛的应用。它不仅用于教学实验&#xff0c;还广泛应用于科研项目和工程训练。本文将从教学、科研、实验室管理和学生技能培养等多个角度&#xff0c;详细分析LabVIEW在高校中的应用。 教学应用 课程设计 自动…

力扣2444.统计定界子数组的数目

力扣2444.统计定界子数组的数目 观察到不满足条件的数 可以作为天然的分割线 因此在枚举右端点的过程中 预处理minK&#xff0c;maxK和分割线上一次出现的下标 res min(min_i,max_i) - i0; 但是因为可能在到下个区段时 min_i和max_i尚未更新 导致结果为负数 所以要跟0再取一…

《Brave New Words 》2.2 阅读理解的未来,让文字生动起来!

Part II: Giving Voice to the Social Sciences 第二部分&#xff1a;为社会科学发声 The Future of Reading Comprehension, Where Literature Comes Alive! 阅读理解的未来&#xff0c;让文字生动起来&#xff01; Saanvi, a ninth grader in India who attends Khan World S…

SOA的设计模式_2.企业服务总线模式

1.企业服务总线&#xff08;|Enterprise Service Bus&#xff0c;ESB&#xff09; 在企业基于SOA实施EAI、B2B和BMP的过程中&#xff0c;如果采用点对点的集成方式存在着复杂度高&#xff0c;可管理性差&#xff0c;复用度差和系统脆弱等问题。企业服务总线&#xff08;…

vuInhub靶场实战系列--Kioptrix Level #2

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶场信息1.2 靶场配置 二、信息收集2.1 主机发现2.1.1 netdiscover2.1.2 nmap主机扫描2.1.3 arp-scan主机扫描 2.2 端口扫描…

打字侠是一款PWA网站,如何下载到电脑桌面?

嘿&#xff0c;亲爱的键盘侠们&#xff01; 你是否还在为寻找一款好用的打字练习工具而烦恼&#xff1f;别担心&#xff0c;今天我要给大家介绍一位超级英雄——打字侠&#xff01;它不仅是一个超级酷的打字练习网站&#xff0c;还是一款PWA&#xff08;渐进式网页应用&#x…

Python程序操作MySQL数据库教程

1.Python程序操作MySQL数据库&#xff1a; 使用pymysql安装包 使用&#xff1a; 1.导入pysql包 import pymysql 2.创建连接对象 调用pymysql模块中的connect&#xff08;&#xff09;函数来创建连接对象&#xff0c;代码如下&#xff1a; 连接对象说明&#xff1a; 关闭连接 co…

JAVA:通过电信ctg.ag.sdk从电信物联平台AIOT获取设备上报数据的简单示例

一、问题场景 物联设备比如NB设备通过NB协议将数据传到电信平台后&#xff0c;我们的应用服务如何从电信平台获取可用的上报数据。以下通过电信开发者平台提供的SDK来简单演示下整个过程。 二、使用电信 SDK进行开发 电信AIOT物联平台提供了两种方式获取平台数据&#xff0c…

Virtual Memory Primitives for User Program翻译

Virtual Memory Primitives for User Program 安德鲁阿普尔&#xff08;Andrew Appel&#xff09;和李凯&#xff08;Kai Li&#xff09; 普林斯顿大学计算机科学系 摘要 传统上&#xff0c;内存管理单元&#xff08;MMUS&#xff09;被操作系统用于实现磁盘分页的虚拟内存…

cisco packet tracer 8.2.2 安装配置 基础教程 免登录免破解 简单方便

1 官网下载&#xff0c;需要账号 2 安装 3 启动之前&#xff0c;直接断网&#xff0c;禁用网卡(⊙﹏⊙) #汉化 #重新打开Cisco Packet Tracer

Apollo9.0 PNC源码学习之Control模块(一)

0 前言 从planning的角度看control&#xff0c;首先需要了解的就是相关的数据接口&#xff0c;规划出的轨迹&#xff08;路径速度&#xff09;发给Control模块去执行 modules/planning/planning_component/planning_component.cc planning模块发布轨迹信息 planning_writer_ …

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

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

DP:回文串模型

一、回文子串 . - 力扣&#xff08;LeetCode&#xff09; 该题有3种解法 &#xff08;1&#xff09;中心扩展算法&#xff08;在字符串章节有介绍&#xff09;时间复杂度O&#xff08;N^2&#xff09;,空间复杂度O&#xff08;1&#xff09; &#xff08;2&#xff09;马丁车…

小冬瓜AIGC 手撕LLM 拼课

小冬瓜aigc手撕LLM学习 官方认证 手撕LLMRLHF速成班-(附赠LLM加速分布式训练超长文档&#xff09; 帮助多名同学上岸LLM方向&#xff0c;包括高校副教授&#xff0c;北美PhD&#xff0c;大厂等 课程名称【手撕LLMRLHF】 授课形式&#xff1a;在线会议直播讲解课后录播 时间&…