1

我有多种应用程序,可以通过以下三种方式之一启动:
1. 从机器人的平板电脑 - 当用户点击我使用的图标时runBehaviourstartBehaviour
2. 从对话框 - 触发事件或开始行为
3. 使用触发语句

当应用程序运行时,我希望机器人保持专注直到它结束。这就是为什么我停止诸如ALBasicAwarnessand之类的模块的原因ALSpeechRecognition。但是,如果有人触摸机器人的头部,dialog_touch就会触发来自基本频道的消息,Pepper 会开始倾听和回答问题,即使他还没有离开应用程序。Т如果应用程序以 (1) 或 (2) 方式启动,但如果以 (3) 方式(带有触发语句)启动,机器人始终保持专注。

我想知道从触发语句开始和其他方式有什么区别,以及如何运行应用程序使机器人不会集中注意力。

4

2 回答 2

4

而不是,runBehaviorstartBehavior应该利用机器人生命周期(请参阅doc)。改为调用ALAutonomousLife.switchFocus,以便机器人 100% 专注于您的应用程序(所有其他应用程序都将停止)。

当机器人启动时,自治生活“单独”运行(没有行为集中)。它注册并监听安装在机器人上的所有应用程序的启动触发条件。当一个行为想要开始时(即其触发条件为真),那么“自治生活”会自动调用switchFocus

然后根据行为类型

  • 如果行为是“交互的”,那么自主生命也将取消注册启动触发条件(即交互行为不能被另一个行为停止)。
  • 如果行为是“孤立的”,那么只有交互行为的触发条件仍然有效(即,如果需要开始交互行为,可以停止孤立行为)。

在您的应用程序结束时,机器人将返回“单独”状态并继续观察触发条件。

如果您的机器人上有“对话”,那么您的互动行为将自动启动(触发条件“用户在区域 1”)并运行所有“协作对话”。在一个对话框中,您可以使用^switchFocus来要求autonomousLife 启动一个应用程序并停止它正在执行的任何其他操作。

于 2017-11-13T22:57:35.947 回答
2

我无法详细告诉您该系统是如何工作的,但我猜想对话和触发语句都ALBehaviorManager.startBehavior在后台使用。如果您想确保没有任何东西会中断您的应用程序,您必须将应用程序的状态(即行为)设置为“交互”。只有一种行为可以交互式运行。 在此处输入图像描述

有关状态的详细信息:http ://doc.aldebaran.com/2-5/ref/life/state_machine_management.html?#states

于 2017-11-13T11:22:52.100 回答