1.5 ROS架构

到目前为止,我们已经安装了ROS,运行了ROS中内置的小乌龟案例,并且也编写了ROS小程序,对ROS也有了一个大概的认知,当然这个认知可能还是比较模糊并不清晰的,接下来,我们要从宏观上来介绍一下ROS的架构设计。

立足不同的角度,对ROS架构的描述也是不同的,一般我们可以从设计者、维护者、系统结构与自身结构4个角度来描述ROS结构:

1.设计者

ROS设计者将ROS表述为“ROS = Plumbing + Tools + Capabilities + Ecosystem”

  • Plumbing: 通讯机制(实现ROS不同节点之间的交互)

  • Tools :工具软件包(ROS中的开发和调试工具)

  • Capabilities :机器人高层技能(ROS中某些功能的集合,比如:导航)

  • Ecosystem:机器人生态系统(跨地域、跨软件与硬件的ROS联盟)

2.维护者

立足维护者的角度: ROS 架构可划分为两大部分

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

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

3.系统架构

立足系统架构: ROS 可以划分为三层

  • OS 层,也即经典意义的操作系统

    ROS 只是元操作系统,需要依托真正意义的操作系统,目前兼容性最好的是 Linux 的 Ubuntu,Mac、Windows 也支持 ROS 的较新版本

  • 中间层

    是 ROS 封装的关于机器人开发的中间件,比如:

    • 基于 TCP/UDP 继续封装的 TCPROS/UDPROS 通信系统

    • 用于进程间通信 Nodelet,为数据的实时性传输提供支持

    • 另外,还提供了大量的机器人开发实现库,如:数据类型定义、坐标变换、运动控制....

  • 应用层

    功能包,以及功能包内的节点,比如: master、turtlesim的控制与运动节点...

4.自身结构

就 ROS 自身实现而言: 也可以划分为三层

  • 文件系统

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

  • 计算图

    ROS 分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程,计算图中的重要概念: 节点(Node)、消息(message)、通信机制_主题(topic)、通信机制_服务(service)

  • 开源社区

    ROS的社区级概念是ROS网络上进行代码发布的一种表现形式

    • 发行版(Distribution) ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版像Linux发行版一样发挥类似的作用。这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。

    • 软件库(Repository) ROS依赖于共享开源代码与软件库的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。

    • ROS维基(ROS Wiki) ROS Wiki是用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程以及其他行为。网址是Documentation - ROS Wiki。

    • Bug提交系统(Bug Ticket System)如果你发现问题或者想提出一个新功能,ROS提供这个资源去做这些。

    • 邮件列表(Mailing list) ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流从ROS软件更新到ROS软件使用中的各种疑问或信息。网址是lists.ros.org Mailing Lists。

    • ROS问答(ROS Answer)用户可以使用这个资源去提问题。网址是Questions - ROS Answers: Open Source Q&A Forum。

    • 博客(Blog)你可以看到定期更新、照片和新闻。网址是ROS robotics news,不过博客系统已经退休,ROS社区取而代之,网址是ROS Discourse。

现在处于学习的初级阶段,只是运行了ROS的内置案例,编写了简单的ROS实现,因此,受限于当前进度,不会详细介绍所有设计架构中的所有模块,当前只介绍文件系统与计算图,下一章会介绍 ROS 的通信机制,这也是ROS的核心实现之一。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/57170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解Java之异常

目录 防御式编程 捕获异常 基础语法 示例1 【不处理异常】 示例2 【使用try catch捕获异常】 示例3 【catch只能处理对应的异常】 示例4 【catch可以有多个】 示例5 【可以用一个catch捕获所有异常】 示例6 【finally一定会执行】 示例7 【使用try回收资源】 示例8 …

【iOS】YYModel

目录 什么是YYModel ? 如何使用YYModel ? 最简单的Model 与网络请求结合 属性为容器类的Model 白名单和黑名单 Model的嵌套 结语 什么是YYModel ? YYModel是一个用于 iOS 和 macOS 开发的高性能的模型框架,主要用于对象和…

Lua条件语句

软考鸭微信小程序 过软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 在Lua编程语言中,条件语句是控制程序执行流程的关键工具。它们允许开发者根据特定条件的真假来执行不同的代码块,从而实现复杂的逻辑…

STM32+DHT11温湿度传感器(含完整代码)

DHT11是一款常用的数字温湿度传感器,它通过单总线与微控制器通信,输出数字信号,使得数据采集和处理变得简单。本文将详细介绍如何使用STM32微控制器驱动DHT11传感器,并提供完整的代码实现。 DHT11传感器简介 DHT11传感器包含一个…

MYSQL的SQL优化

SQL优化是提高数据库查询性能的核心步骤,尤其在处理大规模数据时,SQL查询优化至关重要。优化的目标是减少查询执行时间、降低数据库服务器负载,并使系统在高并发场景下运行更加高效。SQL优化涉及从数据库设计、索引使用、查询重构、配置参数调…

鸿蒙网络编程系列24-Web组件与应用互操作示例

