详细的Rostopic命令系列(包括消息发布等实例操作)

目录

Rostopic命令系列

Rostopic list系列指令

Rostopic list

Rostopic list -v

Rostopic list /namespace

Rostopic list -b bagFile.bag

Rostopic list -p/-s

Rostopic bw topic_name

Rostopic delay topic_name

Rostopic hz topic_name

Rostopic info topic_name

Rostopic list

Rostopic type topic_name

Rostopic echo系列指令

Rostopic echo --offset topic_name(--offset中是两个-)

Rostopic echo -c topic_name

Rostopic echo --filter “m.data==’str’” topic_name

Rostopic echo -b bagFile.bag topic_name

Rostopic echo -p topic_name

Rostopic echo -p --noarr --nostr topic_name

Rostopic echo -n msg_number topic_name

Rostopic echo topic_name/arg

输出topic_name中指定参数的数据:

Rostopic pub系列之令

Rostopic pub topic_name topic_type arg1 arg2 ……

Rostopic pub topic_name topic_type “arg1,args2…”

Rostopic pub -l Hz_value topic_name topic_type “arg1,args2…”

Rostopic pub -1 topic_name topic_type “arg1,args2…”

Rostopic pub -f yamlFilePath topic_name topic_type “arg1,args2…”

Rostopic find topic_type


Rostopic命令系列

Rostopic list系列指令

Rostopic list

和之前的rosnode list一样,这个命令用于列出所有现在正在通信的通信话题名称,无需参数。调用如下:

Rostopic list -v

该命令可以显示出发布者/订阅者与指定话题的关系,即以详尽模式显示topic信息:

详细的Rostopic命令系列(包括消息发布等实例操作)_第1张图片

Rostopic list /namespace

列出指定命名空间下的话题:

详细的Rostopic命令系列(包括消息发布等实例操作)_第2张图片

Rostopic list -b bagFile.bag

显示录制文件中包含的topic:

详细的Rostopic命令系列(包括消息发布等实例操作)_第3张图片

Rostopic list -p/-s

列出功能包中自定义发布方/订阅方所发布/订阅的topic:

详细的Rostopic命令系列(包括消息发布等实例操作)_第4张图片

Rostopic bw topic_name

“bw”就是bandwidth的简写,该命令行是用来显示两个节点通过我们指定的topic_name话题进行通信的带宽。带宽说白了就是“通信双方的通信速率(比特/秒)”。操作如下:

详细的Rostopic命令系列(包括消息发布等实例操作)_第5张图片

数据显示的就是每秒进行的通信数据量,用bit/s来表示,window那个数据就代表从开始通信到现在一共进行了多少次通信。

Rostopic delay topic_name

当你的.msg文件中包含Header类对象时,此时你的自定义数据类类型中就已经包含了Header类对象并且将其绑定在你的数据信息中一起发布到订阅端,当你运行完文件publisher和subscriber所在的文件,你就会发现我们可以在订阅端订阅到Header消息:

① publisher端代码运行:

详细的Rostopic命令系列(包括消息发布等实例操作)_第6张图片

注意:一定在运行前,先执行“source ./devel/setup.bash”命令,启动下一启动项。

② subscriber端代码运行:

详细的Rostopic命令系列(包括消息发布等实例操作)_第7张图片

注意:一定在运行前,先执行“source ./devel/setup.bash”命令,启动下一启动项。

再运行“rostopic delay /topic_name”就会出现该话题消息所对应的header信息了:

详细的Rostopic命令系列(包括消息发布等实例操作)_第8张图片

一定要注意,一定要在Header_ros项目文件下运行(我这里的功能包名称为Header_ros)。

这里使用”rostopic delay /topic_name”获取的信息,是通过在通信中捕获header头消息得出的,如果没有header头消息,那么调用该命令无效。

Rostopic hz topic_name

这个命令用于查看话题通信中信息发布的速度:

详细的Rostopic命令系列(包括消息发布等实例操作)_第9张图片

Rostopic info topic_name

这个命令用于查看通过指定topic话题相互通信的双方的信息:

详细的Rostopic命令系列(包括消息发布等实例操作)_第10张图片

Rostopic list

这个命令是列出当下项目文件中所有通信的主题:

详细的Rostopic命令系列(包括消息发布等实例操作)_第11张图片

Rostopic type topic_name

这个命令用于列出topic_name主题的数据类型,我们这里使用的自定义的话题通信消息文件是person.msg文件:

Rostopic echo系列指令

Rostopic echo --offset topic_name(--offset中是两个-)

该命令的作用是用于显示当下实时显示的消息相对于开始通信之时的延迟时间,即该条数据发送的时刻相对于通信开始的时刻来说已经过去多久了:

详细的Rostopic命令系列(包括消息发布等实例操作)_第12张图片

这个命令和“rostopic echo topic_name”作用一样,如下所示:

详细的Rostopic命令系列(包括消息发布等实例操作)_第13张图片

