• 目标

  1. 深度对话

  2. 避障

  3. 看相关论文至少三篇
  • 查阅资料

  1. 悉尼科技大学NAO机器人远程控制
  2. NAO的C++_python环境配置
  3. NAOqi Audio——官方文档
  4. 阿里云
  5. NAO深层开发的环境搭建(只需要安装python-2.7.10、pynaoqi-2.1.4.13.win32便可以开始使用Python编程啦!)
  • 进展

1. 浏览总况

把NAOqi API文档大概浏览了一遍。惊讶于NAO拥有如此丰富的功能的同时,自卑于自己现在几乎全不能实现。

2.深度对话

这周主要研究NAOqi Audio(C:/ProgramFiles(x86)/AldebaranRobotics/ChoregrapheSuite2.1/share/doc/naoqi/audio/index.html)

  • Animated Speech——带动作地说话

默认情况下,当你让机器人通过这个模块说话时,他用身体语言来激活演讲。

"你好呀! ^start(animations/Stand/Gestures/Hey_1) 很高兴见到你!" #机器人说完你好,做动作,动作停止说很高兴见到你"你好呀! ^start(animations/Stand/Gestures/Hey_1) 很高兴见到你! ^wait(animations/Stand/Gestures/Hey_1)" #机器人说完你好,做动作,动作不停说很高兴见到你

身体语言模式是^mode(body_language_mode),其中body_language_mode 可以是 “disabled”, “random” or “contextual”。例如:

"你好. 看,我可以静止不动 ^mode(disabled) 我还可以恢复移动 ^mode(contextual), 看到了吗?"

Animations(生动化)

^run( animation_full_name ) Suspend the speech, run an animation and resume the speech.
^start( animation_full_name ) Start an animation.
^stop( animation_full_name ) Stop an animation.
^wait( animation_full_name ) Suspend the speech, wait for the end of the animation and resume the speech.#例子"^start(animations/Stand/Gestures/Enthusiastic_4) 看我在说话的时候能做什么!"^stop(animations/Stand/Gestures/Enthusiastic_4) 现在我使用我的身体语言""^start(animations/Stand/Gestures/Hey_1)你好啊,小伙子们! ^wait(animations/Stand/Gestures/Hey_1)"

Tagged animations(标记动画):   (默认情况下可用的标签列表)

"^startTag(me) 我叫闹.""^startTag(hello) 你好. ^waitTag(hello)""^startTag(hello) 很高兴见到你. ^stopTag(hello) 我叫闹."

Sounds(调节音量)

^runSound( soundSet/soundFile )^runSound( soundSet/soundFile, soundVolume )#暂停讲话,播放声音并恢复讲话。音量是介于0和100之间的整数。(默认为100)^startSound( soundSet/soundFile )^startSound( soundSet/soundFile, soundVolume )在背景中播放声音。音量是介于0和100之间的整数。(默认为100)^stopSound( soundSet/soundFile )   #停止声音
^waitSound( soundSet/soundFile )    #暂停演讲,等待声音的结束,重新开始演讲。#例子
"^startSound(my_sound_set/my_sound) 酷啊.""^startSound(my_sound_set/my_sound, 50) 酷啊. ^waitSound(my_sound_set/my_sound)""That's cool. ^runSound(my_sound_set/my_sound) "

API调用

#include <alproxies/alanimatedspeechproxy.h>
  • ALDialog——对话

