理解ros话题---ros学习第5篇

loongembedded loongembedded     2023-03-09     804

关键词:

1. 通过键盘控制turtle

(1) 打开一个终端运行roscore
(2) 再打开一个新的终端来打开turtlesim_node节点

kandi@ubuntu:~$ rosrun turtlesim turtlesim_node

弹出一个乌龟的界面
(3) 再打开一个新的终端,通过键盘控制turtle

kandi@ubuntu:~$ rosrun turtlesim turtle_teleop_key


现在就可以通过键盘上的方向键来控制turtle运动了,要确保turtle_teleop_key的终端窗口是在任务最前面,这样才能获取方向键的输入,才能看到turtle的移动

2. ROS话题

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。我们使用rqt_graph来显示当前运行的节点和话题。

2.1 使用rqt_graph

打开一个新的终端:

$ rosrun rqt_graph rqt_graph

弹出一个窗口

把鼠标放在/turtle/cmd_vel上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。其中turtle_teleop_key节点对应蓝色的/teleop_turtle,turtlesim_node节点对应绿色的/turtlesim,可以看到,这两个节点通过一个名为/turtle1/cmd_vel的话题来相互通信。

2.2 介绍rostopic

可通过使用rostopic帮助选项查看可用的rostopic子命令,用法:

$ rostopic -h

rostopic is a command-line tool for printing information about ROS Topics.

Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic or field type
Type rostopic -h for more detailed usage, e.g. ‘rostopic echo -h’

2.3 使用功能rostopic echo

rostopic echo可以显示在某个话题上发布的数据
用法:

$ rostopic echo [topic]

打开新终端:

rostopic echo /turtle1/cmd_vel

输入上面命令后刚开始什么信息都看不到,请选中turtle_teleop_key的终端窗口以确保按键输入能够被捕获,需要按下键盘方向键让turtle_teleop_key节点发布数据。可以看到turtle_teleop_key节点发布的"指令、速度"

现在再来看一下rqt_graph,正如我们所看到的,rostopic echo (这里红色显示)现在也订阅了/turtle1/cmd_vel话题

2.4 使用rostopic list

rostopic list能够列出当前已被订阅和发布的所有话题,使用下面命令列出所有发布和订阅的主题及其类型的详细信息:

rostopic list -v

3. ROS消息

话题的通信是通过节点间发送ROS消息实现的。为了使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接受相同类型的消息。这意味着对话题的类型是由发布在它上面消息的类型决定的。

3.1 使用rostopic type

使用rospotic type命令可以查看发布在话题上的消息的类型,用法:

rostopic type [topic]

运行:

kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

我们可以通过使用rosmsg查看消息的详细信息:

kandi@ubuntu:~$ rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z

到现在我们已经知道turtlesim节点想要的消息类型,然后可以发布命令给turtle了。

4.继续学习rostopic

4.1 使用rostopic pub

rostopic pub可以把数据发布到当前某个正在广播的话题上
用法:

rostopic pub [topic] [msg_type] [args]

示例:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’

此条命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度移动。对应移动的距离见下图:

下面来详细分析一下其中的每一个参数。
●"rostopic pu"这条命令将消息发布到指定的话题
●"-l"这一选项会让rostopic只发布一条消息,然后退出
●"/turtle1/cmd_vel"这是要发布到的话题的名称
●"geometry_msgs/Twist"这是发布到话题时使用的消息的类型
●"–"这两个破折号用来告诉选项解析器,标明之后的参数都不是选型。如果参数前有破折号(-)比如附属,那么这是必需的。
●如前所述,一个geometry_msgs/Twist消息有两个浮点型元素:linear和angular。在本例中,’[2.0, 0.0, 0.0]‘表示linear的值为x=2.0, y=0.0, z=0.0,而’[0.0, 0.0, 1.8]'是说angular的值为x=0.0, y=0.0, z=1.8。这些参数实际上使用的是YAML语法,在YAML命令行文档中有描述。

运行完"rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’"
后turtle已经停止移动了,如果要保持移动状态,turtle需要一个稳定的频率为1Hz的指令流程才能保持移动的状态。我们可以使用rostopic pub -r命令来发布源源不断的命令,下面命令以1Hz的速度发布geometry_msgs/Twist 消息到/turtle1/cmd_vel话题中。

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’


我们还可以看一下rqt_graph中的情形,可以看到rostopic pub节点(红色)正在与rostopic echo节点(绿色)进行通信:

可以看到,turtle正沿着一个圆形轨迹持续运动。我们可以在新终端中通过rostopic echo命令来查看turtlesim所发布的数据

4.2 使用rostopic hz

rostopic hz报告数据发布的频率,用法:

rostopic hz [topic]

我们看一下turtlesim_node发布/turtle/pose有多快:

现在我们知道了turtlesim正以大概60Hz的频率发布有关乌龟的数据,我们也可以结合rostopic type和rosmsg show命令来获取关于某个话题的更深层次信息

kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel | rosmsg show
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z

5. 使用rqt_plot

rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据,这里我们使用rqt_plot命令来绘制正被发布到/turtle1/pose话题上的数据,首先,在一个新终端中输入:

$ rosrun rqt_plot rqt_plot

会弹出一个新窗口,可以在左上角的文本框里面添加任务想要绘制的话题。在里面输入/turtle1/pose/x后,之前不能按下的加号按钮将会变亮。按一下该按钮,并对/turtle1/pose/y重复相同的过程。现在你会在图中看到turtle的x-y位置

按下减号按钮会显示一组菜单可以让你在图中隐藏指定的话题。现在隐藏掉你刚才添加的话题并添加/turtle1/pose/theta,你会看到如下所示的图:

理解ros节点---ros学习第4篇

