查看: 2900|回复: 4

基于DOIT云DuerOS语音小车

[复制链接]

该用户从未签到

发表于 2018-1-10 17:36 | 显示全部楼层 |阅读模式
本帖最后由 bemfa 于 2018-1-10 18:56 编辑

基于DOIT云DuerOS语音小车
1 系统概述1.1系统实现目标
通过语音唤醒DuerOS设备,进而发布指令,实现远程控制小车的前进、后退、左转、右转、停止动作。
1.2系统实现流程
控制者通过和DuerOS设备进行语音交互,进行唤醒口令唤醒设备,发布语音控制指令到DuerOS设备,DuerOS设备接收到语音数据,经接口解析后转交自建服务器,由自建服务器判断是否属于某意图,如果发现意图,根据意图向Doit IOT平台发送相应的控制指令。小车与Doit IOT平台建立TCP长连接,作为订阅者监听服务器,当自建服务器向Doit IOT平台发送控制指令,小车收到指令,并根据指令做出相应的动作,架构如图(1)。
             QQ截图20180110163713.png                  
1
2 DOIT IOT 平台2.1简介
DOIT IOT平台是由深圳四博智联科技有限公司开发的物联网云平台,面向个人、企业实现大规模物联网设备接入与控制。DoitIOT可对单个设备或是一设备组进行远程控制、接收上传数据并实时展示。
2.2、接入流程
用户注册
       DOITIOT平台http://iot.doit.am,进入平台官网。点击Sign up注册账户注册自己的账号(Uid)和密码(password),点击Submit进行确认。如图(2),并且要记住账号密码,后面用的到。

QQ截图20180109105923.png
2
注册后点击登陆如图(3):

QQ截图20180109110014.png
3
              
登陆成功后显示如图(4):

qqq.png
4
按照图(5)获取API的Key,key用于上传数据。
111111.png

5
数据上传
平台基于TCP通讯,端口号:8810。
数据传输格式
cmd=upload&device_name=arduino&data=126&uid=doit_user&key=bc66b4a20c8f0806e557b442c2541ff8 \r\n
传输格式说明
cmd:设备控制方式,cmd=upload数据上传。
device_name:设备名,device_name=arduino设备名为arduino设备。
data:数据项。data=126数据值为126。
uid:用户ID,即用户名。
Key:用户key值。
应用TCP调试工具调试如图(6):

QQ截图20180109110241.png
6
      应答窗口回应cmd=upload&res=1表示数据上传成功。
设备控制
      设备要接收指令,首先要订阅自己的用户ID,订阅格式:cmd=subscribe&uid=doit_user \r\n。TCP调试如图(7)所示

QQ截图20180109111301.png
7
平台回应cmd=subscribe&res=1表示订阅成功。当设备订阅用户成功后,用户可以通过http://iot.doit.am 发送控制指令,通过http://iot.doit.am 发送控制指令首先要新建控制设备,如图(8)。
QQ截图20180109112059.png
8
发送控制指令如图(9)。当发送出控制指令,订阅该设备的用户可收到该指令,如图(10)。
QQ截图20180109112812.png
9
QQ截图20180109113008.png
10
用户也可以通过TCP发送控制指令控制设备,TCP控制指令格式:cmd=publish&uid=doit_user&device_name=doit_LED&device_cmd=ON,当用户通过TCP发送控制指令后,订阅此次用户的设备可以接收到该指令,如图(11)。
QQ截图20180109114243.png

11
保持链接
   如果超过120秒没有收到任何数据包,服务器会断开链接,
建议每隔30秒发一次心跳包,格式如下:
cmd=keep \r\n
服务器应答
cmd=keep&res=1\r\n  
2.3、定义小车控制指令
由系统要求,目前控制小车需要前进、后退、左转、右转、停止五个指令。故需要定义五个控制点,每隔控制点分别有打开和关闭两个状态。
定义控制指令关闭数据项为:
cmd=publish&uid=youngda&device_name=car_forward&device_cmd=OFF\r\n&device_name=car_back&device_cmd=OFF\r\n&device_name=car_stop&device_cmd=OFF\r\n&device_name=car_right&device_cmd=OFF\r\n&device_name=car_left&device_cmd=OFF
定义控制指令打开数据项为:
cmd=publish&uid=youngda&device_name=car_forward&device_cmd=ON\r\n&device_name=car_back&device_cmd=ON\r\n&device_name=car_stop&device_cmd=ON\r\n&device_name=car_right&device_cmd=ON\r\n&device_name=car_left&device_cmd=ON
TCP调试软件调试如图(12):、
QQ截图20180110142609.png

