ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档(基于humble版本)学习笔记(二)

      • 理解节点(node)
        • ros2 run
        • ros2 node list
        • 重映射(remap)
        • ros2 node info
      • 理解话题(topic)
        • rqt_graph
        • ros2 topic list
        • ros2 topic echo
        • ros2 topic info
        • ros2 interface show
        • ros2 topic pub
        • ros2 topic hz
        • Clean up
      • 理解服务(service)
        • ros2 service list
        • ros2 service type
        • ros2 service list -t
        • ros2 service find
        • ros2 interface show
        • ros2 service call

今天继续总结CLI 工具章的学习

理解节点(node)

ROS 2图是一个ROS 2元件同时处理数据的网络,如果将它们全部映射并可视化它们,则包括所有可执行文件以及它们之间的连接。
Alt
ROS中的每个节点(node)都应该只为了单个的、模块化的目的而设计的,例如控制车轮电动机或从激光测距仪发布传感器数据。每个节点都可以通过主题(topic),服务(service),动作(action)或参数(parameters)从其他节点发送和接收数据。在ROS 2中,一个可执行程序(c++或python程序)可以包含一个或多个节点(node)。

ros2 run

此命令启动一个包中的可执行程序:

ros2 run <package_name> <executable_name>

ros2 node list

此命令展示所有运行中的节点的名字。常用来查找你想要交互或跟踪的节点。

ros2 node list

重映射(remap)

此参数用来重新定义默认的节点属性(比如节点名,话题名,服务名)为用户指定的值。

ros2 node info

此命令用于获取节点更多信息。通常包括订阅消息者们(subscriber),发布消息者(publiser),服务(service)和动作(action)。

ros2 node info <node_name>

/turtlesim节点信息如下:

/turtlesimSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEvent/turtle1/cmd_vel: geometry_msgs/msg/TwistPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/turtle1/color_sensor: turtlesim/msg/Color/turtle1/pose: turtlesim/msg/PoseService Servers:/clear: std_srvs/srv/Empty/kill: turtlesim/srv/Kill/reset: std_srvs/srv/Empty/spawn: turtlesim/srv/Spawn/turtle1/set_pen: turtlesim/srv/SetPen/turtle1/teleport_absolute: turtlesim/srv/TeleportAbsolute/turtle1/teleport_relative: turtlesim/srv/TeleportRelative/turtlesim/describe_parameters: rcl_interfaces/srv/DescribeParameters/turtlesim/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/turtlesim/get_parameters: rcl_interfaces/srv/GetParameters/turtlesim/list_parameters: rcl_interfaces/srv/ListParameters/turtlesim/set_parameters: rcl_interfaces/srv/SetParameters/turtlesim/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomicallyService Clients:Action Servers:/turtle1/rotate_absolute: turtlesim/action/RotateAbsoluteAction Clients:

/teleop_turtle节点信息如下:

/teleop_turtleSubscribers:/parameter_events: rcl_interfaces/msg/ParameterEventPublishers:/parameter_events: rcl_interfaces/msg/ParameterEvent/rosout: rcl_interfaces/msg/Log/turtle1/cmd_vel: geometry_msgs/msg/TwistService Servers:/teleop_turtle/describe_parameters: rcl_interfaces/srv/DescribeParameters/teleop_turtle/get_parameter_types: rcl_interfaces/srv/GetParameterTypes/teleop_turtle/get_parameters: rcl_interfaces/srv/GetParameters/teleop_turtle/list_parameters: rcl_interfaces/srv/ListParameters/teleop_turtle/set_parameters: rcl_interfaces/srv/SetParameters/teleop_turtle/set_parameters_atomically: rcl_interfaces/srv/SetParametersAtomicallyService Clients:Action Servers:Action Clients:/turtle1/rotate_absolute: turtlesim/action/RotateAbsolute

理解话题(topic)

话题是ROS图的一个至关重要的元素,扮演着节点间用于交换信息的总线的角色。
Alt

rqt_graph

在一个终端执行rqt_graph或者执行rqt后选择菜单Plugins > Introspection > Node Graph
Alt
上图描述了/turtlesim节点和/teleop_turtle节点如何在一个话题上通信的。/teleop_turtle节点发布数据到/turtle1/cmd_vel话题,/turtlesim节点订阅这个话题来接收数据。

ros2 topic list

