当前位置

网站首页> 程序设计 > 开源项目 > 程序开发 > 浏览文章

NAO机器人学习小计

作者:小梦 来源: 网络 时间: 2024-08-13 阅读:

最近参与的一个项目是实现安卓以及ios设备对nao机器人的操控。

思路很简单,搞清楚nao机器人的通信接口,然后无非就是通过通信协议完成操纵就行了。

因此开发流程主要是:

  1. 选定通信协议,暂定socket。

  2. 开发nao端服务程序,接受来自客户端的消息,操纵nao完成动作。

  3. 开发客户端程序,发送特定指令以完成操控。

现在对于nao机器人的环境搭建还不是非常明确,先从接口入手。企业导师给的资料都是脚本语言级别的编程,不符合要求。因此找来naoqi documents,苦心钻研。

NAO APIs

nao的接口全部以AL开头,全部继承自ALModule,它被包含在<alcommon/almodule.h>中。
下面是ALModule的主要接口。

ALModule APIs

namespace : AL

#include <alcommon/almodule.h>

任务调度

ALModule::isRunning()

bool ALModule::isRunning(const int& id);
确定被一个‘post’创建的方法是否还在运行。(注:post可能类似于一个线程池管理员,方法的编号可能类似于线程号)。params: id - 被post所返回的函数的编号return: true表示该方法正在被执行,false表示该方法没有被执行。

ALModule::wait()

bool ALModule::wait(const int& id, const int& timeour);
等待编号为id的方法执行完毕。params: id - 被post所返回的函数的编号        timeout - ms为单位,表示return: true表示该方法正在被执行,false表示该方法没有被执行。

ALModule::stop()

void ALModule::stop(const int& id);
根据id停止相应方法。比较提倡模块开发人员实现这个接口,当模块内包含长时间执行的方法,而又希望允许用户打断。params: id - 被post返回的方法的编号return:

ALModule::exit()

void ALModule::exit();
将这个模块从父经纪人(parent broker)中注销。一旦这个方法被调用,这个模块将不再可用。开发人员应该在希望执行彻底的关机任务时重写这个方法。——warning:不建议在核心模块(例如 ALMemory 或者 ALMotion)中存在别的模块或者方法正在调用它们时使用。


Bound Methods - Introspection
(↑不太理解,字面翻译是:绑定的方法-反思)

ALModule::getBrokerName()

std::string ALModule::getBrokerName();
获取父经纪人的名称return: 父经纪人的名称。

ALModule::getMethodList()

std::vectore<std::string> ALModule::getMethodList();
获取当前模块的方法名称列表。return: 包含方法名称的向量。

ALModule::getMethodHelp()

AL::ALValue ALModule::getMethodHelp(const std::string& methodName);
获取一个方法的描述文档。params: methodName - 方法的名称return: 一个包含了方法的描述内容的结构体注:AL::ALValue [    std::string methodName,     [ parameter, ... ]    std::string returnName,    std::string returnDescription]parameter:[    std::string parameterName,    std::string parameterDescription]

ALModule::getModuleHelp()

AL::ALValue ALModule::getModuleHelp();
获取当前模块的描述。return: 一个包含模块描述的结构体。注:AL::ALValue[    std::string moduleDescription,    [ moduleExample, ... ]]moduleExample:[    std::string language,    std::string example]

ALModule::getUsage()

std::string ALModule::stop(const std::string& methodName);
根据函数名称返回该函数的用法。params: methodName - 函数名称。return: 总结了该函数用法的字符串。

ALModule::ping()

bool ALModule::ping();
单纯为了测试连接的ping。永远返回truereturn: true

ALModule::version()

std::string ALModule::version();
返回模块的版本return: 模块的版本信息字符串。

以上接口将作为公共接口存在于所有模块中。


由于我们的项目以通信为主,因此我们优先关注通信模块ALConnectionManagerProxy

ALConnectionManager APIs

namespace : AL

#include <alproxies/alconnectionmanagerproxy.h>

连接管理模块继承自ALModule API。它也有自有的下列方法:

ALConnectionManagerProxy::state()ALConnectionManagerProxy::services()ALConnectionManagerProxy::technologies()ALConnectionManagerProxy::service()ALConnectionManagerProxy::connect()ALConnectionManagerProxy::disconnect()ALConnectionManagerProxy::forget()ALConnectionManagerProxy::setServiceConfiguration()ALConnectionManagerProxy::setServiceInput()ALConnectionManagerProxy::scan()ALConnectionManagerProxy::enableTethering()ALConnectionManagerProxy::disableTethering()ALConnectionManagerProxy::getTetheringEnable()ALConnectionManagerProxy::tetheringName()ALConnectionManagerProxy::tetheringPassphrase()ALConnectionManagerProxy::countries()ALConnectionManagerProxy::country()ALConnectionManagerProxy::setCountry()ALConnectionManagerProxy::interfaces()

(未完)

相关阅读

热点阅读

网友最爱