topic: ~helloworld()
language: mnc
concept:(greeting) ^rand[hi hello "嗨" "哈喽" "你好" "很高兴见到你" "哇" "哇塞"]
concept:(repeat) [再说一遍 重复{一次} 你说什么 什么 "你可以再说一遍吗" "我没听清"]
concept:(bye) [bye {拜}拜  {下次}再见 "再会"]
concept:(serve)["欢迎光临" "您好" "很高兴为您服务"]u:([ ~greeting "机器人" "程程"]) 你好, ^pCall(ALMotion.wakeUp()) ^start(animations/Stand/Gestures/Hey_1) 见到你好开心!我的 [主人 朋友]^wait(animations/Stand/Gestures/Hey_1)
u:(你叫什么名字) 大家都叫我程程!很高兴见到你
u:(你还记得我的名字吗?) ^first["["你叫" "你的名字是"] $name" "我忘记了"]u1:(”不{对}“) "好的" ^clear(name)
u:(我{的名字}叫 _[田* 曾* 陶* 陈* 马* 黄* 苏* 赵* 李* 周* 张* 王* 老师 赵老师 小朋友 田潇 ]) 很高兴见到你 $1 $name=$1 ^gotoRandom(对话) ^nextProposalu:(你好啊 {闹} 今天过得开心吗)你好啊 我过得很开心,你呢?
u:({"早上好"} {闹} 你睡得好吗?)一点都不好!你忘了关掉我!u:(我好饿) ~serve 那你想吃什么呢,$name
u:(我想吃 _*)$1 $askedFood=$1 你现在想吃 $askedFood 吗,$name
u:(我想吃 _[苹果 香蕉 红烧肉 锅包肉]) 你现在想吃 $askedFood 吗,$name
u:(我点了什么) ^first["你刚刚点了 $askedFood" "我忘记了"]
u:("我能多要点吗")^first["$askedFood==["红烧肉""锅包肉"] 吃太多肉会伤害你的身体""好的,一会多吃点 $askedFood"]u:(外星人) 我不是外星人 我是人形机器人~bye
u:(我可以摸摸你吗) 当然可以
u:("你感觉如何" "你还好吗")我感觉不太好,我好像需要充电了
u:([起立 站起来]) 好的,我要站起来了 $wakeup=1
u:([休息 蹲下]) 好的,我要休息了 $rest=1u:("我想学做番茄炒蛋" "{我想学}西红柿炒鸡蛋")好啊,我来教你做.按照我的指示,当你准备好下一步时说下一步。
u:("下一步") ^nextProposal
proposal:  首先,准备好半个青椒,一个西红柿,五个鸡蛋,适量葱,少许料酒,适量盐,少许生抽
proposal:  把食材洗净切好,鸡蛋打到大碗里
proposal:  锅中放适量油,把鸡蛋放少许料酒打散,倒入锅中炒熟成出备用
proposal:  锅中再倒入适量油,烧开后把西红柿 青椒和葱花一起倒入锅中翻炒,加入少许生抽炒匀
proposal:  把之前炒好的鸡蛋倒入锅中一起翻炒,调入适量的盐炒匀,这样美味的西红柿炒鸡蛋就完成啦 proposal: %对话一 今天的天气不错啊。u1:(是{的}) 希望这样的好天气常伴你^gotoRandom(对话)u1:(不{好} "我不喜欢今天的天气") 希望明天会有一个属于你的好天气 ^gotoRandom(对话)proposal: %对话二 你想听个故事吗?u1:(!不要 "给我讲个新故事吧")好的,我会给你讲个故事!u1:(不 不想) 好吧,也许你应该打个盹休息一下.u1:(~repeat) 好的,我会重复一遍. ^sameProposalproposal: %对话三 那我给你表演个节目好吗?u1:([好 可以 行 好的 嗯]) 让我想想 ^start(Stand/Waiting/ScratchHead_1) ^wait(Stand/Waiting/ScratchHead_1) ^start(Stand/Waiting/KnockEye_1) ^gotoRandom(对话)u1:([不 {我}不想{看} 不行 不好 {我}不要 下次吧 不可以]) ^gotoRandom(对话)u1:(~repeat) 好的,我再问你一遍. ^sameProposalproposal: %对话四 今天你玩的开心吗?u1:([{很}开心 我{很}高兴 呵呵 哈哈]) 欢迎下次再来玩。^gotoRandom(对话)u1:([{不}开心 我{不}高兴]) 我会做的更好的,下次再来看我哦。 ^gotoRandom(对话)

3. 深度开发环境搭建

