当前位置:网站首页>初识ROS
初识ROS
2022-07-05 00:05:00 【DWQY】
需要用到ROS,就来学学ROS。作为小白一个,文章难免出错,请各位海涵。帮我多多指错。这篇文章的目的是让新手对于ROS有个简单的认识,讲的基本都是概念上的东西。希望这篇文章能够解释清楚以下几个问题:
1.ROS是什么/ROS能干什么?
2.ROS的基础结构是什么?
3.ROS部分专有名词的解释:ROS节点(node)、节点管理器(master)、参数服务器(parameter server)、消息(message)、话题(topic)、服务(service)、消息记录包(bag)
1.ROS是什么/ROS能干什么?
ROS全称是Robot Operating System,也就是机器人操作系统。从字面上就知道是帮助我们操作机器人的。但和Linux这种底层的os不同,ROS是基于底层os的,也就是在Linux之上,可以理解成在Linux之上做了封装以便于可以直接调用那些用于操作机器人的各种包。ROS的有几个版本,对应的也有不同的Linux环境(网上一查都有,不是重点,在此不再赘述。不过笔者用的是kinetic对应的就是ubuntu16.04啦~)。
那ROS有什么好处呢?为什么要用ROS呢?这要从ROS的设计目标谈起:ROS便于机器人研发中的代码复用,是一种分布式的进程框架,核心在于可以同步或者异步传递消息数据的中间件框架。简单点儿说就是ROS的模块性和复用性特别好,这样开发者就可以专注于主逻辑的设计。也有点儿像拼积木(积木块已经被造好)。我觉得另一个优势是:ROS使用简化的类型描述语言描述ros发布的数据,通过这种描述语言,ros可以使用多种编程语言(C++ PYTHON java matlab)编写不同节点,实现节点间的通信(不局限于一种,可太棒了!)
对于ROS能干什么?其实我觉得就是用来开发机器人吧。现在各种机器人无论是UAV、UGV其实都是基于ROS上在做开发滴。要想让robot做点儿个性化的事情,ROS应该是要学滴。而且ROS现在已经被认定为了一个标准(好消息:开源!)。
2.ROS的基础结构是什么?
先不关与ROS具体有什么,先从宏观上给它打个样儿。ROS的体系结构大致有三部分:ROS文件系统、ROS计算图、ROS社区
ROS文件系统:文件系统其实就是ROS文件的组织结构,了解了文件系统就会知道程序执行到哪步时调用了哪个文件。文件系统有很多基础性的概念:package、manifest。
ROS计算图:计算图相当于ROS运行的机制,包括节点如何通信等等。有的地方也叫做计算网络,所有节点都可以连入这个网络中进行通信。我觉得这个是ROS的最核心部分吧。设计的概念包括:node、master、message、topic、service
ROS社区:很少看到有把社区放在架构里面的,但ROS目前看来像一个完全开源的东西。开源项目就需要社区去维护,可能最开始设计定下的基调就是这样吧。
(上文提到了很多概念,我在下文都会一一解释)
3.ROS概念解释(按照结构划分说了)
package(功能包)
package其实可以算组织ROS代码的一个基本单位。ROS中package更多指的是代码包。如果说最大的应该算workspace(工作空间),工作空间内包括代码空间(src,放实现应用的主要代码可以是cpp/py),编译空间(build,主要是编译环境catkin_make之后基本不用管),开发空间(devel,保存编译完的包),安装空间(install,这个通过命令生成以后基本用不到了)。package也就是代码空间下的一个基本单位。一个应用对应于一个package。ROS利用package实现模块性和复用性
package的结构如下图(因为只是介绍基本概念,所以就不详细说各个文件的作用了~)
图源:ROS学习笔记(一) ROS文件系统_我本傲骄的博客-CSDN博客
manifest
全称叫package manifest,为package之间提供依赖性。其中保存的是package的一些基本信息:版本、维护者、依赖选项、编译标志等等。落实到具体文件就是package里面那个package.xml
metapackage(元功能包)
metapackage是比package高一个级别的概念,是package的集合。以前也叫stack,现在以及废弃
metapackage manifest
这个比manifest高一个级别,功能类似于manifest,只不过是针对于metapackage
node(节点)
ROS整体上是一个分布式的架构,也就是有很多个节点组成。或许也可以说成ROS的基本动作执行单位,可以为节点分配任务。同一个workspace下不能有同名节点(这样无法确定),但不同工作空间下可以有同名节点
作为一个整体,节点之间也要有相互的协作。ROS有自己的通信机制,下面介绍一下:
ROS的通信手段有两种:消息传递、服务调用
message(消息)/topic(主题)
message就对应于消息传递,但消息不能直接就传过去。要借助载体:也就是topic(可以理解为管道)。如果一个节点想发送消息,就要选择一个topic(这个topic可以是自己创造的或者是别人创造的),选topic发message这个动作就是pulish(发布)。如果想接受消息,也要通过topic。而这个动作叫做subscribe(订阅)。两个节点根据动作,分别称为publisher和subscriber。
server(服务)
server对应于服务调用,不过server受众小一点儿。单指两个节点之间。服务调用的流程是:client节点发送request给server节点,server节点执行处理后,发送response给client节点
那消息传递和服务调用有什么区别呢?
1)服务调用实现一对一,消息传递实现多对多。服务调用只是两方之间,消息传递中同一个topic可以有多个发布者和多个订阅者(也有一个限制:两个发布者发布的同名消息,类型必须一致)
2)服务调用(双向),消息传递(单向)。服务中发送方会等待接收方的response,而消息传递中发布者发送完就不再管这个消息了——单向传输系统(有点儿像计网中TCP和UDP,其实在ROS中叫rostcp/rosudp)
3)服务调用是同步的,消息传递是异步的。所以在消息传递过程中常常设置队列作为缓冲区来调节发送速率。
4)topic常用于数据传输,而service常用于逻辑处理。
master(节点管理器)
节点多了总要有个头儿,master就是负责管理所有节点。它会掌管与各个节点之间有关的topic、service信息列表。虽然说有管理者,但通信时消息直接从发布节点到订阅节点,中间不经过节点管理器。ROS参数服务器是节点管理器的一部分,所有节点都可访问修改数据(数据/配置信息)。所有例子中先roscore一下,启动的就是master。但如果两个节点已经通过master建立了联系,并开始进行了通信。这时关掉master是不会影响两个节点的通信的。master只在建立连接时起到作用。
bag(消息记录包)
一个包是ROS中用于存储ROS 消息数据的文件格式。即保存和回放ROS消息数据的文件格式。包的扩展名为.bag。当使用复杂机器人时,采集数据较为繁琐。就可以通过bag保存一次数据,后面的仿真时可以回放bag中的数据达到同样的目的。
这里解释一个例子:判断ros是否安装成功都会使用一个小乌龟移动的例子,那为什么小海龟可以移动呢?这个过程是这样的:
/teleop_turtle 节点会以消息的形式将这些运动控制命令发布到 话题/turtle1/cmd_vel; 与此同时,因为turtlesim_node 订阅了该话题,因此它会接收到这个些消息,控制海龟按照该预定的速度移动
参考资料:
ROS入门学习 - coding-for-self - 博客园(cnblogs.com)
ROS核心概念、工作空间 和 功能包。ROS学习资源_Bruce’s blog-CSDN博客
因作者水平有限,如果错误之处,请在下方评论区指出,谢谢!
边栏推荐
- Intelligence test to see idioms guess ancient poems wechat applet source code
- Date time type and format in MySQL
- 基于三维gis平台的消防系统运用
- 公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
- 【雅思阅读】王希伟阅读P4(matching1)
- Jar批量管理小工具
- How to avoid arc generation—— Aafd fault arc detector solves the problem for you
- The input of uniapp is invalid except for numbers
- [kotlin] the third day
- 22-07-02周总结
猜你喜欢
Font design symbol combination multifunctional wechat applet source code
Every time I look at the interface documents of my colleagues, I get confused and have a lot of problems...
OSEK standard ISO_ 17356 summary introduction
使用快解析搭建自己的minecraft服务器
机器人强化学习——Learning Synergies between Pushing and Grasping with Self-supervised DRL (2018)
JS how to realize array to tree
青海省国家湿地公园功能区划数数据、全国湿地沼泽分布数据、全国省市县自然保护区
45 year old professor, she threw two super unicorns
Blue sky nh55 series notebook memory reading and writing speed is extremely slow, solution process record
Date time type and format in MySQL
随机推荐
同事的接口文档我每次看着就头大,毛病多多。。。
Verilog tutorial (11) initial block in Verilog
[paper reading] Tun det: a novel network for meridian ultra sound nodule detection
Power operation and maintenance cloud platform: open the new mode of "unattended and few people on duty" of power system
ECCV 2022 | Tencent Youtu proposed disco: the effect of saving small models in self supervised learning
IELTS examination process, what to pay attention to and how to review?
快解析——好用的内网安全软件
45岁教授,她投出2个超级独角兽
取得PMP證書需要多長時間?
用快解析内网穿透实现零成本自建网站
Intelligence test to see idioms guess ancient poems wechat applet source code
模板的进阶
香港珠宝大亨,22亿“抄底”佐丹奴
"Xiaodeng" domain password policy enhancer in operation and maintenance
How long does it take to obtain a PMP certificate?
股票账户佣金怎么调低,炒股佣金怎么调低网上开户安全吗
机器人强化学习——Learning Synergies between Pushing and Grasping with Self-supervised DRL (2018)
What is the difference between port mapping and port forwarding
Acrel-EMS综合能效平台在校园建设的意义
Go step on the pit - no required module provides package: go mod file not found in current directory or any parent