機器人操作系統(tǒng)(ROS)課件9.1在ROS中構建一個人機交互機器人_第1頁
機器人操作系統(tǒng)(ROS)課件9.1在ROS中構建一個人機交互機器人_第2頁
機器人操作系統(tǒng)(ROS)課件9.1在ROS中構建一個人機交互機器人_第3頁
機器人操作系統(tǒng)(ROS)課件9.1在ROS中構建一個人機交互機器人_第4頁
機器人操作系統(tǒng)(ROS)課件9.1在ROS中構建一個人機交互機器人_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

機器人操作系統(tǒng)(ROS)機器人操作系統(tǒng)(ROS)在ROS中構建一個人機交互機器人9.1機器人操作系統(tǒng)(ROS)9.1.1AIML簡介AIML(人工智能標記語言)是一種基于XML的語言,用于存儲XML標簽內(nèi)部的知識。AIML文件使用結構化的方式存儲知識,以便在需要時可以輕松訪問。換句話說,AIML是一種為了匹配模式和確定響應而進行規(guī)則定義的XML格式。它的雛形是一個名為"A.L.I.C.E."("ArtificialLinguisticInternetComputerEntity")的高度擴展的Eliza機器人,由Alicebot自由軟件社區(qū)和RichardS.Wallace博士在1995-2000期間開發(fā)。目前AIML已經(jīng)有了Java,Ruby,Python,C,C#,Pascal等語言的版本。人機交互機器人機器人操作系統(tǒng)(ROS)9.1.1AIML簡介AIML標簽要學習AIML,首先需要學習基本的AIML標簽,如下表所示:編號標簽描述1<aiml>定義AIML文檔的開頭和結尾2<category>定義Alicebot知識庫中的知識單元3<pattern>定義模式以匹配用戶可以輸入到Alicebot的模式4<template>定義Alicebot對用戶輸入的響應5<star>用于匹配<pattern>標簽中的通配符*字符6<srai>多用途標簽,用于調(diào)用/匹配其他類別7<random>獲取隨機響應8<li>用于表示多個響應9<set>用于在AIML變量中設置值10<get>用于獲取存儲在AIML變量中的值11<that>用于根據(jù)上下文進行響應12<topic>用于存儲上下文,以便可以基于上下文完成對話13<think>在AIML中用于存儲變量而不通知用戶14<condition>用于ALICE響應匹配輸入機器人操作系統(tǒng)(ROS)下面通過一個簡單的例子,對上述AIML標簽進行更加形象的描述:代碼以<aiml>標簽開始,以</aiml>標簽結束,基本上它包含AIML的版本和文件的字符編號。在標簽<category>中,保存用戶的輸入和機器人回復的輸出。其中來自用戶的可能輸入保存在<pattern>標簽下,機器人回復的輸出保存在<template>標簽下。<star>標簽有助于從用戶的可能輸入中提取單詞,<starindex=”1”/>表示從用戶可能輸入中提取提一個片段。顯然若有多個可提取的片段,只需修改可提取片段出現(xiàn)的序號。9.1.1AIML簡介AIML標簽<aimlversion="1.0.1"encoding="UTF-8"><category><pattern>MYNAMEIS*</pattern><template>NICETOSEEYOU<star/></template></category><category><pattern>MEETOURROBOTS*AND*</pattern><template>NICETOSEE<starindex="1"/>AND<starindex="2"/></template></category></aiml>機器人操作系統(tǒng)(ROS)9.1.1AIML簡介安裝PyAIML解釋器可以使用如下面命令安裝軟件包:$sudoapt-getinstallpython-aiml為了驗證是否成功安裝,進入python解釋器,并嘗試使用下面的命令導入AIML模塊:$python>>>importaiml如果模塊正確加載沒有出現(xiàn)錯誤,指針就會進入下一行,那么恭喜你,至此就完成了PyAIML解釋器的安裝。機器人操作系統(tǒng)(ROS)9.1.2在ROS中創(chuàng)建AIML機器人基于ROS的交互式機器人結構框圖整個系統(tǒng)的工作原理如下:使用ROS中的語音識別系統(tǒng)將用戶的語音轉(zhuǎn)換成文本,然后輸入到AIML引擎或作為機器人命令發(fā)送,其中,機器人命令是用于機器人控制的特定命令,如果文本不是機器人命令,它將發(fā)送到AIML引擎,從數(shù)據(jù)庫中給出智能回復。最后,使用文本到語音模塊將AIML解釋器的輸出轉(zhuǎn)換為語音輸出。機器人操作系統(tǒng)(ROS)AIMLROS功能包sound_play是audio-common的一個組件,audio_common是一個第三方音頻開發(fā)包,它實現(xiàn)了音頻驅(qū)動以及相關的ROS消息機制。通過下面源碼地址進行下載,/ros-drivers/audio_common,或者將本書對應章節(jié)的功能包(audio_commom-master)復制到工作空間下,安裝完相關依賴庫后,在工作空間內(nèi)進行編譯。9.1.2在ROS中創(chuàng)建AIML機器人1.安裝soundplay功能包$sudoapt-getinstalllibasound2$sudoapt-getinstallgstreamer0.10-*$sudoapt-getinstalllibgstreamer1.0-dev$sudoapt-getinstalllibgstreamer1.0-0-dbg$sudoapt-getinstalllibgstreamer-plugins-base1.0-dev首先安裝soundplay相關依賴庫:機器人操作系統(tǒng)(ROS)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人1.安裝soundplay功能包接著將本書提供的功能包(audio_commom-master)拷貝到工作空間src文件夾下后,進入工作空間進行編譯:$cd~/catkin_ws/$catkin_make運行如下命令啟動sound_play主節(jié)點,運行結果如下圖所示:$roscore$rosrunsound_playsoundplay_node.py運行sound_play節(jié)點機器人操作系統(tǒng)(ROS)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人1.安裝soundplay功能包sound_play測試界面運行如下命令,可以在“”中輸入需要轉(zhuǎn)化成語音的文本信息:$rosrunsound_playsay.py"helloworld"能聽到朗讀“helloworld”并且有如下圖所示的打印界面。機器人操作系統(tǒng)(ROS)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人音量控制配置有時可能出現(xiàn)沒有聲音的情況,運行如下命令,安裝pavucontrol:$sudoaptinstallpavucontrol運行如下命令,打開該軟件:$pavucontrol切換到“配置”選項卡,根據(jù)實際情況禁用不需要的聲卡。這里插入耳機到電腦,禁止第一項,第二項選擇模擬立體聲雙工(analogystereoduplex)或者模擬立體聲輸出(analogystereooutput)。切換到輸出設備,選擇線纜輸出(unplugged),同時點擊右上角的綠色對勾。

