论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
云原生
›
【ROS实战】02-ROS架构介绍
【ROS实战】02-ROS架构介绍
丝
金牌会员
|
2025-3-23 11:10:49
|
显示全部楼层
|
阅读模式
楼主
主题
945
|
帖子
945
|
积分
2835
1. 简介
你是否曾有过这样的疑问:我按照文档安装了ROS,依照要求写了一些示例节点(node)、消息(msg)和话题(topic),但觉得过程既贫苦又繁琐。也许你开始怀疑:为什么须要ROS?它到底帮我解决了什么标题?
本文将通过一个简单的例子,介绍ROS的架构,阐明它解决了哪些标题,以及它怎样帮助我们简化开发流程。
2. 移动案例
假设我们要编写一个能够控制机器人移动的步伐。
随着步伐的增多,我们须要举行模块化,方便分工合作和代码复用;
还须要开放移动接口,使得其他模块能够调用移动控制功能;
对应,须要选型一个通信机制来传递移动指令;
移动指令的格式,返回消息的格式须要规范化管理;
指令可能须要同时传给多个模块,如果下游模块没有实时收到可能须要缓存;
别的,我们还须要确保各个模块服务的连续运行,能够有效管理;
模块多了后,多对多的消息传递,日志,可能须要一种有效的监控和调试手段。
你会发现,一个简单的移动控制功能,背后可能涉及了大量的框架设计、标准化工作和大量代码量,如果全部手工实现,差别的人实现方案可能五花八门,也使得开发者很难专注于机器人的核心功能(如更好地移动、刹车、转弯等)。
在这种环境下,ROS的出现就解决了这些标题。下面是ROS中的一些关键概念:
节点(node)
:每个节点对应一个功能模块,ROS会帮助你管理节点的生命周期,确保它们稳定运行并完成各自的任务,免去你手动管理历程或线程的贫苦。
消息(message)
:消息定义了节点之间传递的数据结构,如运动指令、雷达数据、坐标数据等。ROS提供了许多常用的消息范例,你可以直接利用这些标准的消息范例,无需重复设计数据格式。如果你的团队其他成员或外部开源项目遵循类似的消息标准,那么这些模块可以无缝对接。
话题(topic)
:话题是消息传递的方式之一。好比,假设你和其他模块约定利用cmd_vel话题来传递运动指令。全部须要发送或接收运动指令的节点都可以订阅或发布到cmd_vel话题。当遥控器节点发布指令时,移动控制节点只需订阅cmd_vel话题,接收到指令后即可控制机器人移动。和消息队列的概念很相似,这个机制有效的解决了分层解耦和模块化的标题。
3. ROS框架
3.1 整体架构
根据上述案例,ROS的架构可以扼要概括为:编写节点(node),节点步伐中通过话题(topic)或服务(service)与其他节点举行通信,完成机器人相干的逻辑控制。整体架构图如下,左侧是ROS1,右侧是ROS2,两者的架构类似。
ROS的框架大致分为三层:
应用层
:即我们编写的各个节点。
中间层
:ROS提供API以及内部通信机制,帮助开发者与ROS体系交互。
利用体系层
:ROS并不是独立的利用体系,而是依赖于现有利用体系运行。ROS1仅支持Linux,ROS2支持更多利用体系。
图中其他名词解释:
Master(主节点)
:负责管理体系中的节点,提供节点注册、发现和信息转发等服务。
Client Library(客户端库)
:提供开发者API,供节点编程、消息传递等利用。
TCPROS/UDPROS(TCP/UDP协议)
:ROS1中的通信协议,负责节点间数据传输。
Nodelet API(节点内API)
:允许多个节点在同一历程内运行,避免历程间通信的开销。
Abstract DDS Layer(抽象DDS层)
:ROS2的核心通信机制,基于DDS标准提供分布式通信能力。
Intra-process API(历程内通信API)
:用于高效的内部通信,避免跨历程通信的开销。
DDS(数据分发服务)
:ROS2的底层通信协议,负责实现节点间高效可靠的数据互换。
ROS1和2紧张区别:
ROS1依赖Master节点来和谐治点间的通信,而ROS2利用DDS协议实现去中心化的分布式通信。
ROS2引入了历程内通信(Intra-process API),减少了历程间通信的开销,提高了效率。
ROS2的DDS通信层使得它更加灵活,可以支持差别的利用体系和硬件平台。
3.2 通信机制
通信机制是ROS的核心,开发节点的紧张目的是数据的流转和处理处罚。充实利用ROS的通信框架是标准化、简化以及提升开发灵活性和健壮性的关键。
3.2.1 话题
话题通信是ROS中最常用的通信方式,类似于常见的消息队列。
如下图,假设有两个节点,node2订阅了/topic话题,它会监听这个话题是否有新消息。当node1发布消息到/topic话题时,node2会立即触发回调函数举行处理处罚。
须要留意:
消息的格式由.msg文件定义,消息可以是简单或嵌套的复合结构。
发布和订阅节点是多对多的,多个节点可以同时发布到同一话题,也可以有多个节点同时订阅一个话题的数据。
例如,在机器人移动的场景中,node1负责发送移动指令(例如通过遥控器接收指令),而node2负责根据指令控制机器人的硬件(如电机)。
这种基于话题的开发方式将功能分层解耦,灵活且可靠,ROS会确保每个节点稳定运行,消息可靠传递。
3.2.2 服务
固然话题的发布/订阅模子非常灵活,但在须要双向同步传输的场景下,服务(Service)更加符合。服务采用客户端/服务器模子,包含两个数据范例:一个用于哀求,另一个用于应答,类似于HTTP哀求。
如下图,node2作为服务方提供一个服务,调用地址为/service。当node1作为客户端调用该服务时,会向/service发送哀求数据,node2收到哀求后举行处理处罚,并将结果返回给node1,完成一次服务调用。
总结:
话题
适用于异步通信,解耦信息的生产者和消费者,常用于实时更新的数据互换。
服务
适用于同步通信,采用客户端/服务器模式,常用于须要强逻辑处理处罚的数据互换。
4. 开发文件结构
在ROS框架下,可以看到我们的紧张任务是编写节点代码,并通过ROS命令启动节点,形成完整的体系。ROS支持多种编程语言(C、Python、Java),但代码必须遵循ROS的构造结构。
ROS文件结构:
工作空间(Workspace)
:顶级目录(图中的catkin workspace)为一个工作空间。
构建文件
:二级目目录中的build、devel、install为构建过程天生的文件。
功能包(Package)
:在工作空间.src目录下,是一系列的功能包,每个功能包可包含多个节点,详细取决于项目需求。
功能包是我们紧张面向开发的内容,功能包内部目录结构:
config
:存放配置文件。
include
:存放头文件。
scripts
:存放可直接运行的Python脚本。
src
:存放C++源代码。
launch
:存放启动文件。
msg
:存放自定义消息范例。
srv
:存放自定义服务范例。
CMakeLists.txt
:编译规则。
package.xml
:功能包清单。
5. 小结
ROS为机器人开发提供了一个强大的框架,简化了功能模块化设计、数据互换和服务通信。通过标准化的消息、话题和服务,ROS帮助开发者高效构建分布式、可扩展的机器人体系,减少了低层次的通信和管理工作,使开发者能够专注于机器人自己的核心功能。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
丝
金牌会员
这个人很懒什么都没写!
楼主热帖
ShardingSphere 异构迁移最佳实践:将3 ...
本科毕设CTF平台-MarsCTF
MySQL 5.7 安装教程(全步骤、保姆级教 ...
KubeEdge 1.12版本发布,稳定性、安全 ...
15.Linux和Windows入侵排查
Grafana 系列文章(一):基于 Grafana ...
Sickos1_1
学生信息管理系统(JAVA+MYSQL) ...
mysql数据迁移,通用windows->linux,li ...
Redis介绍与安装
标签云
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表