楊曉峰 柳笑辰 王佳奇
(遼寧大學(xué),遼寧沈陽 110031)
在全球疫情日益嚴峻的背景下,傳統(tǒng)的人工藥品運輸方式愈加難以適應(yīng)疫情防控與救治所需求的非接觸式醫(yī)療,智能化、小型化的配送藥品系統(tǒng)成為實現(xiàn)非接觸式醫(yī)療的重要環(huán)節(jié)。在智能車設(shè)計方面,李婕提出了一種基于STM32的無線視頻監(jiān)控智能小車的設(shè)計方案[1],張磊設(shè)計了一種智能小車控制系統(tǒng)[2],潘元驍對基于Arduino的智能小車自動避障系統(tǒng)進行了設(shè)計與研究[3]。本文介紹了一臺可以實現(xiàn)自動識別、取藥、送藥的智能送藥小車,可以成為一種非接觸式醫(yī)療的解決方案。
本方案對小車的電路系統(tǒng)、軟件系統(tǒng)進行了設(shè)計與制作,并進行實際測試與分析。
設(shè)計并制作智能送藥小車,模擬完成在醫(yī)院藥房與病房間藥品的送取作業(yè)。院區(qū)結(jié)構(gòu)如圖1所示。藥房和近端病院房號(1、2號)位置固定不變,中部病房和遠端病房號(3~8號)測試時隨機設(shè)定。
圖1 院區(qū)結(jié)構(gòu)示意圖
工作要求:使用者手動將小車擺放在藥房處(車頭投影在門口區(qū)域內(nèi),面向病房),手持數(shù)字標(biāo)號紙張由小車識別病房號,將約200 g藥品一次性裝載到送藥小車上;小車檢測到藥品裝載完成后自動開始運送;小車根據(jù)走廊上的標(biāo)識信息自動識別、尋徑將藥品送到指定病房(車頭投影在門口區(qū)域內(nèi)),點亮紅色指示燈,等待卸載藥品;病房處人工卸載藥品后,小車紅色指示燈自動熄滅,開始返回;小車自動返回到藥房(車頭投影在門口區(qū)域內(nèi),面向藥房)后,點亮綠色指示燈。
根據(jù)設(shè)計目標(biāo)與任務(wù),提出以下兩種方案:
方案一結(jié)構(gòu)框圖如圖2所示。該方案采用STM32F103C8T6作為主控芯片,整車的電路基于萬用板連接,利用一個OPENMV H7 PLUS進行圖像處理(包括數(shù)字圖片識別、紅線循跡、停車點識別等),與STM32使用UART通信協(xié)議進行通信,使用TB6612FNG驅(qū)動兩部直流電機,使用OLED屏幕顯示操作提示,OLED與STM32采用IIC通信協(xié)議進行通信,加之HWZ020型舵機實現(xiàn)轉(zhuǎn)向功能,采用按鍵(6×6×4.3直插型)檢測藥品是否放置。
圖2 方案一結(jié)構(gòu)框圖
本方案使用一片OPENMV H7進行紅線循跡,使用一片OPENMV H7 PLUS進行數(shù)字圖片識別,使用亞博智能出品的三路尋跡模塊識別停車點,利用TCRT5000紅外傳感器檢測判斷藥品是否放置[4],其余設(shè)計與方案一相同。其結(jié)構(gòu)框圖如圖3。
圖3 方案二結(jié)構(gòu)框圖
方案一的優(yōu)勢在于所用元器件數(shù)量少,在硬件電路設(shè)計與實現(xiàn)方面易于設(shè)計與實現(xiàn),減輕了整車機械結(jié)構(gòu)的復(fù)雜度,更易于加工。另外,由于元器件數(shù)量少,成本較低。
然而其缺點為OPENMV承擔(dān)了數(shù)字識別、紅線循跡、停車點識別等多種功能,由于其算力有限,而數(shù)字識別又需要占用大量算力資源,所以容易導(dǎo)致OPENMV運行時卡頓嚴重、幀率降低。且由于巡線、數(shù)字識別所需要的角度與位置存在區(qū)別,在攝像頭位置、角度調(diào)節(jié)問題上會存在較大困難。由于小車顛簸干擾,使用按鍵識別藥品可能會發(fā)生藥品掉落的情況。
方案二的優(yōu)點在于使用兩片OPENMV分別解決巡線、數(shù)字識別需求,用三路巡線模塊解決停車點識別問題,大大地降低了單一模塊的工作量,有足夠的算力來處理數(shù)字識別。且由于多模塊的使用,使得整車更模塊化,可替代性極高。另外,使用TCRT5000紅外傳感器,配合定制的配件可以解決檢測藥品是否放置的問題。
方案二的缺點在于整車使用多種不同的模塊,在設(shè)計電路時,需要設(shè)計多種供電電壓,還需考慮各模塊的實際位置與方向,以便于萬用板焊接與模塊之間接線。模塊與MCU之間需使用不同的通信接口,也加大了程序設(shè)計的難度。
綜上所述,認為方案二更適合本題目需求,故擇之。
方案二涉及的理論包括:采用何種方法解決數(shù)字識別問題、采用何種方法解決自動巡徑問題。
利用Keras建立NN模型進行數(shù)字識別,采用機器學(xué)習(xí)建立模型的方法進行數(shù)字識別。使用在線建模網(wǎng)站Edge Impulse建立模型,只需要用OPENMV采集一定數(shù)量的數(shù)字照片上傳至網(wǎng)站進行監(jiān)督學(xué)習(xí),將經(jīng)訓(xùn)練的機器學(xué)習(xí)模型置于OPENMV中,測試識別準(zhǔn)確率,對準(zhǔn)確率較低的數(shù)字加大采樣量再次上傳,得到新的模型。
在十字路口同時識別4個數(shù)字時,利用OPENMV,根據(jù)返回圖像的橫縱坐標(biāo),以110%的誤差余量確定劃分區(qū)域作為感興趣區(qū),劃分出4個數(shù)字的大概位置,對每個感興趣區(qū)內(nèi)的內(nèi)容進行識別。
使用OPENMV官方提供的例程文件中的線性回歸算法,在調(diào)整顏色閾值后,將目標(biāo)顏色調(diào)整為紅色即可實時得到當(dāng)前畫面中路徑的斜率,然后通過串口將信息傳至MCU進行處理,通過斜率計算出舵機需要轉(zhuǎn)向的角度并換算為對應(yīng)的PWM波占空比,從而改變小車前進方向。
電源設(shè)計:采用LMS2596模塊作為整車電源,將電池提供的12 V電壓通過BUCK電路、LDO電路降壓至5 V、3.3 V供各個模塊使用。由于本電路不涉及高頻成分,所以未設(shè)置數(shù)字電源與數(shù)字地。接地方面本板采用了混合接地的方式[5]。原理圖如圖4。
圖4 電源模塊原理圖
電機驅(qū)動模塊TB6612,可以同時控制兩個直流電機,STM32通過向其輸出不同的0、1組合控制電機正轉(zhuǎn)反轉(zhuǎn),通過調(diào)節(jié)輸出PWM波占空比調(diào)節(jié)電機轉(zhuǎn)速[6]。原理圖如圖5。
圖5 電機驅(qū)動模塊原理圖
OLED模塊通過IIC協(xié)議與STM32進行通訊,其中SCL為時鐘,SDA為數(shù)據(jù)線。三路巡線模塊是亞博智能出品的模擬量紅外巡線模塊,集成了三路紅外傳感器,可以返回0~125的模擬值。HWZ020型舵機,5 V供電,最大轉(zhuǎn)角在45°到135°,通過調(diào)節(jié)PWM波占空比改變角度。OPENMV是由星瞳科技代理的帶有攝像頭的單片機,可以進行簡單的圖像處理,H7 PLUS以上版本可以裝載神經(jīng)網(wǎng)絡(luò)模型進行機器學(xué)習(xí)??刂坪诵碾娐愤B接如圖6[7]。STM32引腳連接情況見表1。
表 1 STM32引腳連接情況
圖6 控制核心電路原理圖
OPENMV巡紅線程序利用一個無限循環(huán)抓取圖像,并逐幀計算斜率發(fā)送至控制核心[8]。程序流程圖如圖7。OPENMV數(shù)字識別程序利用一個無限循環(huán)抓取圖像,若為初次識別,則利用神經(jīng)網(wǎng)絡(luò)更新窗口數(shù)組元素,將結(jié)果發(fā)送給MCU。若非初次識別,則將捕捉的圖像按照感興趣區(qū)進行分割處理,結(jié)果傳送給MCU[9]。程序流程圖如圖8。程序共四個進程,分別為取藥、送藥、卸藥、返回。主程序程序流程圖如圖9。
圖7 OPENMV巡紅線程序流程圖
圖8 OPENMV數(shù)字識別程序流程圖
圖9 主程序程序流程圖
整車如圖10所示。
圖10 整車圖
測試目的:測試OPENMV識別數(shù)字成功率。
測試條件:OPENMV H7 PLUS連接PC機。
測試內(nèi)容:使用OPENMV H7 PLUS對放置于地面的數(shù)字圖片進行識別。
測試步驟:
(1)連接PC機,將訓(xùn)練成功的模型程序下載至OPENMV H7 PLUS;
(2)將OPENMV H7 PLUS放置在攝像頭上端點距地面10 cm處,與水平面呈30°角位置,點擊運行程序;
(3)記錄返回PC的數(shù)字,重復(fù)上述步驟100次(不重復(fù)點擊運行程序);
(4)更換數(shù)字0~9,重復(fù)上述步驟。
測試結(jié)果如表2所示。
表2 數(shù)字識別測試結(jié)果
結(jié)果分析:1、3、4、6、8識別成功率較高,2、5、7識別成功率較低,原因為2、5、7這三個數(shù)字與其他數(shù)字存在普遍的共同特征,OPENMV算力有限,在幀率降低到一定程度下,仍然無法準(zhǔn)確識別。
安裝 OPENMV H7,未安裝OPENMV H7 PLUS,小車可獨立運行時。
測試目的:測試巡線算法在實際場地的應(yīng)用效果。
測試條件:OPENMV H7脫機運行,小車可獨立運行。
測試內(nèi)容:在安裝OPENMV H7后,使小車在場地上循跡。
測試步驟:
(1)將循跡并向左轉(zhuǎn)的程序下載至OPENMV H7中,閾值設(shè)置為180,斷開與PC的連接;
(2)在最近的路口處放置X個數(shù)字圖片;
(3)將小車放置在場地的“藥房”處,打開開關(guān),讓小車啟動;
(4)觀察小車轉(zhuǎn)彎情況,若不壓線,則記錄本次舵機轉(zhuǎn)向閾值,將循跡并向右轉(zhuǎn)的程序下載至OPENMV H7中,閾值設(shè)置為180,斷開與PC的連接,重復(fù)2、3、4步驟;若壓線,則減小該值,重復(fù)2、3、4步驟;
(5)令X=0,2,4,重復(fù)上述步驟。
測試結(jié)果如表3所示。
表3 自動循跡測試結(jié)果
測試結(jié)果分析:數(shù)字的出現(xiàn)對巡線用OPENMV的干擾不大,小車可以在寬30 cm的走廊內(nèi)不壓線地轉(zhuǎn)彎。
從測試結(jié)果可以看出,對于智能送藥的要求,本車都能夠?qū)崿F(xiàn),并且功能完善。在完成基本要求和發(fā)揮部分功能的基礎(chǔ)上,系統(tǒng)還實現(xiàn)了一些自由發(fā)揮的功能,包括實時字符、圖形顯示,藍牙通信等,可擴展性強。
在本設(shè)計中,楊曉峰提出了整體設(shè)計方案,柳笑辰、王佳奇參與了方案的討論與分析。柳笑辰編寫了STM32的驅(qū)動程序、OPENMV識別數(shù)字、巡徑的程序;王佳奇設(shè)計并制作了電路部分,組裝整車。所有人參與了整車的測試,共同完成了論文的編寫。