今天(2017年12月25号,圣诞节,Rokid有心啦,木有收到圣诞节礼物的我,给我送来Rokid All in ONE 全栈语音智能开发套件做为圣诞节惊喜)javascript
开箱后只能说作工至关不错,很精致。html
废话很少说,正式走一遍遇到的坑,官方的开发指南其中已经写好了不少必要的入门流程。java
目前开发的技能
-
记事本git
本人遇坑及经验总结以下
- 没迅速找到官方的开发指南,直接进官方文档就上,而后没法经过APP内置的点击6下的开发模式链接Rokid,查询官方文档,可得知,须要经过Pebble设备方式进行链接,若是之后还有其它问题建议先进入开发套件常见问题解决方案汇总。
- 在配置WiFi时,本人路由器名称设置了默认隐藏,所以在经过蓝牙配置WiFi链接时,一直没法配置经过,总结以往raspberry pi把玩经验,果断尝试关闭隐藏WiFi,得以解决没法配置链接WiFi的问题,致使该问题须要修改固件里的WiFi链接脚本,这个本人就先不尝试了,具体问题及解决方案已经发送到Rokid讨论里了,但愿能改进没法正常链接隐藏的WiFi,解决资料
- 若是在APP的配网蓝牙链接这里搜索不到设备,要么使用点击6下的方式进入配网流程,要么使用Pebble设备的配网流程。
-
本人测试经过的可信刷机镜像(其实就是官方镜像)github
- CPU板正对USB Type-c 的那个按键就是刷机用的按键,先按住,再通电,看出USB_Burning_Tool上出现设备,就能够松了,比用Debug板进行刷机方便不少,很人性化。
-
在Windows下使用adb shell链接到开发板后,使用ls命令,若是出现相似以下的内容,多是自带的字符串着色与Windows的console不兼容,登入shell后,直接执行 alias ls='busybox ls --color=never' 便可。建议Rokid预安装bash做为备用选项,或者开发者自行下载使用Cmder软件,可解决以上问题。(不怎么直接使用sh,一直用的bash或者zsh,没有出现过相似问题)shell
[0;0mdefault.prop[0m [1;36mlib64[0m [1;34mopt[0m [1;34msrv[0m
[1;34mdev[0m [1;34mlibexec[0m [1;34mproc[0m
关于WiFi链接及配网
- 坑走完以后就是Demo了,能正式配置Rokid的WiFi链接,剩下的就很方便了,经过官方开发指南先作一个简单的人机对话,在开发过程当中与Rokid的直接交流语言的JavaScript,所以若要开发更为灵活的服务功能,须要依托其它的后台接口开发。
关于入口词的一些事
- Rokid 中可能涉及的入口词问题,本人发现Rokid是针对技能貌似是独占的(尚未彻底肯定这一点),前期可能刺激开发者或者其余人员抢占入口词,建议平台针对这点进行入口词融合、增长针对用户或者设备调试不一样技能的优先级功能。
顺便来几张开箱照(图片太丑,请点击下方连接查看):
技能开发过程须要知道的事情
属性 |
开放性 |
开发平台 |
公有 |
全部用户 |
云端 |
私有 - 云端 |
指定用户 |
云端 |
私有 - 本地 |
指定用户 |
本地(/opt/apps或/data/apps目录) |
整理中。。。
关于语言交互的设置
-
词表数据库
- Rokid 预约义词表
-
自定义词表
自定义词表除了能够经过普通的一行一个词的方式设定本身的词表,还能够经过以下的方式引用其它词表(引用词表以 $ 符号开头)json
$ROKID.YES_ZH
$ROKID.NO_ZH
-
setConfirm
若是要经过setConfirm获取用户对话过程的任意内容,能够参考以下方式
意图定义:segmentfault
{
"intent": "RecordAny",
"slots": [
{
"name": "content",
"type": "ROKID.ANY"
}
],
"user_says": [
"!$content"
]
}
服务代码中对应handler中使用以下setConfirm语句:后端
this.setConfirm({
confirmIntent: 'RecordAny',
confirmSlot: 'content'
});
-
Session
this.setSession(key, value)中,所传value为null时,该值不会被记录。
-
dbServer
- dbServer.set(key, value, callback) 该方法为异步形式,所以涉及数据库操做时,应该将其后的业务逻辑放于callback中,不然数据还没取回就执行到后面的业务中。
- get:Rokid.dbServer.get(key, callback)与Rokid.dbServer.delete(key,callback)是否为异步形式还没有验证,建议一样将数据库操做以后的业务逻辑放于callback中。
- 鉴于关于数据库操做为异步形式,所以建议相关开发者自建统一的数据库存取管理的相关代码以免多层嵌套(具体参考代码稍后会以GitHub的形式放出),或者改写为Promise形式,目前还没有改写成功。
- 集成测试中的后端服务测试与服务列表中的测试用例在逻辑上不属于同一个会话,所以在调试中须要作区别,也就是数据库里的数据不共享,须要单独各自添加测试数据。
后续进一步整合raspberry pi与Rokid
该文章持续更新中。。。
本文参与了 SegmentFault
「Rokid 开发板试用,开启你的嵌入式开发之旅」活动,欢迎正在阅读的你申请试用,一块儿交流开发心得。