1)软件下载 

2)软件安装

  • Choregraphe-suite-2.1-win32-setup
  • naoqi-sdk-2.4.3.28-win32-vs2010(根据自己的环境而定)
  • pynaoqi-python2.7-2.4.3.28-win32-vs2010
  • Qibuild-1.14.2
  • cmake-3.11.1-win32-x86
  • Python-2.7.3(必须是32位的,64位的也必须装32位的)

3)环境配置 

在我的电脑→属性→高级→环境变量→用户变量 的path 中添加naoqi-sdk-2.4.3.28-win32-vs2010中lib和bin的路径,下面的是我的路径:

  • 安装VS2010或VS2008,安装目录不能存在中文或中文字符
  • 安装Choregraphe,NAO的编程平台,必须装(目录中不要存在中文或中文字符)
  • 安装Python,最好放在根目录下,目录中不能存在中文或中文字符
  • 将pynaoqi-2.4.3.28.win32拷贝到Python的目录中
  • 将naoqi-sdk-2.4.3.28-win32-vs2010解压,所在目录必须没有中文或中文字符
  • 安装cmake-3.11.1-win32-x86,默认目录安装
  • 解压Qibuild-1.14.2
  • C:\Python27;
  • C:\Program Files (x86)\CMake\bin;
  • C:\Python27\Scripts;
  • C:\naoqi-sdk-2.4.3.28-win32-vs2010\bin;
  • C:\naoqi-sdk-2.4.3.28-win32-vs2010\lib;
  • 进入解压的qibuild-1.12文件夹中,运行install-qibuild批处理文件
  • 进入安装生成的Python的目录中运行Pynaoqi-python-2.7-naoqi-1.12.0.win32,不需要做任何的改动,按默认安装就可以。

4)检测安装是否成功

  • Win+R,输入cmd 进入命令行,进入qibuild-1.14.2的目录,我的在C盘根目录下。输入qibuild,有以下结果说明qibuild运行成功:
  • 运行Python的IDE环境:IDLE (Python GUI) 。输入import naoqi,回车,运行结果如下,说明配置成功:

4. 论文及感想

NAO 机器人的语音交互与任务规划研究(苗凯尧,刘利芳,张梦宇,吕诗昆)

  • 用途:根据帮助老年人进行日常活动这一要点进行研究,采用NAO机器人进行语音交互、路径规划以及抓取物品等功能.
  • 环境描述:本文采用栅格法家居环境进行建模(将环境进行单元分割,将其用大小相等的方块表示出来).精度与存储开销决定选择合适的栅格大小很重要.本文将栅格的大小设定为 25cm,环境中分布若干个物体,物体上有机器人待取的物品.栅格用二维数组 map[][] 表 示,map[x][y] = 0表示该栅格上没有障碍物,机器人可以行走 ;map[x][y] ≠ 0 表示该栅格上是物体和待取物品.
  • 地图生成算法:采用红球检测和超 声检测相结合的地图生成算法(让机器人根据超声检测自主生成环境的边界地图,然后由人操作红球将机器人带领到障碍物面前,机器人便可以自主的完成当前障碍物的边界检测,以此类推,机器人就能生成全部的障碍物边界地图)。算法由两部分组成 :边界检测和障碍物检测,算法用 Python 语言 实现。

①边界检测算法

Step1 :选择一个点作为地图的起点,将机器人放置在起点 处,启动超声传感器,初始化地图数组 map[][]。

SonarProxy = ALProxy( “ALSonar”, IP, PORT )
MemoryProxy = ALProxy (“ALMemory”, IP, PORT ) 

Step2 :读取声呐的值。

LeftValue = MemoryProxy.getData( “Device/ SubDeviceList/US/Left/Sensor/Value” )
RightValue = MemoryProxy.getData( “Device/ SubDeviceList/US/Right/Sensor/Value” ) 

Step3 :若左值和右值均小于 0.32,则机器人左转或右转 90°并且转向计数器加一,否则直行。