12
3、DuerOS设备接入3.1 DuerOS简介
DuerOS是百度度秘事业部研发的对话式人工智能系统。搭载DuerOS的设备可让用户以自然语言对话的交互方式,实现影音娱乐、信息查询、生活服务、出行路况等10大类目的100多项功能的操作。同时,借助云端大脑,DuerOS可以不断学习进化,变得越来越“聪明”。DuerOS广泛适用于音箱、电视、冰箱、手机、机器人、车载、可穿戴、玩具等多种场景及设备,目前已与国内外多家企业达成战略合作。同时,DuerOS还为不同类型的硬件厂商打造了小度智能设备平台;为开发者推出了小度技能开放平台。极大的降低使用门槛,加速产业升级。
3.2DuerOS技能开放平台
账号创建
          注册登录百度账号并登陆,网址https://dueros.baidu.com/open如图(13)。
33333.png

13
          开发者认证图(14)。

111111111111.png
14
登录技能开放平台
请使用百度账号登录技能开放平台。
设计技能
设计小车控制的技能。该技能帮助用户通过语音控制实现小车的前进、后退、左转、右转、停止等功能。
创建技能
点击创建新技能,技能类型选择自定义,技能名称输入“小车控制技能”,调用名称输入“小车控制”,点击确认如图(15),这样就创建了一个技能。

22.png
15
创建词典
小车控制技能中用户需要输入“前进”、“后退”、“右转”、“左转”、“停止”中的一个信息,就可以控制小车,开发者需要创建这五个信息对应的词典。当用户与小车控制的技能交互时,DuerOS会根据词典解析用户的语句中是否包含这五个信息。
创建“前进”词典
如图(16)。

QQ截图20180109145239.png
16
创建“前进”词典,点击左侧导航页的词典,进入词典页面,选择创建词典。输入词典中文名“前进”,输入词典标识名“forward”。
添加前进词表。开发者填写词表时,每个词表可以填写同义词,如“前进”的同义词是向前、前行。最后,检查词典名称及词表内容是否有错误,确认无误后,点击保存,前进词典就创建完成,词典的内容如图所示。
创建“后退”、“右转”、“左转”、“停止”词典
      根据创建“前进”词典的方法,创建“后退”、“右转”、“左转”、“停止”词典如图(17)。

QQ截图20180109145557.png
17
创建意图
意图指用户说话的目的,即用户想要表达什么、想做什么。当用户说小车前进,用户的意图就是使小车前进。
在左侧导航的中选择意图,点击创建意图。
创建前进意图基本信息
意图中文名称“小车前进”和意图标识名“car_forward”,如图(18)。

QQ截图20180109150636.png
18
填写用户表达
用户表述意图的语句,可能有多种不同的表述方式,将这些可能的表述方式都要填到用户表达里面。

QQ截图20180109150709.png
19
填写槽位信息
槽位信息是用户表述意图过程中,用来准确的描述用户意图的关键词如图(20)。
QQ截图20180109150721.png
20
技能回复
技能回复选择服务配置满足如图(21)。

QQ截图20180109150734.png
21
填写部署地址,该地址会收DuerOS发送的post请求,请求中带有解析后的用户信息。
创建“后退”、“右转”、“左转”、“停止”意图基本信息
根据创建“前进”意图的方法分别创建“后退”、“右转”、“左转”、“停止”意图,如图(22)。

QQ截图20180109155157.png
22
服务部署
填写部署地址如图(23),该地址会收DuerOS发送的post请求,请求中带有解析后的用户信息。

QQ截图20180109155425.png
23
模拟测试
模拟测试是验证技能的使用效果。点击模拟测试进入到测试界面。使用“小车控制”打开技能,然后发出语音指令信息,服务器会给出响应如图(24)。

QQ截图20180109155754.png
24
4、服务器端部署
DuerOS提供三种不同的SDK用来部署不同的服务器环境,分别是开发度秘BOT的bot-sdk、度秘bot开发的Java版SDK、度秘bot开发的PHP版SDK,开发者可根据自己的需要采取不同的SDK,本文采用PHP版的SDK。
4.1 阿里云环境配置
根据所选部署SDK,配置相应环境。度秘BOTSDK采用PSR-4规范自动加载, PHP版本确保在5.4.0及以上,操作系统linux。php还要支持openssl扩展。使用composer命令进行安装,首先,安装Composer。要在当前目录中快速安装Composer,请在终端中运行以下命令。
php -r"copy('https://getcomposer.org/installer', 'composer-setup.php');"

php -r "if (hash_file('SHA384','composer-setup.php') ==='544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061'){ echo 'Installer verified'; } else { echo 'Installer corrupt';unlink('composer-setup.php'); } echo PHP_EOL;"

php composer-setup.php

php -r"unlink('composer-setup.php');"
使用composer执行如下命令进行安装bot-sdk:
composer require dueros/bot-sdk
目录结构如图(25)

QQ截图20180109180655.png
25
4.2 BOT SDK for PHP配置
为了开始使用BOT SDK,你需要先新建一个php文件,比如文件名是Bot.php。你先需要require autoload.php文件,这个文件一般在vendor目录,如果没有这个目录,请先执行composer dump-autoload。
require 'vendor/autoload.php';

