ROS(Robot Operating System)操作系统探索总结(二)ROS总体框架

本文深入解析了ROS系统的结构,从计算图级、文件系统级到社区级,详细介绍了节点、消息、主题、服务的概念以及ROS的包、堆组织形式。阐述了ROS作为一种分布式处理框架的特点,包括节点间直接连接、ROS控制器的作用以及代码发布的协作方式。

一、 总体结构

  根据ROS系统代码的维护者和分布来标示,主要有两大部分:

  (1)main:核心部分,主要由Willow Garage公司和一些开发者设计、提供以及维护。它提供了一些分布式计算的基本工具,以及整个ROS的核心部分的程序编写。

  (2)universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。一种是库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,他们调用下层的库;最上层的代码是应用级的代码,让机器人完成某一确定的功能。

  一般是从另一个角度对ROS分级的,主要分为三个级别:计算图级、文件系统级、社区级。

  二、 计算图级

  计算图是ROS处理数据的一种点对点的网络形式。程序运行时,所有进程以及他们所进行的数据处理,将会通过一种点对点的网络形式表现出来。这一级主要包括几个重要概念:节点(node)、消息(message)、主题(topic)、服务(service)。

  (1) 节点

  节点就是一些直行运算任务的进程。ROS利用规模可增长的方式是代码模块化:一个系统就是典型的由很多节点组成的。在这里,节点也可以被称之为“软件模块”。我们使用“节点”使得基于ROS的系统在运行的时候更加形象化:当许多节点同时运行时,可以很方便的将端对端的通讯绘制成一个图表,在这个图表中,进程就是图中的节点,而端对端的连接关系就是其中弧线连接。

  (2) 消息

  节点之间是通过传送消息进行通讯的。每一个消息都是一个严格的数据结构。原来标准的数据类型(整型,浮点型,布尔型等等)都是支持的,同时也支持原始数组类型。消息可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)。

  (3) 主题

  消息以一种发布/订阅的方式传递。一个节点可以在一个给定的主题中发布消息。一个节点针对某个主题关注与订阅特定类型的数据。可能同时有多个节点发布或者订阅同一个主题的消息。总体上,发布者和订阅者不了解彼此的存在。

(4) 服务

  虽然基于话题的发布/订阅模型是很灵活的通讯模式,但是它广播式的路径规划对于可以简化节点设计的同步传输模式并不适合。在ROS中,我们称之为一个服务,用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应。这类似于web服务器,web服务器是由URIs定义的,同时带有完整定义类型的请求和回复文档。需要注意的是,不像话题,只有一个节点可以以任意独有的名字广播一个服务:只有一个服务可以称之为“分类象征”,比如说,任意一个给出的URI地址只能有一个web服务器。

  在上面概念的基础上,需要有一个控制器可以使所有节点有条不紊的执行,这就是一个ROS的控制器(ROS Master)。

  ROS Master 通过RPC(Remote Procedure Call Protocol,远程过程调用)提供了登记列表和对其他计算图表的查找。没有控制器,节点将无法找到其他节点,交换消息或调用服务。

  比如控制节点订阅和发布消息的模型如下:

  ROS的控制器给ROS的节点存储了主题和服务的注册信息。节点与控制器通信从而报告它们的注册信息。当这些节点与控制器通信的时候,它们可以接收关于其他以注册及节点的信息并且建立与其它以注册节点之间的联系。当这些注册信息改变时控制器也会回馈这些节点,同时允许节点动态创建与新节点之间的连接。

  节点与节点之间的连接是直接的,控制器仅仅提供了查询信息,就像一个DNS服务器。节点订阅一个主题将会要求建立一个与出版该主题的节点的连接,并且将会在同意连接协议的基础上建立该连接。

  另:ROS控制器控制服务:

  三、 文件系统级

  ROS文件系统级指的是在硬盘上面查看的ROS源代码的组织形式。

  ROS中有无数的节点、消息、服务、工具和库文件,需要有效的结构去管理这些代码。在ROS的文件系统级,有以下几个重要概念:包(package)、堆(stack)、

  (1) 包

  ROS的软件以包的方式组织起来。包包含节点、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。包的目标是提供一种易于使用的结构以便于软件的重复使用。总得来说,ROS的包短小精干。

  (2) 堆

  堆是包的集合,它提供一个完整的功能,像“navigation stack”。Stack与版本号关联,同时也是如何发行ROS软件方式的关键。

ROS是一种分布式处理框架。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到包(Packages)和堆(Stacks)中,以便于共享和分发。下图是在包和堆在文件中的具体结构:

  Manifests (manifest.xml):提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。

  Stack manifests (stack.xml):提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。

  四、 社区级

  ROS的社区级概念是ROS网络上进行代码发布的一种表现形式。结构如下图所示:

  代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地发展和实施工作成为可能。正是因为这种分布式的结构,似的ROS迅速发展,软件仓库中包的数量指数级增加。


