肖光亞
(長春師范大學工程學院,吉林 長春 130032)
醫院有些年齡偏大的患者,有時候需要自己上下樓拿藥,很不方便,如何合理高效準確運送病人所需的藥品成為一個重要問題。基于此,筆者設計了一款智能送藥小車[1-11],并模擬了護士送藥過程,通過小車來代替人力,實現送藥、取藥的自動化,幫助醫護人員以及病人送藥、取藥,以達到醫院人力資源的最大化利用。
智能送藥小車主要框架如圖1所示。該智能送藥小車搭載著Arduino mega2560單片機(Arduino mega2560)、OpenMv4智能攝像頭(OpenMv4)、433M無線模塊、直流穩壓電源、微動開關模塊等,主要基于Arduino mega2560單片機、OpenMv4智能攝像頭、433M無線模塊相互通信配合實現以下功能:1)通過OpenMv4智能攝像頭識別相應的病房目標號,實現藥品的準確送達;2)在地面安裝紅色標示線作為指示物,通過OpenMv4智能攝像頭的識別功能以及與單片機的通信功能實現小車的定點尋跡;3)單片機通過微動開關模塊識別藥品的放置情況,從而實現開車、停車動作;4)在進行大容量物資運送中,可使用兩個或多個智能小車智能通過433M無線模塊送達藥房,實現大批量藥品的運送。

圖1 智能送藥小車主要框架
下面以單車為例說明送藥小車的工作過程,單車系統框圖如圖2所示。

圖2 單車系統框圖
小車開機停在藥房處等待送藥指令,當有藥物放上小車觸發微動開關模塊并且搭載在小車上的OpenMv4識別到與內部儲存的病房號一樣的號碼時,小車開始沿著地面上設置的紅色標示線開始尋跡,同時尋跡情況可以通過OpenMv4上的OLED顯示屏查看,小車在尋跡到各個病房的門口時會通過OpenMv4掃描放置于門口地上的病房號,直到小車掃描到與開始識別的目標病房號一樣的號碼后,小車轉進病房,進入病房后停車,等待人工卸載藥品,當人工卸載完藥品后,微動開關電平改變,小車執行回藥房指令,通過對來時病房路線的記憶,尋跡回到藥房。
雙車協同工作過程:1、2號小車同時開機等待藥房送藥指令,兩個小車協同運送藥品到同一指定的病房。首先,小車1識別病房號裝載藥品后開始運送,到達病房后等待人工卸載藥品;然后,小車2識別病房號裝載藥品后啟動運送,到達自選暫停點后暫停,等待小車1卸載;小車1卸載藥品,開始返回,同時控制小車2繼續運送。小車1、2都返回原點。遠端雙車協同工作過程同上。模擬醫院地圖如圖3所示。

圖3 模擬醫院地圖
數字識別以及尋跡功能需要使用OpenMv4來實現。本研究中,數字識別用到了OpenMv4內置的NCC算法,使用OpenMv4內置的NCC算法可以進行矩形、三角形、圓等各種形狀以及各種數字的模板匹配。需要根據實際情況使用OpenMv4的APP上傳將要檢測的目標數字圖片,要將所有需檢測的目標全部導入OpenMv4的SD卡中,模板格式必須是pgm格式,而且大小有限制,不能超過OpenMv4的像素大小。可以直接從OpenMv4里面截取若干模板圖像,可以先運行helloworld.py例程,讓frambuffer顯示出圖像,然后進行截取。關于調整pgm格式圖片像素大小的方法,可以運用Photoshop對截取的目標圖片進行像素增減。此操作可以大大提高小車在運行時識別到目標數字的能力,當小車在數字識別的時候可以根據SD卡內的存儲圖片進行匹配,匹配成功后進行下一步操作。對于十字路口的數字,小車不僅需要識別數字,還要通過數字擺放的相對位置,將數字相對于十字路口的左右方向信息發送回Arduino mega2560單片機。OpenMv4在識別到數字時,會返回一個img對象,img對象為一個數組,該數組中包含著該數字相對于小車中心線的坐標,通過將該數組坐標進行比較,可以計算出目標圖片在小車中心線的左邊還是右邊,OpenMv4通過該方法判斷出數字的方向,將方向信息發送回單片機,單片機通過該信息執行方向指令。
尋跡功能用到了OpenMv4內置的PID庫并且使用get_regression()方法獲得ROI的線性回歸。由于本研究使用二值化處理圖像,即通過設置相應的顏色閾值將攝像頭捕捉到的色彩分成兩種顏色,一種白色,一種黑色,白色是所需要的顏色,閾值編輯器效果圖如圖4所示,所以在圖像識別處理時核心環節是過濾掉雜波,排除無用的部分。設置完顏色閾值后,利用get_regression()函數對圖像模擬生成的二值化圖像進行線性回歸計算,雖然該運算速度比較快,但是該方法不能處理任何異常值,也就是雜波。運算完畢后OpenMv4會模擬出一條當前小車前進的方向線,再通過OpenMv4內置的PID庫對get_regression()函數返回的line對象進行調整,將小車調整到與目標線和line對象重合。使用這種方法,可以輕松讓智能小車跟蹤所有指向相同大致方向的線。利用程序得到的line對象的theta返回值和rho(theta代表返回線段的角度,rho代表偏移的距離),利用theta和rho來控制小車角度即可。rho更重要一些,如果不用theta,只用rho也是可以的。最后需要將OpenMv4掃描的地面病房號以相對坐標的形式發回Arduino mega2560單片機,這樣主控單片機可以根據OpenMv4發回的相對坐標值對病房進行更準確的判斷。

圖4 閾值編輯器畫面
雙車協同工作時很重要的一點就是,兩輛小車在工作時不能互相干涉對方工作。兩輛小車同時搭載433M無線模塊,通過AT指令更改模塊的地址,模塊內部有256個地址,地址可以在1~255之間任意選,更改兩個無線通信模塊的無線通信頻道,將兩個無線模塊設置到同一通信頻道。這樣就可以通過兩個433M無線模塊之間實現兩個小車的通信。當小車1到達目標病房并返回病房時向小車2發送無線電信號,使小車2進行進入病房操作。
智能送藥小車以亞克力底板為底盤,搭載電機、輪胎、直流穩壓模塊、電池、OpenMv4、微動開關、433M無線模塊等,通過多重模塊通信使各個模塊相互配合共同完成模擬護士送藥,為未來醫院的自動化服務提供選擇。