白煥鑫,劉文飛,孟 鑫,薛茜藝
(臺州學院航空工程學院,浙江 臺州 318000)
隨著中國工業化進程不斷深入,工業生產中的物料搬運工作逐漸趨于自動化、信息化、智能化,在一些高精度、高網絡化、高風險的作業環境中,智能物流小車已逐漸取代人工搬運。2021年第七屆浙江省大學生工程訓練綜合能力競賽要求設計并制作一臺通過掃描二維碼領取搬運任務,在指定的工業場景內行走與避障,并按任務要求將物料搬運至指定地點并精準擺放的智能物料搬運小車。
浙江省大學生工程訓練綜合能力競賽要求設計的智能小車需具有定位、移動、避障、讀取條形碼及二維碼、物料位置和顏色識別、物料抓取與載運、上坡和下坡、路徑規劃等功能。
根據此要求,對小車各功能模塊進行設計,主控采用嵌入式方案,其上帶有電機驅動電路以及任務內容顯示裝置(OLED);由于機械臂夾取部分需要現場制作,因此機械臂應結構簡潔,易于加工。車輪選擇普通海綿內膽輪,上料與下料使用五自由度機械臂,樹莓派搭載攝像頭獲取物料搬運順序、物料顏色與形狀信息,姿態傳感器實現小車的全局定位;尋跡模塊實現自主移動與路徑規劃,單片機進行數據分析與處理。總體方案如圖1所示。

圖1 總體方案圖
主控芯片采用STM32,樹莓派、舵機控制板、姿態傳感器與主控之間的數據傳輸采用串口通信,由于還需實現移動、避障、任務顯示的功能,因此選擇I/O口較多的STM32F103ZET6主控芯片[1],其具有4路UART串口、112個快速I/O口、多個定時器時鐘,且配有512 KB的閃存程序存儲器,可滿足設計要求。
小車以12 V航模電池為電源,利用穩壓器將電壓穩定在12 V后并聯供電,分別作為電機驅動、PCB控制板的電源,其中PCB板通過LMS2596模塊將輸入電壓降到5 V后給電路板上的其他模塊供電。穩壓器流出的12 V電壓通過降壓器后分別給機械臂控制板、樹莓派供電,電路原理如圖2所示。

圖2 電源模塊電路原理圖
小車利用4個電機實現移動功能,電機采用直流減速電機,電機型號為MG513P30_12V,外形尺寸73 mm×33 mm,質量145 g,輸出軸徑6 mm,D型軸,額定參數12 V、0.36 A、293 r/min、扭矩1 kg·cm,通過調節PWM占空比實現轉速的控制,進而通過輪間差速實現轉彎功能。電機驅動采用大功率隔離電機驅動模塊,可頻繁正反轉而不燒驅動,且使用方便,只需要將電機正負線連接驅動,驅動IN1~IN4分別接STM32F103ZET6的PWM輸出I/O口就可以實現PWM信號控制。
小車的尋跡是沿著地圖中的黑線移動,在指定位置根據特定邏輯判斷實現停車。本小車尋跡分為2部分:一部分是黑線位于小車中間尋跡,主要利用12路灰度尋跡模塊[2],其上的LED燈通電后發光,經過地面的反射后光敏電阻根據光強改變電阻大小,由于地圖的色差不同,調節尋跡模塊的靈敏度后可實現在黑線上返回高電平,深黃色區域返回低電平,STM32芯片根據返回的電平改變電機轉速實現尋跡功能;另一部分是2條黑線位于小車兩邊,小車靠近2條黑線的其中1條尋跡,利用2個一路灰度尋跡模塊檢測小車相對于黑線的位置并實時調節,實現走中間尋跡功能,能夠解決小車在夾取下層貨架的物料時機械臂長度限制的問題。2種尋跡效果如圖3和圖4所示。

圖3 小車巡中間