輸出設備機器人操作系統(tǒng)(ROS)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人切換到輸入設備,選擇話筒(unplugged),同樣點擊右上角的綠色對勾。輸入設備配置完成后,運行如下命令重新進行測試:$rosrunsound_playsay.py"helloworld"aiml_server的功能是加載和保存AIML。它訂閱/chatter主題,是AIML解釋器的輸入,并發(fā)布/response主題。#!/usr/bin/envpythonimportrospyimportaimlimportosimportsysfromstd_msgs.msgimportStringrospy.init_node('aiml_server')mybot=aiml.Kernel()response_publisher=rospy.Publisher('response',String,queue_size=10)defload_aiml(xml_file): data_path=rospy.get_param("aiml_path") printdata_path os.chdir(data_path) ifos.path.isfile("standard.brn"): mybot.bootstrap(brainFile="standard.brn") else: mybot.bootstrap(learnFiles=xml_file,commands="loadaimlb") mybot.saveBrain("standard.brn")defcallback(data): input=data.data response=mybot.respond(input) rospy.loginfo("Iheard::%s",data.data) rospy.loginfo("Ispoke::%s",response) response_publisher.publish(response)

deflistener(): rospy.loginfo("StartingROSAIMLServer") rospy.Subscriber("chatter",String,callback) #spin()simplykeepspythonfromexitinguntilthisnodeisstopped rospy.spin()if__name__=='__main__': load_aiml('startup.xml') listener()機器人操作系統(tǒng)(ROS)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)客戶端代碼功能是等待用戶輸入并將用戶輸入發(fā)布到/chatter主題。#!/usr/bin/envpythonimportrospyfromstd_msgs.msgimportStringrospy.init_node('aiml_server')mybot=aiml.Kernel()response_publisher=rospy.Publisher('response',String,queue_size=10)AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)TTS客戶端訂閱/response主題,并使用sound_playAPI將相應轉(zhuǎn)化為語音。#!/usr/bin/envpythonimportrospy,os,sysfromsound_play.msgimportSoundRequestfromsound_play.libsoundplayimportSoundClientfromstd_msgs.msgimportStringrospy.init_node('aiml_soundplay_client',anonymous=True)soundhandle=SoundClient()rospy.sleep(1)soundhandle.stopAll()print'StartingTTS'defget_response(data): response=data.data rospy.loginfo("Response::%s",response) soundhandle.say(response)deflistener(): rospy.loginfo("Startinglisteningtoresponse") rospy.Subscriber("response",String,get_response,queue_size=10) rospy.spin()if__name__=='__main__': listener()AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)語音識別節(jié)點訂閱/recognizer/output,并發(fā)布主題/chatter,其中主題/recognizer/output由ROS語音識別軟件包發(fā)布,如PocketSphinx。。#!/usr/bin/envpythonimportrospyfromstd_msgs.msgimportStringrospy.init_node('aiml_speech_recog_client')pub=rospy.Publisher('chatter',String,queue_size=10)r=rospy.Rate(1)#10hzdefget_speech(data): speech_text=data.data rospy.loginfo("Isaid::%s",speech_text) pub.publish(speech_text) deflistener(): rospy.loginfo("StartingSpeechRecognition") rospy.Subscriber("/recognizer/output",String,get_speech) rospy.spin()whilenotrospy.is_shutdown(): listener()AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)該啟動文件啟動aiml_server和aiml_client節(jié)點。運行此啟動文件之前,必須將數(shù)據(jù)文件夾路徑設置為ROS參數(shù),可以將其設置為AIML數(shù)據(jù)文件夾路徑。<launch> <paramname="aiml_path"value="/home/robot/ros_robotics_projects_ws/src/ros_aiml/data"/> <nodename="aiml_server"pkg="ros_aiml"type="aiml_server.py"output="screen"> </node> <nodename="aiml_client"pkg="ros_aiml"type="aiml_client.py"output="screen"> </node></launch>AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)該啟動文件啟動aiml_server、aiml_client和aiml_tts節(jié)點,與上一啟動文件的區(qū)別在于將AIML服務器的響應轉(zhuǎn)化為語音。<<launch> <paramname="aiml_path"value="/home/robot/ros_robotics_projects_ws/src/ros_aiml/data"/> <nodename="aiml_server"pkg="ros_aiml"type="aiml_server.py"output="screen"> </node> <includefile="$(findsound_play)/soundplay_node.launch"></include> <nodename="aiml_tts"pkg="ros_aiml"type="aiml_tts_client.py"output="screen"> </node> <nodename="aiml_client"pkg="ros_aiml"type="aiml_client.py"output="screen"> </node></launch>AIMLROS功能包9.1.2在ROS中創(chuàng)建AIML機器人機器人操作系統(tǒng)(ROS)該啟動文件將啟動AIML服務器、AIMLTTS節(jié)點和語音識別節(jié)點:<launch> <paramname="aiml_path"value="/home/robot/ros_robotics_projects_ws/src/ros_aiml/data"/> <nodename="aiml_server"pkg="ros_aiml"type="aiml_server.py"output="screen"> </node> <includefile="$(findsound_play)/soundplay_node.launch"></include> <nodename="aiml_tts"pkg="ros_aiml"type="aim

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論