空闲服务

通常来说,长时间没有人与机器人交互,机器人就会进入空闲状态。如果希望机器人在“空闲”的时候执行某些指定的任务,比如迎宾、巡航或者播放广告等,空闲服务就可以帮你实现这个目的,管理这些任务之间的关系。

空闲状态:我们把机器人没有skill运行,并且前方1.3米内没有物体的情况定义为“空闲状态”。

空闲任务:机器人在空闲状态下启动的任务,如迎宾、巡航、播放广告等定义 为“空闲任务”。

管理规则

  • 进入空闲时间短的优先执行

  • 进入空闲时间相同优先级高的先执行

  • 进入空闲时间及优先级相同的同时执行

image2019-10-29_11-51-48

如上图A,B,C,D,E分别表示机器人所有注册的空闲任务 ,T表示每个任务进入的时间,P表示优化级,这些任务经过空闲任务管理后会重新生成新的列表

空闲任务 打断空闲的规则

  • 打断任务:当前空闲任务配置为打断任务,则会唤醒机器人,重新计时,不会进入下一个任务

  • 非打断任务:如果空闲任务配置为非打断任务,则依次执行任务列表,直到唤醒事件打断空闲状态

image2019-10-29_11-49-15

如上图所示,打断任务开始执行后,空闲状态重新计算时间,并且后面的任务将无法执行,如上图红色部分

空闲任务 创建

  • 配置空闲任务,在app目录下创建xml文件夹

  • 在xml文件夹下创建robot_leisure.xml文件,文件内容如下,其中key、action、skillName不能为空,区分大小写,空闲服务会自动扫描所有已配置的应用,然后统一进行管理

    xml <?xml version="1.0" encoding="utf-8"?> <manifest> <leisures> <task action="com/leisure/test1" key="task1" open="true" priority="5" skillName="test1" time="5" wakeup="false" > </task> </leisures> </manifest>

空闲服务API接口

类 LeisureManager

  • java.lang.Object
  • com.ubtechinc.cruzr.sys.cruzrleisure.leisure.LeisureManager
方法 描述
enableLeisure(String key, boolean enable) key:对应空闲任务的键值
enable: true表示打开,false表示关闭
打开或者关闭对应的空闲任务
getLeisure(String key) key:对应空闲任务的键值
获取对应key的空闲任务
getLeisures() 获取所有当前注册的空闲任务
init(Context context) 初始化空闲服务API,使用API前一定要初始化
init(Context context, IinitListener listener) context:上下文
listener:初始化状态回调
初始化空闲服务api,使用api前一定要初始化
isConnected() 判断当前服务是否连接中
prohibitedLeisure() 禁止机器人进入空闲,调用后机器人不再计算空闲时间,直到调用unProhibitedLeisure方法进行解锁
unProhibitedLeisure() 解除禁止机器人空闲,解禁后机器人重新计算空闲时间
update(LeisureOptions option) option:参数请看表2
更新空闲任务属性,详情参考上图说明
wakeup() 打断空闲计时,调用后会重新计算进入空闲的时长

表1

类 LeisureOptions

  • java.lang.Object
  • com.ubtechinc.cruzr.sys.cruzrleisure.entity.LeisureOptions
类型 参数 参数描述 必填
boolean isOpen true:当前空闲任务启用
false:当前空闲任务关闭
boolean isWakeup true:表示当前空闲任务启动时会处于唤醒状态,机器人重新计算进入空闲时间,不会进入下一个空闲任务
false:当前任务不打断空闲,下一个空闲任务 可以继续执行
String key 空闲任务的唯一标识,一个app可以创建多个空闲任务
int priority 空闲任务的优先级,如果空闲时间相同,只启动优先级高的空闲任务,如果时间及优先级相同则同时启动
long time 进入空闲任务的时长,单位s

表2

接口使用说明

使用接口时在应用的Appcation的onCreate方法进行初始化

        LeisureManager.get().init(this, new IinitListener() {
            @Override
            public void onInit() {
                Log.i("leisure", "successfully initialize");
            }
        });
    }

空闲服务的核心接口为update(LeisureOptions options),可以通过这个接口更新空闲任务的属性,如打开或关闭任务、更改进入任务时间、优先级等,比如将“task1”的空闲任务设置进入时间为20s,并且关闭此任务,使用方法如下:

LeisureOptions options1 = new LeisureOptions.Builder().key("task1").time(20).open(false).build();
                LeisureManager.get().update(options1).done(new DoneCallback<Void>() {
                    @Override
                    public void onDone(Void aVoid) {
                        Log.i("leisure", "update success");
                    }
                }).fail(new FailCallback<Exception>() {
                    @Override
                    public void onFail(Exception e) {
                        Log.e("leisure", "update failed-> " + e.getMessage());
                    }
                });