动作控制

动作控制服务提供 API 调用控制设备执行各种动作相关的功能,作为动作控制服务访问代理的 MotionManager 对象,提供了动作控制服务的主要 API,可通过 RobotContext 对象获取到。

MotionManager motionManager = aRobotContext.getSystemService(MotionManager.SERVICE);

获取当前动作状态

设备通常会只存在两种状态,一种是复位状态(RESET),一种是执行状态(PERFORMING_ACTION)

Posture /* [1] */ posture = motionManager.getPosture();

[1] Posture 参数说明

属性 getter 说明
Posture.name 动作名称
Posture.description 动作描述

下述常量仅用于比较当前设备状态

常量 说明
Posture.RESET 复位状态
Posture.PERFORMING_ACTION 执行动作状态

控制设备动作

通常情况下,某些设备会为自身量身打造一系列的预设行为动作,例如:鼓掌、握手、敬礼等等,通过动作控制服务,用户就可以直接调用这些预设动作。使用时。可以选择执行一个或者以串行的方式执行多个动作。以下将逐项介绍使用方式。

通过 Uri 的方式执行某个特定动作。通过以下实现:设备执行一个“拥抱”动作

Uri actionUri = Uri.parse("action://ubtrobot/hug"); /* [2] */
promise /* [1] */ = motionManager.performAction(actionUri)
    .progress(new ProgressCallback<PerformingProgress>() {
        @Override
        public void onProgress(PerformingProgress/* [3] */ performingProgress) {
            // 动作执行过程会有多次回调
        }
    })
    .done(new DoneCallback<Void>() {
        @Override
        public void onDone(Void aVoid) {
            // 动作执行完成
        }
    })
    .fail(new FailCallback<PerformingException>() {
        @Override
        public void onFail(PerformingException e) {
            // 动作执行失败
        }
    });

[1] 返回执行移动操作的异步对象,通过该对象获取结果以及取消处理过程。具体用法参考 Promise

[2] 动作的 Uri

[3] 异步回调的 PerformingProgress 对象描述了设备移动的进度信息,具体包括:

常量 说明
PerformingProgress.PROGRESS_BEGAN 动作执行开始
PerformingProgress.PROGRESS_ENDED 动作执行结束

按照参数执行某个特定动作。通过以下实现:执行 3 次“再见”动作,执行间隔 3 秒

Uri uri = Uri.parse("action://ubtrobot/goodbye"); 
PerformingOption/* [1] */ option = new PerformingOption.Builder(uri)
    .setLoops(3)
    .setOffsetTime(3000)
    .build();
promise = motionManager.performAction(option);

[1] PerformingOption 对象通过 PerformingOption.Builder 构建,构建参数说明如下:

方法 类型 说明 默认值
Builder.constructor(Uri) Uri 动作的 Uri NULL
Builder.setLoops(loop) int 重复次数 1
Builder.setOffsetTime(offsetTime) float 执行间隔 0
Builder.setSpeed(speed) float 执行速度 0

以串行的方式执行多个动作。以下通过 2 种方式实现:先执行一个"拥抱"动作,然后以 3 秒为间隔

Uri hugUri = Uri.parse("action://ubtrobot/goodbye"); 
PerformingOption option1 = new PerformingOption.Builder(hugUri)
    .setLoops(1)
    .build();

Uri goodbyeUri = Uri.parse("action://ubtrobot/goodbye"); 
PerformingOption option2 = new PerformingOption.Builder(goodbyeUri)
    .setLoops(3)
    .setOffsetTime(3000)
    .build();

// 方法一
promise = motionManager.performActionSerially(option1, option2);

// 方法二
ArrayList<PerformingOption> optionList = new ArrayList<>();
optionList.add(option1);
optionList.add(option2);
promise = motionManager.performActionSerially(optionList);

判断设备当前是否正在执行动作

motionManager.isPerformingAction();

动作列表

动作名称 ID
鼓掌 applause
庆祝 celebrate
再见 goodbye
点头 nod
拥抱 hug
握手 shankhand
往右走 guideright
往左走 guideleft
摆臂 swingarm
四处寻找 searching
眺望 tiaowang
惊奇 surprise
害羞 shy
长高高 zhanggao
发呆 fadai
闲聊动作Talk1-talk24 talk1
talk2
talk3
talk4
talk5
talk6
talk7
talk8
talk9
talk10
talk11
talk12
talk13
talk14
talk15
talk16
talk17
talk18
talk19
talk20
talk21
talk22
talk23
talk24