楚士杰 朱厚圣 吳潔瓊
摘? ?要:隨著無(wú)人駕駛技術(shù)的持續(xù)發(fā)展,各高校和科學(xué)研究院也在積極鼓勵(lì)學(xué)生投入到自主循跡智能車(chē)的研究當(dāng)中。文章所研究的智能車(chē)以K60單片機(jī)為核心控制系統(tǒng),利用電磁傳感器輔助完成循跡和轉(zhuǎn)向,再配合其余多種傳感器的信號(hào)采集,可以進(jìn)行避障和三輪與二輪之間的狀態(tài)轉(zhuǎn)換。依靠PID算法完成智能車(chē)的自動(dòng)控制,使智能車(chē)的系統(tǒng)能靈活變換,適應(yīng)各種跑道。綜合以上所設(shè)計(jì)的智能車(chē),不僅能夠穩(wěn)定行駛,同時(shí)具備避障和變形等功能。
關(guān)鍵詞:K60單片機(jī);循跡;避障;自動(dòng)控制
近幾年,人工智能是科技革新的主要方向,多種人工智能產(chǎn)品已經(jīng)走進(jìn)了人們的生活。隨著人工智能的應(yīng)用,未來(lái)幾年內(nèi)無(wú)人駕駛汽車(chē)有望成為人們出行的主要方式。智能車(chē)是無(wú)人駕駛汽車(chē)的雛形,其設(shè)計(jì)內(nèi)容涵蓋了模式識(shí)別、傳感技術(shù)和汽車(chē)電子等多方面學(xué)科的知識(shí),對(duì)無(wú)人駕駛汽車(chē)的研究有重要意義,對(duì)科學(xué)技術(shù)的革新具有良好的推動(dòng)作用。
1? ? 智能車(chē)的基本結(jié)構(gòu)
1.1? 主要部件介紹
智能車(chē)以“恩智浦”智能汽車(chē)競(jìng)賽官方提供的F車(chē)模為研究平臺(tái),主要部件有主板和傳感器。核心板使用的是K60單片機(jī)芯片。主控制板是人工操作的平臺(tái),包含電機(jī)開(kāi)關(guān)、穩(wěn)壓模塊、電機(jī)驅(qū)動(dòng)模塊、傳感器模塊等,其中電機(jī)驅(qū)動(dòng)模塊由輪胎和電機(jī)組成。傳感器包括電磁傳感器、紅外傳感器、灰度傳感器和速度傳感器。電磁傳感器可識(shí)別跑道的延伸方向,其作用相當(dāng)于人類(lèi)的“眼睛”,是智能車(chē)直行或轉(zhuǎn)向的唯一判斷依據(jù)。紅外傳感器可測(cè)量與前方障礙的距離,用來(lái)在一定范圍內(nèi)識(shí)別跑道前方路障。灰度傳感器用于識(shí)別跑道上的斷路層,判斷道路元素是否發(fā)生變化。速度傳感器可實(shí)時(shí)獲得智能車(chē)的行駛速度,從而進(jìn)行速度反饋調(diào)節(jié),實(shí)現(xiàn)閉環(huán)控制,使其不斷趨向預(yù)期速度。
1.2? 智能車(chē)的搭建
智能車(chē)各部分?jǐn)[放位置對(duì)其各種功能的實(shí)現(xiàn)有很大影響,既要考慮三輪行駛狀態(tài),還要考慮二輪行駛狀態(tài)。電磁傳感器需靠前放置,可提前識(shí)別跑道并且及時(shí)處理。電池和主控板的放置要能夠使智能車(chē)重心低且集中,所以在安裝后輪胎的中心位置。車(chē)身不宜過(guò)重,方便實(shí)現(xiàn)靈活轉(zhuǎn)向和穩(wěn)定直立。輪胎需要經(jīng)常打磨,增大與跑道間的摩擦力,能夠有效避免轉(zhuǎn)向過(guò)程中發(fā)生側(cè)滑。良好的智能車(chē)搭建結(jié)構(gòu)是其能在跑道上順暢行駛的保障。
2? ? 硬件設(shè)計(jì)方案
智能車(chē)硬件系統(tǒng)包括多個(gè)模塊,每個(gè)模塊工作需要相互協(xié)調(diào)且互不干擾。
2.1? 最小系統(tǒng)板
最小系統(tǒng)板使用MK60DN512Z(本文統(tǒng)稱K60),系統(tǒng)頻率100 MHz,可實(shí)現(xiàn)穩(wěn)定超頻,由3.3 V電壓供電。具有IEEE 1588以太網(wǎng)、高速USB2.00IG硬件解碼能力和干預(yù)發(fā)現(xiàn)能力。高容量的K60單片機(jī)帶有一個(gè)可選擇的單精度浮點(diǎn)處理單元、一個(gè)NAND閃存控制單元以及一個(gè)DRAM控制器。該單片機(jī)共有144個(gè)引腳,具有普通I/O口、A/D轉(zhuǎn)換模塊、脈沖寬度調(diào)制(Pulse Width Modulation,PWM)模塊、中斷模塊、串口通信模塊,可以完成復(fù)雜功能,實(shí)現(xiàn)對(duì)信號(hào)的分析、判斷、決策和處理。
2.2? 電機(jī)驅(qū)動(dòng)
電機(jī)驅(qū)動(dòng)是控制智能車(chē)行駛的基礎(chǔ)模塊。智能車(chē)需要兩個(gè)電機(jī),每個(gè)電機(jī)接兩個(gè)驅(qū)動(dòng)芯片,共采用4個(gè)集成電機(jī)驅(qū)動(dòng)芯片(BTN7971B),此芯片穩(wěn)定性好,抗干擾能力強(qiáng),符合智能車(chē)電機(jī)驅(qū)動(dòng)的要求。驅(qū)動(dòng)芯片正常工作電壓為5 V,使能端為高電平正常工作,每個(gè)電機(jī)需要兩個(gè)BTN7971B芯片組成大電流H橋式驅(qū)動(dòng)電路,電流的流向可以驅(qū)動(dòng)電機(jī)朝某一方向轉(zhuǎn)動(dòng)。兩個(gè)輸出口與電機(jī)連接,兩端的電壓差控制了輪胎轉(zhuǎn)動(dòng)。
2.3? 穩(wěn)壓模塊
智能車(chē)的核心板和電機(jī)驅(qū)動(dòng)分別需要3.3 V和5 V供電,而智能車(chē)采用7.2 V可充電電池。為滿足核心板和電機(jī)驅(qū)動(dòng)的要求,需要使用兩個(gè)穩(wěn)壓電路。7.2 V電壓通過(guò)LM2940芯片和LM2937芯片即可以轉(zhuǎn)化為所需要的5 V和3.3 V電壓。
2.4? 電磁傳感模塊(六路運(yùn)放)
智能車(chē)的循跡依靠電磁傳感器采集電磁信號(hào),前瞻伸長(zhǎng)20 cm左右,兩側(cè)橫向放置兩個(gè)電磁傳感器,中間八字形放置兩個(gè)電磁傳感器(電感一定要對(duì)稱放置)。電磁傳感器由多重線圈組成,可感應(yīng)跑道中央放置的電磁線產(chǎn)生的變化磁場(chǎng),通過(guò)A/D轉(zhuǎn)換產(chǎn)生可視化數(shù)值,可在跑道的不同位置檢測(cè)到不同的電感值。當(dāng)兩側(cè)電感數(shù)值相同時(shí),智能車(chē)沿直線行駛;遇到彎道時(shí),兩側(cè)電感會(huì)出現(xiàn)差值,智能車(chē)會(huì)向電感值較大的一側(cè)偏轉(zhuǎn),以達(dá)到兩側(cè)電感值相同。內(nèi)八字電感可用來(lái)識(shí)別復(fù)雜的道路元素,比如環(huán)形跑道等。
2.5? 主控板
主控板是一塊印刷電路板(Printed Circuit Board,PCB),包括核心板、5 V穩(wěn)壓、3.3 V穩(wěn)壓、電機(jī)驅(qū)動(dòng)、開(kāi)關(guān)模塊、按鍵控制模塊和有機(jī)發(fā)光半導(dǎo)體(Organic Light-Emitting Diode,OLED)顯示屏。是所有硬件模塊的載體,且各種傳感器識(shí)別檢測(cè)到的信號(hào)都依靠主控板傳遞到核心板。其中,OLED顯示屏可直觀顯示所需要檢測(cè)的數(shù)據(jù),是實(shí)現(xiàn)人機(jī)交互的重要載體。
制作智能車(chē)的初期任務(wù)是繪制PCB。本研究設(shè)計(jì)PCB板長(zhǎng)10 cm,寬7.5 cm。正面放置穩(wěn)壓模塊、最小系統(tǒng)板、開(kāi)關(guān)、按鍵和OLED顯示屏,反面放置電機(jī)驅(qū)動(dòng)。正反面結(jié)合的設(shè)計(jì)節(jié)省了PCB的面積,布局合理,層次清晰。
3? ? 軟件設(shè)計(jì)方案
3.1? PID算法簡(jiǎn)介
本次研究的智能車(chē)的循跡和速度控制等都需要在動(dòng)態(tài)中連續(xù)地檢測(cè)調(diào)節(jié),所以軟件設(shè)以PID算法為核心。PID算法按偏差的比例(P)、積分(I)和微分(D)進(jìn)行動(dòng)態(tài)控制的自動(dòng)控制器,是連續(xù)系統(tǒng)動(dòng)態(tài)品質(zhì)校正的一種有效方案。
PID算法基于反饋系統(tǒng),將反饋值與預(yù)設(shè)值進(jìn)行比較,根據(jù)偏差值的大小對(duì)輸入進(jìn)行調(diào)節(jié),達(dá)到反饋值與預(yù)設(shè)值無(wú)限接近的目的。PID算法因其控制原理成熟、參數(shù)易于調(diào)節(jié)、使用簡(jiǎn)單,在自動(dòng)化方面得到了廣泛應(yīng)用。
3.2? 直立方案
智能車(chē)的直立狀態(tài)類(lèi)似鐘擺的垂直位置,穩(wěn)定直立位置稱為“機(jī)械零點(diǎn)”。當(dāng)智能車(chē)脫離機(jī)械零點(diǎn)時(shí)會(huì)因受到重力的影響前傾或者后仰,因此必須獲得智能車(chē)在機(jī)械零處的傾角,通過(guò)輪胎的正反轉(zhuǎn)使其保持在平衡位置。智能車(chē)的直立實(shí)質(zhì)上是動(dòng)態(tài)直立。通過(guò)陀螺儀檢測(cè)角速度。
車(chē)模角速度;
car_speed=(float)( (GYRO_X-Gyro_X_Offset)*xishu);
車(chē)模傾角:
car_angle=car_g+car_error*xishu1;
直立控制代碼實(shí)現(xiàn)為:
PID_ANGLE.OUT= (E-car_g)*P+(GYRO_X-Gyro_X_Offset)*D;
E是機(jī)械零點(diǎn)位置處傾角值,P為傾角參數(shù),D為角速度參數(shù)。先將D設(shè)為零,調(diào)P至車(chē)模可自行直立,但是車(chē)身會(huì)微微抖動(dòng),再調(diào)節(jié)D消去車(chē)身抖動(dòng),P和D反復(fù)增減調(diào)節(jié)可找到一組最合適的參數(shù)。車(chē)模直立控制和速度控制是相互約束的,在調(diào)節(jié)直立時(shí)不宜太硬或太軟,否則會(huì)導(dǎo)致速度不可控等問(wèn)題。
3.3? 循跡
智能車(chē)循跡是智能車(chē)自動(dòng)沿電磁線方向行駛,該部分主要說(shuō)明智能車(chē)的方向控制。對(duì)電感多次采集的數(shù)值用滑動(dòng)平均濾波處理后可得到穩(wěn)定的數(shù)值,根據(jù)兩端電感值可以判斷智能車(chē)在跑道的位置。兩側(cè)電感的差值越大,左右輪胎的差速也就越大。轉(zhuǎn)向代碼如下:
DError = (float)(ad[3] - ad[0])/(ad[0]+ad[3]);
DControlOut=(int)(DError*KP+DError_dot*KD);
利用PID算法處理,即使是連續(xù)彎道也能保持轉(zhuǎn)向的穩(wěn)定性。DError是兩側(cè)電感的差比和,DControlOut是轉(zhuǎn)向控制變量,將DControlOut關(guān)聯(lián)到PWM輸出值上,即可改變加到電機(jī)驅(qū)動(dòng)上的電壓占空比,改變兩側(cè)輪胎的轉(zhuǎn)速,使車(chē)模朝電感值大的方向偏轉(zhuǎn)。當(dāng)車(chē)模尋找到兩側(cè)電感相同的位置時(shí),停止偏轉(zhuǎn),微調(diào)后繼續(xù)按電磁線行駛。使用P,D調(diào)節(jié),KP值影響轉(zhuǎn)向的早或晚,KD用于微調(diào),且KD不得大于KP值,研究時(shí)需要多次實(shí)驗(yàn)找到轉(zhuǎn)向效果最好的一組參數(shù)。
3.4? 速度控制
速度控制分3個(gè)步驟:檢測(cè)當(dāng)前速度,比較當(dāng)前車(chē)速與預(yù)設(shè)速度,加速或減速。該階段研究用編碼器測(cè)速,編碼器與車(chē)輪同步轉(zhuǎn)動(dòng),根據(jù)脈沖數(shù)和輪胎周長(zhǎng)可測(cè)得車(chē)模當(dāng)前速度。采用增量式PID算法。車(chē)模速度受直立和轉(zhuǎn)向兩大系統(tǒng)影響較大,這些因素影響速度上限,因此需在其他因素合適情況下調(diào)節(jié)并找到最大速度。
三輪狀態(tài)速度控制代碼:
LeftPWM =(int32) (Car_SpeedControlOut-DirectionControlOut);
RighPWM =(int32) (Car_SpeedControlOut+DirectionControlOut);
直立狀態(tài)速度控制代碼:
LeftPWM=(int32)(-Car_SpeedControlOut+PID_ANGLE.OUT-DirectionControlOut);
RighPWM=(int32)(-Car_SpeedControlOut+PID_ANGLE.OUT+DirectionControlOut);
PWM可轉(zhuǎn)化為最終輸出,上述代碼即可分別完成智能車(chē)在三輪和直立狀態(tài)下的自主循跡行駛。
3.5? 變形
變形是指智能車(chē)在斷路區(qū)域內(nèi)完成二輪和三輪之間狀態(tài)的轉(zhuǎn)變,借助灰度傳感器識(shí)別跑道上的斷路層。當(dāng)智能車(chē)進(jìn)入斷路區(qū)域時(shí),灰度傳感器將信號(hào)發(fā)送到單片機(jī)上,隨即發(fā)出狀態(tài)切換指令。直立中提到過(guò)預(yù)設(shè)角度的問(wèn)題,如果預(yù)設(shè)角度和機(jī)械零點(diǎn)角度相同,則車(chē)模穩(wěn)定在直立狀態(tài),如果預(yù)設(shè)角度設(shè)定在水平位置,車(chē)模也會(huì)保持水平。
通過(guò)改變車(chē)模預(yù)設(shè)角度來(lái)改變車(chē)模行駛狀態(tài)的方法稱為“壓傾角”。在最初研究時(shí)并未采用“壓傾角”的方式,發(fā)現(xiàn)車(chē)速稍微提高,車(chē)模便會(huì)“抬頭”,導(dǎo)致實(shí)驗(yàn)失敗。后來(lái)得知,在三輪狀態(tài)下壓低車(chē)模傾角,車(chē)頭微翹就會(huì)迅速被壓至水平狀態(tài),滿足了速度需求。加入“變形”功能之后,其他階段參數(shù)也應(yīng)該適當(dāng)調(diào)整,以達(dá)到最佳的耦合效果。
3.6? 避障
紅外傳感器用來(lái)檢測(cè)路障,本研究使用的紅外傳感器能在1 m內(nèi)檢測(cè)與前方物體的距離。具體需要檢測(cè)路障的范圍需要根據(jù)車(chē)速進(jìn)行必要的調(diào)整。
智能車(chē)避障分為以下步驟:檢測(cè)路障、向左或向右打偏角、車(chē)身回正、向跑道方向打偏角和最后正常循跡行駛。同樣使用陀螺儀檢測(cè)水平左右加速度,積分后得到車(chē)模相對(duì)此前角度的偏轉(zhuǎn)角度。代碼實(shí)現(xiàn)如下所示:
jiaodu=0;//將當(dāng)前角度設(shè)為0
while(jiaodu>(-45))//當(dāng)車(chē)身角度為45度時(shí)跳出循環(huán)
{
Update9AX();
Get_angle();
DirectionControl();
Speed_Control();
SpeedControlOut();
PWMOUT();
}
在智能車(chē)行駛過(guò)程中,紅外傳感器會(huì)一直檢測(cè)前方是否存在路障。檢測(cè)到之后,首先將此時(shí)正前方角度設(shè)為0度,然后進(jìn)入循環(huán)。方向環(huán)里的DError必須手動(dòng)賦值。參數(shù)jiaodu是車(chē)模避障所達(dá)到角度值(jiaodu可正可負(fù),決定車(chē)模避障方向),達(dá)到這個(gè)預(yù)設(shè)的角度后隨即進(jìn)入避障的下一階段—將車(chē)身回正。經(jīng)多次實(shí)驗(yàn)了解到:當(dāng)車(chē)模速度快時(shí),DError也要隨之增大,否則可能撞擊路障。在避障環(huán)中,車(chē)速、DError和jiaodu 3個(gè)參數(shù)需要密切關(guān)聯(lián),且每種不同速度都需要微調(diào)另外兩個(gè)參數(shù)才能保證智能車(chē)成功避障。
4? ? 結(jié)語(yǔ)
該研究從智能車(chē)的機(jī)械結(jié)構(gòu)、硬件和軟件3個(gè)基礎(chǔ)層面展開(kāi),在自主循跡的基礎(chǔ)上增添了變形和避障這樣有建設(shè)性的新功能,使智能車(chē)變得靈活,具有十分廣泛的應(yīng)用開(kāi)發(fā)前景。
[參考文獻(xiàn)]
[1]陳威,陳靜.基于多傳感器的智能小車(chē)避障控制系統(tǒng)設(shè)計(jì)[J].工業(yè)控制計(jì)算機(jī),2018(7):41-42.
[2]楊亞龍,劉金棟,孫玉環(huán),等.基于STC12C5410AD單片機(jī)的兩輪自平衡小車(chē)的系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2013(20):162-164.
[3]袁瑞豪,王一豪,孫振涵.基于K66單片機(jī)的恩智浦智能小車(chē)制作[J].無(wú)線互聯(lián)科技,2019(11):122-124.