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

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
2月前
|
Ubuntu 安全 Linux
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
Linux(34)Rockchip RK3568 Ubuntu22.04和Debian 10上配置远程桌面工具
176 0
|
2月前
|
存储 Ubuntu 应用服务中间件
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
【Nginx】centos和Ubuntu操作系统下载Nginx配置文件并启动Nginx服务详解
47 1
|
2月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
79 1
|
4天前
|
Ubuntu 网络协议
【ubuntu】DNS设置工具resolvectl安装教程
请注意,这些步骤可能会根据你的Ubuntu版本和配置有所不同。如果你在安装过程中遇到问题,可能需要查阅更具体的文档或者寻求专业的技术支持。
9 0
|
1月前
|
Ubuntu Python
银河麒麟-麒麟软件操作系统 kylin 搭建yum源 ubuntu搭建yum源 yum软件仓库搭建ftp源、python源、硬盘源
银河麒麟-麒麟软件操作系统 kylin 搭建yum源 ubuntu搭建yum源 yum软件仓库搭建ftp源、python源、硬盘源
66 1
|
2月前
|
Ubuntu 网络安全 数据安全/隐私保护
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
使用WinSCP工具,将windows文件传输到虚拟机Ubuntu系统
89 4
|
2月前
|
NoSQL 机器人 Windows
ROS机器人编程技术控制两只小海龟的编队运动
ROS机器人编程技术控制两只小海龟的编队运动
82 1
|
2月前
|
机器人 Unix C++
ROS机器人编程技术架构命令应用
ROS机器人编程技术架构命令应用
32 1
|
2月前
|
监控 Linux 调度
操作系统学习笔记(一)
在Linux中,使用`ps -aux | grep PID`来查看特定进程的状态,或者用`top`指令监控进程和内存。通过`cat 文件名 | grep 关键词`或`grep -i 关键词 文件名`搜索日志文件。`grep`是一个强大的文本搜索工具,支持多种参数,如`-i`忽略大小写,`-c`计数,`-f`从文件读取关键词。要临时更改主机名用`hostname 新主机名`,永久更改则用`hostnamectl set-hostname 新主机名`
|
2月前
|
消息中间件
操作系统学习笔记(二)
进程切换比线程切换更消耗资源,因为进程切换需保存更多上下文,包括地址空间、寄存器、栈和文件描述符等,还要刷新TLB。线程切换仅需切换硬件上下文和内核栈,上下文更小,所以开销低。进程间通信有多种方式,如匿名管道(父子进程间)、命名管道(无亲缘关系进程)、信号、消息队列、共享内存和信号量等。这些通信方法各有特点,适用于不同场景。例如,匿名管道是半双工的,有名管道允许任何进程通过路径通信,信号用于进程间的简单通知,消息队列支持随机查询和按类型读取,共享内存允许多进程共享数据,而信号量则用于同步和控制对共享资源的访问。