ROS计算图级
上一节说到一个 package 可以包含多个可执行文件(节点),可执行文件需要被运行,就要了解ROS的通信架构,也就是计算图级,例:
小萝卜机器人拥有驱动系统,感知系统,控制系统等,要让它从指定位置到另一位置一定得启动多个节点,计算图级展示了 ROS 如何对这些节点进行管理和通信的。
计算图级结构如下:
节点管理器(master)和节点(node)
在 ROS 中要管理节点和进程,需要一个节点管理器,它的名称是 master,它的存在有两个作用:
1.每个节点启动时都必须向它注册
2.master管理节点(node)间的通信
因此,在启动节点前,需要使用 roscore 命令启动 master,roscore 还顺带启动了 rosout(日志输出) 和 parameter server(参数服务器)
rosout 也是一个节点,负责记录当前系统中的 error 或 warning 信息,parameter server 则是做一些参数配置。
这里再介绍一下节点(node),一个 node 就是一个进程,进程就是程序的一次执行,因此节点只是 ROS 对进程的专有称呼,接下来介绍一些实例:
首先安装一个模拟器,用你使用的ROS发行版本名称(例如electric、fuerte、groovy、hydro等)替换掉'<distro>'
sudo apt-get install ros-<distro>-ros-tutorials
开启一个终端,运行
roscore
新开一个终端,运行
rosnode list
会看到
只有 roscore 启动的日志输出节点,用
rosnode info /rosout
查看特定节点信息
接下来运行节点,用 rosrun 命令
命令格式:rosrun [package_name] [node_name]
rosrun turtlesim turtlesim_node
出现
此时新开一个终端,再次运行 rosnode list
发现多了一个节点,再用 rosnode info /turtlesim
一个节点可以利用 rosrun + 包名 + 节点名,但是如果有几十个几百个呢?这时候 ROS 提供了一个更简单的方法——roslaunch。上一节说到 pkg 下面存放有 launch 文件,这个文件就是 roslaunch 所要运行的文件,因此,roslaunch + 包名 + launch名 就可以启动 master 和 多个节点。
roslaunch 在启动节点前会检测系统是否已经启动 master ,如果没有,它会自动开启 master。
launch 文件写法如下:
通信方式
ROS提供了 主题(topic),服务(service),参数服务器(parameter service) 和动作库(actionlib) 这四种通信方式。
1.topic 通信方式和message
两个节点需要通信,需要先定义一个共同的话题,就像这样
node 之间通过 publish - subscribe 方式通信。即节点 A 通过 topic 发布消息,节点 B 通过 topic 订阅消息。
一个节点可以发布多个话题,一个话题可以订阅多个话题。
举个例子:
在刚才的小乌龟的例子中,新开一个终端,运行这个节点
rosrun turtlesim turtle_teleop_key
它可以让你用方向键来控制小乌龟的运动,再开一个终端,安装如下软件:
sudo apt-get install ros-indigo-rqt
sudo apt-get install ros-indigo-rqt-common-plugins
再运行
rosrun rqt_graph rqt_graph
可以看到以下结果
message
message 是 topic 内容的数据类型,定义在 *.msg 文件中。message 可以理解为 C++ 中的int,float,类等,它的数据类型有如下:
常用命令:
2.service 通信方式
topic 通信方式是异步通信,比如现在有两个检测路障的节点,节点 A 发布路况信息,节点 B 检测,如果是用 topic 通信方式,那么节点 B 会一直订阅话题,可是有效的订阅是检测到路障,因而这种方式会浪费大量的计算资源。而 service 通信方式则实现了同步通信,它会解决这一问题。
service 通信方式中,两个节点之间的通信方式是request - reply 方式。
和 topic 想似,srv 是 service 通信方式的数据格式,定义在 *.srv 文件中。
常用命令:
3.parameter service 参数服务器
参数服务器维护一个存储着各种参数的字典,字典就是为了方便读写一些不常改变的参数,给它们加上索引,这个索引是唯一的。
其中 rosparam load 后面的文件必须遵从 yaml 格式
通俗的说就是 key : 键值 。
4.Action 通信方式
在 service 通信方式中,client 发出请求后,会进入阻塞状态,直到 server 完成了请求,才转而继续运行,在这期间,server 端究竟是在完成别的任务还是 server 也进入阻塞状态,无法知晓。因此,action 是在 service 基础上改进的通信方式。
action 通信过程中,server 会带有一个状态反馈,
发送的请求有 目标,取消目标,回传的信息有 状态,任务完成后的结果,实时状态。
通常用在 长时间(导航,机械臂运动),可抢占(可被打断)的任务。
和 topic,service 相似,action 是 action 通信方式的数据格式,定义在 *.action 文件中。
关于计算图级的更详细介绍会在后续文章中更新。
ROS计算图级的更多相关文章
- ROS文件系统级
ROS的安装就不介绍了,官方教程是最好的:点击打开链接 ROS是机器人操作系统,它应该有自己的工程结构,Linux系统的文件系统如下: 而ROS的文件系统级如下: 接下来逐一介绍它们: 1. catk ...
- ROS学习笔记二:ROS系统架构及概念
本文主要是了解ROS的系统架构.文件夹结构以及工作所需的核心文件. ROS系统架构主要被设计和划分为三部分,每一部分代表一个层级的概念:文件系统级(The filesystem level).计算图级 ...
- 机器人操作系统(ROS)教程4:ROS的框架【转】
转自:http://www.arduino.cn/thread-11351-1-1.html 在进行ROS的代码开发前,有必要了解一些ROS的概念.首先,ROS的系统代码分为两部分:main和univ ...
- ROS初探:(一)ROS架构
一.ROS架构 ROS架构上分为三个层级: 计算图级(Computation Graph level):体现进程与系统的关系,描述系统怎么运行. 文件系统级(Filesystem level):组织构 ...
- (二)ROS系统架构及概念 ROS Architecture and Concepts 以Kinetic为主更新 附课件PPT
第2章 ROS系统架构及概念 ROS Architecture and Concepts PPT说明: 正文用白色,命令或代码用黄色,右下角为对应中文译著页码. 这一章需要掌握ROS文件系统,运行图级 ...
- ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念
ROS机器人程序设计(原书第2版)补充资料 (贰) 第二章 ROS系统架构及概念 书中,大部分出现hydro的地方,直接替换为indigo或jade或kinetic,即可在对应版本中使用. 由于工作事 ...
- SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- ROS学习手记 9 -- 阶段性复习
ROS 阶段性总结 1. 基本概念 ROS 是建立在Linux特别是Ubuntu系统上的一套软件系统,它具有操作系统的特征 ,负责管理各个模块的协同运行.设计初衷主要是面向机器人软硬件开发的特点:多 ...
- ROS知识(2)----理解ROS系统结构
学习新事物,方法高于技术本身,如果没有把握"BIG PICTURE"的话很难理解进去.通过以下几点进行理解ROS: ROS实际上不是操作系统,他只是一个通信的框架,一个代码管理的架 ...
随机推荐
- A Story of One Country (Hard) CodeForces - 1181E2 (分治)
大意: 给定$n$个平面上互不相交的矩形. 若一个矩形区域只包含一个矩形或者它可以水平或垂直切成两块好的区域, 那么这个矩形区域是好的. 求判断整个平面区域是否是好的. 分治判断, 可以用链表实现删除 ...
- Python之网格搜索与检查验证-5.2
一.网格搜索,在我们不确定超参数的时候,需要通过不断验证超参数,来确定最优的参数值.这个过程就是在不断,搜索最优的参数值,这个过程也就称为网格搜索. 二.检查验证,将准备好的训练数据进行平均拆分,分为 ...
- wget的url获取方式
获取方式 每次用wget都是在网上查相应的url,但以前没怎么关注过这个url是怎么获取到的,这里总结一下 这里以下载jekins为例: 打开jekins网站:https://jenkins.io/d ...
- kvm第二章--虚拟机管理
- CSS_引入方式
一 CSS的引入方式 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,用来控制网页数据的表现,可以使网页的表现与数据内容分离 1.行内式 ...
- javascript--清除表单缓存
表单缓存是指当用户在表单输入之后再次回到该表单或者刷新页面的时候,浏览器会直接显示用户之前的输入,即表单缓存下来了.多数情况下这正是我们想要的,但也有些情况我们希望表单能够刷新,特别是根据后台的数据刷 ...
- LNMP环境搭建之编译安装指南(php-5.3.27.tar.gz)
测试环境:CentOS release 6.5 (Final) 软件安装:nginx mysql-5.5.32-linux2.6-x86_64.tar.gz php-5.3.27.tar.gz ...
- 异常-No suppression parameter found for notification
1 详细异常 Command Start is not currently available for execution. 关闭 kafka gateway 无法启动 java.lang.NullP ...
- Linux常用命令【1】
打包和压缩文件 : cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd ...
- 自动构建的deploy.sh
#!/usr/bin/env sh # 当发生错误时中止脚本 set -e # 构建 npm run build # cd 到构建输出的目录下 cd dist # 部署到自定义域域名 # echo ' ...