此命令用于显示当前活动的所有话题。加上-t参数会在[]中显示话题的类型。

hugo@vm-ubuntu1:~$ ros2 topic list -t
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]

ros2 topic echo

此命令用来查看正在被发布的话题数据。
如下图所示,刚开始没有输出任何数据,他在等待/teleop_turtle发布信息。在运行turtle_teleop_key的终端按键控制乌龟运动,这时echo的终端就会输出信息了。

ros2 topic echo <topic_name>

Alt
在rqt_graph界面去掉工具栏中Hide:Debug前面的勾,就可以看到以/_ros2cli_开头的一个节点就是刚才执行的echo命令。
Alt

ros2 topic info

此命令也可以显示话题的类型、订阅者数量和发布者数量。

hugo@vm-ubuntu1:~$ ros2 topic info /turtle1/cmd_vel
Type: geometry_msgs/msg/Twist
Publisher count: 1
Subscription count: 2

ros2 interface show

此命令用于查看消息类型的具体定义。

hugo@vm-ubuntu1:~$ ros2 interface show geometry_msgs/msg/Twist
# This expresses velocity in free space broken into its linear and angular parts.Vector3  linearfloat64 xfloat64 yfloat64 z
Vector3  angularfloat64 xfloat64 yfloat64 z

ros2 topic pub

此命令用于直接发布一个话题消息。
–once 是可选参数,意思是”发布一个消息然后退出“。

ros2 topic pub <topic_name> <msg_type> '<args>'

Alt
–rate 1参数表示以1Hz的稳定频率发布命令。效果如下图:
Alt
可以使用如下命令查看乌龟的位置信息,可以看出是由turtlesim发布,echo命令订阅的。

ros2 topic echo /turtle1/pose

Alt

ros2 topic hz

此命令用来查看正在发布数据的频率。

ros2 topic hz /turtle1/pose

Alt
可以在一个终端执行刚才的发布/turtle1/cmd_vel,在另一个终端打印发布频率。
Alt

Clean up

在每个命令行窗口执行Ctrl+C终结他们。

理解服务(service)

服务是在ROS图中另一种节点之间通讯的方法。与发布-订阅模式的话题相对,服务是基于请求-应答模式的。虽然话题允许节点订阅数据流并获取连续更新,服务仅在客户端专门调用时才能提供数据。
Alt

ros2 service list

启动turtlesim_node和turtle_teleop_key后,执行ros2 service list后如下图显示:

hugo@vm-ubuntu1:~$ ros2 service list
/clear
/kill
/reset
/spawn
/teleop_turtle/describe_parameters
/teleop_turtle/get_parameter_types
/teleop_turtle/get_parameters
/teleop_turtle/list_parameters
/teleop_turtle/set_parameters
/teleop_turtle/set_parameters_atomically
/turtle1/set_pen
/turtle1/teleport_absolute
/turtle1/teleport_relative
/turtlesim/describe_parameters
/turtlesim/get_parameter_types
/turtlesim/get_parameters
/turtlesim/list_parameters
/turtlesim/set_parameters
/turtlesim/set_parameters_atomically

可以看到两个节点的服务里都包含6个”parameter“的服务,ROS 2 中几乎每个节点都有这些基础设施服务,参数是基于这些服务构建的。

ros2 service type

此命令可以查看一个服务的请求和响应的数据的结构定义。服务类型定义与话题类型相似,只是由请求消息和响应消息两部分定义。

ros2 service type <service_name>

ros2 service list -t

此命令可以用来显示所有活动状态的服务及其类型定义。其中-t是–show-types的缩写。

hugo@vm-ubuntu1:~$ ros2 service list -t
/clear [std_srvs/srv/Empty]
/kill [turtlesim/srv/Kill]
/reset [std_srvs/srv/Empty]
/spawn [turtlesim/srv/Spawn]
/teleop_turtle/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/teleop_turtle/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/teleop_turtle/get_parameters [rcl_interfaces/srv/GetParameters]
/teleop_turtle/list_parameters [rcl_interfaces/srv/ListParameters]
/teleop_turtle/set_parameters [rcl_interfaces/srv/SetParameters]
/teleop_turtle/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]
/turtle1/set_pen [turtlesim/srv/SetPen]
/turtle1/teleport_absolute [turtlesim/srv/TeleportAbsolute]
/turtle1/teleport_relative [turtlesim/srv/TeleportRelative]
/turtlesim/describe_parameters [rcl_interfaces/srv/DescribeParameters]
/turtlesim/get_parameter_types [rcl_interfaces/srv/GetParameterTypes]
/turtlesim/get_parameters [rcl_interfaces/srv/GetParameters]
/turtlesim/list_parameters [rcl_interfaces/srv/ListParameters]
/turtlesim/set_parameters [rcl_interfaces/srv/SetParameters]
/turtlesim/set_parameters_atomically [rcl_interfaces/srv/SetParametersAtomically]

