劉龍, 李建奇, 魏光宇, 劉磊
基于圖像識別的自主尋跡智能小車設(shè)計(jì)
劉龍, 李建奇, 魏光宇, 劉磊
(湖南文理學(xué)院 電氣與信息工程學(xué)院, 湖南 常德, 415000)
針對小車自主尋跡行駛的要求, 提出了一種基于ARM平臺(tái)的攝像頭循跡小車系統(tǒng)。小車系統(tǒng)以ST公司生產(chǎn)的STM32F103ZET6為微控制器, 通過安裝在小車前的OV7725攝像頭采集道路信息。然后對路徑圖像信息進(jìn)行除噪、黑線提取和路徑識別后獲得路徑信息。再根據(jù)不同的路徑信息控制電機(jī), 進(jìn)而調(diào)整小車速度和方向, 最終實(shí)現(xiàn)小車沿設(shè)定路徑行駛。攝像頭采集的圖像和小車速度能夠?qū)崟r(shí)顯示在LCD和數(shù)碼管上。實(shí)驗(yàn)證明, 小車實(shí)現(xiàn)了自主循跡功能, 具有良好的魯棒性和實(shí)時(shí)性。
ARM平臺(tái); 黑線提??; 路徑識別
飛思卡爾智能車采用的單片機(jī) MC9S12XS128在進(jìn)行圖像采集時(shí)處理速度較慢, 會(huì)影響整個(gè)控制系統(tǒng)的響應(yīng)特性。而且, 由于小車的前進(jìn)方向采用舵機(jī)控制, 雖然提升了控制性能, 但使車身重量加重,車身的動(dòng)態(tài)特性降低[1-3]。針對這些問題, 本文提出了一種基于STM32F103ZET6的智能小車控制系統(tǒng),該系統(tǒng)中小車沒有采用舵機(jī)控制前進(jìn)方向, 而是采用四驅(qū)直流電機(jī), 通過PWM控制電機(jī)速度來控制小車前進(jìn)方向。
基于圖像識別自主尋跡智能小車的系統(tǒng)總體結(jié)構(gòu)如圖1所示。系統(tǒng)由電源組件、檢測組件、主控組件、輸出組件共4個(gè)部分構(gòu)成。電源組件采用電池供電, 經(jīng)過電壓轉(zhuǎn)換芯片轉(zhuǎn)換之后, 每個(gè)模塊得到所需要的電壓。檢測組件由攝像頭模塊和測速模塊組成, 主控組件采用ARM芯片作為控制核心, 輸出
圖1 系統(tǒng)總體結(jié)構(gòu)框圖
系統(tǒng)硬件部分包括最小系統(tǒng)、圖像采集模塊、速度檢測模塊、電機(jī)控制模塊、顯示模塊。
2.1最小系統(tǒng)
最小系統(tǒng)由 CPU、電源模塊、時(shí)鐘模塊、復(fù)位模塊、BOOT啟動(dòng)模塊、下載模塊組成。STM32F103ZET6是一款32位的ARM芯片, 其電源模塊采用SPX1117電壓轉(zhuǎn)換芯片和相關(guān)電路得到系統(tǒng)所需電壓, 時(shí)鐘模塊采用8 MHz和32.768 kHz的晶振分別作為芯片的備用時(shí)鐘源和RTC時(shí)鐘源。復(fù)位模塊包括上電復(fù)位和按鍵復(fù)位電路。BOOT啟動(dòng)模塊的作用是設(shè)置啟動(dòng)模式, 通過BOOT0和BOOT1設(shè)置: 當(dāng)BOOT0為0時(shí), CPU執(zhí)行片上FLASH代碼; 當(dāng)BOOT0為1、BOOT1 為0時(shí), 系統(tǒng)的模式為串口下載模式; 當(dāng)BOOT0與BOOT1均為1時(shí), CPU執(zhí)行SRAM內(nèi)部的代碼, 下載模塊采用JTAG下載。
2.2圖像采集模塊
圖像采集模塊電路如圖2所示。該模塊采用CMOS圖像傳感器OV7725[3]。圖像采集原理如下: 首先, OV7725捕捉到原始信號后, 將其輸入到模擬處理器中, 處理后分成G和RB兩路輸入到A/D轉(zhuǎn)換器, 經(jīng)A/D轉(zhuǎn)換器處理后轉(zhuǎn)換成數(shù)字信號, 然后輸入到FIFO, 單片機(jī)從FIFO讀取、處理數(shù)據(jù)并采集圖像。FIFO存儲(chǔ)攝像頭采集到的圖像數(shù)據(jù), 其存儲(chǔ)空間為3 M。
圖2 圖像采集模塊電路圖
攝像頭采集完一幅圖像后, 將幀中斷信號輸入到CPU, CPU收到幀中斷信號后, 將WEN和HREF引腳電平拉高, 使圖像數(shù)據(jù)存入FIFO。當(dāng)CPU再次收到幀中斷信號, 表明圖像數(shù)據(jù)已存入FIFO, 此時(shí)關(guān)閉幀中斷, 將WEN電平拉低, 避免圖像數(shù)據(jù)再次寫入FIFO。
2.3速度檢測模塊
小車的行駛速度常用檢測方法包括霍爾傳感器測速、光電編碼器測速以及光電傳感器測速。由于霍爾傳感器體積相對較大, 且光電編碼器驅(qū)動(dòng)齒輪靠近電機(jī), 容易受磁場干擾, 而光電傳感器結(jié)構(gòu)簡單,測速精度高、反應(yīng)快, 因此, 本設(shè)計(jì)采用光電傳感器測速。光電測速模塊如圖3所示。
速度檢測原理如下: 當(dāng)小車行駛時(shí), 車輪會(huì)帶動(dòng)光電碼盤轉(zhuǎn)動(dòng)。當(dāng)碼盤中沒有障礙物時(shí), 紅外管發(fā)出的紅外信號經(jīng)紅外接收管接收后輸出電壓比較值, 再經(jīng)LM393N比較后, 輸出開關(guān)量。碼盤上一共有20格沒有障礙物, 所以用碼盤周長除以20就得到1個(gè)脈沖來臨車子行走的距離 S, 同時(shí)打開定時(shí)器和計(jì)數(shù)器, 定時(shí) T, 得到脈沖計(jì)數(shù)n, 到時(shí)間后就將時(shí)間清零重新計(jì)數(shù), 得到小車的速度V = S × n/T。
2.4電機(jī)控制模塊
圖3 光電測速模塊
電機(jī)控制包括電機(jī)的驅(qū)動(dòng)和電機(jī)的調(diào)速 2部分, 本設(shè)計(jì)采用L293D控制4臺(tái)直流電機(jī)[3]。將每臺(tái)直流電機(jī)的一端接地, 另一端接到L239D的輸出端。將L293D的輸入端接一個(gè)I/O口, 在第1腳和第9腳都使能的狀態(tài)下, 只需要控制I/O口的電平狀態(tài)即可控制電機(jī)。電機(jī)驅(qū)動(dòng)模塊如圖4所示。
由于小車要在不同的賽道上行駛, 為防止其沖出賽道,需要在不同的賽道上采用不同的安全速度。對于直流電機(jī)的速度調(diào)節(jié), 本設(shè)計(jì)中綜合采用PWM控制、PID控制和棒棒控制技術(shù)[2-4]。PWM 用于控制不同路徑小車安全行駛的速度, PID調(diào)速用來維持同一路段的速度, 棒棒控制用于路徑切換時(shí)的調(diào)速。
(1) PWM控制。計(jì)數(shù)器在時(shí)鐘的驅(qū)動(dòng)下計(jì)數(shù), 當(dāng)計(jì)數(shù)器的值加到和輸出比較寄存器的值相等時(shí), I/O口的電平翻轉(zhuǎn)后接著計(jì)數(shù)。當(dāng)計(jì)滿后, 計(jì)數(shù)器清零, 重新開始計(jì)數(shù)。
(2) PID控制。PID控制就是用比例(P)、積分(I)、微分(D)通過線性組合進(jìn)行控制。比例系數(shù)越大, 調(diào)節(jié)速度就越快。如果比例的作用太大, 會(huì)使得系統(tǒng)的穩(wěn)定性降低。使用積分調(diào)節(jié)會(huì)使得系統(tǒng)動(dòng)態(tài)響應(yīng)變慢, 因此積分環(huán)節(jié)常以PI或者PID組合形式出現(xiàn)。微分環(huán)節(jié)能夠反映系統(tǒng)偏差的變化率, 預(yù)測偏差的動(dòng)態(tài)變化, 但是它的引入容易引起震蕩, 因此它一般是以PD或者PID組合的形式出現(xiàn)[5]。
(3) 棒棒控制。棒棒控制[5]是一種極限控制, 其作用就是使得小車速度瞬間達(dá)到最大或者最小值保證小車完成路徑切換動(dòng)作。
圖4 電機(jī)驅(qū)動(dòng)模塊
2.5顯示模塊
(1) 圖像顯示模塊。顯示模塊使用CPU自帶的FSMC接口驅(qū)動(dòng)LCD屏。LCD采用集成在液晶屏上面的 ILI9341芯片控制, 其核心是 GRAM。GRAM中的每個(gè)存儲(chǔ)單元與液晶屏的像素點(diǎn)一一對應(yīng),GRAM 存儲(chǔ)單元的像素?cái)?shù)據(jù)經(jīng)芯片內(nèi)部各個(gè)模塊轉(zhuǎn)化成液晶面板的控制信號, 使得各個(gè)像素點(diǎn)呈現(xiàn)出特定的顏色, 所有的像素點(diǎn)組合起來便構(gòu)成一幅完整的圖像。GRAM可以采用18位控制模式, 也可以采用16位控制模式, 但是為了數(shù)據(jù)傳輸方便, 一般采用16位控制模式。圖像顯示模塊部分一共用到了22個(gè)I/O口, 其中PB0作為硬復(fù)位LCD信號, PB1作為LCD讀信號, PB2作為命令/數(shù)據(jù)標(biāo)志, PB3作為背光控制信號, PB4作為LCD寫信號, PB5作為LCD片選信號, PD0-PD15作為16位雙向數(shù)據(jù)線。
(2) 速度顯示模塊。速度顯示模塊主要是對測速模塊測到的速度進(jìn)行顯示, 本設(shè)計(jì)采用4位一體的共陰極數(shù)碼管, 左邊2位顯示左邊車輪的速度, 右邊2位顯示右邊車輪的速度。用4個(gè)I/O口控制位選,8個(gè)I/O口控制段選。
3.1總體程序設(shè)計(jì)
小車在行駛過程中, 攝像頭進(jìn)行圖像采集。對采集的圖像進(jìn)行圖像除噪, 并提取行黑線中心位置,分析前方路徑信息。針對不同的路徑信息采取不同的方式控制電機(jī)的速度和方向[6]。
總體設(shè)計(jì)流程如圖5所示。由圖5可知, 在系統(tǒng)初始化以后,首先進(jìn)行不同路徑行駛速度的設(shè)定, 然后攝像頭進(jìn)行道路信息采集, 將其傳送給 CPU進(jìn)行路徑判斷, CPU路徑判斷處理后采用PID控制或者棒棒控制同時(shí)控制相應(yīng)電機(jī)轉(zhuǎn)動(dòng), 這樣, 小車就能夠順利地沿著路徑行駛。小車在行駛的過程中有2種狀態(tài), 一種是沿著同一路徑行駛, 另一種是路徑切換。對于這 2種狀態(tài), 分別采用不同的控制方法: 當(dāng)沿著同一路徑行駛時(shí), 采用PID控制,目的是保證小車在同一路徑上時(shí)能以穩(wěn)定的速度行駛; 當(dāng)進(jìn)行路徑切換時(shí), 采用棒棒控制, 因?yàn)樾≤嚱?jīng)過不同的彎道時(shí)有不同的安全速度, 采用棒棒控制能夠保證小車在不同的路徑切換時(shí)速度能瞬間達(dá)到彎道適合的速度值。
圖5 總體設(shè)計(jì)流程圖
3.2圖像采集與處理程序設(shè)計(jì)
(1) 圖像采集設(shè)計(jì)。首先開啟行中斷和場中斷, 攝像頭逐行掃描像素點(diǎn)Dot_cnt, 當(dāng)一行像素240個(gè)點(diǎn)掃描完畢后, 進(jìn)入行中斷, 行數(shù)Row_cnt加1。接著掃描下一行, 當(dāng)?shù)?20行掃描完畢后, 進(jìn)入場中斷, 一幅圖像采集完畢。關(guān)閉所有中斷, 將Dot_cnt和Row_cnt清零, 循環(huán)執(zhí)行上述過程, 即可連續(xù)地進(jìn)行圖像采集。圖像采集流程如圖6所示。
圖6 圖像采集流程
(2) 圖像除噪設(shè)計(jì)。圖像除噪是為濾除噪聲, 減少噪聲的影響, 便于準(zhǔn)確提取路徑信息, 本設(shè)計(jì)中考慮到實(shí)時(shí)性要求, 采用中值濾波進(jìn)行圖像除噪[7]。其實(shí)現(xiàn)思想是在整幅圖像中選取一個(gè)大小合適的像素窗口, 接著對窗口中像素點(diǎn)的灰度值進(jìn)行排序, 取最中間的點(diǎn)作為窗口中心點(diǎn)的新灰度值, 移動(dòng)窗口,循環(huán)執(zhí)行上述過程。具體實(shí)現(xiàn)方法如圖7所示。
圖7 圖像除噪流程
(3) 黑線中心提取設(shè)計(jì)。在圖像進(jìn)行除噪后, 就可以對黑線中心進(jìn)行提取。目前常用的黑線中心提取方法是重心提取算法。小車行駛的路徑由白色背景和黑色膠帶組成, 兩者間灰度值相差很大, 所以,可以通過一個(gè)閾值來區(qū)分黑點(diǎn)和白點(diǎn)。每一行從左至右判斷每一個(gè)像素點(diǎn)的灰度值是否大于(或小于)該閾值, 從而確定此處是否為黑線上的點(diǎn)。圖像灰度閾值一般取128左右為宜。針對圖像矩陣數(shù)據(jù)中的每一行, 從左至右依次比較各個(gè)像素點(diǎn)和閾值的灰度值的大小, 當(dāng)某一個(gè)像素點(diǎn)的灰度值大于或者等于閾值,則判定該點(diǎn)對應(yīng)的是白色; 反之, 則判定該點(diǎn)屬于黑色路徑區(qū)域。在圖像的每一行得出每個(gè)黑點(diǎn)的位置坐標(biāo),然后將各黑點(diǎn)位置坐標(biāo)相加再除以黑點(diǎn)數(shù)量就可以得到圖像每行的黑點(diǎn)重心位置。黑線中心提取流程如圖 8所示。
(4) 路徑識別設(shè)計(jì)。本文應(yīng)用了路徑識別中常用的曲率計(jì)算法。得到黑線中心后, 在每幅圖像取固定的 2行上的點(diǎn)A、B(圖9), A、B一般為整幅圖像的1/3和2/3行處的點(diǎn)[8]。連接2點(diǎn), 做出2點(diǎn)連線的垂直平分線, 垂直平分線與整幅圖像第 2/3行的交點(diǎn)為 C, 求出△ABC外接圓的半徑R, R的倒數(shù)為路徑的曲率ρ。實(shí)現(xiàn)方法如圖10所示。
在實(shí)驗(yàn)過程中小車行駛的軌跡由直道、彎道和S路徑組成。在S路徑, 曲率ρ = 0是小車的方向的轉(zhuǎn)折點(diǎn)。小車在走 S線時(shí)既需要進(jìn)行左轉(zhuǎn), 又需要進(jìn)行右轉(zhuǎn), 此時(shí)就不能簡單地按照ρ的大小控制小車的方向和速度。如果ρ不等于0時(shí)小車左轉(zhuǎn), 那么判斷小車右轉(zhuǎn)的條件就是經(jīng)過1次ρ = 0之后, 再得到一個(gè)不等于0的ρ值。
圖8 黑線中心提取流程
圖9 路徑模擬
圖10 路徑識別流程圖
經(jīng)測試, 本設(shè)計(jì)中研究的攝像頭循跡小車實(shí)現(xiàn)了自主循跡功能, 攝像頭采集到的圖像比較清晰, 能夠?qū)崟r(shí)更新顯示路徑和車速, 直線行駛速度大小可達(dá)25 cm/s,在不同路徑下小車表現(xiàn)了較好的魯棒性。
在小車沿著黑線行駛的測試過程中, 通過設(shè)置PWM跳變值(定時(shí)器計(jì)數(shù)值等于跳變值時(shí)電平翻轉(zhuǎn))來控制占空比, 程序中自動(dòng)重裝載寄存器的值為1 000, 即計(jì)滿1 000重新計(jì)數(shù)。測試結(jié)果如表1所示。
表1 ρ = 0.01時(shí)數(shù)據(jù)記錄
表1給出了當(dāng)小車左轉(zhuǎn), ρ = 0.01時(shí), 左右兩邊跳變值大小、左右電機(jī)轉(zhuǎn)速、小車運(yùn)行效果數(shù)據(jù)記錄。由表1可知, 當(dāng)左電機(jī)跳變值小于等于600, 跳變值之差為200左右時(shí), 小車能完成循跡; 但是當(dāng)電機(jī)速度較大達(dá)到 650, 無論右電機(jī)的速度為多少,小車都不能完成循跡。其原因在于,受調(diào)速性能限制, 小車在循跡時(shí)行駛速度較小。其他彎道和曲率的分析與此類似。
本文針對飛思卡爾智能車競賽控制系統(tǒng)的特點(diǎn), 提出了一種基于 STM32F103ZET6的新智能小車控制方案。經(jīng)過實(shí)驗(yàn)測試, 小車實(shí)現(xiàn)了自主視覺循跡功能, 具有較好的魯棒性和穩(wěn)定性, 實(shí)驗(yàn)結(jié)果表明該方案可行。
[1] 陳啟軍. 嵌入式系統(tǒng)及其應(yīng)用: 基于Cortex-M3內(nèi)核和STM32F103系列微控制器的系統(tǒng)設(shè)計(jì)與開發(fā)[M]. 上海: 同濟(jì)大學(xué)出版社, 2010: 84-89.
[2] 劉火良. STM32庫開發(fā)實(shí)戰(zhàn)指南[M]. 北京: 機(jī)械工業(yè)出版社, 2013: 5.
[3] 王名發(fā), 江智軍, 鄒會(huì)權(quán). 智能車競賽中直流電機(jī)調(diào)速系統(tǒng)的設(shè)計(jì)與比較[J]. 微型機(jī)與應(yīng)用, 2009, 10(20): 9-25.
[4] 楊迪行. PID及模糊控制技術(shù)在智能小車中的應(yīng)用[D]. 杭州: 浙江大學(xué), 2012: 163-164.
[5] 胡房武. 基于圖像采集的智能車系統(tǒng)設(shè)計(jì)[D]. 大連: 大連海事大學(xué), 2011: 5.
[6] 盛朝強(qiáng), 張瑞成, 周志忠. 基于微處理器的智能車圖像采集與識別算法研究[J]. 傳感器與微系統(tǒng), 2011, 30(8): 22-24.
[7] 劉茗. 基于噪聲檢測的自適應(yīng)中值濾波算法[J]. 計(jì)算機(jī), 2012, 25(5): 107-108.
[8] 瞿哲奕, 唐秦威, 朱煥秋. 基于路徑識別的巡線機(jī)器人控制系統(tǒng)設(shè)計(jì)[J]. 制造業(yè)自動(dòng)化, 2010, 10(32): 30-34.
(責(zé)任編校: 劉剛毅)
Image-based autonomous tracking intelligent vehicle design
Liu Long, Li Jianqi, Wei Guangyu, Liu Lei
(College of Electrical and Information Engineering, Hunan University of Arts & Science, Changde 415000, China)
A camera tracking car based on the ARM platform is presented. The car system is controlled by an ST-produced STM32F103ZET6 microcontroller and obtains road information through an OV7725 camera installed at the front of the car. The system controls motors to adjust the speed and direction of the car, and enables it to stick to the preset route based on path information obtained through a series of processing including de-noising, black line extraction and path recognition on captured images. The images captured by the camera and the speed of the car can be displayed on the LCD and digital tubes in real time. Experiments showed the new system has good robustness and real-time capability.
ARM; black line extraction; path recognition
TP 273.5
1672-6146(2016)03-0062-05
10.3969/j.issn.1672-6146.2016.03.013
李建奇, li_jianqi@126.com。
2016-04-18
國家自然科學(xué)基金(61403136); 湖南省自然科學(xué)基金(14JJ5008); 湖南文理學(xué)院 2015年大學(xué)生創(chuàng)新創(chuàng)業(yè)研究項(xiàng)目(201509)。組件由電機(jī)控制模塊和顯示模塊組成,顯示模塊包含圖像實(shí)時(shí)顯示和速度實(shí)時(shí)顯示。