高婉婷,曳永芳
(山西師范大學(xué) 物理與信息工程學(xué)院,山西 太原 030000)
物聯(lián)網(wǎng)技術(shù)飛速發(fā)展,涌現(xiàn)出了大規(guī)模新興產(chǎn)業(yè),其中,機(jī)器人制造產(chǎn)業(yè)是該領(lǐng)域發(fā)展的典型代表。掃地機(jī)器人、導(dǎo)航機(jī)器人、送餐機(jī)器人等將機(jī)械制造與物聯(lián)網(wǎng)相結(jié)合產(chǎn)品的出現(xiàn),給人們的生活帶來(lái)了極大便利,同時(shí)也在工業(yè)生產(chǎn)中起著非常重要的作用[1-2]。智能小車又被稱為移動(dòng)機(jī)器人,它的設(shè)計(jì)涵蓋了軟件編程、硬件設(shè)計(jì)、單片機(jī)原理等多個(gè)學(xué)科,作為一門新興的科學(xué)技術(shù),可適用于復(fù)雜多變的工作環(huán)境[3]。本文設(shè)計(jì)的基于STM32智能小車的避障系統(tǒng),可實(shí)現(xiàn)簡(jiǎn)單巡線避障和斜面防傾倒運(yùn)動(dòng)等功能。
本次設(shè)計(jì)選用STM32F103RCT6芯片作為核心,系統(tǒng)結(jié)構(gòu)如圖1所示,其主要由控制器模塊、避障模塊、紅外巡線模塊、電機(jī)驅(qū)動(dòng)模塊、電源模塊及OLED顯示模塊組成。避障模塊為本設(shè)計(jì)的核心模塊,由超聲波避障模塊、角度檢測(cè)模塊和舵機(jī)組成。
圖1 系統(tǒng)結(jié)構(gòu)
電機(jī)驅(qū)動(dòng)模塊采用2個(gè)L298N模塊分別驅(qū)動(dòng)前端和后端的直流電機(jī),進(jìn)行PWM軟件調(diào)速(通過(guò)調(diào)節(jié)占空比完成)。L298N模塊內(nèi)部為雙H橋電路,包含4通道邏輯驅(qū)動(dòng)電路[4],可使用1個(gè)模塊就非常方便的驅(qū)動(dòng)2個(gè)電機(jī)。1個(gè)H橋電路主要由4個(gè)MOS管組成,MOS管的導(dǎo)通狀態(tài)決定了電機(jī)的轉(zhuǎn)動(dòng)方向。電機(jī)驅(qū)動(dòng)模塊的控制端引腳與單片機(jī)的PC0~PC3、PC6~PC12、PD2端口相連,1個(gè)電機(jī)由2個(gè)引腳來(lái)控制其轉(zhuǎn)動(dòng)方向,單片機(jī)通過(guò)控制I/O口的輸入,改變其控制端的電平狀態(tài)使MOS管的導(dǎo)通狀態(tài)發(fā)生改變,從而使電流方向發(fā)生改變。電流方向控制電機(jī)的轉(zhuǎn)動(dòng)方向,使小車前進(jìn)、后退或停車。采用PWM軟件調(diào)速,調(diào)節(jié)小車左右輪的速度大小與轉(zhuǎn)動(dòng)方向,實(shí)現(xiàn)對(duì)小車行駛方向的控制。前部電機(jī)驅(qū)動(dòng)模塊如圖2所示。
圖2 電機(jī)驅(qū)動(dòng)模塊原理
由于各模塊所需電壓不同,供電電壓分別為5 V和3.3 V,需采用多種電源供電。串聯(lián)兩節(jié)鋰電池為電源模塊提供7.4 V的初始電壓作為輸入,首先選用MP1584芯片進(jìn)行降壓轉(zhuǎn)換,可實(shí)現(xiàn)5 V穩(wěn)定的直流電壓輸出,其具有穩(wěn)定性高和轉(zhuǎn)換效率快等特點(diǎn),為控制器模塊、超聲波模塊、舵機(jī)模塊和紅外巡線模塊供電。之后采用CJT1117B-3.3芯片將MP1584芯片輸出的5 V電壓轉(zhuǎn)為穩(wěn)定的3.3 V直流輸出,為MPU6050模塊供電。同時(shí),由于電機(jī)驅(qū)動(dòng)模塊所需輸入電壓較大,本設(shè)計(jì)帶Vout=Vin功能,即模塊接口輸出的電源電壓等于輸入電源的電壓,以此來(lái)驅(qū)動(dòng)電機(jī)模塊。
小車的紅外巡線模塊主要由4個(gè)TCRT5000紅外反射傳感器與單片機(jī)組成。模塊內(nèi)部采用LM393比較器,其工作時(shí),紅外發(fā)射管一直處于導(dǎo)通狀態(tài),不斷發(fā)射紅外光,通過(guò)利用黑白顏色對(duì)紅外光線反射強(qiáng)度的不同來(lái)影響紅外接收管的通斷狀態(tài),使得比較器同相輸入端的電壓發(fā)生變化,且輸出不同[4]。小車在貼有黑線的白色路面行駛,4個(gè)紅外傳感器位于小車前方,獨(dú)立工作,互不干擾,實(shí)時(shí)檢測(cè)道路信息傳遞給單片機(jī),其輸出分別接于單片機(jī)的PA4、PA5、PA6、PA7引腳,通過(guò)檢測(cè)4個(gè)紅外傳感器的輸出電平狀態(tài)來(lái)判斷小車目前距離設(shè)定路線的偏離程度,及時(shí)調(diào)整車輪轉(zhuǎn)速來(lái)控制小車的行駛方向,使小車回到設(shè)定路線。紅外傳感器檢測(cè)反射距離范圍為1~25 mm,工作電壓為3.3~5 V,其原理如圖3所示。
圖3 紅外傳感器原理
圖4所示為超聲波模塊原理。超聲波模塊采用HCSR04,其Trig管腳與Echo管腳分別與STM32單片機(jī)的PB4和PB3引腳相連。通過(guò)控制單片機(jī)I/O口的輸入,使超聲波模塊從Trig端接收一個(gè)不少于10 μs的高電平,模塊內(nèi)部會(huì)向某個(gè)方向發(fā)射8個(gè)40 kHz的超聲波。從發(fā)射時(shí)刻開(kāi)始,打開(kāi)程序中的定時(shí)器計(jì)時(shí),由于超聲波遇到障礙物會(huì)反射回來(lái),使超聲波接收器接收到超聲波,此時(shí)Echo管腳會(huì)輸出一個(gè)高電平,因此通過(guò)檢測(cè)Echo端的電平狀態(tài)來(lái)判斷有無(wú)信號(hào)返回。接收到回響信號(hào)后,關(guān)閉定時(shí)器,定時(shí)器所計(jì)的時(shí)間為高電平持續(xù)時(shí)間,即超聲波往返的時(shí)間[5-7]。超聲波在空氣中的傳播速度為340 m/s。
圖4 超聲波模塊原理
利用式(1)可計(jì)算出障礙物距離此刻小車的距離d,其中t為超聲波往返的時(shí)間。超聲波測(cè)距范圍為2~600 cm。
舵機(jī)模塊的信號(hào)端口接單片機(jī)的PA8引腳,從PA8端口產(chǎn)生一個(gè)周期為20 ms的脈寬調(diào)制信號(hào)作為舵機(jī)的控制信號(hào)[8],通過(guò)控制單片機(jī)I/O口的輸入,調(diào)整其控制信號(hào)的脈沖寬度,使舵機(jī)轉(zhuǎn)動(dòng)到一定角度。脈沖寬度對(duì)應(yīng)舵機(jī)偏轉(zhuǎn)角度的變化,使其可以完成180°范圍內(nèi)的轉(zhuǎn)動(dòng),寬度時(shí)間一般為0.5~2.5 ms。根據(jù)脈沖寬度,舵機(jī)會(huì)轉(zhuǎn)到對(duì)應(yīng)偏角,之后不再變化,直到單片機(jī)發(fā)送下一個(gè)脈沖信號(hào)。舵機(jī)模塊與超聲波模塊相連,通過(guò)舵機(jī)帶領(lǐng)超聲波模塊轉(zhuǎn)動(dòng),可測(cè)得左方和右方的障礙物距離。
小車采用MPU6050六軸傳感器進(jìn)行角度檢測(cè)。MPU6050模塊內(nèi)部包含三軸陀螺儀和三軸加速度傳感器[9],還自帶數(shù)字運(yùn)動(dòng)處理器DMP(Digital Motion Processor,DMP)。DMP內(nèi)置卡爾曼濾波算法,經(jīng)其處理可將獲取的陀螺儀和加速度數(shù)據(jù)直接轉(zhuǎn)為四元數(shù)輸出,降低了外圍微處理器的工作壓力,可以方便實(shí)現(xiàn)小車運(yùn)動(dòng)姿態(tài)的解算。
MPU6050模塊通過(guò)單片機(jī)進(jìn)行初始化配置,采用模擬I2C通信方式,將單片機(jī)的PB10、PB11引腳分別配置為SCL和SDA引腳與MPU6050模塊通信。當(dāng)小車運(yùn)動(dòng)時(shí),主機(jī)通過(guò)讀取從機(jī)存儲(chǔ)在寄存器中的六軸數(shù)據(jù)來(lái)獲取角度檢測(cè)的原始數(shù)據(jù),將此數(shù)據(jù)經(jīng)數(shù)字運(yùn)動(dòng)處理器處理后得到四元數(shù),從而計(jì)算小車運(yùn)動(dòng)過(guò)程中的角度。
計(jì)算公式如下:
俯仰角:
橫滾角:
航向角:
式中,q30=230,quat[0]~quat[3]為DMP解算后的四元數(shù),為q30格式,即浮點(diǎn)數(shù)放大了230倍,所以先將其格式轉(zhuǎn)化為浮點(diǎn)數(shù)格式,即除以q30,得到q0~q3,再進(jìn)行歐拉角的計(jì)算。
本設(shè)計(jì)將STM32單片機(jī)配置為SCL和SDA的PB10,PB11引腳另引出一組,用于與OLED模塊進(jìn)行模擬I2C通信,實(shí)時(shí)顯示小車運(yùn)動(dòng)參數(shù)。
系統(tǒng)軟件采用C語(yǔ)言編程實(shí)現(xiàn),配合編譯軟件Keil μ Vision5 編譯。首先對(duì)各模塊進(jìn)行初始化處理,清除之前所存儲(chǔ)的數(shù)據(jù),之后傳感器將所獲得的信息發(fā)送至單片機(jī)引腳,單片機(jī)對(duì)此進(jìn)行判斷處理后實(shí)現(xiàn)小車的自主控制。
本次設(shè)計(jì)中,避障程序是巡線避障以及斜面避障的基礎(chǔ)。圖5所示為避障程序流程。小車行駛時(shí),單片機(jī)首先通過(guò)分析超聲波傳感器發(fā)送的信號(hào)來(lái)判斷前方是否存在障礙物,再接著執(zhí)行程序中設(shè)定的操作。本設(shè)計(jì)設(shè)定的障礙物距離為20 cm,即當(dāng)超聲波傳感器測(cè)得前方物體與小車的間距不大于20 cm時(shí),則會(huì)認(rèn)為前方存在障礙物,進(jìn)行相應(yīng)避障操作。避障操作如下:若前方存在障礙物,小車停下,通過(guò)舵機(jī)的帶領(lǐng)測(cè)其左右方是否有障礙物并記錄,右方無(wú)障礙物時(shí),小車將執(zhí)行右轉(zhuǎn)避障,直至檢測(cè)到無(wú)障礙后,停止右轉(zhuǎn),執(zhí)行后續(xù)操作;右方有障礙物,左方無(wú)障礙物時(shí),小車將執(zhí)行左轉(zhuǎn)避障,直至檢測(cè)到無(wú)障礙后,停止左轉(zhuǎn),執(zhí)行后續(xù)操作;當(dāng)前方、左方和右方都有障礙物時(shí),小車先后退,右轉(zhuǎn)至一定角度,然后沿此方向行駛,繼續(xù)進(jìn)行距離檢測(cè)、避障。若前方無(wú)障礙物,則將與巡線或斜面行駛相結(jié)合,完成對(duì)應(yīng)操作。
圖5 避障程序流程
巡線避障程序流程如圖6所示。小車安裝的4個(gè)紅外傳感器從右至左分別為O1~O4,當(dāng)它在白底黑線的路面行駛時(shí),單片機(jī)首先接收超聲波傳感器發(fā)送的信號(hào),根據(jù)檢測(cè)出的距離分析有無(wú)障礙物。若無(wú)障礙物,則通過(guò)分析接收到的4個(gè)紅外傳感器的信號(hào),發(fā)送小車運(yùn)動(dòng)命令給電機(jī)模塊,使小車做出相應(yīng)操作,進(jìn)行巡線;若有障礙物,小車先執(zhí)行避障操作,同時(shí)記錄避障方向,直到檢測(cè)出無(wú)障礙物時(shí),向相反方向運(yùn)動(dòng),使小車重新回到線上,繼續(xù)做巡線運(yùn)動(dòng)。
圖6 巡線避障程序流程
斜面避障程序流程如圖7所示。在普通路面行駛時(shí),單片機(jī)首先通過(guò)分析角度傳感器發(fā)送的信息,得出小車目前的運(yùn)動(dòng)傾角,若傾角未超過(guò)預(yù)設(shè)傾角,則通過(guò)超聲波傳感器發(fā)送的信號(hào)檢測(cè)出前方障礙物距離,無(wú)障礙物時(shí),繼續(xù)向前行駛,有障礙物則進(jìn)行避障操作;若傾角超過(guò)設(shè)定角度,則先進(jìn)行前方障礙物距離分析,無(wú)障礙物時(shí),根據(jù)不同角度所對(duì)應(yīng)的操作進(jìn)行低傾角方向下坡避障,同時(shí)減速,有障礙物時(shí),進(jìn)行避障操作行駛至無(wú)障礙物時(shí)再執(zhí)行對(duì)應(yīng)角度的避障操作,完成下坡避障。
圖7 斜面避障程序流程
在設(shè)計(jì)小車的過(guò)程中,經(jīng)過(guò)多次室內(nèi)實(shí)驗(yàn)和程序的反復(fù)調(diào)試,小車最終可達(dá)到預(yù)期目標(biāo),基本實(shí)現(xiàn)在白底黑線路面巡線過(guò)程中完成距障礙物20 cm外的避障運(yùn)動(dòng),而后重新返回標(biāo)線上繼續(xù)做巡線運(yùn)動(dòng);從普通平面向斜面運(yùn)動(dòng)時(shí),當(dāng)小車俯仰角超過(guò)30°或橫滾角的絕對(duì)值超過(guò)20°時(shí)選擇低傾角方向下坡避障。整個(gè)運(yùn)動(dòng)過(guò)程中,小車的運(yùn)動(dòng)性能較為穩(wěn)定。系統(tǒng)測(cè)試結(jié)果如圖8所示,其中,圖8(a)為小車在巡線過(guò)程中面對(duì)障礙物時(shí)所進(jìn)行的避障返回操作;圖8(b)為小車在斜面運(yùn)動(dòng)過(guò)程中運(yùn)動(dòng)角度超過(guò)其預(yù)設(shè)傾角時(shí)的避障操作。
圖8 系統(tǒng)測(cè)試結(jié)果
本文設(shè)計(jì)的基于STM32智能小車的避障系統(tǒng),利用物聯(lián)網(wǎng)技術(shù)將高性能、低功耗的STM32芯片與多種傳感器通過(guò)軟件編程進(jìn)行融合,實(shí)時(shí)檢測(cè)道路信息,使小車完成簡(jiǎn)單巡線避障與斜面避障運(yùn)動(dòng);同時(shí),小車整體采用螺絲將各模塊固定在車身上,結(jié)構(gòu)簡(jiǎn)單,易于安裝,操作簡(jiǎn)便,具有較強(qiáng)的現(xiàn)實(shí)意義[9-10]。