学习笔记10/6/2024 cardiff
致自己
端午安康,记得中超关门前去买两个粽子吃
ROS框架
ROS架构设计
‘可以将其分为三个层次:OS层、中间层和 应用层。’【个人理解:说实在对于系统真心不了解不知道能不能将这三层类比成前端后端和中间数据传输。】
OS层
‘ROS并不是一个传统意义上的操作系统,无法像Windows、Linux一 样直接运行在计算机硬件之上,而是需要依托于Linux系统。所以在OS 层,我们可以直接使用ROS官方支持度最好的Ubuntu操作系统,也可以 使用macOS、Arch、Debian等操作系统’【个人理解:ROS是操作系统又不完全是,有点像寄生虫,需要宿主才可以活得顺畅 】
中间层
ROS基于TCD/UDP网络,在此基础上再次封装,形成了其重要的通讯系统TCPROS/UDPROS。【个人观点:读到这里的时候依旧感觉ROS系统内的数据传输得模式很像不断引用API,但是读完这章感觉好像不大对,更准确应该像订阅号/公众号(当然这个感觉可能还是错误的,希望后期学习中能通过深造得到更加准确的解释吧)】
‘除了TCPROS/UDPROS的通信机制外,ROS还提供一种进程内的通 信方法——Nodelet,可以为多进程通信提供一种更优化的数据传输方 式,适合对数据传输实时性方面有较高要求的应用。’
‘ 在通信机制之上,ROS提供了大量机器人开发相关的库,如数据类型定义、坐标变换、运动控制等,可以提供给应用层使用。’
*查阅:TCP和 UDP都是网际网路中常见的协议,它们负责在网际网路将资料从设备传输到服务器。两种网络协议都会将资料分隔成更小的单元进行传输。这些小单元称为封包,封包中包含发送端和接收端的 IP 位址、各种配置、使用者传送的实际资料等。(来源:nordvpn.com, 2020)。
应用层
’在应用层,ROS需要运行一个管理者——Master,负责管理整个系 统的正常运行。ROS社区内共享了大量的机器人应用功能包,这些功能 包内的模块以节点为单位运行,以ROS标准的输入输出作为接口,开发者不需要关注模块的内部实现机制,只需要了解接口规则即可实现复用,极大地提高了开发效率。‘【个人理解(不确定):读到这里的时候脑海中出现个奇怪的想法->我是否可以理解为:当在ROS里面运行的时候就是不断完成信息的获取和传输。从而获得所需节点的功能。而这些节点都是提前写好发布到ROS开源库里面的。=>类比到软件工程,就好像用Java编程,这时候引用的function就是已经写好在JDK的libraries中的。=>而就像不同版本的JDK都是人为编辑的,library也是在不断更新。ROS的库在有能力的情况写也可以被创造出一个同替(当然现在应该是已经有了的,只是并不都是开源)】
ROS关键术语(计算图)
节点
’节点(Node)就是一些执行运算任务的进程,一个系统一般由多个 节点组成,也可以称为“软件模块”。节点概念的引入使得基于ROS的系 统在运行时更加形象‘【个人理解:暂时理解的是不同节点间可以互相串通可以更方便交互,但是后面发现好像这么理解有偏差】
消息
‘节点之间最重要的通信机制就是基于发布/订阅模型的消息 (Message)通信。每一个消息都是一种严格的数据结构,支持标准数据类型(整型、浮点型、布尔型等),也支持嵌套结构和数组(类似于 C语言的结构体struct),还可以根据需求由开发者自主定义。’【个人理解:感觉这个好理解点,应该就是类似WeChat等社交软件中的那种消息。只不过针对这种消息的数据类型,ROS不仅允许传递标准数据类型,还允许传递类似于’类‘,’枚举‘等自定义数据。】
-------【直到读到这里才感觉自己之前”纯粹把一个系统当作一个IDE“的想法有多么荒谬】--------
话题
’消息以一种发布/订阅(Publish/Subscribe)的方式传递(见图2- 4)。一个节点可以针对一个给定的话题(Topic)发布消息(称为发布 者/Talker),也可以关注某个话题并订阅特定类型的数据(称为订阅 者/Listener)。发布者和订阅者并不了解彼此的存在,系统中可能同时 有多个节点发布或者订阅同一个话题的消息‘【个人理解:有点像公众号/订阅号->1)A、B作为版主可以发表同一个话题的不同文章;2)C、D作为读者都可以订阅同一个话题的同一个或者不同文章(消息)】
服务
’虽然基于话题的发布/订阅模型是一种很灵活的通信模式,但是对 于双向的同步传输模式并不适合。在ROS中,我们称这种同步传输模式 为服务(Service),其基于客户端/服务器(Client/Server)模型,包含 两个部分的通信数据类型:一个用于请求,另一个用于应答,类似于 Web服务器。与话题不同的是,ROS中只允许有一个节点提供指定命名 的服务。‘【个人理解:刚读到这里的时候be like:(?_?)。直到读到本章的最后介绍的通信机制对比才稍微领悟】