文章目录1.图概念速览2.节点3.客户端库4.roscore5.使用rosnode6.使用rosrun1.图概念速览计算图(ComputationGraph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器... 查看详情

理解ros节点---ros学习第4篇

文章目录1.图概念速览2.节点3.客户端库4.roscore5.使用rosnode6.使用rosrun1.图概念速览计算图(ComputationGraph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器... 查看详情

理解ros服务和参数---ros学习第6篇

文章目录1.ROS服务2.使用rosservice2.1rosservicelist2.2rosservicetype2.3rosservicecall3.使用rosparam3.1rosparamlist3.2rosparamset和rosparamget3.3rosparamdump和rosparamload1.ROS服务服务时节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个... 查看详情

理解ros服务和参数---ros学习第6篇

文章目录1.ROS服务2.使用rosservice2.1rosservicelist2.2rosservicetype2.3rosservicecall3.使用rosparam3.1rosparamlist3.2rosparamset和rosparamget3.3rosparamdump和rosparamload1.ROS服务服务时节点之间通讯的另一种方式。服务允许节点发送一个请求(request)并获得一个... 查看详情

ros官网初级教程学习总结(5-9)(代码片段)

...址:http://wiki.ros.org/cn/ROS/Tutorials。本博客为5-9小节。理解ROS节点图概念概述Nodes:节点,一个节点即为一个可执行文件。节点可以发布或接收一个话题,也可以提供或使用某种服务。Messages:消息,消息是一种ROS数据类型&#... 查看详情

ros官网初级教程学习总结(5-9)(代码片段)

...址:http://wiki.ros.org/cn/ROS/Tutorials。本博客为5-9小节。理解ROS节点图概念概述Nodes:节点,一个节点即为一个可执行文件。节点可以发布或接收一个话题,也可以提供或使用某种服务。Messages:消息,消息是一种ROS数据类型&#... 查看详情

ros学习笔记三(理解ros节点)

要求已经在Linux系统中安装一个学习用的ros软件包例子:sudoapt-getinstallros-indigo-ros-tutorialsROS图形概念概述nodes:节点,一个节点即为一个可执行文件,可以通过ROS和其他节点进行通信;messages:消息,当订阅或者发布一个topic时使... 查看详情

ros2学习笔记25--ros2话题统计编写教程(c++)(代码片段)

概要:这篇内容主要介绍用c++编写能够统计话题的侦听器环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现4.1ros2话题统计教程(C++)(... 查看详情

ros计算图级,理解ros节点、话题

参考技术A计算图级-------是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来,即通过节点、节点管理器、话题、服务等来进行表现。ROS中的基本计算图... 查看详情

ros21讲学习-订阅话题(代码片段)

...***************************************//***该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose*/#include<ros/ros.h>#include"turtlesim/Pose.h"//消息类型//接收到订阅的消息后,会进入消息回调函数voidposeCallback(constturtlesim::Pose::ConstPtr&msg)//将... 查看详情

ros学习--第3篇:ros基础---创建工作空间

1.创建工作空间catkin_ws创建src文件,放置功能包源码:mkdir-p~/catkin_ws/src进入src文件夹:cd~/catkin_ws/src初始化文件夹:catkin_init_workspace这样就在src文件中创建了一个CMakeLists.txt的文件,目的是告诉系统,这个... 查看详情

ros学习--第3篇:ros基础---创建工作空间和软件包

1.创建工作空间catkin_ws创建src文件,放置功能包源码:mkdir-p~/catkin_ws/src进入src文件夹:cd~/catkin_ws/src初始化文件夹:catkin_init_workspace这样就在src文件中创建了一个CMakeLists.txt的文件,目的是告诉系统,这个... 查看详情

ros官网初级教程学习总结(17-20)(代码片段)

...#xff08;通过创建一个bag文件)如何记录ROS系统运行时的话题数据,记录的话题数据将会累积保存到bag文件中。录制所有发布的话题rostopiclist-v:检查看当前系统中发布的所有话题。开始录制 查看详情

ros-ros命令rostopic:ros话题

...温习一下ROS术语。命令详细说明rostopiclist 显示活动的话题目录 rostopicecho[话题名称] 实时显示指定话题的消息内容 rostopicfind[类型名称]  显示使用指定类型的消息的话题  rostopictype[话题名称]显示指定... 查看详情

ros1学习笔记:ros命令行工具的使用(ubuntu20.04)(代码片段)

...示节点列表:rosnodelist查看节点信息:rosnodeinfo2、话题rostopic显示话题列表:rostopiclist手动发送数据给话题(topic)控制小海龟移动:rostopicpub3、消息rosmsg查看消息数据结构:rosmsgshow4、使用服务通信方式࿱... 查看详情

ros2学习笔记12--创建ros2包(代码片段)

概要:这篇主要介绍如何创建ros2包环境:ubuntu20.04,ros2-foxy,vscode最后如果没有陈述实操过程中碰到问题的话,则表示该章节都可被本人正常复现.2.2.2创建自己第一个ros2包(原文:https://docs.ros.org/en/foxy/Tutor... 查看详情

ros与arduino学习订阅与发布

...iber<std_msgs::Empty>sub("WWWW",&hhhhh);  其中WWWW是话题的名称,hhhh 查看详情

ros2日文新书-2021-07

[目录]第1章简介2.机器人环境与ROS22-1机器人周围的环境与发展2-2ROS概述和ROS22-3ROS2和发行版第3章ROS2基础知识3-1ROS2安装3-2ROS2的操作第4章ROS2编程4-1编程流程4-2主题定义4-3类型4-4服务4-5参数4-6推出第5章支持ROS2的系统5-1ROS2架构5-2DDS... 查看详情