CVPR

ROS

顶尖会议 ROSCON

与其说ROS是一种操作系统,不如说它是一种分布式模块化的开源软件框架。它借用标准的TCP(UDP)/IP协议实现了系统内部各个节点之间的通信,网络化的接口允许将第三方组件泛化成为其操作系统的一部分。

ROS Fuerte ubuntu 12.10之前的版本

总体框架

  • main:Willow Garage公司和一些开发者,基本工具和ROS系统核心部分
  • universe:ROS社区组织开发和维护
  • 库:OpenCV、PCL等
  • 从功能角度提供的代码:调用各种库来实现。人脸识别等
  • 应用级代码:调用不同功能的代码进行组合

ROS通信 - 计算图:ROS处理数据的一种点对点的网络形式

通过节点管理器,为节点保存主题和服务的注册信息。

  • 基于服务的同步RPC的通信

    服务被定义为一对消息结构:一个用于请求,一个用于回复。
    客户通过对提供服务的节点发送请求信息并等待响应来使用服务。

  • 基于主题的异步数据流(也是RPC吗?) 及 参数服务器上的数据存储

    消息被定义为一个由类型域构成的简单的数据结构,类似C语言中的结构体。
    发布和订阅,消息发送到一个给定的主题来发布一个消息,主题是用来识别消息内容的名称。
    定义一个主题的节点将会请求与发布主题的节点进行连接,节点管理器只提供查找表信息(像DNS) 并确定在一种连接协议上进行。TCPROS采用标准TCP/IP套接字
    多对多的传输方式 实验中,建议先启动订阅的节点,然后启动发布的节点??

  • 参数服务器

ROS通过点对点 服务和节点管理器等机制可以分散实时计算压力。

faq

  • 消息,主题这种设计的逻辑,+shadow是否可以借鉴?
  • 一个主题中可以发布不同type的消息吗?
  • 如何根据主题找到所有发布者? rxgraph可以不知是怎么做的

待实现

浅谈CG流水线《又名五分钟内精通Maya》

学习一个软件的原则,不要学习如何操作,要理解的核心的问题是数据和操作数据的方法,软件采用什么架构来解决这个核心问题。使用中展现出来的水平,其实不取决于你知道多少高手的神秘技巧,取决于你解决问题时的想象力。因为不论多强大的计算机,它也只能将简单的事情做许多次,但在你能把复杂问题分解成简单问题之前,计算机做不了复杂的事。而将复杂的问题转化成简单的问题,恰恰是人最突出的能力。

机器人的形态多样,功能各部相同,所以软件的功能已经不再是设计中的重点,设计的重点转向了增强软件的灵活性与可扩展性。最重要的是其架构,是其内部组件之间的通讯机制。

应该是借鉴了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. 从右向左更新,抽取式的
    当数据修改时,数据会向下联接标注成需要更新
    1 -> 2 -> 3
    若2被修改了,2和3会被打上标记
    1 -> 2'-> 3'
    当抽取3时,2会被抽取,但因为1的数据没有变化,所以不会被抽取。这也是采用DAG的原因
    

Maya的问题

  • 任何节点读取不到节点之外的信息
  • 对于物理仿真来说,一定是有环流的

Houdini,一种是那种碎片加胶水的结构,另一种就是那种一切皆文件的想法。

基于Python的流水线,流水线的核心功能实际上是读取,解析和保存数据。

如果一个软件对灵活性要求非常高的话,设计到最后你其实是设计了一门专门的编程语言。软件设计其实是根据其功能设计了一些专门的指令,简化了编程难度。