class Bot extends Baidu\Duer\Botsdk\Bot{
   /**
    * $postData可以不传,由于DuerOS对bot是post请求,sdk默认自动获取
    */
   public function __construct($postData = []) {
      parent::__construct($postData);

      // 开启校验请求参数签名
      // php 得支持open ssl扩展
      $this->certificate->enableVerifyRequestSign();
   }
}
需要继承Baidu\Duer\Botsdk\Bot。 下一步,我们处理意图。Bot-sdk提供了一个函数来handle这些意图。比如,为新建闹钟,创建一个handler,在构造函数中添加:
use \Baidu\Duer\Botsdk\Card\TextCard;

$this->addIntentHandler('remind',function(){
   $remindTime = $this->getSlot('remind_time');

   if($remindTime) {
       $card = new TextCard('创建中');
       return [
            'card' => $card,
       ];
   }
});

/**
*或者,可以不通过匿名函数,还支持传入成员函数名
*/

$this->addIntentHandler('remind','create');

//定义一个成员函数
public function create(){
   $remindTime = $this->getSlot('remind_time');
   return [...];
}
这里addHandler可以用来建立(intent) => handler的映射,第一个参数是条件,如果满足则执行对应的回调函数(第二个参数)。 其中,$this指向当前的Bot,getSlot继承自父类Bot,通过slot名字来获取对应的值。回调函数返回值是一个数组,可以包含多个字段,比如:card,directives,outputSpeech,reprompt。
主要方法讲解
监听意图
$this->addHandler('#test.inquiry888',function(){
或$this->addIntentHandler('意图标识名')
还记得创建意图时自己填写的意图标识名吗?这里就有用了,这里用来监听你的意图。
获取槽位值
$this->getSlot('槽位标识')
这个方法获取槽位的值,还记得自己意图中的槽位吧,这个方法就会获取到我们意图中的槽位值(也就是我们自定义的词典中的值)。
询问槽位
$this->nlu->ask('槽位标识')
这个方法用来询问槽位的值,如果通过getSlot方法没有获取到指定的槽位的值,可以使用此方法来询问用户槽位信息填充完确认意图中的槽位信息都填充完,调用
$this->request->isDialogStateCompleted()
当槽位信息都填充完后,我们就可以使用槽位的值来进行自己的业务逻辑了,比如查询信息、控制设备、播放音频等。
返回数据
return [
      'card' => $card,
      'reprompt' => '这是来自于测试程序返回的结果,请问你在哪?',
      'outputSpeech' => '这是来自于测试程序返回的结果,请问你在
哪?',
];
当意图处理完后,我们就可以返回信息了。
bot-SDK自带例程,目录是vendor/dueros/bot-sdk/samples/bae-sample,如图(26)。

26
找到例程Bot.php文件位置,替换小车控制的Bot.php,修改个人UID值和Key值就可以正常使用。
Bot.php文件如下:
见下面网址下载

配置Nginx
首先找到Bot-SDK文件部署地址,如图(27)。

QQ截图20180109181516.png
27
在*.conf文件写入配置信息,如图(28)。

QQ截图20180109182430.png
28
配置好后打开服务器网址,正常情况下是显示json字符串,IE浏览器是下载json文件,如图(29)chrome浏览器显示状态。

QQ截图20180109190036.png
29
5、小车硬件调试5.1 小车组装
小车采用四博智联科技有限公司设计的小车,性能强劲。这里
主控采用Doit ESP8266开发板这里
NodeMCU电机驱动扩展板,这里
成品如图(30)

微信图片_20180109192009.jpg
30
5.2小车程序实现


见下面网址下载

http://www.doit.am/doc/ai.php




微信图片_20180109192009.jpg

该用户从未签到

发表于 2018-5-10 18:48 | 显示全部楼层
QQ或微信:845284107,寻求商务合作。

该用户从未签到

发表于 2018-12-7 19:23 | 显示全部楼层
554045669,寻求商务合作
  • TA的每日心情
    开心
    2019-1-25 10:12
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2019-1-25 10:12 | 显示全部楼层
    bemfa:
    您好!
    我是初学者,很喜爱这篇文章,但是小车程序打不开(找不到),如何联系您呢,谢谢!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    一文教你选择Arduino开发板,小白进
    一文教你选择Arduino开发
    笔者在2016年接触了Arduino,跳了万条坑,行了千里弯,到今天也算是Arduino的一
    Arduino官方开发板购买
    Arduino官方开发板购买
    以下为Arduino官方开发板国内购买渠道,点击即可前往淘宝购买 seeedStudio淘宝
    ESP8266-01用Arduino烧写应该选择那一项??
    ESP8266-01用Arduino烧写
    ESP8266-01用Arduino烧写应该选择那一项??还有我用的 是usb串口板340
    酒精传感与超声波传感的使用
    酒精传感与超声波传感的使
    打算超声波传感检测到距离大于10之后就开始酒精浓度检测 下面是代码 mixly提示testArd
    基于Rosbot的声控小夜灯
    基于Rosbot的声控小夜灯
    参赛项目:基于Rosbot的声控小夜灯 参赛组员: 我自己。某单位在职员工,参与单位
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表