SDK接入
除少数老款机器人外,所有机器人统一使用同一套SDK
机器人的sdk现在是统一一套SDK,包含在demo程序中,请下载demo程序并在libs库中拷贝这个sdk库文件。
demo程序下载(最新的sdk已包含在libs目录内):点击下载
配置默认启动程序
配置Manifest文件
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
<action android:name="action.orionstar.default.app" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
App如果需要在开机后默认启动进入,需要在Manifest中配置
<intent-filter>
<action android:name="action.orionstar.default.app" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
并在设置(三指下拉点击设置进入)- 开发者设置 – 开机启动程序中设置
注意:开机启动程序设置功能在OTA3才正式上线
SDK的完整接入,需要在AndroidManifest.xml中声明以下权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.ainirobot.coreservice.robotSettingProvider" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
1,创建接收语音请求及系统事件的回调
public class ModuleCallback extends ModuleCallbackApi {
@Override
public boolean onSendRequest(int reqId, String reqType, String reqText, String reqParam)
throws RemoteException {
//接收语音指令,
//reqTyp : 语音指令类型
//reqText : 语音识别内容
//reqParam : 语音指令参数
return true;
}
@Override
public void onRecovery()
throws RemoteException {
//控制权恢复,收到该事件后,重新恢复对机器人的控制
}
@Override
public void onSuspend()
throws RemoteException {
//控制权被系统剥夺,收到该事件后,所有Api调用无效
}
2,连接server
RobotApi.getInstance().connectServer(this, new ApiListener() {
@Override
public void handleApiDisabled() {
}
@Override
public void handleApiConnected() {
//Server已连接,设置接收请求的回调,包含语音指令、系统事件等
RobotApi.getInstance().setCallback(new ModuleCallback());
}
@Override
public void handleApiDisconnected() {
//连接已断开
}
});
机器人SDK的初始化,标志着机器人把底盘能力权限移交给了当前正在运行的APP。机器人会在系统接管、发生故障、启动了其它带机器人SDK程序的时候发生连接已断开的回调。其中只有系统接管结束时,会重新connect上。
注意1:所有Api必须在连接server成功之后才能够调用
注意2:只有前台进程,在前台运行时能正确的连接并获取机器人底盘控制权限,服务进程不工作。
3,设置回调
RobotApi.getInstance().setCallback(new ModuleCallback());
4,结束指令
RobotApi.getInstance().finishModuleParser(reqId, result);
当收到的请求或语音指令处理完成后需调用finishModuleParser结束该指令,reqId 为onSendRequest回调里获得,result为执行结果
5,注册状态监听
StatusListener statusListener = new StatusListener(){
@Override
public void onStatusUpdate(String type, String data) throws RemoteException {
};
}
//注册状态监听
RobotApi.getInstance().registerStatusListener(type, statusListener);
//解除状态监听
RobotApi.getInstance().unregisterStatusListener(statusListener);
type为需要监听的状态类型,type支持以下几种:
- Definition.STATUS_POSE:机器人当前的坐标,持续上报
- Definition.STATUS_POSE_ESTIMATE:当前定位状态,定位状态发生改变时上报
- Definition.STATUS_BATTERY:当前电池状态信息,包括是否在充电、电量多少、是否低电量报警等
6、设置reqId
很多sdk的方法需要传入参数reqId,这是一个用于调试、跟踪日志的id。传入任何数字都能让函数正常工作,但为了日志追踪、调试的方便,建议把reqid做成一个自增长的static变量,或者根据业务需求,传入不同的reqId来做调用函数的区分。
启动APK时,为确保APK被机器人底盘正确的授权并使用机器人功能,请使用RobotOS Home调起(参见下面视频),如果想开机即启动某个apk,在设置中设置“开机启动apk“即可。
注意:从IDE直接运行程序并在机器人上打开是没有权限的,需要从应用中心(Home)点击图标或者开机自启动才有权限。
1. 调用api返回资源使用冲突问题
sdk中提供的有关硬件使用的api,当同时使用两个接口操作同一个器件时,会发生资源使用冲突问题,比如当机器人导航时,不能使用左转右转api。
2. 机器人分辨率
| 豹小秘 | Mini | 招财豹 | 豹小秘DP |
| 1200×1920 | 1920×1080 | 1200×1920 | 上屏1200×1920 下屏1080×1920 |