ros2 service find

此命令用来查找所有指定类型的服务。

hugo@vm-ubuntu1:~$ ros2 service find std_srvs/srv/Empty
/clear
/reset

ros2 interface show

此命令用来显示类型的结构定义。

hugo@vm-ubuntu1:~$ ros2 interface show turtlesim/srv/Spawn
float32 x
float32 y
float32 theta
string name # Optional.  A unique name will be created and returned if this is empty
---
string name

”—“用来分隔请求结构(上面)响应结构(下面)。

ros2 service call

此命令是调用服务也就是向服务发送请求。

ros2 service call <service_name> <service_type> <arguments>

在写参数时需要特别注意是遵循YAML语法,冒号后面需要加空格,否则会报错。
Alt

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

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

相关文章

【2023年11月第四版教材】第10章《进度管理》(第三部分)

第10章《进度管理》&#xff08;第三部分&#xff09; 7 估算活动持续时间7.1 估算活动持续时间7.2 类比估算★★★7.3 参数估算★★★7.4 三点估算★★★7.5 数据分析★★★ 7 估算活动持续时间 组过程输入工具和技术输出计划4,估算活动持续时间1.项目管理计划&#xff08;进…

数据库基础

目录 一、数据库是什么&#xff1f; 二、目前主流的数据库 三、数据库基本使用 1.连接服务器 2.服务器、数据库、表关系 3.使用案例 4、数据逻辑存储 四、MySQL基本知识 1、MySQL架构 2、SQL语句分类 3、存储引擎 总结 一、数据库是什么&#xff1f; 数据库是按照数据结构来组…

golang读取键盘功能按键输入

golang读取键盘功能按键输入 需求 最近业务上需要做一个终端工具&#xff0c;能够直接连到docker容器中进行交互。 技术选型 docker官方提供了python sdk、go sdk和remote api。 https://docs.docker.com/engine/api/sdk/ 因为我们需要提供命令行工具&#xff0c;因此采用g…

6、NoSQL的四大分类

6、NoSQL的四大分类 kv键值对 不同公司不同的实现 新浪&#xff1a;Redis美团&#xff1a;RedisTair阿里、百度&#xff1a;Redismemcache 文档型数据库&#xff08;bson格式和json一样&#xff09; MongoDB MongoDB是一个基于分布式文件存储的数据库&#xff0c;一般用于存储…

PAT 1171 Replacement Selection

个人学习记录&#xff0c;代码难免不尽人意。 When the input is much too large to fit into memory, we have to do external sorting instead of internal sorting. One of the key steps in external sorting is to generate sets of sorted records (also called runs) wi…

Spring源码解析-构造函数

1、构造函数概述 构造函数中&#xff0c;主要创建两个对象分别用来读取注解参数和classpath下的文件 AnnotatedBeanDefinitionReader 专门读取注解参数的Reader ClassPathBeanDefinitionScanner 专门读取classpath下的文件&#xff0c;例如yml、properties等。 AnnotationC…

Unity 切换场景后场景变暗

问题 Unity版本&#xff1a;2019.4.34f1c1 主场景只有UI&#xff0c;没有灯光&#xff0c;天空盒&#xff1b;其他场景有灯光和天空盒所有场景不烘焙主场景作为启动场景运行&#xff0c;切换到其他场景&#xff0c;场景变暗某一个场景作为启动场景运行&#xff0c;光影效果正…

第P3周:天气识别