Step4 :若边界检测未完成,则转 Step2,否则转 Step5,准备 执行障碍物检测算法。

if( map[x][y] == 1 and TurnCount >= 3 ):BorderTest = True

Step5 :边界检测算法结束。

②障碍物检测算法

Step1:机器人追踪红球进行移动

#coding=utf-8
TrackerProxy = ALProxy( "ALRedBallTracker", IP, PROT )
TrackerProxy.startTracker()
if ( abs( RedBallAngle ) < math.radians( 30 )):MotionProxy.walkTo(0.08, 0, 0)
elif( abs( RedBallAngle ) >= math.radians( 30 )):MotionProxy.walkTo( 0, 0, math.pi/2.0 )MotionProxy.angleInterpolation( "HeadYaw", 0, 1.0, True )MotionProxy.walkTo( 0.08, 0, 0 )
elif( RedBallAngle <= -math.radians( 30 )):MotionProxy.walkTo( 0, 0, -math.pi/2.0 )MotionProxy.angleInterpolation( "HeadYaw", 0, 1.0, True )MotionProxy.walkTo( 0.08, 0, 0)

Step2:若在追踪过程中机器人视野中丢失红球超过 30 秒, 则启动超声传感器

Step3:读取声呐的值(代码与边界检测算法中Step2相同)

Step4:若超声检测到前方有障碍且距离机器人小于 0.5m,则机器人计算应向障碍物行走几步才足够接近障碍物(假设阈值为 0.2m),否则转 Step7

if (LeftValue<0.5 or RightValue<0.5 ):SonarProxy.unsubscribe("TestSonar")StepNum=int(min(LeftValue – 0.2, RightValue – 0.2)/0.08)MotionProxy.walkTo(StepNum*0.08,0.0,0.0) 

Step5:机器人面向障碍物向左侧横向行走,行走期间不停检测机器人左右两侧的超声值,如果左值大于给定阈值,则说明 机器人走到拐角,则机器人应先继续左走两步再右转,同时始终保持面向障碍物直到当前障碍物的边界检测完成为止.

Step6 :重复 Step1 至 Step5,直到完成环境中所有障碍物的检测.

Step7 :障碍物检测算法结束。

  • 路径规划算法(A* 算法)

这种启发式算法的基本思想是让机器人规划出一条从当前位置到下一待覆盖栅格之 间的最短路径,然后使机器人通过该路径到达待覆盖的栅格。A* 算法通过估价函数 f’(n) = g’(n) + h’(n){g’(n) 是起点到终点的最短路径值,h’(n) 是 n 到目标的最短路经的启发值} 来估计当前点和 终点之间的距离,并决定它的搜索方向,估价函数的选择会直接影响算法的效率.本文使用的估价函数为 F = G + H = i.Distance + math. sqrt((self.EndX – i.x) * (self.EndX - i.x) + (self. EndY - i.y)*(self.EndY - i.y)) * 1.2。

  • 反思

  1. 避障没有进行;
  2. 深度对话识别效果不佳,需结合科大讯飞、百度语音识别、图灵机器人等改进;
  3. 心态放平,循序渐进,看论文重在质不在量;

