人工智能-树莓派小车(4)——通过语音玩转智能小车

20180524更新

最近好多人给我发私信说无法获取到下发数据,是因为我对百度的DuerOS Python SDK进行了一定的修改,主要修改就是我下面提到的核心代码,如果大家不知道具体修改的地方以及修改的方式,可以到我的Github上看一下,顺便点亮我的Star哦,谢谢啦

本文是基于百度的DuerOS Python SDK进行的,具体安装以及实现过程,可以看我的这篇教程:人工智能-树莓派小车(1)——DuerOS语音唤醒,要实现的功能有:
1. 语音聊天:可以跟智能小车进行对话,询问现在的天气,播放想听的歌曲等等基本对话;
2. 语音控制:可以通过语音的操作方式控制智能小车的前进后退、避障转弯等功能,进一步可以扩展到家里的台灯、空调、窗帘等等家具;
3. 语音反馈:在你发出命令后,小车还会给出回应,与你互动,实现一个良好的反馈。

视频演示

实现了以上几个功能,做了一个演示,视频链接:通过语音玩转智能小车

核心代码

1. 命令读取

content = u’云端下发directive:%s’ % (directive_content)

content里即为我们要读取的命令数据,是一种类JSON格式,所以有两种办法将数据读取出来。
1. 采用JSON的字典格式

import json

with open('out.json','a') as f:
        f.write(json.loads(content).decode('unicode-escape').encode('utf-8'))
        f.close()

2.直接将数据保存为.txt格式

f = open("ord.txt",'a')
f.write(content)
logging.info(content)

2. 命令判断

读取到命令之后要对其进行检测,如果命令中包含一些特定的关键词,则做出相应的动作。

def recognize():

        file = '/home/pi/Rascar-DuerOS-Python-Client/ord.txt' # 读取文件
        f = open(file,'r')
        out = f.read()
        command = out.decode('unicode-escape').encode('utf-8')
        print command
        GPIO.output(LED_CTR, GPIO.LOW)
        ############################################
        ###############命令识别######################
        ############################################

        if command.find(u"开") !=-1 and command.find(u"大") !=-1 and command.find(u"灯") !=-1:
                print "打开前大灯"
                robot.Open_Flight()
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/turn_on_light.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"关") !=-1 and command.find(u"大") !=-1 and command.find(u"灯") !=-1:
                print "关闭前大灯"
                robot.Close_Flight()
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/turn_off_light.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"前") !=-1 and command.find(u"进") !=-1:
                print "前进"
                robot.Motor_Forward()
                time.sleep(2)
                robot.Motor_Stop()
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/forward.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"后") !=-1 and command.find(u"退") !=-1:
                print "后退"
                robot.Motor_Backward()
                time.sleep(2)
                robot.Motor_Stop()
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/backward.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"左") !=-1 and command.find(u"转") !=-1:
                print "左转"
                robot.Motor_TurnLeft()
                p = GPIO.PWM(11, 3)
                p.start(20)
                time.sleep(0.5)
                p.stop()
                robot.Motor_Stop()
                GPIO.output(11, GPIO.LOW)
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/turn_left.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"右") !=-1 and command.find(u"转") !=-1:
                print "右转"
                robot.Motor_TurnRight()
                p = GPIO.PWM(8, 3)
                p.start(20)
                time.sleep(0.5)
                p.stop()
                robot.Motor_Stop()
                GPIO.output(8, GPIO.LOW)
                GPIO.output(LED_CTR, GPIO.HIGH)
                shutil.copy("/home/pi/Rascar-DuerOS-Python-Client/app/resources/turn_right.mp3","/home/pi/Rascar-DuerOS-Python-Client/temp.mp3")

        elif command.find(u"黑") !=-1 and command.find(u"线") !=-1:
                print "黑线"
                robot.TrackLine()
        return 

其中GPIO接口的设置以及初始化,见人工智能-树莓派小车-GPIO控制小车
最后要养成良好习惯,用完GPIO接口记得清理GPIO口

GPIO.cleanup()

3. 命令文件清空

为避免命令文件堆积,每次识别命令结束后,进行命令文件的清理,代码很简单。

f = open("ord.txt",'w')
f.truncate()
f.close()

4. 命令反馈

这部分集成到了第二部分命令判断中,判断完立即进行反馈。

完整代码

所有的代码都上传到了我的GitHub上
Rascar-DuerOS — a Raspberry intelligent car based on the DuerOS

系列教程

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值