ubuntu16.04下ROS操作系统学习笔记(二)命令工具了解和仿真小海龟

简介: ubuntu16.04下ROS操作系统学习笔记(二)命令工具了解和仿真小海龟

ROS常用命令

命令 作用
catkin_create_pkg 创建功能包
rospack 获取功能包的信息
catkin_make 编译工作空间中的功能包
rosdep 自动安装功能包依赖的其他包
roscd 功能包目录跳转
roscp 拷贝功能包中的文件
rosed 编辑功能包中的文件
rosrun 运行功能包中的可执行文件
roslaunch 运行启动文件

我们也可以在终端中看一些帮助信息来帮助我们理解这些命令:比如我们使用ros+tab键就可以看到以ros开头的一些命令:

再比如说,我们想知道rosnode这个命令的使用方法,我们可以采取rosnode加tab键的方式:

仿真小海龟:

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是一定存在的。像之前的例子中,我们是运行了两个节点,第一个节点是运行了小海龟的仿真器,第二个节点我们运行了键盘控制的终端。

我的微信公众号名称:深度学习与先进智能决策

微信公众号ID:MultiAgent1024

公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
2月前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(五):18.04安装多版本CUDA
这篇博客文章介绍了在Ubuntu 18.04系统上如何安装和切换不同版本的CUDA,以及如何安装不同版本的cuDNN。
241 2
|
2月前
|
Ubuntu 网络安全 图形学
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
在Ubuntu 20.04系统中解决网络图标消失和无法连接有线网络问题的方法,其中第三种方法通过检查并确保Windows防火墙中相关服务开启后成功恢复了网络连接。
813 0
Ubuntu学习笔记(二):ubuntu20.04解决右上角网络图标激活失败或者消失,无法连接有线问题。
|
2月前
|
Ubuntu Shell Python
Ubuntu学习笔记(一):pycharm设置快捷启动图标详解
这篇博客详细讲解了如何在Ubuntu 20.04系统中为PyCharm设置快捷启动图标,包括创建.desktop文件、编辑文件内容以及添加到收藏夹的步骤。
413 0
Ubuntu学习笔记(一):pycharm设置快捷启动图标详解
|
4月前
|
Ubuntu Linux
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
查看Linux系统架构的命令,查看linux系统是哪种架构:AMD、ARM、x86、x86_64、pcc 或 查看Ubuntu的版本号
999 3
|
1月前
|
Ubuntu
ubuntu和debian 的安装包dpkg管理命令对安装包进行安装,查询,卸载
Ubuntu dpkg 软件包管理命令概览:安装、卸载、查看和配置软件包。包括解决依赖、强制卸载、列出及过滤已安装包、查看包详情等操作。
59 10
|
2月前
|
缓存 Ubuntu 网络协议
ubuntu ifconfig命令找不到
通过上述指导,无论你是面临 `ifconfig`命令缺失的困惑,还是希望深入了解Ubuntu系统下的网络管理技巧,都能找到针对性的解决方案,进一步提升你的系统管理能力。
83 2
|
2月前
|
缓存 Ubuntu 网络协议
ubuntu ifconfig命令找不到
通过上述指导,无论你是面临 `ifconfig`命令缺失的困惑,还是希望深入了解Ubuntu系统下的网络管理技巧,都能找到针对性的解决方案,进一步提升你的系统管理能力。
75 1
|
2月前
|
Ubuntu Linux Python
Ubuntu学习笔记(六):ubuntu切换Anaconda和系统自带Python
本文介绍了在Ubuntu系统中切换Anaconda和系统自带Python的方法。方法1涉及编辑~/.bashrc和/etc/profile文件,更新Anaconda的路径。方法2提供了详细的步骤指导,帮助用户在Anaconda和系统自带Python之间进行切换。
124 1
|
2月前
|
并行计算 Ubuntu Linux
Ubuntu学习笔记(三):Linux下操作指令大全
Ubuntu学习笔记,介绍了Linux操作系统中常用的命令和操作,如文件管理、系统信息查看、软件安装等。
48 3
|
2月前
|
Ubuntu
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境
本文介绍了如何在Ubuntu系统下使用Anaconda和Jupyter Notebook指定并切换不同的虚拟环境。
112 0
Ubuntu学习笔记(七):ubuntu下jupyter指定虚拟环境