ubuntu16.04下ROS操作系统学习(三)小海龟仿真

主要知识点:

1.启动小海龟。

2.查看计算图,计算图中的节点通过话题连接,在真实机器人的开发过程当中,机器人的很多功能都是通过节点实现的。

3.查看话题列表、发布话题消息。

4.发布服务请求。

5.rqt_plot可视化工具。

6.ROS的应用框架。

1.启动ROS Master

我们首先要启动rosmaster,rosmaster是ros系统首先都要启动的部分。

打开第一个终端

roscore

2.启动小海龟仿真器

我们另外打开一个终端,第二个终端,输入以下命令:

rosrun turtlesim turtlesim_node

会打开一个界面,如下图所示:

rosrun是一个启动节点的命令,后面需要跟两个参数,第一个是我们所需要启动的这个节点的功能包的名字turtlesim,之后是改节点的名字turtlesim_node。那么通过上面的命令,我们就相当于先启动了哪个功能包,之后启动了这个功能包下面的哪个节点。

3.启动海龟控制节点

我们再打开一个终端,第三个终端,输入以下命令:

rosrun turtlesim turtle_teleop_key

之后的话就会提示使用键盘,可以控制小海龟。

这行命令也是在turtlesim功能包下面的turtle_teleop_key节点。这个节点的功能就是启动键盘来控制小海龟。

这个ros例子其实是ros非常基本的例子。

4.计算图

当我们遇到一个非常陌生的程序,我们可以通过查看计算图的方式来查看这个包里面有哪些节点,节点之间的关系是怎么样的:

我们可以通过rqt来查看计算图,是一种基于qt开发的。我们再打开一个终端,输入以下命令:

rqt_graph

得出以下结果:

可以看到上图是有两个节点,一个小海龟仿真器的节点,一个键盘控制的节点。两个节点之间通过一个话题进行连接,也就是/turtle1/cmd_vel,里面发布的具体数据就是通过键盘控制小海龟线速度和角速度的具体数值。除此之外还有两个节点,/rosout是ros里面一定会存在的两个节点,它的功能就是去订阅所有节点发布的一个日志信息,每一个节点都可以通过rosout这个话题把日志信息传送给/rosout这个节点。这样看来的话rosout就是日志管理的一个节点。rqt的节点就是我们当前界面的节点。

我们把debug选上,我们就能看到系统当中主要的两个节点:

我们也可以通过rosnode这个命令来查看系统当中存节点的相关信息。

如,我们可以使用rosnode list列出所有节点:

rosnode list

这个和我们之前可视化界面中显示的节点是一样的。

我们可以使用rosnode info来查看节点当中的信息。比如查看小海龟仿真器当中的节点信息:

rosnode info /turtlesim

输出结果如下所示:

Node [/turtlesim]:表示节点的名字。

Publications:表示节点发布的一些话题。有:

* /rosout [rosgraph_msgs/Log]

* /turtle1/color_sensor [turtlesim/Color]

* /turtle1/pose [turtlesim/Pose]

Subscriptions:表示这个节点订阅的一些话题。有:

* /turtle1/cmd_vel [geometry_msgs/Twist]        # 这个就是订阅的我们之前键盘控制的话题。

Services: 表示所提供的一些服务。

* /clear

* /kill

* /reset

* /spawn

* /turtle1/set_pen

* /turtle1/teleport_absolute

* /turtle1/teleport_relative

* /turtlesim/get_loggers

* /turtlesim/set_logger_level

我们可以使用其他工具来调用这里列出来的服务。

Pid: 19714:表示节点的ID号。

Connections:发布和订阅的话题,基于TCP协议。
 * topic: /rosout
    * to: /rosout
    * direction: outbound
    * transport: TCPROS
 * topic: /turtle1/cmd_vel
    * to: /teleop_turtle (http://zhiqianghe:40291/)
    * direction: inbound
    * transport: TCPROS

除了节点之外,计算图中还有很重要的两个概念,一个是话题,一个是服务。

1.话题

如果我们想知道系统当中现在有哪些话题在发布,或者在订阅。与rosnode类似,我们也可以查看相关信息。

如果我们相关要知道某个话题的信息是什么样的,我们可以通过以下命令查看:

可以看到当前节点的发布者是teleop_turtle节点,订阅者是turtlesim节点。

我们也可以通过命令行来监听某个话题信息里面的具体内容是什么样的

我们可以通过命令行来监听这些信息:

如,我们想要监听小海龟控制器速度的输出,我们可以采取以下命令:

rostopic echo /turtle1/cmd_vel

可以看到是没有什么内容的输出的。这是因为我们当前并没有发布这个话题的消息。如果我们去键盘控制终端中点击键盘的上下左右按键的话,我们就会看到订阅的话题是有发布的。

发布的主要就是小海龟运动的线速度和小海龟运行的角速度。线速度的单位是m/s,角速度的单位是弧度每秒。

我们也可以通过终端简单地发布一些测试的消息

代码如下:

传入的参数为:具体的话题名; 该话题的数据类型; 话题的数据内容。表示发布的内容为让小海龟向前移动一下

运行前后的对比图如下图所示:

这样发布完了之后小海龟就走了一下,如果我们想要以一定的频率发布这样的消息的话,我们需要在pub命令之后加一个频率,如想一秒钟十次这样的频率发布:

之后的话我们的小海龟就撞墙了,还会弹出一个提示框,告诉我们,小海龟撞墙了:

以上就是小海龟话题相关的一些操作。

2.服务

查看有哪些service

rosservice list

我们也可以看服务的具体信息:

我们可以看到这个服务提供的节点就是/turtlesim。数据的类型为:turtlesim/Spawn。里面包括的一些参数是:Args: x y theta name。

这个服务的功能是在仿真器里面新生一直海龟,现在仿真器里面只有一直海龟,如果我们想新生一只海龟就可以使用这个服务来完成。

这里面要传入一些参数,如x,y的坐标,表示的是我们要新生的这只海龟要放在什么地方,theta表示这个小海龟的角度,我们还要给它设定一个名字。

这样的话就有一只新的海龟产生了:

5.常用的可视化工具

我们在终端中输入:

就会生成出下面一个这样的可视化界面:

中间是一个绘制曲线的显示区域,如果我们现在想将系统当中的某一个话题当中的具体信息通过曲线的形式绘制出来。比如这里我们可以来绘制小海龟的x,y的坐标信息。我们将Topic里面的斜杠删除,然后再输入,这行的话我们就可以看到所有的话题信息。然后我们选择turtle1/pose这个话题。

之后的话我们就可以用键盘控制一下小海龟移动,然后在界面中就能看到相关信息的一个流动情况,也可以查看之前的信息数据:

 

6.ROS应用框架

大概的话可以分为上图所示的三个层次

最底层是Linux层,中间部分是通讯层,ROS已经帮我们实现了TCP/UDP的网络通讯,除此之外,ROS还提供了另外一种通讯方法,叫Nodelet,我们在应用当中会涉及到大级别的数据传输,比如说是图像数据,点云数据等,在本地做数据传输的话采用TCP/UDP的话肯呢个会有比较大的数据延时。这个时候如果我们采用共享内存的方式来传输数据的话,效率会有很大的提升。Nodelet就是采用共享内存的方式来采取的通讯方式。在应用层的话是我们比较关心的,ros master是一定存在的。像之前的例子中,我们是运行了两个节点,第一个节点是运行了小海龟的仿真器,第二个节点我们运行了键盘控制的终端。。

 

猜你喜欢

转载自blog.csdn.net/weixin_39059031/article/details/83788188
今日推荐