1. APP内嵌网页与应用互操作概述 在通常的APP开发中,经常会采用内嵌网页的形式,通过网页来展现丰富的动态内容,虽少了很多原生开发的功能,但是这么做无可厚非,毕竟APP需要适配的系统平台很多,比如安卓、苹…

mysql 主从安装

登录看第二篇 WINDOWS系统搭建MYSQL 8.0主从模式_windows mysql8.0.34主从配置-CSDN博客 Windows下MySQL8.0最新版本超详细安装教程_windowsserver安装mysql8.0-CSDN博客 启动两个服务 可执行文件路径一致问题解决: windows,同一台机器安装两个mysq…

【HarmonyOS NEXT】权限申请及应用设置页跳转

关键词:鸿蒙、程序访问控制、定位、应用详情页、startability、want 在app开发过程中,常进行系统权限的申请以提供设备访问或个性化功能(如扫一扫、城市定位、剪贴板等),从而保障应用功能的完整性,那么本期…

Jupyter notebook和Conda使用

Jupyter notebook和Conda使用 文章目录 Jupyter notebook和Conda使用AnacondaJupyter notebook简介页面使用技巧编写格式自动补全查看函数文档魔术命令远程访问交互式 Anaconda Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项…

stm32实现esp8266连接到TCP服务器(二)未完

1.2 连接到TCP Server 1.2.1 使用网络助手,设立TCP服务器 ​ 编辑 1.2.2 连接服务器 ATCIPSTART"TCP","192.168.1.18",8080 //指令,注意双引号逗号都要半角(英文)输入 CONNECT //结果:成功 OK //结果:成功 …

jmeter中用csv data set config做参数化2

在jmeter中,使用csv data set config进行参数化是很重要的一个功能,但是这个功能的使用需要十分仔细和小心,因为细节之处往往决定着结果的正确与否。 举例: 一个登录接口用加密密码登录,一个登录接口用原始密码登录。…

STM32G4系列MCU的低功耗模式介绍

目录 概述 1 认识低功耗模式 1.1 低功耗模式的应用 1.2 低功耗模式介绍 2 低功耗模式的状态关系 2.1 低功耗模式可能的转换状态图 2.2 低功耗模式总结 3 运行模式 3.1 减慢系统时钟 3.2 外围时钟门控 3.3 低功耗运行模式(LP运行) 概述 本文主…

JavaFx学习--chapter02(网络对话)

chapter02(网络对话) 简单网络对话程序 设计任务:客户端向服务器发送字符串,并能读取服务器返回的字符串。 知识点:TCP套接字技术,C/S软件架构程序设计 重点理解:Java客户套接字类Socket和服务器套接字类ServerSoc…

蜜罐技术的出现究竟影响了什么

自网络诞生以来,攻击威胁事件层出不穷,网络攻防对抗已成为信息时代背景下的无硝烟战争。然而,传统的网络防御技术如防火墙、入侵检测技术等都是一种敌暗我明的被动防御,难以有效应对攻击者随时随地发起的无处不在的攻击和威胁。蜜…

linux线程 | 同步与互斥 | 互斥(下)

前言:本篇文章主要讲述linux线程的互斥的知识。 讲解流程为先讲解锁的工作原理, 再自己封装一下锁并且使用一下。 做完这些就要输出一堆理论性的东西, 但博主会总结两条结论!!最后就是讲一下死锁。 那么, 废…

什么是 Idempotence 以及它在哪里使用?

大家好,我是锋哥。今天分享关于【什么是 Idempotence 以及它在哪里使用?】面试题?希望对大家有帮助; 什么是 Idempotence 以及它在哪里使用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Idempotence&am…

python 基础笔记(其实有点内容的)

print(math.gamma(n)) # 求 (n-1) 的阶乘 数值, 数值计算 format(50, “b”) == bin(50)[2:], 这个“b” 就代表的是 binary format(14, ‘b’) ------> ‘1110’ 去除 0b 去掉前导零 str(000001) # 只适合python2.x ‘1’ “00000001”.lstrip(“0”) # python3中的正确方…

Spring Cloud微服务架构解析

Spring Cloud微服务架构解析 引言 在当今的互联网时代,软件应用不再是单一块功能的堆砌,而是复杂的系统,像一座高楼林立的城市。为了应对快速变化的业务需求和日益增加的系统复杂性,微服务架构应运而生。在这个背景下&#xff0…

配置管理之Nacos

Nacos 是阿里巴巴开源的动态服务发现、配置管理和服务管理平台,专为构建现代微服务架构设计。Nacos 是 “Dynamic Naming and Configuration Service” 的缩写,旨在简化微服务应用中的服务注册、配置管理和动态服务发现。它为服务提供了集中化的管理平台…

Git 常用命令详解

文章目录 一、初始化仓库二、添加文件到暂存区三、提交更改四、查看状态五、查看历史记录六、分支操作七、远程仓库操作八、撤销操作九、比较差异 在软件开发过程中,Git 是一款强大的版本控制工具。它可以帮助开发者有效地管理代码的变更、协作开发以及回溯历史版本…