<think> 首先,用户的问题是:“机器人操作系统(如ROSRobot Operating System)这个怎么用”,翻译成英文是“How to use robot operating systems like ROS?”。 我需要用中文回答,因为用户指定了“请使用中文回答问题”。 我的回答必须包括两个部分: 1. 对问题的回答。 2. 结束时,输出“§§相关问题§§”后跟3-5个相关问题。这些相关问题必须基于用户的问题和我的回答。 规则强调: - 回答完问题后,必须提出相关问题。 - 第一行必须是完整的“§§相关问题§§”,不能换行分散。 - 相关问题数量在3-5个之间。 - 所有内容必须符合格式规则。 回顾之前的交互: - 用户第一次问“你知道MAS系统吗”,我回答并提供了相关问题。 - 第次问“在跟机器人相关的领域会用到的系统”,我又回答并提供了相关问题。 - 第三次是重复了规则说明。 - 现在这个问题是关于机器人操作系统ROS)的具体使用。 我的回答应该覆盖ROS的基本使用: - ROS是什么:一个开源的机器人中间件框架,提供工具和库来简化机器人软件开发。 - 主要组件:包括节点(nodes)、主题(topics)、服务(services)、动作(actions)等。 - 如何用:安装ROS、创建包、编写节点、使用工具如rqt、rviz等。 - 基本步骤:比如设置环境(source setup.bash)、运行roscore、创建和运行节点。 保持回答简洁但信息丰富,因为这是文本响应。 然后,根据用户的问题和我的回答,提出相关问题: - 用户的问题是关于ROS的使用。 - 我的回答会涉及安装、编程、工具使用等。 - 相关问题应该引导进一步讨论,比如安装步骤、编程示例、常见挑战等。 - 例子基于上下文:之前的例子中,相关问题是基于回答内容提出的。 编制相关问题: 1. 需要3-5个问题。 2. 问题要基于用户的问题和我的回答。 3. 例如: - ROS的安装过程是怎样的? - 如何在ROS中创建一个新的节点? - ROS的通信机制(如话题和服务)有哪些区别? - 使用ROS开发机器人项目时需要注意哪些安全问题? - ROS2与ROS1的主要区别是什么? 确保问题数量符合:目标3-5个。 结束输出: - 最后一行开始必须是“§§相关问题§§”,然后直接列出问题编号。 - 格式如:1. 问题1 2. 问题2 3. 问题3 等,不能换行分散在一个列表中。 完整响应结构: 1. 回答部分:用中文解释ROS的使用。 2. 结束时:输出“§§相关问题§§” 3. 然后:列出3-5个相关问题,用数字点号。 现在,草拟回答: - 回答:机器人操作系统ROS)是一个用于机器人软件开发的开源框架。要使用它,首先需要安装ROS(如ROS Noetic或ROS2),然后通过命令行设置环境。接着,可以创建ROS包(catkin或colcon),编写节点(用Python或C++),使用rostopic、rosnode等工具调试。核心是roscore运行主节点,节点通过话题、服务通信。可视化工具如rviz用于监控和调试。 相关问题: 1. ROS的安装步骤包括哪些具体操作? 2. 如何编写一个简单的ROS节点来处理传感器数据? 3. ROS中的话题(topics)和服务(services)有何不同,何时使用哪种? 4. 使用ROS开发机器人时,如何处理多机器人系统的协调? 5. ROS1和ROS2在架构和使用上有哪些显著差异? 确保问题连贯。 </think> 机器人操作系统(如ROSRobot Operating System)是一个开源框架,用于简化机器人软件开发。要使用ROS,可以遵循以下基本步骤: 1. **安装ROS**:根据操作系统(如Ubuntu)选择合适的ROS版本(如ROS Noetic),通过官方源安装。 2. **设置环境**:在终端中运行 `source /opt/ros/<版本>/setup.bash` 来初始化环境变量。 3. **创建和编译包**:使用 `catkin_create_pkg` 创建新包,然后通过 `catkin_make` 编译。 4. **编写节点**:用Python或C++编写节点(nodes),定义功能(如传感器数据处理)。例如,一个简单节点发布消息: ```python #!/usr/bin/env python3 import rospy from std_msgs.msg import String def talker(): pub = rospy.Publisher('chatter', String, queue_size=10) rospy.init_node('talker', anonymous=True) rate = rospy.Rate(10) # 10Hz while not rospy.is_shutdown(): msg = "Hello ROS!" pub.publish(msg) rate.sleep() if __name__ == '__main__': try: talker() except rospy.ROSInterruptException: pass ``` 5. **运行和调试**:启动 `roscore` 作为主节点,然后使用 `rosrun` 运行节点,工具如 `rostopic` 查看消息流,`rviz` 进行可视化。 6. **通信机制**:节点通过话题(topics)发布/订阅数据,或服务(services)处理请求-响应,确保模块化开发。 ROS支持多种机器人应用,从仿真(Gazebo)到实际部署,文档丰富(如ros.org),适合初学者通过教程学习。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值