搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小桥流水78
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
【翻译】Style Transfer by Relaxed Optimal Transport and Self-Similarity
2
Elasticsearch的索引,类型,映射,文档相关名词简介_elasticsearch 索引类型
3
Linux下docker快速安装gitea_gitea 从docker安装
4
第1.1章:StarRocks部署--源码编译_starrocks1.19.1
5
C++笔记5•内存管理•
6
一套完整的机房设备清单方案_机房建设清单
7
UWB:IEEE 802.15.4 几个容易搞混的概念和名词:PRF,高带宽,499.2MHz,2ns; HRP,LRP;PSR,高带宽的优点和限制条件
8
MVC模式和三层架构_三层结构像是上下分层而mvc mvc作为表现设计模式是不存在上下关系的
9
2.机器学习:实现网上游戏AI_网页游戏ai训练
10
探究torchAudio中wav2vec2的源码(一)_wav2vec2model
当前位置:
article
> 正文
ROS操作系统_rose操作系统
作者:小桥流水78 | 2024-08-18 23:41:31
赞
踩
rose操作系统
ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。
ROS的运行架构是一种使用ROS通信模块实现模块间P2P的松耦合的网络连接的处理架构,它执行若干种类型的通讯,包括基于服务的同步RPC(远程过程调用)通讯、基于Topic的异步数据流通讯,还有参数服务器上的数据存储。
发展目标
ROS的首要设计目标是在机器人研发领域提高代码复用率。ROS是一种分布式处理框架(又名Nodes)。这使可执行文件能被单独设计,并且在运行时松散耦合。这些过程可以封装到数据包(Packages)和堆栈(Stacks)中,以便于共享和分发。ROS还支持代码库的联合系统。使得协作亦能被分发。这种从文件系统级别到社区一级的设计让独立地决定发展和实施工作成为可能。上述所有功能都能由ROS的基础工具实现。
为了实现“共享与协作”这一首要目标,人们制订了ROS架构中的其他支援性目标:
“轻便”:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。
ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。
语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。
测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。
扩展性:ROS适合于大型实时系统与大型的系统开发项目。
ROS的概念
ROS有三个层次的概念:分别为Filesystem level,Computation graph level, 以及Communication level。 以下内容具体的总结了这些层次及概念。除了这三个层次的概念, ROS也定义了两种名称-- Package资源名称和Graph资源名称。同样会在以下内容中提及。
ROS 的 Filesystem Level
文件系统层概念就是你在碟片里面遇到的资源,例如:
Packages:ROS的基本组织,可以包含任意格式文件。一个Package 可以包含ROS执行时处理的文件(nodes),一个ROS的依赖库,一个数据集合,配置文件或一些有用的文件在一起。
Manifests:Manifests (manifest.xml) 提供关于Package元数据,包括它的许可信息和Package之间依赖关系,以及语言特性信息像编译旗帜(编译优化参数)。
Stacks: Stacks 是Packages的集合,它提供一个完整的功能,像“navigation stack” Stack与版本号关联,同时也是如何发行ROS软件方式的关键。
Manifest Stack Manifests: Stack manifests (stack.xml) 提供关于Stack元数据,包括它的许可信息和Stack之间依赖关系。
Message (msg) types: 信息描述, 位置在路径:my_package/msg/MyMessageType.msg, 定义数据类型在ROS的 messages ROS里面。
Service (srv) types: 服务描述,位置在路径:my_package/srv/MyServiceType.srv, 定义这个请求和相应的数据结构 在ROS services 里面。
ROS 的 Computation Graph Level
Computation Graph Level(计算图)就是用ROS的P2P(peer-to-peer网络传输协议)网络集中处理所有的数据。基本的Computation Graph的概念包括Node, Master, Parameter Sever,messages, services, topics, 和bags, 以上所有的这些都以不同的方式给Graph传输数据。
Nodes: Nodes(节点)是一系列运行中的程序。ROS被设计成在一定颗粒度下的模块化系统。一个机器人控制系统通常包含许多Nodes。比如一个Node控制激光雷达,一个Node控制车轮马达,一个Node处理定位,一个Node执行路径规划,另外一个提供图形化界面等等。一个ROS节点是由Libraries ROS client library写成的, 例如 roscpp 和 rospy.
Master: ROS Master 提供了登记列表和对其他计算图的查找。没有Master,节点将无法找到其他节点,交换消息或调用服务。
Server Parameter Server: 参数服务器使数据按照钥匙的方式存储。目前,参数服务器是主持的组成部分。
Messages:节点之间通过messages来传递消息。一个message是一个简单的数据结构,包含一些归类定义的区。支持标准的原始数据类型(整数、浮点数、布尔数,等)和原始数组类型。message可以包含任意的嵌套结构和数组(很类似于C语言的结构structs)
Topics: Messages以一种发布/订阅的方式传递。一个node可以在一个给定的topic中发布消息。Topic是一个name被用于描述消息内容。一个node针对某个topic关注与订阅特定类型的数据。可能同时有多个node发布或者订阅同一个topic的消息;也可能有一个topic同时发布或订阅多个topic。总体上,发布者和订阅者不了解彼此的存在。主要的概念在于将信息的发布者和需求者解耦、分离。逻辑上,topic可以看作是一个严格规范化的消息bus。每个bus有一个名字,每个node都可以连接到bus发送和接受符合标准类型的消息。
Services:发布/订阅模型是很灵活的通讯模式,但是多对多,单向传输对于分布式系统中经常需要的“请求/回应”式的交互来说并不合适。因此,“请求/回应” 是通过services来实现的。这种通讯的定义是一种成对的消息:一个用于请求,一个用于回应。假设一个节点提供了一个服务提供下一个name和客户使用服务发送请求消息并等待答复。ROS的客户库通常以一种远程调用的方式提供这样的交互。
Bags: Bags是一种格式,用于存储和播放ROS消息。对于储存数据来说Bags是一种很重要的机制。例如传感器数据很难收集但却是开发与测试中必须的。
在ROS的计算图中,ROS的Master以一个name service的方式工作。它给ROS的节点存储了topics和service的注册信息。Nodes 与Master通信从而报告它们的注册信息。当这些节点与master通信的时候,它们可以接收关于其他以注册节点的信息并且建立与其它以注册节点之间的联系。当这些注册信息改变时Master也会回馈这些节点,同时允许节点动态创建与新节点之间的连接。
节点之间的连接是直接的; Master仅仅提供了查询信息,就像一个DNS服务器。节点订阅一个topic将会要求建立一个与发布该topics的节点的连接,并且将会在同意连接协议的基础上建立该连接。ROS里面使用最广的连接协议是TCPROS,这个协议使用标准的TCP/IP 接口。
这样的架构允许脱钩工作(decoupled operation),通过这种方式大型或是更为复杂的系统得以建立,其中names方式是一种行之有效的手段。names方式在ROS系统中扮演极为重要的角色: topics, services, and parameters 都有各自的names。每一个ROS客户端库都支持重命名,这等同于,每一个编译成功的程序能够以另一种形似【名字】运行。
例如,为了控制一个北阳激光测距仪(Hokuyo laser range-finder),我们可以启动这个hokuyo_node 驱动,这个驱动可以给与激光仪进行对话并且在"扫描"topic下可以发布sensor_msgs/LaserScan 的信息。为了处理数据,我们也许会写一个使用laser_filters的node来订阅"扫描"topic的信息。订阅之后,我们的过滤器将会自动开始接收激光仪的信息。 注意两边是如何脱钩工作的。 所有的hokuyo_node的节点都会完成发布"扫描",不需要知道是否有节点被订阅了。所有的过滤器都会完成"扫描"的订阅,不论知道还是不知道是否有节点在发布"扫描"。 在不引发任何错误的情况下,这两个nodes可以任何的顺序启动,终止,或者重启。
以后我们也许会给我们的机器人加入另外一个激光器,这会导致我们重新设置我们的系统。我们所需要做的就是重新映射已经使用过的names。当我们开始我们的第一个hokuyo_node时,我们可以说它用base_scan代替了映射扫描,并且和我们的过滤器节点做相同的事。现在,这些节点将会用base_scan的topic来通信从而代替,并且将不再监听"扫描"topic的信息。然后我们就可以为我们的新激光测距仪启动另外一个hokuyo_node。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小桥流水78/article/detail/999744
推荐阅读
article
Git
如何上传
大
文件
_
git
上传
大
文件
...
当您需要通过
Git
存储并分发较
大
的
文件
时,
Git
Hub对
文件
大
小的限制可能会成为问题。但您可以使用
Git
Large F...
赞
踩
article
【
BES2500x
系列
--
RTX5
操作系统
】深入探索CMSIS-
RTOS
RTX
--
配置篇 ...
大家好,又见面了,我是夜阑的狗
cmsis
rtos
...
赞
踩
article
openHarmony4.0
Release
-
riscv64
荔枝派
版本
新增
glmark2
三方
库
_glm...
本文为个人笔记,文中的部分超链接其他人可能没有权限打开。本文仅限于记录增加已经适配好的第三方
库
文件,不涉及
库
的编译体系、...
赞
踩
article
mysql
数据
类型
_
mysql
默认
整数
类型
是无
符号
还是有
符号
的?...
mysql
数据
类型
一、数值型1.1
整数
1.2小数二、字符型2.1短文本2.2 长文本三、日期型一、数值型1.1
整数
如...
赞
踩
article
阅读--2020-8-7
CCFA
Modeling
Long
- and
Short
-
Term
Te...
用深度神经网络对长短时间模型建模提出了两个模型LSTNet-S 和LSTNet-A模型包含两个部分:分别是非线性变化部分...
赞
踩
article
PaddleSlim
重磅开源SlimX系列13个小
模型
,覆盖
人脸识别
、
分类
、
检测和OCR_paddl...
PaddleSlim
发布Slim系列13个工业级小
模型
,包括SlimMobileNet
、
SlimFaceNet
、
Slim...
赞
踩
article
#
Git
使用篇:Mac&
Window
--
-
git
生成
/添加SSH公钥
--
-安装
--
TortoiseG...
终端输入
ssh
-keygen -t ed25519 -C “xxxxx@xxxxx.com” 连续按压3次回车。5.绝对...
赞
踩
article
C++
面试
八股
文总结 --
计算机网络
_
c++
计算机网络
八股
...
C++
面试
八股
文总结 --
计算机网络
_
c++
计算机网络
八股
c++
计算机网络
八股
...
赞
踩
article
python
大
数据
基础知识点(
Hadoop
+
HDFS
+
MapReduce
+
Hive
+Hbase)_h...
本文详细介绍了Python大
数据
的基础,特别是
Hadoop
生态,包括
HDFS
、
MapReduce
、
Hive
和HBase。...
赞
踩
article
[240523]
微软
推出
Surface
Pro
11
:
Copilot
+ PC |
微软
Bu...
-
微软
推出
Surface
Pro
11
:
Copilot
+ PC- Microsoft
Build
大会推动 AI...
赞
踩
article
python
全系列官方中文
文档
,
python
帮助
文档
中文版
_
python
帮助
文档
中文版
下载
...
大家好,小编来为大家解答以下问题,
python
全系列官方中文
文档
,
python
帮助
文档
中文版
,现在让我们一起来看看吧!...
赞
踩
article
【
神经网络
基础知识
整理】
前向
传播
&&
反向
传播
_
神经网络
前向
传播
...
再对数据进行相应的处理,继续传下去,直到输出层;
反向
传播
是从后往前
传播
的,从output层到input层的方向:目标函数...
赞
踩
article
GPU
编译器
转开源
Mesa
编译器
_
mesa
nir
...
本文介绍了如何将GPU
编译器
分解为DXIL到SPIRV,再到
Mesa
的
nir
编译过程,包括使用dxil-spirv库进行...
赞
踩
article
K8S
环境
搭建...
1、在windows上安装虚拟机,在虚拟机上虚拟出3个linux系统,我这里分别是master,node1,node2,...
赞
踩
article
Mac配置
git
ssh
公钥
_
mac
ssh
公钥
...
【代码】Mac配置
git
ssh
公钥
。_
mac
ssh
公钥
mac
ssh
公钥
...
赞
踩
article
mysql
数组
类型,像
PostgreSQL
中一样,
MySQL
中是否有任何
数组
数据类型
?...
I need to store arrays of integers in a
MySQL
database. In t...
赞
踩
article
python
汉化
补丁包
下载
,
python
3.9.2怎么
汉化
_
python
汉化
包
...
本文详细介绍了如何在Python中安装程序
汉化
包
,包括
下载
汉化
包
、定位Python安装路径、解压并配置
汉化
文件,以及测试...
赞
踩
article
vue
关于父
组件
无法触发
子
组件
的
事件
的
解决
方法
...
一般情况导致无法触发
子
组件
的
方法
基本都是由于
子
组件
未渲染完成 就进行了调用,
解决
方法
如下:1.加定时器setTimeo...
赞
踩
article
opengl
-
mesa
3D...
OpenGL的高效实现一般依赖于显示设备厂商提供的硬件,而Mesa 3D是一个纯基于软件的图形应用程序接口。由于许可证的...
赞
踩
article
AXI
协议...
AMBA
AXI
支持高性能、高速的系统设计。_axi协议axi协议 ...
赞
踩
相关标签
git
github
arm
stm32
系统架构
恒玄BES
搜索引擎
risc-v
harmonyos
mysql
人工智能
人脸识别
算法
百度
大数据
编程语言
ssh
网络
hadoop
HDFS
Hive
HBase
MapReduce
microsoft
copilot