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])