一種智能機(jī)器人系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)
3.1 控制系統(tǒng)總體軟件結(jié)構(gòu)
軟件系統(tǒng)主要由應(yīng)用軟件、內(nèi)核、系統(tǒng)服務(wù)、驅(qū)動(dòng)程序等組成。其構(gòu)成示意圖如圖2.
圖2中硬件平臺(tái)是指核心控制模塊及其外圍擴(kuò)展模塊,如視頻采集模塊、語(yǔ)音采集模塊等;驅(qū)動(dòng)程序是指系統(tǒng)對(duì)LCD、直流電機(jī)、攝像頭模塊、語(yǔ)音采集模塊等程序;內(nèi)核是指嵌入式操作系統(tǒng),本系統(tǒng)采用的是μC/OS-Ⅱ操作系統(tǒng);系統(tǒng)服務(wù)是指圖形界面μC/GUI和文件系統(tǒng)等;應(yīng)用程序是指為完成控制系統(tǒng)所規(guī)劃的任務(wù)等程序。
3.2 基于μC/GUI的界面設(shè)計(jì)
μC/GUI是嵌入式應(yīng)用中通用的圖形軟件,是為帶LCD的圖形應(yīng)用系統(tǒng)提供高效的圖形用戶接口而設(shè)計(jì)的,它不依賴于處理器和LCD控制器。μC/GUI在多任務(wù)環(huán)境下工作與在單任務(wù)環(huán)境下工作性能同樣卓越,任何尺寸大小的顯示設(shè)備,不管是物理的或是虛擬的,只要具備LCD控制器和處理器,都可以運(yùn)用μC/GUI.μC/GUI產(chǎn)品包中包含有所有的源代碼。實(shí)際上,在所有的嵌入式圖形用戶接口中,μC/GUI提供的源代碼是最整潔最統(tǒng)一的。μC/GUI提供的所有服務(wù)都以該模塊相關(guān)的前綴開始(如:GUI,WM),這將易于理解應(yīng)用程序中與μC/GUI相關(guān)的函數(shù)。同時(shí),μC/GUI所有的服務(wù)都有很明晰的分類:GUI表示二維圖形,GUI_AA表示反鋸齒等。
中間件μC/GUI界面應(yīng)用程序向用戶提供了豐富的API接口函數(shù),為窗口設(shè)計(jì)提供了方便。在設(shè)計(jì)中,為了繪制一幅背景圖片,首先使用位圖轉(zhuǎn)換工具把bmp格式的位圖轉(zhuǎn)換成μC/GUI支持的C文件,供μC/GUI函數(shù)調(diào)用。然后根據(jù)μC/GUI提供的API函數(shù)設(shè)計(jì)系統(tǒng)界面。用到的API函數(shù)主要有位圖顯示函數(shù)、窗口創(chuàng)建函數(shù)、窗口客戶區(qū)句柄獲取函數(shù)、按鈕創(chuàng)建函數(shù)、文本框創(chuàng)建函數(shù)和滑動(dòng)進(jìn)度條創(chuàng)建函數(shù)等。設(shè)計(jì)的界面最終在8英寸LCD液晶屏上顯示。本系統(tǒng)設(shè)計(jì)的窗口主要由兩個(gè)子窗口組成:上方窗口主要用于視頻顯示,可以通過觸摸屏點(diǎn)擊開始或結(jié)束,視頻數(shù)據(jù)將自動(dòng)存入規(guī)劃好的內(nèi)存圖像存儲(chǔ)區(qū),以便進(jìn)一步處理利用,并可選擇機(jī)器人所處環(huán)境的特定算法程序,且運(yùn)行相應(yīng)的程序;下方的窗口工具條主要完成機(jī)器人現(xiàn)場(chǎng)音頻數(shù)據(jù)的收集、播放及停止采集,錄制的音頻信息將自動(dòng)存入規(guī)劃好的內(nèi)存音頻數(shù)據(jù)存儲(chǔ)區(qū)Sound_Buffer中,而播放的音頻數(shù)據(jù)放在內(nèi)存Play_Buffer中,它們采用的都是內(nèi)存映射技術(shù)。
3.3 用戶任務(wù)設(shè)計(jì)
基于μC/OS-Ⅱ的任務(wù)管理機(jī)制,根據(jù)系統(tǒng)的功能要求,劃分為6個(gè)系統(tǒng)任務(wù),并設(shè)置每個(gè)任務(wù)的優(yōu)先級(jí),如表1所示。
(1)Motor_Drive_Task——定時(shí)中斷節(jié)拍進(jìn)行計(jì)時(shí),在任務(wù)循環(huán)塊中,接收?qǐng)D像處理控制算法中形成的電機(jī)驅(qū)動(dòng)參數(shù),即Image_Analyze_Task任務(wù)中產(chǎn)生的電機(jī)驅(qū)動(dòng)參數(shù),更新PWM輸出,完成機(jī)器人所需運(yùn)動(dòng)軌跡姿態(tài)的調(diào)整,隨后掛起自身。
(2)Image_Analyze_Task——獲取在內(nèi)存循環(huán)隊(duì)列中的圖像數(shù)據(jù),在任務(wù)循環(huán)塊中檢測(cè)圖像信號(hào)量。如果沒有在一定時(shí)期內(nèi)進(jìn)行任務(wù)調(diào)度,則掛起自身;若有則對(duì)獲取內(nèi)存循壞隊(duì)列中的圖像數(shù)據(jù)進(jìn)行分析處理,得出電機(jī)驅(qū)動(dòng)參數(shù)并發(fā)送該信息至消息隊(duì)列中,然后釋放圖像信號(hào)量,再掛起自身。
(3)Sound_Record_Task——用于采集、存儲(chǔ)機(jī)器人周圍環(huán)境聲音信息數(shù)據(jù)到聲音隊(duì)列中。
(4)Sound_Play_Task——定時(shí)從內(nèi)存聲音播放存儲(chǔ)處,即Play_Buffer中提取數(shù)據(jù)放到隊(duì)列中進(jìn)行播放。
(5)Image_Collect_Task——建立窗口界面,在任務(wù)循壞塊中檢測(cè)圖像信號(hào)量。如果沒有在一定時(shí)期內(nèi)進(jìn)行任務(wù)調(diào)度,則掛起自身;如果檢測(cè)到圖像信號(hào)量,則采集一幅圖像到圖像存儲(chǔ)循壞隊(duì)列中,采集完成,再釋放圖像信號(hào)量,掛起自身。
(6)GUI_Update_Task——按照μC/GUI手冊(cè)規(guī)定,當(dāng)其使用窗口回調(diào)機(jī)制,建議把它設(shè)為最低優(yōu)先級(jí)別的任務(wù),用來更新回調(diào)信息,并且該任務(wù)必須實(shí)現(xiàn),且要定期調(diào)用。
評(píng)論