节点管理器
’为了统筹管理以上概念,系统当中需要有一个控制器使得所有节点 有条不紊地执行,这就是ROS节点管理器(ROS Master)。‘【个人理解:中枢神经?类CPU?】
文件系统
’类似于操作系统,ROS将所有文件按照一定的规则进行组织,不同 功能的文件被放置在不同的文件夹下‘【个人理解:一大吐露文字,最终总结’大鱼套小鱼,小鱼套虾米‘。就像书中给的图上展示的一样分为功能包-功能包清单-元功能包-元功能包清单】

功能包
’这些文件夹的主要功能如下。
1)config:放置功能包中的配置文件,由用户创建,文件名可以不 同。
2)include:放置功能包中需要用到的头文件。
3)scripts:放置可以直接运行的Python脚本。
4)src:放置需要编译的C++代码。
5)launch:放置功能包中的所有启动文件。
6)msg:放置功能包自定义的消息类型。
7)srv:放置功能包自定义的服务类型。
8)action:放置功能包自定义的动作指令。
9)CMakeLists.txt:编译器编译功能包的规则。
10)package.xml:功能包清单‘
【个人理解:配置文件,尤其是功能包清单文件像极了java在Gladle项目中的.gladle文件】
元功能包
’元功能包是一种特殊的功能包,只包含一个package.xml元功能包清 单文件。它的主要作用是将多个功能包整合成为一个逻辑上独立的功能 包,类似于功能包集合的概念。‘【个人理解:分类文件夹的作用,emmm好像也不准确,再往下看看】
ROS的通信机制(分布式)
’ROS是一个分布式框架,为用户提供多节点(进程)之间的通信服 务,所有软件功能和工具都建立在这种分布式通信机制上,所以ROS的 通信机制是最底层也是最核心的技术。在大多数应用场景下,尽管我们 不需要关注底层通信的实现机制,但是了解其相关原理一定会帮助我们 在开发过程中更好地使用ROS。’
话题通信机制
【个人理解:原文给了一个实例,类比着自己画了个图(下图一)】

服务通信机制
【个人理解:原文给了一个实例,类比着自己画了个图(下图二)】

参数管理机制
【个人理解:这里感觉发出的信息很像map数据,当A改变了value之后,如果B不刷新数据,就算key依旧正确,获取的value也是老数值。原文给了一个实例,类比着自己画了个图(下图三)】
‘,如果A向B更新参数值,Listener在不 重新查询参数值的情况下是无法知晓参数值已经被更新的。所以在很多 应用场景中,需要一种动态参数更新的机制,第12章会具体讲解ROS中 动态参数配置功能的实现。’

【(小日记):下午出去溜达了,途中去咖啡厅歇息用pad看完了这一章顺便做了笔记,晚上回来整理当个日记发下,算是记录了吧。
粽子回来前去买了猪肉板栗的和蜜枣的各两个,好吃欸,就是有点小贵(=v=)&(T^T)】