NAO学习第二周——NAOqi Audio
-
目標
深度對話
避障
-
查閱資料
-
進展
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——對話
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 = TrueStep5 :邊界檢測算法結束。?
②障礙物檢測算法
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。??
-
反思
總結
以上是生活随笔為你收集整理的NAO学习第二周——NAOqi Audio的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 程序员写给老婆的代码
- 下一篇: 云轴ZStack Cloud云建设方案腾