萬瑞豐,黃景帆,彭浩奇,張元,張宏飛
(杭州電子科技大學 電子信息學院,浙江杭州,310018)
在醫院病房中,大多數病人每天都需要按時服用藥物,護士有時因事務繁忙而出現無法及時送藥的情況,這對于行動不便且家屬又不在身邊的病人來說帶來及時服藥的困難。基于此,能夠完成在醫院藥房與病房間藥品送取作業的智能小車就具有很大的現實意義[1]。以本文采用以TC377單片機為主控制器的系統,通過OpenArt訓練識別圖像與OpenMV掃描標記線來判斷小車行駛位置和方向使小車沿線行駛、識別停車線,加上直流電機模塊和萬向輪控制小車行進和轉變方向,最終結合PID實現速度的閉環控制, 使系統能精確控制小車的運行,從而實現高效準確地運送藥品至病人所在病房。
采用AURIXTMTC377單片機。AURIXTMTC3xx微控制器架構具有多達6個獨立的處理器內核,2.3DMIPS/MHz,6級流水線,高達300MHz,且所有CPU都有32位浮點單元,符合IEEE-754的單精度,片內資源豐富且性能強。
采用深度學習中的卷積神經網絡[2-4]。因為圖像相當于處于一個運動的狀態,采集到的圖像信息較復雜,此次識別目標可以明顯分為十類,即網絡輸出十種結果,適合以深度學習的方法去處理。
采用紅外反射式光電傳感器。紅外反射式光電傳感器還有價格低廉、應用簡便等特點。
用兩輪車配萬向輪搭成的三輪小車。用兩輪車搭配支撐材料和萬向輪自制的三輪小車轉彎半徑小,可靈活調節機械結構。
測試電路總體設計如圖1所示。

圖1 測試電路
該系統中含有兩個+5V、一個+3.3V穩壓電源。①5V穩壓電源模塊設計如圖2所示。兩個+5V穩壓電源分別是開關電源TPS5450和線性穩壓器LT3045。開關電源TPS5450具有效率高,負載電流大的優點,為OpenMV及OpenArt供電。線性穩壓器LT3045具有低噪聲的特點,為編碼器和傳感類器件供電。TPS5450輸出電壓,取R2=10kΩ,R1= 3.3kΩ,滿足設計需求。②3.3V穩壓電源模塊設計如圖3所示。+3.3V由+5V經線性穩壓電源芯片ADM7172降壓得到,噪聲小,負載電流比較大。

圖2 5V穩壓電源模塊

圖3 3.3V穩壓電源模塊
電機驅動模塊設計如圖4所示。采用柵極驅動器IR2104和MOS管IRLR7843構成的全橋電路,控制電機實現正反轉。

圖4 電機驅動電路
LED燈板設計如圖5所示,通過IO控制燈的亮滅來顯示小車工作狀態。

圖5 LED燈板
干簧管模塊設計如圖6所示。在小車底部放置干簧管,在放置藥品時磁性容器接近干簧管使其導通,單片機檢測到其狀態變化開始出發。

圖6 干簧管模塊電路
軟件總體框圖設計如圖7所示。主體由三部分組成:OpenMV、OpenArt和TC377單片機。

圖7 總體框圖
單片機工作流程如圖8所示。通過接收OpenMV和OpenArt通信的數據判定所去的病房號碼。若藥品已裝載,則出發。途中,根據兩個攝像頭的數據選擇前進方向,最后到達病房前,并停止等待藥品卸載。待藥品卸載后,開始返回藥房。

