王喜喜 郭俊 李雅琴 熊倩
摘 要:為了克服傳統(tǒng)循跡車控制算法中參數(shù)固定以及環(huán)境適應(yīng)性不強(qiáng)的問題,提出了一種基于嵌入式CPU的自適應(yīng)智能循跡車控制算法。該方法將參數(shù)列表引入到傳統(tǒng)PID控制理論中,在車輛的運(yùn)行過程中,CPU周期性的讀取外圍傳感器數(shù)據(jù)并計(jì)算誤差信息,同時(shí)根據(jù)車輛運(yùn)行狀態(tài),遍歷列表中的PID參數(shù),選取環(huán)境適應(yīng)性最好的一組作為當(dāng)前控制參數(shù)。實(shí)驗(yàn)表明,該方法具有較強(qiáng)的環(huán)境適應(yīng)性,同時(shí)大大降低了算法調(diào)試的工作量。
關(guān)鍵詞:STM32;PID算法;差速控制;串行通訊
中圖分類號(hào):TP391.4 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2018)22-0019-03
Abstract: In order to overcome the problem of fixed parameters and weak environmental adaptability in traditional tracking vehicle control algorithms, an adaptive intelligent tracking vehicle control algorithm based on embedded CPU is proposed. The method introduces the parameter list into the traditional PID control theory. During the running of the vehicle, the CPU periodically reads out the peripheral sensor data and calculates the error information. At the same time, according to the running status of the vehicle, it traverses the PID parameters in the list and select the best environmental adaptability group as the current control parameters. Experiments show that this method has strong environmental adaptability and greatly reduces the workload of algorithm debugging.
Keywords: STM32; PID algorithm; differential control; serial communication
1 概述
近年來,由于國(guó)內(nèi)的許多企業(yè)紛紛醞釀建立自動(dòng)化物流系統(tǒng),作為柔性運(yùn)輸?shù)睦硐牍ぞ吆蜔o人生產(chǎn)的典型代表,自動(dòng)導(dǎo)引車得到了越來越多的重視和推廣應(yīng)用。其研究不斷深入,涉及的領(lǐng)域不斷擴(kuò)展,其中對(duì)導(dǎo)引與定位等運(yùn)動(dòng)控制技術(shù)的研究一直是導(dǎo)引車研究領(lǐng)域的重點(diǎn)。當(dāng)前,低成本、小型化的自動(dòng)導(dǎo)引車研究得到了越來越多的重視,尤其是智能化的導(dǎo)引運(yùn)動(dòng)控制,已經(jīng)成為研究領(lǐng)域的熱點(diǎn)。因此對(duì)自動(dòng)導(dǎo)引車的運(yùn)動(dòng)控制進(jìn)行深入研究具有重要的理論和實(shí)際意義。南寧職業(yè)技術(shù)學(xué)院的周文軍在其雙輪驅(qū)動(dòng)智能小車循跡算法研究中采用PID控制算法讓機(jī)器人小車對(duì)白條循跡穩(wěn)定,糾偏能力強(qiáng)。但這種算法的PID參數(shù)不易整定,當(dāng)機(jī)器人小車平臺(tái)改變后,需要重新整定PID參數(shù)。為了克服傳統(tǒng)循跡車控制算法中參數(shù)固定以及環(huán)境適應(yīng)性不強(qiáng)的問題,本文提出了一種基于嵌入式CPU的自適應(yīng)智能循跡車控制算法。該方法將參數(shù)列表引入到傳統(tǒng)PID控制理論中,在車輛的運(yùn)行過程中,CPU周期性的讀取外圍傳感器數(shù)據(jù)并計(jì)算誤差信息,同時(shí)根據(jù)車輛運(yùn)行狀態(tài),遍歷列表中的PID參數(shù),選取環(huán)境適應(yīng)性最好的一組作為當(dāng)前控制參數(shù)。
2 系統(tǒng)描述
本次設(shè)計(jì)的智能循跡小車采用四輪驅(qū)動(dòng)的工作方式,以左右輪差速控制的方式實(shí)現(xiàn)轉(zhuǎn)向的智能小車;小車的左側(cè)后輪和右側(cè)后輪分別安裝了編碼器用來實(shí)時(shí)獲取左右輪的速度,小車前端安裝有用于探測(cè)黑色線路的循跡傳感器。
3 算法設(shè)計(jì)
本設(shè)計(jì)的整個(gè)程序大致可分為四大模塊:主程序模塊,定時(shí)中斷服務(wù)程序模塊,外部中斷服務(wù)程序模塊和USART3接收中斷服務(wù)程序模塊。其中主程序以及定時(shí)中斷服務(wù)程序?qū)崿F(xiàn)流程如圖1所示,程序一開始進(jìn)行初始化,設(shè)置時(shí)鐘,配置GPIO口,綁定中斷服務(wù)程序,然后主程序等待中斷;整個(gè)程序的實(shí)際工作流程是,每1ms執(zhí)行一次定時(shí)中斷服務(wù)程序,與此同時(shí),編碼器產(chǎn)生的外部中斷使得外部中斷服務(wù)程序被調(diào)用,兩個(gè)外部中斷服務(wù)程序?qū)蓚€(gè)編碼器的中斷進(jìn)行計(jì)數(shù);定時(shí)中斷服務(wù)程序被調(diào)用時(shí),第1ms給傳感器發(fā)送請(qǐng)求數(shù)據(jù)幀;第2ms根據(jù)兩個(gè)編碼器中斷的計(jì)數(shù)值計(jì)算小車左右輪的實(shí)際速度,并將兩個(gè)計(jì)數(shù)值清零,與此同時(shí),傳感器回傳的數(shù)值給控制器,將產(chǎn)生串口接收中斷,串口接收中斷服務(wù)程序?qū)⒈徽{(diào)用來處理接收到的數(shù)據(jù)幀,并提取出數(shù)據(jù)幀中傳感器的狀態(tài)值;第3ms分析接收到的傳感器的狀態(tài)值,并對(duì)數(shù)值進(jìn)行分類處理;第4ms處理分類后的數(shù)值,得到小車偏離黑線的距離,并應(yīng)用PID算法計(jì)算出所有調(diào)整的左右輪的目標(biāo)速度。第5ms根據(jù)實(shí)際速度與目標(biāo)速度,應(yīng)用PID算法計(jì)算出回傳給電機(jī)驅(qū)動(dòng)的數(shù)值,并通過串口發(fā)送數(shù)據(jù)幀。因此,整個(gè)過程總的來說就是控制器每5ms獲得一次傳感器處置和小車左右輪速度,并通過計(jì)算來調(diào)整一次左右輪速度。
3.1 PID算法實(shí)現(xiàn)
循跡小車運(yùn)動(dòng)控制屬于剛體運(yùn)動(dòng)控制,對(duì)控制實(shí)時(shí)性和穩(wěn)定性要求較高,可以采用PID控制實(shí)現(xiàn)較高的控制質(zhì)量。離散化的位置型PID算法的偏差值量化了循跡小車在行駛過程中偏離路線的程度,便于程序?qū)崿F(xiàn)。循跡小車方向的PID控制如圖2虛線上半部分,通過PID算法,改變左右兩側(cè)驅(qū)動(dòng)輪的速度來修正方向。循跡小車速度的PID控制如圖2下半部分,根據(jù)兩輪實(shí)際速度與給定速度,通過PID算法,使速度穩(wěn)定。如圖2所示,將上述兩個(gè)PID控制算法串聯(lián)在一起,將主PID的輸出量TargetSpeed作為副PID算法的速度給定量。同步采樣控制調(diào)節(jié)小車方向和小車行駛的速度,使小車在彎曲的線路上既穩(wěn)定又保持高速地行駛。通過實(shí)時(shí)的位置與速度反饋,提高系統(tǒng)的工作頻率,使振蕩周期減小,調(diào)節(jié)時(shí)間縮短,系統(tǒng)的快速性、穩(wěn)定性增強(qiáng)。為了克服傳統(tǒng)PID算法環(huán)境適應(yīng)性差的問題,本系統(tǒng)在設(shè)計(jì)與調(diào)試中分別選取了不同的環(huán)境。根據(jù)不同環(huán)境以及不同PID參數(shù)控制下車輛表現(xiàn)出來的性能,記錄得到不同的PID控制參數(shù),并將其制成表格,寫入CPU內(nèi)存中。當(dāng)車輛進(jìn)入新的環(huán)境中時(shí),CPU遍歷表中的控制參數(shù),選取環(huán)境適應(yīng)性最好的一組作為當(dāng)前控制參數(shù)。
3.2 循跡模塊的數(shù)據(jù)處理
循跡模塊以數(shù)字信號(hào)輸出,探測(cè)到黑線時(shí)輸出高電平,對(duì)應(yīng)指示燈亮;反之輸出低電平,對(duì)應(yīng)指示燈滅。7個(gè)傳感器感應(yīng)范圍r=3mm,測(cè)得黑線寬度D=17mm,傳感器的間距分別為15mm、17.5mm、15mm、15mm、17.5mm、15mm。對(duì)于此次7個(gè)傳感器組的布置方式,剔除一些不符和實(shí)際的信號(hào)組合(例如010 1010 、101 1011等)。得到有效的信號(hào)組合16個(gè)。其中有14種直線或近似直線行駛的信號(hào)組合以及大角度轉(zhuǎn)彎時(shí)的兩種情況(1111000和0001111)。如圖3所示(di的長(zhǎng)度表示對(duì)應(yīng)第i種情況的移動(dòng)位置范圍,其中i=1,2,…,13,且di的長(zhǎng)度可以實(shí)際測(cè)量和計(jì)算),14種直線或近似直線行駛的信號(hào)組合:僅一個(gè)指示燈亮(L1,L2,L3,L4,L5,L6,L7),僅兩個(gè)相鄰的指示燈亮(L1L2,L2L3,L3L4,L4L5,L5L6,L6L7)以及全滅。小車的實(shí)際位置不是一個(gè)精確值,可以是某個(gè)區(qū)間內(nèi)的任意位置。由小車偏移趨勢(shì)決定此刻實(shí)際位置,可降低位置波動(dòng),使數(shù)據(jù)相對(duì)穩(wěn)定,有利于進(jìn)一步的速度以及方向調(diào)節(jié)系統(tǒng)更加穩(wěn)定。相對(duì)上一時(shí)刻,小車向右移動(dòng),實(shí)際位置=此刻區(qū)間的最遠(yuǎn)位置,小車向左移動(dòng),實(shí)際位置=此刻區(qū)間的最近位置,小車保持方向,實(shí)際位置=此刻區(qū)間的平均位置(最遠(yuǎn)和最近是實(shí)際位置波動(dòng)區(qū)間相對(duì)于循跡板正中間位置而言的)。
對(duì)于第14,15,16種情況,即000 0000,111100和0001111的情況,實(shí)際位置的確定方法如下:第15種(111 1000)近似于第1種,實(shí)際位置=第1種(100 0000)的最遠(yuǎn)位置-X;第16種(000 1111)近似于第13種,實(shí)際位置=第13種(000 0001)的最遠(yuǎn)位置+X;第14種(000 0000),若上一時(shí)刻小車偏右,實(shí)際位置=等同于第15種的實(shí)際值,若上一時(shí)刻小車偏左,實(shí)際位置=等同于第16種的實(shí)際值(參數(shù)X的值很小,可以根據(jù)實(shí)際情況調(diào)整)。
4 硬件設(shè)計(jì)
小車整體設(shè)計(jì)如圖4所示,智能循跡小車由STM32F103控制器核心模塊、傳感器模塊、電機(jī)模塊、電機(jī)驅(qū)動(dòng)模塊、測(cè)速模塊和電源模塊六大模塊組成。循跡傳感器模塊采用一個(gè)7路光電傳感器探測(cè)黑色線路,電機(jī)模塊采用4個(gè)14.5V直流減速電機(jī),PWM方式驅(qū)動(dòng)控制,電機(jī)驅(qū)動(dòng)模塊采用兩個(gè)電機(jī)驅(qū)動(dòng)分別控制智能車左側(cè)兩個(gè)輪子的速度和右側(cè)兩個(gè)輪子的速度,測(cè)速模塊采用兩個(gè)334線AB相編碼器,分別測(cè)量智能小車左側(cè)后輪的實(shí)時(shí)速度和右側(cè)后輪的實(shí)時(shí)速度;電源模塊采用一個(gè)7.4V鋰電池給控制器以及傳感器供電,一個(gè)14.5V鋰電池驅(qū)動(dòng)四個(gè)電機(jī)。
4.1 主控模塊
主控模塊使用的是基于 STM32F103的微控制器,智能小車各個(gè)模塊與STM32微控制器的具體接線如圖5所示,STM32上的PC0與PC1引腳設(shè)置為外部中斷,分別用來響應(yīng)兩個(gè)編碼器A相的中斷信號(hào);PC2與PC3引腳設(shè)置為輸入模式,用來接收兩個(gè)編碼器B相的電平信號(hào);PB10,PB11,PE14,PE15則分別設(shè)置為USART3的接收與發(fā)送端口以及USART3接收使能信號(hào)和發(fā)送使能信號(hào);這四個(gè)引腳的信號(hào)經(jīng)過圖中Digital Servo模塊將發(fā)送信號(hào)和接受的信號(hào)分時(shí)送到串行總線BUS UART上;循跡傳感器以及兩個(gè)電機(jī)驅(qū)動(dòng)都掛載到串行總線上與STM32微控制器通訊。
4.2 循跡模塊與電機(jī)驅(qū)動(dòng)模塊
循跡模塊由七個(gè)紅外反射式傳感器組成,每個(gè)傳感器都對(duì)應(yīng)一個(gè)電位器,通過調(diào)節(jié)電位器的阻值對(duì)循跡板上的七個(gè)傳感器的靈敏度進(jìn)行調(diào)節(jié)。經(jīng)過對(duì)電位器多次調(diào)節(jié),使得傳感器距離地面的距離大約6mm時(shí),每個(gè)傳感器感應(yīng)周圍3mm以內(nèi)的黑色膠帶。電機(jī)驅(qū)動(dòng)模塊根據(jù)STM32微控制器傳來的數(shù)據(jù)(-1023~1023)來調(diào)節(jié)PWM占空比,從而來調(diào)整電機(jī)的速度,數(shù)據(jù)的正負(fù)分別表示電機(jī)正轉(zhuǎn)和反轉(zhuǎn)。另外循跡板與電機(jī)驅(qū)動(dòng)都采用串行的方式與STM32微控制器通訊,循跡板的通訊協(xié)議格式與電機(jī)驅(qū)動(dòng)通訊協(xié)議格式相同,都是字頭(0XFF 0XFF)+ID+有效數(shù)據(jù)長(zhǎng)度+指令+參數(shù)+校驗(yàn)和,循跡板的 ID 地址固定為0x00,兩個(gè)電機(jī)驅(qū)動(dòng)的ID地址通過軟件分別設(shè)置為0x01和0x02,波特率都為 1000000,因此循跡板通過固定一條固定的協(xié)議即可請(qǐng)求 7 個(gè)傳感器的狀態(tài),通訊協(xié)議格式具體為FF FF 00 04 02 32 01 C6(請(qǐng)求返回7個(gè)傳感器狀態(tài)指令),檢驗(yàn) 0xC6=~(0x00+0x04+0x02+0x32+0x01);返回協(xié)議為:FF FF 00 03 00 1C D0,校驗(yàn) 0xD0=~(0x00+0x03+0x00+0x1C),返回值中0X30即為循跡板7個(gè)傳感器的狀態(tài)(低7位為有效),0x1C轉(zhuǎn)為二進(jìn)制為1110000(最高位無效)即傳感器1、2、3、4檢測(cè)的白色(從循跡板上方看傳感器從左到右為1~7,分別對(duì)應(yīng)返回值的1~7位)。電機(jī)驅(qū)動(dòng)的協(xié)議相對(duì)于循跡板只是指令部分與參數(shù)部分不同,其參數(shù)部分即為-1023~1023之間的16進(jìn)制數(shù)值。
4.3 測(cè)速模塊
測(cè)速模塊采用兩個(gè)334線AB相編碼器,AB相共輸出兩路正交(相位相差90°)脈沖信號(hào)。當(dāng)A相有脈沖產(chǎn)生時(shí),通過檢測(cè)B相的電平信號(hào)即可判斷電機(jī)是正轉(zhuǎn)還是反轉(zhuǎn),另外334線指電機(jī)每轉(zhuǎn)一圈,AB相將能分別產(chǎn)生334個(gè)脈沖信號(hào),精度高,足夠滿足智能循跡小車的測(cè)速要求。
5 實(shí)驗(yàn)結(jié)果
經(jīng)測(cè)試表明,小車在不同的環(huán)境下,通過遍歷列表中的PID參數(shù),選取環(huán)境適應(yīng)性最好的一組作為當(dāng)前控制參數(shù),實(shí)現(xiàn)預(yù)期循跡功能,沿設(shè)定路徑快速穩(wěn)定的完成循跡任務(wù)。主要有以下幾個(gè)方面的優(yōu)點(diǎn):左側(cè)兩個(gè)輪和右側(cè)兩個(gè)輪分別驅(qū)動(dòng),以左右輪差速控制的方式實(shí)現(xiàn)轉(zhuǎn)向的智能小車;小車的左側(cè)后輪和右側(cè)后輪分別安裝了編碼器用來實(shí)時(shí)獲取左右輪的速度。將七個(gè)光電傳感器的數(shù)字量組合起來將以前只能確定小車偏離黑色線的7個(gè)位置增加到14個(gè)位置,將傳感器由原來離散性很大的數(shù)據(jù)處理為離散性小的數(shù)據(jù),即將小車的位置偏離黑線的距離應(yīng)用軟件的方法得到了更加精確更多的數(shù)據(jù)。另外,我們獲得了小車距離黑線的距離后,采用自適應(yīng)PID串級(jí)閉環(huán)控制方式,增加了系統(tǒng)的穩(wěn)定性,增強(qiáng)了小車適應(yīng)不同環(huán)境的能力;小車自動(dòng)控制自己的運(yùn)動(dòng)狀態(tài),實(shí)現(xiàn)了快速穩(wěn)定自動(dòng)循跡的目的。為了使小車更加智能化,還可為小車擴(kuò)展避障、復(fù)雜線路選擇、自動(dòng)制動(dòng)等功能。
參考文獻(xiàn):
[1]盧杉.基于單片機(jī)的差速驅(qū)動(dòng)導(dǎo)引小車運(yùn)動(dòng)控制[D].西安理工大學(xué),2010.
[2]張猛,丁愛國(guó),陳欣歡.基于單片機(jī)的智能循跡小車設(shè)計(jì)[J].山東工業(yè)技術(shù),2017(08):281.
[3]趙涓涓,杜麒麟,屈明月,等.智能小車的無支路循跡算法設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(06):147-149+201.
[4]STM3210x參考手冊(cè)[Z].