Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
R
RobotSDKForYingbin-Android-Sample
概览
Overview
Details
Activity
Cycle Analytics
版本库
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
问题
0
Issues
0
列表
Board
标记
里程碑
合并请求
0
Merge Requests
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
Snippets
成员
Collapse sidebar
Close sidebar
活动
图像
聊天
创建新问题
作业
提交
Issue Boards
Open sidebar
open
RobotSDKForYingbin-Android-Sample
Commits
ff679532
Commit
ff679532
authored
Jul 29, 2020
by
浦耀宗
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
更新了README
parent
f94d1034
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
341 行增加
和
66 行删除
+341
-66
Android-Sample/README_zh.md
+341
-66
没有找到文件。
Android-Sample/README_zh.md
View file @
ff679532
##
集成AAR文件
使用说明
##
SDK集成
使用说明
### 第一步 导入aar文件
### 第一步 导入aar文件
##### 将aar文件添加到libs文件中
将aar文件添加到libs文件中
```
gradle
```
groovy
implementation
(
name:
'csjsdk-beta'
,
ext:
'aar'
)
implementation
(
name:
'csjsdk-beta'
,
ext:
'aar'
)
```
```
#####
在app的build.gradle文件的android{}结构下添加如下代码
在app的build.gradle文件的android{}结构下添加如下代码
```
gradle
repositories
{
```
groovy
flatDir
{
repositories
{
dirs
'libs'
flatDir
{
}
dirs
'libs'
}
}
}
```
```
### 第二步 引入依赖库
### 第二步 引入依赖库
```
gr
adle
```
gr
oovy
implementation
'io.netty:netty-all:4.1.23.Final'
implementation
'io.netty:netty-all:4.1.23.Final'
```
```
### 第三步 初始化
### 第三步 初始化
##### 在Application中初始化SDK
在Application中初始化SDK
##### 请保证设备端有网络的情况下进行代码授权
**请保证设备端有网络的情况下进行代码授权**
1.
在
[
穿山甲开发者平台上注册账号
](
http://openpro.csjbot.com
)
2.
填入信息后申请 API Key和 User Key
3.
在右侧菜单中找到API管理,API Key 对应 key ,User Key 对应 secret
4.
在初始化的时候填入 ,注意需要给予应用权限
```
xml
<uses-permission
android:name=
"android.permission.READ_EXTERNAL_STORAGE"
/>
<!-- 读外部储存 -->
<uses-permission
android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
<!-- 写外部储存 -->
<uses-permission
android:name=
"android.permission.INTERNET"
/>
<!-- 网络通信 -->
<uses-permission
android:name=
"android.permission.RECORD_AUDIO"
/>
```
```
java
```
java
// 在开发者平台申请的key与secret进行授权(只需授权一次即可,后续使用无需授权)
CsjRobot
.
authentication
(
this
,
"yourkey"
,
"yoursecret"
,
new
OnAuthenticationListener
()
{
// 开发者平台网址:http://openpro.csjbot.com
CsjRobot
.
authentication
(
this
,
"123"
,
"456"
,
new
OnAuthenticationListener
()
{
@Override
@Override
public
void
success
()
{
public
void
success
()
{
Log
.
d
(
"TAG"
,
"授权成功!"
);
Log
.
d
(
"TAG"
,
"授权成功!"
);
...
@@ -34,13 +48,43 @@ CsjRobot.authentication(this,"123", "456", new OnAuthenticationListener() {
...
@@ -34,13 +48,43 @@ CsjRobot.authentication(this,"123", "456", new OnAuthenticationListener() {
Log
.
d
(
"TAG"
,
"授权失败!"
);
Log
.
d
(
"TAG"
,
"授权失败!"
);
}
}
});
});
```
只需联网授权一次即可,后续使用无需联网授权,会做本地验证
在成功之后,可以进行初始化SDK,选择需要功能(可以跳过,默认打开),设置连接地址和端口(可选,默认为192.168.99.101),设置机器人类型,默认是Amy迎宾机器人,需要的则设置为对应的机器人类型
```
java
// 是否启用语音模块(默认开启) #####在init之前调用
CsjRobot
.
enableAsr
(
true
);
// 是否启用人脸识别模块
CsjRobot
.
enableFace
(
true
);
// 是否启用导航模块
CsjRobot
.
enableSlam
(
true
);
// 设置通信的地址,默认是192.168.99.101, 60002
CsjRobot
.
setIpAndrPort
(
"127.0.0.1"
,
60002
);
/*
* 设置机器人类型(在init之前调用)
* 如果设置了ALICE,则为第八代机器人的协议
*/
CsjRobot
.
setRobotType
(
CsjRobot
.
RobotType
.
ALICE_NEW
);
/*
* 初始化SDK
*/
CsjRobot
.
getInstance
().
init
(
this
);
CsjRobot
.
getInstance
().
init
(
this
);
```
```
## 机器人功能使用说明
## 机器人功能使用说明
### 注册机器人连接状态事件
SDK初始化
在初始化之后,可以注册机器人连接状态事件,不同的状态在回调中都有展示
```
java
```
java
CsjRobot
.
getInstance
().
registerConnectListener
(
new
OnConnectListener
()
{
CsjRobot
.
getInstance
().
registerConnectListener
(
new
OnConnectListener
()
{
@Override
@Override
public
void
success
()
{
public
void
success
()
{
startActivity
(
new
Intent
(
SplashActivity
.
this
,
MainActivity
.
class
));
startActivity
(
new
Intent
(
SplashActivity
.
this
,
MainActivity
.
class
));
...
@@ -60,61 +104,292 @@ CsjRobot.getInstance().init(this);
...
@@ -60,61 +104,292 @@ CsjRobot.getInstance().init(this);
public
void
disconnect
()
{
public
void
disconnect
()
{
}
}
});
});
```
```
### 注册机器人唤醒事件
```
java
CsjRobot
.
getInstance
().
registerWakeupListener
(
new
OnWakeupListener
()
{
@Override
public
void
response
(
int
i
)
{
Log
.
d
(
"TAG"
,
"registerWakeupListener:i:"
+
i
);
mCsjBot
.
getTts
().
startSpeaking
(
"我在呢!"
,
null
);
if
(
i
>
0
&&
i
<
360
)
{
if
(
i
<=
180
)
{
CsjlogProxy
.
getInstance
().
debug
(
"向左转:+"
+
i
);
if
(
mCsjBot
.
getState
().
getChargeState
()
==
State
.
NOT_CHARGING
)
{
mCsjBot
.
getAction
().
moveAngle
(
i
,
null
);
}
}
else
{
CsjlogProxy
.
getInstance
().
debug
(
"向右转:-"
+
(
360
-
i
));
if
(
mCsjBot
.
getState
().
getChargeState
()
==
State
.
NOT_CHARGING
)
{
mCsjBot
.
getAction
().
moveAngle
(-(
360
-
i
),
null
);
}
}
}
}
});
```
### 注册机器人语音识别事件
### 一、语音识别、语义理解与唤醒
#### 语音识别
功能可以参考
[
Demo的AsrNlpActivity.java
](
http://gitlab.csjbot.com/open/RobotSDKForYingbin-Android-Sample/blob/master/Android-Sample/app/src/main/java/com/demo/csjbot/csjsdkdemo/future/AsrNlpActivity.java
)
1.
打开、关闭语音服务(默认打开,enableAsr 需要置为true)
```
java
CsjRobot
.
getInstance
().
getSpeech
().
startSpeechService
();
```
2
.
注册机器人语音识别和语义理解事件
```
java
private
OnSpeechListener
onSpeechListener
=
new
OnSpeechListener
()
{
@Override
public
void
speechInfo
(
final
String
s
,
final
int
i
)
{
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
// 简单解析示例
if
(
Speech
.
SPEECH_RECOGNITION_RESULT
==
i
)
{
// 识别到的信息
...
}
else
if
(
Speech
.
SPEECH_RECOGNITION_AND_ANSWER_RESULT
==
i
)
{
// 识别到的信息与的回答
...
}
}
});
}
};
```
3
.
打开多次语音识别
```
java
CsjRobot
.
getInstance
().
getSpeech
().
startIsr
();
```
注意:此方法默认不会调用,调用之后,
SDK
将独占麦克风
如果想要停止识别
4
.
停止语音识别
```
CsjRobot
.
getInstance
().
getSpeech
().
stopIsr
();
```
5
.
关闭
```
java
CsjRobot
.
getInstance
().
getSpeech
().
closeSpeechService
();
```
####
唤醒事件
注册机器人唤醒事件,对机器人说唤醒词
"灵犀灵犀"
即可
```
java
```
java
// 语音识别
private OnWakeupListener onWakeupListener = new OnWakeupListener() {
CsjRobot
.
getInstance
().
registerSpeechListener
(
new
OnSpeechListener
()
{
@Override
@Override
public void response(final int i) {
public
void
speechInfo
(
String
s
,
int
i
)
{
...
}
// 简单解析示例
};
Log
.
d
(
"TAG"
,
"registerSpeechListener:s:"
+
s
);
if
(
Speech
.
SPEECH_RECOGNITION_RESULT
==
i
){
// 识别到的信息
try
{
String
text
=
new
JSONObject
(
s
).
getString
(
"text"
);
Toast
.
makeText
(
MainActivity
.
this
,
"识别到的文本:"
+
text
,
Toast
.
LENGTH_SHORT
).
show
();
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
}
else
if
(
Speech
.
SPEECH_RECOGNITION_AND_ANSWER_RESULT
==
i
){
// 识别到的信息与的回答
try
{
String
say
=
new
JSONObject
(
s
).
getJSONObject
(
"result"
).
getJSONObject
(
"data"
).
getString
(
"say"
);
Toast
.
makeText
(
MainActivity
.
this
,
"获取的答案信息:"
+
say
,
Toast
.
LENGTH_SHORT
).
show
();
}
catch
(
JSONException
e
)
{
e
.
printStackTrace
();
}
}
}
});
```
```
### 二、导航和行走
导航流程,功能可以参考 [Demo的SlamDemoActivity.java](http://gitlab.csjbot.com/open/RobotSDKForYingbin-Android-Sample/blob/master/Android-Sample/app/src/main/java/com/demo/csjbot/csjsdkdemo/future/SlamDemoActivity.java)
#### 第一次开机
1. 寻找一个合适的地方安放充电桩,并且给充电桩上电
2. 机器人在充电桩充电、开机
3. 等待进入系统之后,利用RobotStuido软件进行建立地图
4. 调用保存地图接口,地图默认名字是 map.map
```java
mCsjBot.getAction().saveMap();
```
5. 随后可以调用查看地图恢复状态
```java
public void queryMapState(View view) {
mCsjBot.getAction().getMapState(onMapStateListener);
}
private OnMapStateListener onMapStateListener = new OnMapStateListener() {
@Override
public void mapState(String s) {
...
}
};
```
6. 利用 RobotStuido 软件,移动机器人到合适的位置,调用获取坐标1
```java
public void getAndSavePose1(View view) {
...
mCsjBot.getAction().getPosition(listener);
...
}
```
7. 利用 RobotStuido 软件,移动机器人到合适的位置,调用获取坐标2
```java
public void getAndSavePose2(View view) {
...
mCsjBot.getAction().getPosition(listener);
...
}
```
8. 想要去往点位1,则可以调用去往点位,参见调用方法
```java
public void goPose1(View view) {...}
```
```java
private void goPose(final RobotPose pose) {...}
```
9. 如果想要中途取消,则可以调用取消导航方法
```java
public void cancelNavi(View view) {
mCsjBot.getAction().cancelNavi(new OnNaviListener() {
@Override
public void moveResult(String s) {}
@Override
public void messageSendResult(String s) {}
@Override
public void cancelResult(String s) {
//在此回调中获取状态
}
@Override
public void goHome() {}
});
}
```
#### 再次开机导航流程
前提:
- **充电桩在原来位置**
- **机器人在充电桩开机**
- **已经调用过保存地图接口**
此时当机器人SDK连接之后,可以调用恢复地图接口,恢复地图
```java
public void restoreMap(View view) {
mCsjBot.getAction().loadMap();
}
```
恢复地图之后,可以直接调用保存的点位, 进行导航
```java
public void goPose1(View view) {...}
```
```java
private void goPose(final RobotPose pose) {...}
```
#### 回桩充电
- 注意:需要在充电桩开机
调用回桩充电的接口即可让机器人回去充电
```java
public void goHome(View view) {
mCsjBot.getAction().goHome(new OnNaviListener() {
...
@Override
public void goHome() {
// 如果成功则有回调
}
});
}
```
#### 其他运动接口
1. 点动,调用接口可以让机器人往前、后、左、右运动,注意:这些方法传感器将不起作用,也不会导航
```java
public void forward(View view) {
mCsjBot.getAction().moveForward();
}
public void backward(View view) {
mCsjBot.getAction().moveBack();
}
public void turnLeft(View view) {
mCsjBot.getAction().moveLeft();
}
public void turnRight(View view) {
mCsjBot.getAction().moveLeft();
}
```
Tips:如果想要做App控制机器人运动,可以调用这些方法
2. 转身,转特定角度,以机器人目前朝向作为参考
```java
public void turnRight60Degrees(View view) {
mCsjBot.getAction().moveAngle(-60, new OnGoRotationListener() {
@Override
public void response(int i) {
}
});
}
public void turnLeft60Degrees(View view) {
mCsjBot.getAction().moveAngle(60, new OnGoRotationListener() {
@Override
public void response(int i) {
}
});
}
```
Tips:可以利用这个来做声源定位的转身
转到特定的角度,以机器人开机朝向作为参考
```java
public void turnTo60(View view) {
mCsjBot.getAction().goAngle(60);
}
```
3.
### 注册机器人实时图像传输事件
### 注册机器人实时图像传输事件
```
java
```
java
// 摄像头实时图片传输
// 摄像头实时图片传输
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论