Rostopic echo -c topic_name

如果你看这一条条的数据太不顺眼,可以使用这个命令,该命令可以使得发送完一条信息后自动清屏发送并自动发送下条数据:

详细的Rostopic命令系列(包括消息发布等实例操作)_第14张图片

Rostopic echo --filter “m.data==’str’” topic_name

我们订阅一个话题,可以看到打印到命令窗口的消息内容:

详细的Rostopic命令系列(包括消息发布等实例操作)_第15张图片

输出的消息都是yaml格式的,我们使用yaml文件的编写格式来解读以下输出的消息:

1. transforms是个数组(因为以-开头);

2. 数组中每个元素又是个结构体,结构体中的变量结构如下所示:

Header

seq

stamp

sec

nsec

Frame_id

Child_frame_id

transform

translation

x

y

z

rotation

x

y

z

订阅到的数据全都被放在了名为m的数组中,我们可以使用m来调用所有使用echo订阅到的消息,并结合匹配表达式匹配特定的消息:

使用示例:

详细的Rostopic命令系列(包括消息发布等实例操作)_第16张图片

我们可以使用python中支持的所有用于逻辑运算的运算符:

符号

逻辑运算对象

==

一般用于字符,也可用于数字

<=

一般用于数字

>=

一般用于数字

>

一般用于数字

<

一般用于数字

除此之外,还支持表达式结果的匹配:

详细的Rostopic命令系列(包括消息发布等实例操作)_第17张图片

使用注意事项:

1. 由于transforms本身就是个数组,那为何使用m.transforms[0]呢?不使用m.transforms[n]呢?首先我们使用rostopic echo订阅到许多的数据,那你可以数的清吗?除此之外,当你输入m.transforms[n]且当n不为0时,系统会报错。如果我们输出的消息是transforms一样的数组,那么我们匹配特定消息时,都要使用array[0]形式!

2. 只可以对数字和字符串加以限定,也就是说“逻辑运算对象只可以是数字或者字符串”。

Rostopic echo -b bagFile.bag topic_name

打印出bag录制文件中指定topic_name的消息:

详细的Rostopic命令系列(包括消息发布等实例操作)_第18张图片

我们在读取bag文件中的消息时,一般使用ros_readbagfile指令,为何呢?

因为rostopic echo -b bagFile.bag topic_name只可以查看指定的话题的消息,也就是对一个话题录制的消息,这太局限了,就拿小车为例“难道我们查看时只查看小车的速度信息吗,按道理来讲,速度信息和小车状态信息应该一同纳入我们的监视范围才可以”。这个命令需要安装,原生版本的ROS并不自带:

ros_readbagfile no module named ‘cryptodome‘_u014154183的博客-CSDN博客_ros_readbagfileicon-default.png?t=M1L8https://blog.csdn.net/u014154183/article/details/116242626

ROS/Tutorials/reading msgs from a bag file - ROS Wikiicon-default.png?t=M1L8http://wiki.ros.org/ROS/Tutorials/reading%20msgs%20from%20a%20bag%20file#rosbag.2FTutorials.2Freading_msgs_from_a_bag_file.Example_1:

使用ros_readbagfile脚本高效提取bag中的topic数据_易-CSDN博客_ros_readbagfileicon-default.png?t=M1L8https://blog.csdn.net/weixin_42269667/article/details/116267496由于我们还未将python脚本文件编译成.exe可执行文件,因此对于脚本文件,我们可以进行如下参数传递(先对.py脚本文件使用chmod +x file.py授予可执行权限):

详细的Rostopic命令系列(包括消息发布等实例操作)_第19张图片

Rostopic echo -p topic_name

以MATLAB数据格式打印topic_name发布的消息:

详细的Rostopic命令系列(包括消息发布等实例操作)_第20张图片

注意:

1. 不可以和-c指令一起使用!

2. 以%开头的注释显示以空格分隔开来的数据对应的变量名名称。

Rostopic echo -p --noarr --nostr topic_name

详细的Rostopic命令系列(包括消息发布等实例操作)_第21张图片

在以MATLAB数据格式打印消息时,排除数组(--noarr)、排除字符串(--nostr):

Rostopic echo -n msg_number topic_name

订阅指定topic话题所发出的msg_number条消息之后就自动停止订阅监听:

详细的Rostopic命令系列(包括消息发布等实例操作)_第22张图片

Rostopic echo topic_name/arg

输出topic_name中指定参数的数据:

Rostopic pub系列之令

Rostopic pub topic_name topic_type arg1 arg2 ……

Rostopic pub发布带有Header类型的简单消息中最难的一步在于发布header类型中的stamp时间戳数据,这个数据是map类型的,因此必须通过如下方式进行发布:

详细的Rostopic命令系列(包括消息发布等实例操作)_第23张图片

在订阅端使用rosrun命令运行完对应的订阅端对应的源文件之后,会显示如下结果:

