ROS-学习0 ROS基础-节点,运行ros节点,话题,服务等基础知识

一、节点

1.1 rosmaster

ros系统是通过各个节点组成的,每个节点相当于一个子程序,各个节点除了各司其职之外还要相互合作,它们通过传递话题消息或者提供服务两种方式来进行通信。那各个节点又不是人,它们不会自来熟,因此需要一个中介帮它们联系。这个中介就是rosmaster。每个ros系统必须有rosmaster,而且必须只有一个rosmaster.每个ros节点工作之前都需要先启动rosmaster.

那这个重要的rosmaster是怎么工作的呢?通过roscore指令。

roscore

 运行roscore指令之后显示页面如下:

运行roscore指令后会自动启动:rosmaster,Parameter Server,rosout。详见:

roscore - ROS Wiki.

我们也可以通过rosnode list指令来查看当前活跃的节点

 1.2 运行ros节点

运行一个ros节点有2种方式:

1. rosrun ~

2.roslaunch ~

其中用rosrun指令前需要先手动运行roscore指令来启动rosmaster,但是运行roslaunch指令前不用,因为roslaunch指令在运行的时候可以自动检测rosmaster是不是启动了,如果没有会自动运行roscore.

例如我这里以启动小乌龟进行为例

当我启动了小乌龟节点之后我在用rosnode list查看当前活跃的节点:

 二、包package

一个包可以包含多个节点,ros应用程序发布时,通常都是以包为单位,在我们小乌龟实例中,包即是turtlesim,哪这个包中有几个节点呢,可以通过如下指令查看:

rosrun turtlesim,然后按两次Tab键,如图:

其中每个节点又可能是发布者节点,订阅者节点,客户端节点、服务端节点。关于这些带有名字的节点下面会逐一介绍。

 三、话题topic

话题和节点是ros系统中两大基本组件,节点是基本的处理单元,话题是节点间基本的通信单元之一。其中关于发布话题的节点有特殊的名字叫做发布者节点和订阅者节点,那如何在自己的功能包中编程定义一个发布者节点、订阅者节点详见后边的学习笔记。需要注意的是话题是发布者节点和订阅者节点传送的数据的管道,真正传送的数据叫做消息,其中ros系统为我们提供了一些常用消息的,我们也可以自定义消息。我们可以通过rosmsg来查看关于消息我们都能有什么操作。

 

 那再回到话题:

 对于一个功能包中话题的操作还有很多,可通过输入rostipic 然后回车查看具体操作有哪些。

关于如何创建发布者节点、订阅者节点和自定义消息详见下: 

ROS 学习2- 发布者节点的编程实现_m0_46093829的博客-CSDN博客

ROS学习3 订阅者Subscriber节点的编程实现_m0_46093829的博客-CSDN博客

ROS学习3 自定义消息_m0_46093829的博客-CSDN博客

可通过rostopic list查看当前ros系统中活跃的话题,当我启动了小乌龟功能包中draw_square节点之后,我当前系统中活跃的话题如下:

 四、服务

服务Service是节点之间同步通信的一种方式;其中关于提供服务者和被服务者节点也有特殊的名字叫做服务者者节点和客户端节点,客户端Client节点可以发布请求Request;由服务端Server节点处理后反馈应答Response。

服务服务端节点提供给客户端节点的,那ros系统也为我们定义了一些常用的服务,我们也可以自己定义服务类型。那关于服务类型,我们可以通过rossrv来查看相关指令的功能。

当我启动了turtlesim功能包,并运行了draw_square节点之后,我们可以通过rosservice list 来查看当前系统活跃的服务

我当前系统中活跃的服务如下:

 其中对于一个功能包中服务的操作还有很多,可通过输入rosservice然后回车查看具体操作有哪些。

注意:一定要谨慎地区别 rosservice 和 rossrv。前者是用来与目前由某些节点提供的服务进行交互的后者名称来源于用来声明服务数据类型文件的扩展名.srv,是用来查看服务数据类型的,无论现有可获得的服务有无此种类型。

无论是话题也好还是服务也好,你都可以去单独调用

 那不知道会不会有小伙伴有疑问说通过rosservice list我只能知道有这个服务,那具体怎么用我怎么能知道呢?

可以通过rosservice call 服务名字 然后按2次tab,系统会自动为你显示出这个服务需要什么参数,你根据情况来用就好了,比如上边我想用/kill这个服务,但是我不知道该怎么用所以我就tab了2下。然后看到显示name:' ',因此我就输入我向kill的乌龟的名字,然后就OK了。

那如何在自己的功能包中编程定义一个发布者节点、订阅者节点详见后边的学习笔记。

ROS学习 4- Client节点的编程实现_m0_46093829的博客-CSDN博客

ROS学习5 -Service节点的编程实现_m0_46093829的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/m0_46093829/article/details/122236780