Nao笔记1|NAOqi APIs|Core(核心)——ALBehaviorManager (行为管理器)

ALBehaviorManager从名字中可以看出该模块是用来管理行为的。本节介绍ALBehaviorManager的作用,如何工作,API

主要有三个作用:

  1. 加载、启动、停止行为
  2. 设置默认行为
  3. 获取行为信息

    一些行为可以设为“默认”,默认的行为在机器人启动时就会自动开启,ALBehaviorManager 模块可以让开发者添加、移除、启动和停止行为。

如何使用行为?

  1. 从Choregraphe上传
    这里写图片描述

  2. 该图标意为行为已经切换到默认状态
    默认状态

API介绍:

方法

ALBehaviorManagerProxy::addDefaultBehavior()添加默认行为
ALBehaviorManagerProxy::getBehaviorTags()获取行为标签
ALBehaviorManagerProxy::getBehaviorsByTag()获取安装的行为目录名称,并通过标签进行过滤。
ALBehaviorManagerProxy::getBehaviorNature()获得给定行为的种类
ALBehaviorManagerProxy::getDefaultBehaviors()获取默认行为
ALBehaviorManagerProxy::getInstalledBehaviors()获取已经安装的行为
ALBehaviorManagerProxy::getLoadedBehaviors()获取加载的行为
ALBehaviorManagerProxy::getRunningBehaviors()获取运行的行为
ALBehaviorManagerProxy::getTagList()获取已经安装的行为的标签
ALBehaviorManagerProxy::isBehaviorInstalled()判断该行为是否导入(有效)
ALBehaviorManagerProxy::isBehaviorLoaded()判断该行为是否加载
ALBehaviorManagerProxy::isBehaviorRunning()判断该行为是否运行
ALBehaviorManagerProxy::playDefaultProject()运行默认行为
ALBehaviorManagerProxy::preloadBehavior()加载行为
ALBehaviorManagerProxy::removeDefaultBehavior()移除默认行为
ALBehaviorManagerProxy::resolveBehaviorName()获取该行为或者是安装包的路径,注意:如果两个名字存在冲突,会抛出一个错误。
ALBehaviorManagerProxy::runBehavior()运行该行为一直等到它结束
ALBehaviorManagerProxy::startBehavior()开始该行为
ALBehaviorManagerProxy::stopAllBehavior关闭所有行为
AllBehavior关闭所有行为
ALBehaviorManagerProxy::stopBehavior()关闭某一个行为

.

事件

ALBehaviorManager/BehaviorAdded()当安装行为时引发。
ALBehaviorManager/BehaviorRemoved()当移除行为时引发。
ALBehaviorManager/BehaviorUpdated()当更新行为时引发。
ALBehaviorManager/BehaviorsAdded()当添加行为时引发。
BehaviorsRun()当运行行为列表发生变化时引发

.

信号

ALBehaviorManager::behaviorsRemoved()当行为被删除时触发
ALBehaviorManager::behaviorFailed()当行为被失败时触发
ALBehaviorManager::behaviorsAdded()当行为被添加触发
ALBehaviorManager::behaviorStopped()当行为停止时触发
ALBehaviorManager::behaviorStarted()当行为开始时触发
ALBehaviorManager::behaviorLoaded()行为加载时触发

代码示例:

# -*- encoding: UTF-8 -*- 

import sys
import time

from naoqi import ALProxy

def main(robotIP, behaviorName):
  # Create proxy to ALBehaviorManager
  managerProxy = ALProxy("ALBehaviorManager", robotIP, 9559)

  getBehaviors(managerProxy)
  launchAndStopBehavior(managerProxy, behaviorName)
  defaultBehaviors(managerProxy, behaviorName)

def getBehaviors(managerProxy):
  ''' Know which behaviors are on the robot '''

  names = managerProxy.getInstalledBehaviors()#获取已经安装的行为名称
  print "Behaviors on the robot:"
  print names

  names = managerProxy.getRunningBehaviors()#获取正在运行的行为名称
  print "Running behaviors:"
  print names

def launchAndStopBehavior(managerProxy, behaviorName):
  ''' Launch and stop a behavior, if possible. '''

 # Check that the behavior exists.
  if (managerProxy.isBehaviorInstalled(behaviorName)):

    # Check that it is not already running.
    if (not managerProxy.isBehaviorRunning(behaviorName)):
      # Launch behavior. This is a blocking call, use post if you do not
      # want to wait for the behavior to finish.
      managerProxy.post.runBehavior(behaviorName)
      time.sleep(0.5)
    else:
      print "Behavior is already running."

  else:
    print "Behavior not found."
    return

  names = managerProxy.getRunningBehaviors()
  print "Running behaviors:"
  print names

  # Stop the behavior.
  if (managerProxy.isBehaviorRunning(behaviorName)):
    managerProxy.stopBehavior(behaviorName)
    time.sleep(1.0)
  else:
    print "Behavior is already stopped."

  names = managerProxy.getRunningBehaviors()
  print "Running behaviors:"
  print names

def defaultBehaviors(managerProxy, behaviorName):
  ''' Set a behavior as default and remove it from default behavior. '''

  # Get default behaviors.
  names = managerProxy.getDefaultBehaviors()
  print "Default behaviors:"
  print names

  # Add behavior to default.
  managerProxy.addDefaultBehavior(behaviorName)

  names = managerProxy.getDefaultBehaviors()
  print "Default behaviors:"
  print names

  # Remove behavior from default.
  managerProxy.removeDefaultBehavior(behaviorName)

  names = managerProxy.getDefaultBehaviors()
  print "Default behaviors:"
  print names


if __name__ == "__main__":

  if (len(sys.argv) < 3):
    print "Usage python albehaviormanager_example.py robotIP behaviorName"
    sys.exit(1)

  main(sys.argv[1], sys.argv[2])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章