我有多种应用程序可以通过以下三种方式之一启动:
runBehaviour或startBehaviour当应用程序运行时,我希望机器人保持专注直到它结束。这就是为什么我会停止像ALBasicAwarness和ALSpeechRecognition这样的模块。然而,如果有人碰触机器人的头部,基本频道的dialog_touch就会被触发,Pepper开始倾听和回答问题,尽管他还没有离开应用程序。如果应用程序是以一种方式(1)或(2)启动的,那么Т就会发生,但是如果它是以一种方式(3) (带有触发器语句)启动的,那么机器人将始终保持专注。
我想知道从触发语句开始和其他方式的区别是什么,以及如何运行应用程序,这样机器人就不会专注于。
发布于 2017-11-13 22:57:35
而不是runBehavior和startBehavior,您应该利用机器人的生命周期(参见文档)。代之以调用ALAutonomousLife.switchFocus,这样机器人就能百分之百地专注于你的应用程序(所有其他的都会被停止)。
当机器人启动时,自主生活就在“孤独”中运行(没有专注的行为)。它为安装在机器人上的所有应用程序注册和监听发射触发条件。当行为想要启动(即其触发条件为真)时,“自主生命”将自动调用switchFocus。
然后取决于行为类型:
在您的申请结束,然后机器人回到“孤独”状态,并继续观察触发条件。
如果您的机器人上有“对话框”,那么您的交互行为将自动启动(触发条件为“用户在区域1"),并运行所有”协作对话框“。在对话框中,您可以使用^switchFocus要求autonomousLife启动一个应用程序,并停止它正在做的任何其他事情。
发布于 2017-11-13 11:22:52
我不能详细告诉您系统是如何工作的,但我猜对话框和触发器语句都使用ALBehaviorManager.startBehavior作为后台。如果您想确保应用程序没有中断,则必须将应用程序的状态(即行为)设置为“交互式”。只有一种行为可以作为交互运行。

关于状态的详细信息:management.html?#states
https://stackoverflow.com/questions/47242888
复制相似问题