动作控制
动作控制服务提供 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 |