顶尖会议 ROSCON
与其说ROS是一种操作系统,不如说它是一种分布式模块化的开源软件框架。它借用标准的TCP(UDP)/IP协议实现了系统内部各个节点之间的通信,网络化的接口允许将第三方组件泛化成为其操作系统的一部分。
ROS Fuerte ubuntu 12.10之前的版本
通过节点管理器,为节点保存主题和服务的注册信息。
服务被定义为一对消息结构:一个用于请求,一个用于回复。
客户通过对提供服务的节点发送请求信息并等待响应来使用服务。
消息被定义为一个由类型域构成的简单的数据结构,类似C语言中的结构体。
发布和订阅,消息发送到一个给定的主题来发布一个消息,主题是用来识别消息内容的名称。
定义一个主题的节点将会请求与发布主题的节点进行连接,节点管理器只提供查找表信息(像DNS) 并确定在一种连接协议上进行。TCPROS采用标准TCP/IP套接字
多对多的传输方式 实验中,建议先启动订阅的节点,然后启动发布的节点??
ROS通过点对点 服务和节点管理器等机制可以分散实时计算压力。
一、语音识别包 二、语音库 三、语音控制 四、播放语音
学习一个软件的原则,不要学习如何操作,要理解的核心的问题是数据和操作数据的方法,软件采用什么架构来解决这个核心问题。使用中展现出来的水平,其实不取决于你知道多少高手的神秘技巧,取决于你解决问题时的想象力。因为不论多强大的计算机,它也只能将简单的事情做许多次,但在你能把复杂问题分解成简单问题之前,计算机做不了复杂的事。而将复杂的问题转化成简单的问题,恰恰是人最突出的能力。
机器人的形态多样,功能各部相同,所以软件的功能已经不再是设计中的重点,设计的重点转向了增强软件的灵活性与可扩展性。最重要的是其架构,是其内部组件之间的通讯机制。
应该是借鉴了VFX领域中Maya和Hudini中的许多思想,它们的设计要求是高内聚,低耦合。希望一项功能能切成不同的小块,而每一个小块又能自由的组合。它们都采用了节点式(node)的结构。ROS也是如此。每个node都是一个小功能模块。工具的扩展可以有一下两种方式:一种是将已有的node重新联接。另一种是开发新的node。
ecto使用了Maya的方式,ROS更像是hudini
Maya的Hypergraph所描述的是一种数据结构:叫有向无环图(DAG)。它定义了Maya各组件之间的数据通信的方式和内容。也描述了动画运算的全部操作跟流程。Maya的核心就是一个DAG引擎。其上有一个MEL脚本语言接口。MEL的核心命令只不过十句而已。
Maya中的节点通过DAG组织在一起。
创造/删除节点
创造/删除属性
设置/读取属性
连接/切断节点联接
遍历/更新节点
DAG组织动画流程
DAG的求值顺序
当数据修改时,数据会向下联接标注成需要更新 1 -> 2 -> 3 若2被修改了,2和3会被打上标记 1 -> 2'-> 3' 当抽取3时,2会被抽取,但因为1的数据没有变化,所以不会被抽取。这也是采用DAG的原因
Maya的问题
Houdini,一种是那种碎片加胶水的结构,另一种就是那种一切皆文件的想法。
基于Python的流水线,流水线的核心功能实际上是读取,解析和保存数据。
如果一个软件对灵活性要求非常高的话,设计到最后你其实是设计了一门专门的编程语言。软件设计其实是根据其功能设计了一些专门的指令,简化了编程难度。