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])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章