圖4 小車巡兩邊
樹莓派是一個開放源代碼的硬件平臺,它是一款基于ARM的微型電腦主板,以SD/MicroSD卡為內存硬盤,并且只有信用卡大小,功能強大,可以通過開源的Linux系統安裝軟件實現各種功能,并且處理數據效率高,不易出錯,能夠滿足對圖像識別的要求,因此選擇用它安裝python-opencv并搭載200萬像素攝像頭實現二維碼的讀取、物料位置和顏色的識別。
小車在轉彎時由于場地摩擦力、電池電壓、重心、輪間距等原因不能每次都精確地轉到相同的角度,因此需要額外增加姿態傳感器模塊,與STM32通過串口通信,采用閉環控制,在旋轉角度與預定不符的時候,姿態傳感器檢測當前角度并反饋給單片機,單片機經過處理后調整輪間差速,旋轉后姿態傳感器再次檢測角度,反復多次,最終實現對小車旋轉角度的準確控制。
物料的抓取和放置需要準確且快速,因此選擇串行總線舵機,它與傳統的PWM舵機相比,舵機之間通過雙接口進行上下串聯,極大地減少了布線,使得結構更加清晰簡單,而且減少了串口的占用,同時,總線舵機具有角度反饋,可以快速讀取舵機角度,進行機械臂關節的位置捕捉。舵機控制板通過降壓后的7.5 V供電,與STM32串口通信,小車到指定位置后單片機發送指令,控制板收到信息后控制舵機執行動作組。
小車機械結構包含2個部分:小車主體和機械臂。小車主體由直流電機驅動的海綿內膽輪、各種模塊以及底板組成,車載布局空間高效利用,使小車整體空間利用率最大化。底板采用亞克力板,亞克力板質量小、加工方便,并且成本不高。
機械臂由舵機和機械爪組成。機械臂各關節使用鋁制材料制作,可以最大程度地減輕整車質量,并且將機械臂設計[3]為折疊形式,節省空間。使用5個大功率總線舵機驅動機械臂的每一個關節,使機械臂具有5個自由度,夾取物料靈活快捷,控制精度高而且比較穩定;機械爪采用籠式抓手,使用亞克力板制作,內部夾持面設計為深溝狀且帶有防滑條紋,2個亞克力板之間以銅柱連接,在夾取時能夠更加穩定、準確;物料倉使用斜坡式,物料只需放到一定范圍內即可在重力作用下滑到指定位置,提高容錯率,并且在后方間隔一定距離固定2根銅柱卡住物料,防止物料掉落。結構設計采用SOLIDWORKS進行整體仿真以及有限元與力學分析,確保在實際情況下能夠滿足設計要求。
根據競賽要求,主程序設計流程如圖5所示。

圖5 主程序設計流程圖
采用STM32的TIM3定時器的2個通道輸出PWM方波,通過電機驅動實現電機控制,控制電機的PWM頻率需要在6~16 kHz之間。高頻率驅動電機的振動比較大、開關損耗比較大、電磁噪聲較明顯,且電機參數本身也不推薦太高的載頻,所以采用了10 kHz的頻率,確保電機平穩運行。PWM輸出可以實現基本的電機控制,但是隨著供電電壓和負載的變化,電機的速度會發生變化。為了保證電機的速度達到理想的效果,采用了霍爾編碼器對電機轉速進行檢測。根據編碼器正反轉輸出信號的相位差,通過STM32芯片對其進行正交解碼,獲取電機運轉狀態,存入CNT寄存器之中。任何時候CNT寄存器的值就是編碼器的位置信息,正轉累加,反轉遞減,不需要軟件干預。
為了控制電機平穩運轉,運用了增量式PID控制算法[4]。當執行機構需要的控制量是增量,而不是位置量的絕對數值時,可以使用增量式PID控制算法進行控制。其公式也是由位置式PID推導出來。增量式PID控制算法與位置式PID算法公式相比,計算量小的多,計算公式如下所示:

其中:

經過上述方案調節,精度雖然足夠高,但出現了超調現象,不能達到理想的加速效果,速度超調會使得小車的整體運行不平穩,在加速的時候由于加速度過快,會發生前輪上翹,在剎車時會出現后輪上翹。嘗試了去整定PID的參數,如果把Kp調小,可以解決加減速過快的問題,但是響應速度受到了嚴重的影響。在保持Kp不變的情況下增大Kd值去抑制電機過調量。這樣能達到一定的平緩速度,但是在速度變化量較大的時候小車的運行依舊不平穩。因此,采取對每次增量進行限幅的措施,當速度差很大的時候限制了單位時間內的增量,這樣就能保證平穩加速減速控制。具體程序如下。
if(abs(Target2-pid_speed_2_last)>30)
{
if(Target2>Encoder2)
pid_speed_2=pid_speed_2_last+Car_Max_Chang e_Speed;
else
pid_speed_2=pid_speed_2_last-Car_Max_Change_Speed;
}
小車限幅后的速度控制曲線如圖6所示。

