ALBehaviorManager從名字中可以看出該模塊是用來管理行爲的。本節介紹ALBehaviorManager的作用,如何工作,API
主要有三個作用:
- 加載、啓動、停止行爲
- 設置默認行爲
獲取行爲信息
一些行爲可以設爲“默認”,默認的行爲在機器人啓動時就會自動開啓,ALBehaviorManager 模塊可以讓開發者添加、移除、啓動和停止行爲。
如何使用行爲?
從Choregraphe上傳
該圖標意爲行爲已經切換到默認狀態
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])