一、前期准备 1、设置GPU import torch import torch.nn as nn import torchvision.transforms as transforms import torchvision from torchvision import transforms, datasetsimport os,PIL,pathlibdevice torch.device("cuda" if torch.cuda.is_available() …

【探索Linux】—— 强大的命令行工具 P.7(进程 · 进程的概念)

阅读导航 前言一、冯诺依曼体系结构二、操作系统&#xff08;OS&#xff09;1. 概念 三、进程1. 进程的概念2. PCB&#xff08;Process Control Block&#xff09;3. 查看进程 四、fork函数1. 函数简介2. 调用方式3. 返回值4. 使用示例 五、进程的几种状态1. 状态简介2. 进程状…

SQLServer如何获取客户端IP

SQLServer如何获取客户端IP 很多用户询问如何通过SQLServer获取客户端IP从而定位一些问题&#xff0c;比如链接泄露&#xff0c;其实主要是利用几个相关视图&#xff0c;如下给出一些SQL方便用户排查 当前链接 SELECT CONNECTIONPROPERTY(PROTOCOL_TYPE) AS PROTOCOL_TYPE,CO…

Redis 数据类型详细解析

Redis是一个开源的、内存中的数据结构存储系统&#xff0c;可用作数据库、缓存和消息代理。Redis支持多种类型的数据结构&#xff0c;包括字符串&#xff08;String&#xff09;、哈希&#xff08;Hashes&#xff09;、列表&#xff08;Lists&#xff09;、集合&#xff08;Set…

sql中的排序函数dense_rank(),RANK()和row_number()

dense_rank()&#xff0c;RANK()和row_number()是SQL中的排序函数。 为方便后面的函数差异比对清晰直观&#xff0c;准备数据表如下&#xff1a; 1.dense_rank() 函数语法&#xff1a;dense_rank() over( order by 列名 【desc/asc】) DENSE_RANK()是连续排序&#xff0c;比如…

《Linux 系统命令及Shell脚本实践指南》

Linux 系统命令及Shell脚本实践指南 《Linux 系统命令及Shell脚本实践指南》该书从结构上分为三部分:第一部分1.1Linux的历史发展1.2用户管理1.3任务管理单一时刻执行一次任务使用at周期性任务使用&#xff1a;cron表达式&#xff0c;命令crontab 1.4文件管理1.4.1 Linux shell…

Java8实战-总结18

Java8实战-总结18 使用流筛选和切片用谓词筛选筛选各异的元素截短流跳过元素 使用流 流让你从外部迭代转向内部迭代。这样&#xff0c;就用不着写下面这样的代码来显式地管理数据集合的迭代(外部迭代)了&#xff1a; List<Dish> vegetarianDishes new ArrayList<>…

Docker介绍

Dockerfile 是一个用来构建镜像的文本文件&#xff0c;文本内容包含了一条条构建镜像所需的指令和说明。注意&#xff1a;Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层&#xff0c;会造成镜像膨胀过大。上下文路径下不要放无用的文件&#xff0c;…

Mybatis批量更新数据及其优化

需求场景&#xff1a;定时任务中&#xff0c;从其他平台同步数据&#xff0c;并更新当前平台数据库&#xff0c;表数据3W&#xff0c;分批更新某个字段&#xff0c;耗时巨大&#xff0c;约30min&#xff0c;尝试性能优化。 批量更新的几种常见方式&#xff1a; 1.foreach 循环…

数据库的三个范式

数据库的三个范式是关系数据库设计中的一组规范&#xff0c;用于确保数据的有效性和一致性。这三个范式分别是&#xff1a; 第一范式&#xff08;1NF&#xff09;&#xff1a;要求数据库表中的每一列都是不可分割的原子值。换句话说&#xff0c;每个表中的每个字段不能包含多个…

Django实现音乐网站 ⒃

使用Python Django框架制作一个音乐网站&#xff0c; 本篇主要是歌手详情页-专辑列表、专辑详情-单曲列表开发实现内容。 目录 歌手详情-专辑列表 路由设置 跳转设置 视图方法 模板内容 专辑详情-单曲列表 设置路由 视图处理并返回 模板渲染 分页优化 引入错误类型库…

v-model和v-bind

v-model&#xff0c;它其实就是一个语法糖&#xff0c;作用就是双向绑定表单控件&#xff08;radio, text,address,email,select,checkbox,textarea&#xff09; v-bind(简写形式:value值),用于绑定属性值&#xff0c;只能实现数据的单项绑定。 <template> <div>…

9.2 消息对话框 画板 定时器

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//设置定时器timernew QTimer(this);timeidthis->startTimer(1000);connect(timer,&QTimer::timeout,this,&Widget::timeout_slot);speechernew QTextToSpeech(this);//边框this-&…