基础场景
简介
基础场景是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);