NAO学习第二周——NAOqi Audio相关推荐

  1. 深入理解吴恩达老师深度学习课程(01神经网络和深度学习 第二周)

    深入理解吴恩达深度学习(01神经网络和深度学习 第二周) 1引言 2.1 二分类(Binary Classification) 2.1.1 符号定义(视频给出的) 2.2 逻辑回归(Logistic ...

  2. java学习第二周周记

    JAVA学习第二周周记 **day1.**流程控制语句 ,跳转控制语句 **day2.**什么是方法?方法的重载 **day3.**数组,栈和队列 **day4.**冒泡排序及对象的引入 **day5 ...

  3. Python学习第二周总结

    Python学习第二周总结 ​ 第二周主要学了python中几种常见的数据结构,分别是列表.元组.字符串.集合.字典重点就是怎么创建和使用这些数据结构,操作方法更是一定要掌握的. 一.列表 1.1 定 ...

  4. 吴恩达深度学习第二周--logistic回归作业1

    吴恩达深度学习第二周–logistic回归作业1 本系列为吴恩达老师深度学习作业的总结,其中参考了很多优秀的文章,本文为了方便日后的复习与巩固,更为详细的作业讲解参考 目录 吴恩达深度学习第二周--l ...

  5. 吴恩达深度学习第二周+二分类应用+猫图片识别

    由于最近在看吴恩达老师深度学习的课程,在第二周有一个关于猫图片识别的习题,下面将自己的一些体会和代码分享. 有关数据集的下载可以自行百度. 下载好数据集之后会发现是一个.h5的文件.所以我们首先导入 ...

  6. Java学习---第二周周报

    第二周周报 收获 关于第一周知识的查漏补缺 JDK,JRE,JVM 分别是什么,彼此之间的关系是怎么样的? JDK为Java语言的软件开发工具包,是整个Java的核心:包含JRE和JVM JVM是Ja ...

  7. 软件测试学习第二周--MySQL

    第二周--MySQL学习 四大基本操作 1.1 增 1.1.1 新建数据库 1.1.2新建表 1.1.3插入新数据 1.2 删 1.2.1 删除数据库 1.2.2 删除数据表 1.2.3 删除数据 1 ...

  8. python编程学习——第二周

    第二周 python学习笔记和做的一些习题 (python编程快速上手--让繁琐工作自动化) 第四章节 列表 列表数据类型 "列表"是一个值,它包含多个字构成的序列. 列表中的值成 ...

  9. PaddlePaddle课程学习第二周笔记

    本周主要学习了手写数字识别以及深度学习五个步骤的具体实现方法和优化 深度学习五个步骤的具体实现方法和优化 数据集处理 读入数据并划分数据集 train_set(训练集):用于确定模型参数. val_s ...

最新文章

  1. ETHNET DHCP的两种方式
  2. 深入浅出springboot 下载_有没有相见恨晚的学习模电好方法?《新概念模拟电路》全五册合集免费下载...
  3. source insight(SI)怎么显示全路径?(不显示省略路径)(关闭Trim long path names with ellipses)
  4. saxbuilder用法(转)
  5. github上打包的样式为什么在预览的时候,出现404
  6. usb长包数据结束判断_如何判断南桥好坏 判断南桥好坏方法介绍【详解】
  7. java 域_java四大域总结
  8. 保护自己之手机定位信息收集
  9. 自己编译操作系统,安装systemtap
  10. Fluent 安装过程
  11. linaro交叉编译工具安装配置
  12. 前端实现打印功能(纯前端实现)
  13. 英雄联盟 python 刷等级_自从学了python,我再也不缺英雄联盟的皮肤了
  14. Dremel和Hadoop
  15. linux下学习db2
  16. Kalman Filter 通俗讲解
  17. MySQL数据库-设置数据完整性
  18. win7关闭交互式服务检测
  19. 87金融汇:如何理性看待互联网理财收益波动
  20. Harbor容器安装以及相关特性部署与使用(SSL证书+AD域)

热门文章

  1. SBG Ellipse2最强替代型号推荐?AHRS INS/GNSS
  2. django问题研讨:由master=true引发的奇怪现象
  3. 计算机连接网络需要什么,宽带怎么安装需要什么_安装宽带步骤-系统城
  4. 关于python的各个常用软件——python、pycharm、anaconda
  5. android之父:安迪*鲁宾
  6. 嵌入式网络的基础知识 -- 数据包的组装、拆解、各头部格式
  7. python处理金融数据_Python金融大数据分析-数据获取与简单处理
  8. cassandra java cql_使用Cassandra CQL Java Driver 访问Lindorm
  9. 服务器没有显示器能接笔记本吗,笔记本能连显示器吗,笔记本怎么才能接显示器(图文)...
  10. 迷惑新手的IOS开发问题