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“即可。
1. 调用api返回资源使用冲突问题
sdk中提供的有关硬件使用的api,当同时使用两个接口操作同一个器件时,会发生资源使用冲突问题,比如当机器人导航时,不能使用左转右转api。
2. 机器人分辨率
豹小秘 | Mini | 招财豹 | 豹小秘DP |
1200×1920 | 1920×1080 | 1200×1920 | 上屏1200×1920 下屏1080×1920 |