基础场景
简介
基础场景是RobotOS提供的功能组件,指包含一系列功能策略的场景功能,使用场景Api可以快速实现譬如引领,注册等基础能力,运行过程中的功能状态通过回调函数告知调用侧,开发者可以根据业务需求参与决策。
引领
场景介绍:
引领是方便用户二次开发而实现的一个简单的业务场景,内部集成了人脸识别和导航,可在导航中持续识别引领目标,并可实时上报引领目标的状态,用户二次开发时可根据上报的状态进行处理,更快的实现自身业务需求
适用平台:
豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
是 | 否 | 否 | 否 | 否 | 否 |
注意:此API目前仅支持带有后置摄像头的豹小秘,其它机器人请使用navigation实现类似功能
开始引领
方法名称:startLead
调用方式
LeadingParams params = new LeadingParams(); //引领目标人id params.setPersonId(personId); //引领目的地 params.setDestinationName(dest); //引领目标找不到多久后上报丢失状态 params.setLostTimer(lostTime); //引领开始多久后开启人脸识别 params.setDetectDelay(delayTime); //引领目标距离机器人多远后上报超距状态 params.setMaxDistance(maxDistance); RobotApi.getInstance().startLead(reqId, params, new ActionListener() { @Override public void onResult(int status, String responseString) throws RemoteException { switch (status) { case Definition.RESULT_OK: //成功将目标引领到目的地 break; case Definition.ACTION_RESPONSE_STOP_SUCCESS: //在引领执行中,主动调用stopLead,成功停止引领 break; default: break; } } @Override public void onError(int errorCode, String errorString) throws RemoteException { switch (errorCode) { case Definition.ERROR_NOT_ESTIMATE: //当前未定位 break; case Definition.ERROR_SET_TRACK_FAILED: case Definition.ERROR_TARGET_NOT_FOUND: //引领目标未找到 break; case Definition.ERROR_IN_DESTINATION: //当前已经在引领目的地 break; case Definition.ERROR_DESTINATION_CAN_NOT_ARRAIVE: //避障超时,默认为机器人20s的前进距离不足0.1m, break; case Definition.ERROR_DESTINATION_NOT_EXIST: //引领目的地不存在 break; case Definition.ERROR_HEAD: //引领中操作头部云台失败 break; case Definition.ACTION_RESPONSE_ALREADY_RUN: //引领已经在进行中,请先停止上次引领,才能重新执行 break; case Definition.ACTION_RESPONSE_REQUEST_RES_ERROR: //已经有需要控制底盘的接口调用,请先停止,才能继续调用 break; default: break; } } @Override public void onStatusUpdate(int status, String data) throws RemoteException { switch (status) { case Definition.STATUS_NAVI_OUT_MAP: //目标点不能到达,引领目的地在地图外,有可能为地图与位置点不匹配,请重新设置位置点 break; case Definition.STATUS_NAVI_AVOID: //当前引领路线已被障碍物堵死 break; case Definition.STATUS_NAVI_AVOID_END: //障碍物已移除 break; case Definition.STATUS_GUEST_FARAWAY: //引领目标距离机器人太远,判断标准通过参数maxDistance设置 break; case Definition.STATUS_DEST_NEAR: //引领目标进入机器人maxDistance范围内 break; case Definition.STATUS_LEAD_NORMAL: //正式开始导航 break; default: break; } } });
结束引领
方法名称:stopLead
调用方式:
RobotApi.getInstance().stopLead(reqId, isResetHW);
参数:
- isResetHW: 引领时会切换摄像头到后置摄像头,isResetHW是用于设置停止引领时是否恢复摄像头状态,true:恢复摄像头为前置,false : 保持停止时的状态
焦点跟随
场景介绍:
焦点跟随会根据用户指定的人脸id,持续识别并跟踪,头部云台会持续跟着目标转动,底盘也会跟着联动,直到目标静止,机器人正对目标。
适用平台:
豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
是 | 是 | 是 | 否 | 否 | 否 |
开启焦点跟随
方法名称:startFocusFollow
注1:此方法使用时会占用底盘资源,不可同时执行任何底盘操作,包括导航。
注2:不要反复调用此方法来跟踪同一个人,只需要在跟随丢失或主动停止跟随后,再次启动startFocusFollow。
调用方式:
RobotApi.getInstance().startFocusFollow(reqId, faceId, lostTimeout, maxDistance, new ActionListener() { @Override public void onStatusUpdate(int status, String data) { switch (status) { case Definition.STATUS_TRACK_TARGET_SUCCEED: //跟随目标成功 break; case Definition.STATUS_GUEST_LOST: //跟随目标丢失 break; case Definition.STATUS_GUEST_FARAWAY: //跟随目标距离已大于设置的最大距离 break; case Definition.STATUS_GUEST_APPEAR: //跟随目标重新进入设置的最大距离内 break; } } @Override public void onError(int errorCode, String errorString) { switch (errorCode) { case Definition.ERROR_SET_TRACK_FAILED: case Definition.ERROR_TARGET_NOT_FOUND: //跟随目标未找到 break; case Definition.ACTION_RESPONSE_ALREADY_RUN: //正在跟随中,请先停止上次跟随,才能重新执行 break; case Definition.ACTION_RESPONSE_REQUEST_RES_ERROR: //已经有需要控制底盘的接口调用(例如:引领、导航),请先停止,才能继续调用 break; } } @Override public void onResult(int status, String responseString) { Log.d(TAG, "startTrackPerson onResult status: " + status); switch (status) { case Definition.ACTION_RESPONSE_STOP_SUCCESS: //在焦点跟随过程中,主动调用stopFocusFollow,成功停止跟随 break; } } });
参数
- faceId:焦点跟随的目标人脸id。
- lostTimeout:多久识别不到目标上报目标丢失状态,一般填5-10秒。
- maxDistance:目标距离多远上报超距状态,一般填5米。
停止焦点跟随
方法名称:stopFocusFollow
调用方式:
RobotApi.getInstance().stopFocusFollow(reqId);
唤醒
场景介绍:
唤醒场景指机器人根据唤醒词呼唤的声源方位,控制机器人转动到用户角度。
小秘策略:当角度小于45度时,只转动头部云台,大于45度时,头部云台及底盘均会转动,以最快的速度转动到声源定位的目标角度
mini策略:根据声源方位,转动底盘到声源方位
适用平台:
豹小秘 | 豹小秘2 | mini | 招财豹 | 招财豹Pro | 豹小秘DP |
是 | 是 | 是 | 否 | 否 | 否 |
声源定位
每次唤醒机器人时,可以获取到唤醒时唤醒人和机器人之间的夹角,这个夹角叫声源定位角度。在ModuleCallback的onSendRequest回调获得,reqType为Definition.REQ_SPEECH_WAKEUP时,reqParams为声源定位的角度。它是唤醒API的传入参数。
开始唤醒
方法名称:wakeUp
调用方式:
RobotApi.getInstance().wakeUp(reqId, angle, new ActionListener() { @Override public void onResult(int status, String responseString) throws RemoteException { switch (status) { case Definition.RESULT_OK: //唤醒完成 break; case Definition.ACTION_RESPONSE_STOP_SUCCESS: //在唤醒过程中,主动调用stopWakeUp,停止唤醒 break; } } @Override public void onError(int errorCode, String errorString) throws RemoteException { switch (errorCode) { case Definition.ERROR_MOVE_HEAD_FAILED: //头部云台移动失败 break; case Definition.ACTION_RESPONSE_ALREADY_RUN: //当前正在唤醒中,需要先停止上次唤醒 break; case Definition.ACTION_RESPONSE_REQUEST_RES_ERROR: //已经有需要控制底盘的接口调用(例如:引领、导航等),请先停止,才能继续调用 break; } } });
参数:
angle:声源定位角度
停止唤醒
方法名称:stopWakeUp
调用方式:
RobotApi.getInstance().stopWakeUp(reqId);