Modules and representations

Module 大框架

模块分为两个部分:requirements和representations
一个模块包含一个或多个requirements和representations
一个representations只能由一个模块更新

Module之模块定义

定义每个模块都分别使用宏命令REQUIRES和PROVIDES

Module之更新

motion (运动系统) 或cognition(感知系统) 的
moduleMangager::update
主要作用就是将providers构造出来,
即属于motion(或者cognition)的模块创建出来

在ModuleManager.h文件中可以找到 ↑&↓

函数"calcShared"(部分提取)作用:
    1、传递到sortProvider中作为算法输入
    2、在使用simulatot进行模块的调试时,不同进程中的模块通信通过stream进行传递,
    机器人程序是线程的,因此不需要考虑shared中的stream
    (注:在机器人和simulator中,motion和cognition都只是作为线程运行的)
函数"sortProvider"作用:
    将providers进行排序,解决模块之间的依赖关系
    e.g A模块提供(PROVIDERS)给B模块(representation),
     而 A模块需要(REQUIRES)C模块的提供(PROVIDERS)repreentation
     即C→A→B
以上俩个重点函数仅仅是motion(或cognition)中的模块之间的依赖关系;
模块的顺序,是依靠representation的依赖关系来决定的。
PS:以上可以参考BHuman文档中的模块关系图,再对照Modules中的每个具体模块,查看模块定义的部分。

问题来了:motion与cognition之间更新顺序如何考虑

motion与cognition是作为线程运行的,通过timeStamp同步进行,模块之间通过shared交流。
motion运行速度为10ms运行一次,cognition为是33ms运行一次。二者并发进行,当motion需要用到cognition中的模块一定最新的,不需要考虑更新顺序。

整个process框架仅仅是为了调试或者实现进程而添加的

参数setEventID:设置时间条件,到了一定的时间就切换

参数timeStamp:用于进程通信或调试