【Nao-04】 Naoqi Framework & Broker & Proxy & Modules

概述

尚在更新

Title


一、NAOqi Framework

1. 什么是 NAOqi Framework

  Naoqi 是运行在我们的机器人上并对机器人实现控制的主程序,而 Naoqi Framework 则是为 SoftBank Robotics 机器人所设计的编程框架。通过这个框架,我们可以解决我们对机器人的常见需求,包括:并行性、资源、同步和事件。

  Naoqi Framwork 允许不同模块(运动、音频、视频)之间同构通信、同构编程以及同构信息共享。同时 Naoqi Framework 支持跨平台、跨语言。

2. 跨平台:

  Naoqi Framwork 同时兼容 Windows, Linux 和 Mac,因此我们在 Windows, Linux 和 Mac 环境下都可以利用 Naoqi Framework 进行相关开发。

  • Python:可以轻松地在电脑上运行代码。也可以直接在机器人上运行代码。
  • C++:和 Python 不同的是,由于 C++ 是一种编译语言,因此如果想要在机器人上运行 C++ 代码的话,需要先要在目标操作系统上完成代码的编译,需要使用交叉编译工具来生成能在机器人操作系统上(Naoqi OS)运行的代码。

要使用 C++ 进行开发的话,请按照 C++ SDK 安装指南 以确保安装了所有所需的工具

3. 跨语言:

  在机器人上运行的软件既可以用 Python 来开发,也可以用 C++,并且在两种语言上开发方法是完全相同的。

framework_crosslangage

推荐初学者从 Python 开始学习,因为 Python 更好入门,进而更好更快的完成需求。
熟练的 C++ 开发人员应当花更多的时间来开发:
  1. Python 中的 behavior
  2. C++ 中的 Modules。

4. 分布式:

  Naoqi Framework 的分布式主要体现在以下两点:

  1. 一个实时的应用程序不仅可以是一个可执行文件,还可以是分布在几个机器人上的多个进程或模块。无论你选择哪一个,调用的方法都是一致的。

  2. 使用一个机器人通过 IP 和端口将可执行文件连接到另一个机器人上时,调用来自其它可执行文件的 API 方法与调用本地的方法是完全一致的。

framework_communication

在连接时 Naoqi 会自动选择使用快速直连(LPC)还是远程呼叫(RPC)。

5. 如何使用:

  Introspection

  Introspection 是机器人 API、能力、监控和被监控功能的基础,通过 Introspection 机器人可以知道自身可用的所有 API 函数,若是卸载一个库文件,那么机器人就会自动删除相应的 API 函数,同时,在 module 中所定义的函数可以通过 BIND_METHOD 来将其添加到 API 中。(BIND_METHOD 定义于 almodule.h)

  如果你通过 BIND_METHOD 绑定了一个函数,尽管这个函数只有三行,你也将受益于以下几点:

  • 这个函数既可以在 C++ 中调用,也可以在 Python 中调用。(Naoqi Framework 的跨语言特性)
  • 可以知道这个函数是否被调用了。
  • 不仅可以在本地调用这个函数,还可以通过远程的方式调用该函数。(Naoqi Framework 的分布式特点)
  • 可以在函数中使用 wait, stop, isRunning 函数。

  Naoqi 进程

  在机器上运行的 Naoqi 可执行文件其实相当于一个代理人,当 Naoqi 启动时,它将会加载一个名为 autoload.ini 的首选项文件,并从中读取应当加载哪些库,每一个库都包含了一个或多个模块,这些模块都使用代理的方式来对外开放。

broker-libraries-modules

  而且这个代理提供了查找功能,这样就方便我们在树或者说是 API 网络上找到对应的方法。

  每当加载一个模块的时候,都会建立一棵方法树来与这个模块进行关联,并且将模块与代理也进行关联。

broker-modules-methods

二、Broker

Broker 其实就是一个对象,这个对象提供了:

  • 目录服务:允许你查找所有的模块和方法。
  • 网络访问:允许附加模块的方法从外部进程调用。

在大多数时间里,我们并不需要去关注这个代理,因为它们只是在透明地执行他们的工作,来帮助你写出具有分布式特性的函数。

三、Proxy

博主已弃文而去(假的)

四、Modules

博主已弃文而去(骗你的)

--- END ---
如果你觉得文章内容对你有帮助,可以打赏支持一下哦!

0%