圖6 小車限幅后的速度控制曲線
使用樹莓派4b+opencv+200萬像素攝像頭,二維碼的識別通過pyzbar包實現,攝像頭處于時刻開啟狀態,對準二維碼,單片機發送指令,讀取當前幀轉為灰度圖像后提取條形碼的邊界框的位置,使用pyzbar內置函數讀取二維碼內容,轉化為字符串后發送給單片機,單片機內通過串口中斷,如果接收到內容,判斷是否為二維碼內容,若是,則讓任務顯示裝置逐位顯示。
使用樹莓派4b+opencv+200萬像素攝像頭,單片機發送指令后先將目標對象圖片的特征數據提取出來,將圖像進行色彩模型轉換,由RGB模型變為HSV模型。HSV表色系由色度(Hue)、飽和度(Saturation)、亮度(Value)3個分量構成。提前設置物料顏色的HSV范圍,對轉換后的HSV圖像中的顏色進行檢測,用白色像素將其標記出來,其余背景標記為黑色像素,生成二值圖像。對顏色篩選后的圖像進行形態學處理[5]。二值圖像的形態學運算主要包括腐蝕、膨脹、開操作、閉操作,用來提取圖像目標分量。最后使用opencv內置函數inrange(),并將在指定范圍內的顏色框選出來,判斷輪廓的面積,如果面積大于0則說明檢測到指定顏色并標號,并且攝像頭可以一次識別3種顏色,3種顏色全部檢測完成后通過串口返回給單片機進行處理。
任務碼的顯示采用0.96 in(1 in≈2.54 cm)7引腳OLED屏幕,為使字符高度達到規則要求的8 mm,通過PCtoLCD2002軟件對字符取模,取模設置為陰碼,列行式,逆向,十六進制數,最后得到32×160像素的字模。成功識別二維碼后,樹莓派通過串口傳回一組如“312”的字符串,通過單個數字所在位置決定在OLED上顯示的位置,核心程序如下所示。
if(a==49)
LCD_P32x160Str(0,0,"1");
else if(a==50)
LCD_P32x160Str(0,0,"2");
elseif(a==51)
LCD_P32x160Str(0,0,"3");
走直線:走直線使用的是12路灰度尋跡模塊,使用定時器7中斷函數,每隔5 mm實時檢測模塊當前相對黑線的位置并以高低電平的形式反饋給STM32,同時在尋跡的程序中加入PID閉環控制,使小車在偏離直線時能夠準確且迅速地返回預定軌跡。檢測12路灰度當前位置并返回差值部分程序、尋跡位置式PID控制程序如下所示。
檢測12路灰度程序:
u16 P0=PO_get();
if(P0==0x0600)
{val=0;}
elseif(P0==0xC000)
{val=-110;}
elseif(P0==0x4000)
{val=-102;}
else if(P0==0x4000)
{val=-99;}
PID控制:
void car_fwd_encode(int car_spd)
{
error_last=error;
error=val;
if(val<=100)
{adjust=val*KP/100+(error-error_last)*KD+(error+error_l ast)*KI;
car_run_open(car_spd+adjust-wz ,car_spd-adjust+wz);
}
}
走中間:走中間是通過檢測安裝在小車四角的由2個一路灰度傳感器組成的兩路灰度的位置,當檢測到小車邊緣超過黑線時,給小車的左右輪子一定偏差,使其實現貼邊走,部分程序如下所示。
u16 P2=P2_get();
if(P2_get()==0x0000) //0000
{
car_run_go(speed_left,speed_right);
}
else if(P2_get()==0x1000)
{
car_run_go(27,60);
}
elseif(P2_get()==0x3000)
{
car_run_go(27,70);
delay_ms(50);
}
小車實物如圖7所示。

圖7 小車實物
本文設計并制作了一輛智能物流小車,包含實現電機驅動、尋跡模塊、樹莓派的二維碼識別與顏色識別、姿態傳感器、舵機控制等功能的軟硬件設計,小車的電機控制以及尋跡功能都加入了PI閉環控制,能夠實現更精確的移動控制,能夠精準、快速地完成物料搬運任務,降低工人風險,減少企業人力成本。