圖8 單片機工作流程
3.2.1 采集數據
采集網絡上開源的Minist數據集、隨機數字生成集以及實地拍攝的光度不同的數字圖片,并對圖片進行各種變換,以達到良好的數據預處理目的,為后續模型的泛化性奠定基礎。
3.2.2 訓練模型
采用OpenArt采集并訓練數據,第一種方案是通過tensorflow搭建模型并訓練,再根據tflite量化原則進行模型量化,最后將tflite模型部署到OpenArt中,進行數字0~9的實時識別[5]。第二種方案是通過NNCU的模型量化工具,將tensorflow訓練得到的h5模型量化為OpenArt可用的nncu模型,盡可能減少OpenArt內存的占用。根據實際情況,最終選擇第二種方案來訓練模型。
3.2.3 模型應用
將模型部署到OpenArt后,還需要對攝像進行一定的光度、高度、角度調整,并搜索實時拍攝照片中的數字框,對框中的內容進行模型推理,最后的輸出即為識別的結果[6]。再通過串口通信傳輸給主控以便控制[7]。
3.2.4 環境亮度適應
不同角度導致獲取的圖像亮度不同,如圖9和圖10所示。因此導致雖然模型的訓練集準確率很可觀,但實際使用上卻不盡人意。對此,采取增加訓練集的方法,通過對相同圖像進行亮度的調節,使數據集在亮度上更加豐富,以貼合實際使用的情況。從結果上來看,圖像識別的效果會比原來的有所提升,對不同亮度環境的適應度更加好。

圖9

圖10
3.3.1 二值化區分
使用OpenMV二值化將標記路線與其他干擾元素區分[8],并對二值化后的標記路線進行線性回歸擬合處理[9],得到直線的位置偏差以及角度偏差,再通過串口將偏差傳輸給主控單片機處理,具體是應用模糊的PID進行偏差修正[10],根據PID修正后的結果控制小車追尋路線[11]。
3.3.2 十字識別
通過OpenMV二值化后閾值的判斷以及OpenArt數字識別來實現十字的左右轉彎,但由于存在類似十字狀元素的T字元素,如圖11和圖12所示,若是要將其識別,必須將OpenMV中的閾值降低,會導致十字元素提前判定,影響小車的循跡,所以必須反復去調整閾值以不斷貼近理想效果。

圖11

圖12
3.3.3 路徑規劃
通過放藥后小車識別數字一直到達病房的路程,可反向推導出返回藥房的路線規劃,即可減少返回時數字角度傾斜難以識別的問題,只需識別十字并結合推導出的返回藥房的路線規劃即可實現小車回到藥房的返程。
字模識別測試:進行小車靜態下單字模和動態下和多字模的圖像識別測試,將需要識別的字模平放在行駛線上,系統連接電腦進行上位機顯示所識別字模的數據。
任務測試:在特定時間要求下使小車自動行駛,測試小車在關鍵節點之間的運行時間,同時觀察小車有無停頓,脫軌,壓線等情況。
字模識別測試情況如表1所示。

表1 小車字模動態靜態識別測試情況
小車時間節點測試情況如表2所示。

表2 小車時間節點測試情況
結論分析:①靜態的識別率較高,但動態的識別率低了很多。可能原因是由于處于動態下,攝像頭的幀率有所下降,且加上神經網絡占據大量內存,致使幀率下降很多,各個圖像存在延時,影響數字識別。②從任務測試的結果來看,小車的運行效果較為不錯,但節點3的時間稍稍偏長。雖然嘗試提高小車運行速度,但由于數字識別時小車需要減速,故只好提高返程的小車速度,這樣避免了對數字識別的負面影響。
本文設計的智能送藥小車系統,采用后輪驅動前輪萬向輪結構,小車前端裝有OpenArt進行字模識別,同時裝有OpenMV通過準確掃描標記線來控制電機差速轉向實現小車循跡。整車系統由各獨立模塊整合而成,其電源來自于動力型鋰電池,具有較高的可靠性、穩定性;用干簧管來檢測藥品是否放下,占用空間小且操作簡單;萬向輪搭配后輪驅動的方案使得車可以實現原地調頭,簡化了控制;OpenMV和OpenArt的架設使得小車在精準尋跡的同時保持較高的字模識別精準率。但此系統也存在不足之處:采用的OpenArt鏡頭垂直地面的架設方法需要鏡頭的投影伸出底盤,車模整體邊長,轉彎時有壓實線的概率;OpenArt對光線強度的依賴未能有效解決,會出現字模識別錯誤的情況。