详细的Rostopic命令系列(包括消息发布等实例操作)_第24张图片

一定要切记:

① map类型数据如何输入到命令行中?

rostopic pub /chatter hello_ros/person "header:   
  seq: 10  
  stamp: {secs: 10, nsecs: 10}  
  frame_id: 'earth'  
age: 0  
height: 0.0  
name: 'd'" 

map这种键值对类型的数据必须使用{}大括号括起来;

② 细节问题:

假如我们在“stamp:”后面输入数据,切记“一定要在:冒号后面添加空格”,因为我们在命令行输入的信息全都是以字符类型的形式传入”int main(int argc,char* argv[])”main函数入口的,因此在:冒号后面加空格,可以将我们的数据和提示信息分别开来不会混淆。

我们也可以按照一定速率给订阅方发送消息:

① 发送一条消息后就自动结束(once mode):

详细的Rostopic命令系列(包括消息发布等实例操作)_第25张图片

② 按照一定频率发送消息(rate mode):

详细的Rostopic命令系列(包括消息发布等实例操作)_第26张图片

订阅端响应如下所示:

详细的Rostopic命令系列(包括消息发布等实例操作)_第27张图片

③ 只发送一次消息就结束发送,但是此时发布消息的一端并没有结束运行而是挂起等待我们按下”crtl+c”来结束发布端的挂起状态(latch mode):

详细的Rostopic命令系列(包括消息发布等实例操作)_第28张图片

订阅端响应如下所示:

详细的Rostopic命令系列(包括消息发布等实例操作)_第29张图片

Rostopic pub topic_name topic_type “arg1,args2…”

因为我们在命令行向功能包发布消息,因此首先查找自定义功能包的订阅者:

详细的Rostopic命令系列(包括消息发布等实例操作)_第30张图片

我们获知“topic_name=/turtle1/cmd_vel,topic_type=geometry_msgs/Twist”,因此我们使用rostopic pub来向订阅/turtle1/cmd_vel的自定义订阅者发布信息:

详细的Rostopic命令系列(包括消息发布等实例操作)_第31张图片

当输入至“rostopic pub /turtle1/cmd_vel geometry_msgs/Twist”可以使用tab键自动补齐参数,命令行会根据你的topic_type自动补齐你的参数。乌龟节点运动如下所示:

详细的Rostopic命令系列(包括消息发布等实例操作)_第32张图片

Rostopic pub -l Hz_value topic_name topic_type “arg1,args2…”

Rostopic pub有四种模式:

输入命令的形式

含义

Rostopic pub -l

Latch模式(默认模式),publisher之发送一条消息,然后等待结束publisher的指令

Rostopic pub -r

Rate模式,publisher按照指定的频率进行消息的发布

Rostopic pub -1

Once模式,publisher发布一次消息之后自动退出运行

Rostopic pub -f

Filter模式,publisher从yaml文件中读取消息然后进行发布,yaml文件中有多少条消息就发布多少条消息

输入如下指令之后,乌龟节点以10Hz的频率按照publisher发布的运动信息运动:

详细的Rostopic命令系列(包括消息发布等实例操作)_第33张图片

Rostopic pub -1 topic_name topic_type “arg1,args2…”

详细的Rostopic命令系列(包括消息发布等实例操作)_第34张图片

Once模式下publisher持续发布3s消息之后自动结束运行。

Rostopic pub -f yamlFilePath topic_name topic_type “arg1,args2…”

Yaml文件书写格式注意事项:

1. 按照topic_type格式来书写;

2. 被公布的消息之间要用”---”三个连字符分隔开来,并且”---”单独成一行;

其实,filter模式就相当于若干个once模式的组合,每个消息持续发送3s然后结束发送并且开启下一条消息的发送:

详细的Rostopic命令系列(包括消息发布等实例操作)_第35张图片

命令行输入负数时的注意事项:

详细的Rostopic命令系列(包括消息发布等实例操作)_第36张图片

在命令行中,输入true/false/yes/no这类的字符串,常被解析为Boolean类型的变量,为了将其强制类型转换为string类型的字符串,我们可以使用yaml文件的命令行工具:

详细的Rostopic命令系列(包括消息发布等实例操作)_第37张图片

Rostopic find topic_type

上面我们讲了“使用topic_name话题名称查找话题对应的消息类型”,这里我们使用topic_type消息类型来查找topic_name话题名称:

一定要注意:每打开一次命令行就要执行以下几句命令,才可以使用rostopic相关命令:

详细的Rostopic命令系列(包括消息发布等实例操作)_第38张图片

如果我们没有运行”source ./devel/setup.bash”这条命令,就会出现“当我们使用rostopic list来显示出我们所有的topic_name时,会发现我们自定义的话题通信根本没有”,这种情况就是“你没有启动“setup.bash”启动文件所致”。

你可能感兴趣的:(ROS,ROS,C++,通信,rostopic)