瞿志二,袁良祺,吐魯遜江·克熱木,顧淑琪,夏潤(rùn)秋
(北京信息科技大學(xué)儀器科學(xué)與光電工程系,北京100192)
由于當(dāng)前不斷興起的汽車無(wú)人駕駛技術(shù),相應(yīng)的智能車實(shí)驗(yàn)也更加受業(yè)內(nèi)人士青睞[1],由此應(yīng)運(yùn)而生的各種智能小車比賽也接踵而至。智能小車的功能建立在使用者模塊使用上,通常具有自動(dòng)尋跡、尋光、跟蹤、顯示、避障、紅外控制、語(yǔ)音控制等功能,智能小車不需要使用者實(shí)時(shí)的操控,可以根據(jù)既定的程序執(zhí)行設(shè)置的要求。智能小車的出現(xiàn)代替了人們很多復(fù)雜而繁重的勞動(dòng),也運(yùn)用在許多危險(xiǎn)且人類無(wú)法出現(xiàn)的領(lǐng)域。隨著智能小車智能化、模塊化、通用化、普及化的實(shí)現(xiàn),智能小車將運(yùn)用在人類生活生產(chǎn)的方方面面。
2018 年7 月在北京理工大學(xué)舉辦全國(guó)大學(xué)生光電設(shè)計(jì)競(jìng)賽(“光電尋的競(jìng)技車”)要求制作一款“智能小車”要求完成自動(dòng)尋找探測(cè)并追蹤熄滅信標(biāo)燈。因此基于OpenMV 和Arduino Teensy 開發(fā)出一套針對(duì)第六屆全國(guó)大學(xué)生光電設(shè)計(jì)競(jìng)賽要求,使用尋光小車對(duì)12個(gè)同樣形狀、同樣顏色、同樣亮度、不同位置的信標(biāo)燈進(jìn)行熄滅作業(yè)。
Arduino 平臺(tái)特點(diǎn)主要有:①成本廉價(jià)。②跨平臺(tái)性。③圖形化編程方式。④開源的硬件及軟件[2],而且Arduino 只需要了解各個(gè)端口的作用和使用方法即可,不需要了解它的硬件結(jié)構(gòu)設(shè)計(jì),也不需要自己編寫復(fù)雜的底層代碼,使用方面很簡(jiǎn)單。
光電小車使用單片機(jī)作為主控模塊,控制光電小車轉(zhuǎn)動(dòng),從而控制光電小車行走與制動(dòng),還需要控制滅燈擋板的舵機(jī)的轉(zhuǎn)動(dòng),使光電小車完成滅燈的功能,同時(shí)還需要控制測(cè)距模塊,實(shí)現(xiàn)近距離的測(cè)距功能。并且需要使單片機(jī)與圖像處理系統(tǒng)建立良好的通信環(huán)境,接收處理圖像處理系統(tǒng)傳遞的方位信號(hào),使光電小車實(shí)現(xiàn)自動(dòng)追蹤功能。光電小車的大體工作框架如圖1 所示。
圖1 光電小車工作框圖
競(jìng)技車比賽常用舵機(jī)一般有兩種如圖2 所示,一種是飛思卡爾小車的普通輪舵機(jī)如圖2(a)所示,一種是麥克納姆輪小車的舵機(jī)如圖2(b)所示。本系統(tǒng)所選用的是麥克納姆輪小車的舵機(jī)。
圖2 競(jìng)技車舵機(jī)選型
相比于飛思卡爾小車的普通輪舵機(jī),麥克納姆輪小車的舵機(jī)更加靈活,麥克納姆輪是一種全向輪,能夠使競(jìng)技車進(jìn)行全方位的移動(dòng),可以在行進(jìn)時(shí)節(jié)省很多時(shí)間,例如:對(duì)于側(cè)方向的信標(biāo)燈的追蹤,理論上可以直接橫向追蹤,無(wú)需調(diào)轉(zhuǎn)車頭;探測(cè)信標(biāo)燈時(shí),飛思卡爾小車的普通輪舵機(jī)需要后輪鎖死,前輪舵機(jī)控制方向,在通過(guò)前輪的驅(qū)動(dòng)電機(jī)帶動(dòng)車身轉(zhuǎn)動(dòng),尋找信標(biāo)燈;而麥克納姆輪舵機(jī)可以直接原地轉(zhuǎn)彎,尋找信標(biāo)燈,控制方法上更為簡(jiǎn)單、執(zhí)行上更為快速。因此本文中選用麥克納姆輪小車舵機(jī)作為競(jìng)技車的舵機(jī)。
麥克納姆輪如圖3 所示是瑞典麥克納姆公司設(shè)計(jì)的一款能夠?qū)崿F(xiàn)前后移動(dòng)、左右橫移、斜前、斜后、原地旋轉(zhuǎn)的輪胎,三個(gè)或以上的麥克納姆輪之間的組合可實(shí)現(xiàn)平臺(tái)的全方位自由移動(dòng)。它的外形結(jié)構(gòu)與常見的普通輪胎有所區(qū)別,麥克納姆輪輪胎的外部輪廓是由許多傾斜成45 度角的小輥?zhàn)咏M合而成的,雖然看上去這些小輥?zhàn)又g有所間斷,但它實(shí)際的外形上又符合理論圓周的形狀,因此能夠正常旋轉(zhuǎn)。而車輪上的每個(gè)小輥?zhàn)右部梢宰杂尚D(zhuǎn),通過(guò)輥?zhàn)拥呐c輪子整體的相對(duì)運(yùn)動(dòng),再由多個(gè)輪子之間組合實(shí)現(xiàn)平臺(tái)的全向運(yùn)動(dòng)。
在電機(jī)選擇方面有兩種不同的方案,直流有刷電機(jī)和步進(jìn)電機(jī)這兩種。直流有刷電機(jī)具有良好的啟動(dòng)性能和調(diào)速性能,控制電路簡(jiǎn)單,在自動(dòng)化控制設(shè)備中得到了廣泛的應(yīng)用[3]且其結(jié)構(gòu)簡(jiǎn)單、應(yīng)用成熟、運(yùn)行平穩(wěn)、調(diào)速范圍廣、響應(yīng)速度快、起動(dòng)扭矩大、起制動(dòng)效果好、成本低、過(guò)載能力強(qiáng),因此系統(tǒng)中選用的是直流有刷電機(jī)。
圖3 麥克納姆輪
競(jìng)技車的舵機(jī)驅(qū)動(dòng)模塊本文中設(shè)計(jì)了兩種驅(qū)動(dòng)方案。一種是用L298 芯片作為驅(qū)動(dòng)模塊,另一種是用TB6612FNG 直流電機(jī)驅(qū)動(dòng)芯片作為驅(qū)動(dòng)模塊。
TB6612FNG 是一種基于MOSFET 的H 橋集成電路。每個(gè)通道具有600 毫安的平均輸出電流和1.2A峰值電流,這使其輸出負(fù)載容量加倍。而且TB6612FNG 不需要外部散熱片,外圍電路搭建簡(jiǎn)單。只需要外部電源和濾波電容就可以直接驅(qū)動(dòng)電機(jī),這有利于減小系統(tǒng)尺寸和設(shè)計(jì)難度。對(duì)于PWM 信號(hào),它支持高達(dá)100KHz 的頻率,優(yōu)于L298N 芯片。因此,本文中選用TB6612FNG 作為競(jìng)技車的驅(qū)動(dòng)模塊。
競(jìng)技車主控模塊采用單片機(jī)控制,本系統(tǒng)所選用的是Arduino Teensy 3.2 單片機(jī)如圖4 所示作為競(jìng)技車的主控模塊。
圖4 Arduino Teensy 3.2單片機(jī)
一般的Arduino 單片機(jī)在使用時(shí)都需要安裝相應(yīng)的驅(qū)動(dòng),而Arduino Teensy 3.2 單片機(jī)是不用安裝驅(qū)動(dòng)的,直接進(jìn)行擦寫、編程、調(diào)試即可,節(jié)省了部分操作。并且相較于常用的Arduino Mega 2560 單片機(jī),Arduino Teensy 3.2 單片機(jī)的主頻提升到了72MHz,Mega 2560僅為16MHz。而且較為重要的是Teensy 3.2 的內(nèi)存提升到了64KB,Mega 2560 的內(nèi)存僅為8KB,內(nèi)存太小,可能會(huì)不夠用。在程序方面Teensy 3.2 與Mega 2560的庫(kù)文件兼容,編寫上同樣簡(jiǎn)單,因此選用內(nèi)存更大的Arduino Teensy,如圖5 所示是Arduino Teensy 3.2 引腳圖。
圖5 Arduino Teensy3.2引腳圖
由于這一屆光電競(jìng)賽要求競(jìng)技車停在LED 燈外圍10 厘米的黑線外,不允許碰撞信標(biāo)燈,所以需要設(shè)計(jì)一個(gè)測(cè)距系統(tǒng)。測(cè)距模式通常情況下分為超聲波測(cè)距與紅外測(cè)距。本系統(tǒng)選用的是HC-SR04 超聲波傳感器,外部形狀如圖6 所示。
圖6 HC-SR04超聲波傳感器
HC-SR04 模塊包括超聲波發(fā)射器、接收器和控制電路。采用I/O 口TRIG 觸發(fā)測(cè)距,給至少10μs 的高電平信號(hào),模塊自動(dòng)發(fā)送8 個(gè)40KHz 的方波,并自動(dòng)檢測(cè)是否有信號(hào)返回,一旦檢測(cè)到有回波信號(hào)則輸出回響信號(hào),回響信號(hào)的脈沖寬度與所測(cè)的距離成正比[4]。超聲波探測(cè)器測(cè)距的計(jì)算公式:
式中L 為探測(cè)到的前方距離,T 為信號(hào)脈沖寬度,v 為聲速,由此公式經(jīng)過(guò)計(jì)算便可得到超聲波探測(cè)器測(cè)量距離。
表1 HC-RS04 超聲波測(cè)距模塊電氣參數(shù)表
這一屆光電競(jìng)賽要求不能直接碰撞信標(biāo)燈,需要在信標(biāo)燈外10 厘米用擋板將信標(biāo)燈擋滅,并且擋板伸出車體部分不得超過(guò)15 厘米。擋板設(shè)計(jì)方面有創(chuàng)意加分。經(jīng)過(guò)多方查詢,初步設(shè)計(jì)了三種方案。
方案一:水平方向旋轉(zhuǎn)擋板。通過(guò)一個(gè)舵機(jī)控制,在水平方向向車頭方向旋轉(zhuǎn)出一定角度,實(shí)現(xiàn)滅燈。這種擋板可覆蓋范圍廣,角度自由,可通過(guò)程序方面調(diào)整角度,以增大擋板覆蓋面積,十分方便。
方案二:翻轉(zhuǎn)擋板。由一個(gè)舵機(jī)控制,像風(fēng)車一樣從后向車頭方向翻轉(zhuǎn)至水平,實(shí)現(xiàn)滅燈。這種擋板覆蓋面積比較固定,基本上是由擋板自身面積決定,難以更改。并且由于競(jìng)技車車身高度有所限制,只能向后水平放置,占用競(jìng)技車空間較大。
方案三:水平方向伸縮擋板。由一個(gè)舵機(jī)和傳送帶控制,水平向車頭伸縮,實(shí)現(xiàn)滅燈。這種擋板和翻轉(zhuǎn)擋板一樣,覆蓋范圍由擋板本身大小決定。并且在設(shè)計(jì)上,相比于前兩種擋板,這個(gè)方案的設(shè)計(jì)制作較為復(fù)雜。占用車體空間也不小。
水平伸縮擋板結(jié)構(gòu)上先比方案一、方案二的擋板要復(fù)雜,并且如果信標(biāo)燈坐標(biāo)標(biāo)定由偏差,水平伸縮擋板覆蓋面積較小,可能會(huì)發(fā)生信標(biāo)燈在覆蓋面積外的情況,而無(wú)法實(shí)現(xiàn)滅燈功能;翻轉(zhuǎn)擋板占的位置較大,在具體實(shí)施中會(huì)影響車身上的單片機(jī)、鏡頭,所以最后決定采用水平旋轉(zhuǎn)擋板。占用面積小、結(jié)構(gòu)簡(jiǎn)單、設(shè)計(jì)制作較為方便。由于是旋轉(zhuǎn)控制,可通過(guò)程序上改變舵機(jī)旋轉(zhuǎn)角度,以增加其覆蓋面積,如圖7 所示。
擋板設(shè)計(jì)安裝在競(jìng)技車車頭位置,在超聲波探測(cè)器側(cè)方,因?yàn)槿绻诔暡ㄌ綔y(cè)器正上方,理論上想要滅燈就需要至少旋轉(zhuǎn)90 度,而安裝在競(jìng)技車側(cè)方一些,就可以減小滅燈所需的旋轉(zhuǎn)角度,較少滅燈所需時(shí)間。
圖7 擋板結(jié)構(gòu)設(shè)計(jì)圖
在擋板的外形設(shè)計(jì)上,本文中設(shè)計(jì)了幾款不同的能夠適應(yīng)水平旋轉(zhuǎn)的擋板形狀。分別是:圓形擋板、T形擋板和扇形擋板。經(jīng)過(guò)多次實(shí)驗(yàn),發(fā)現(xiàn)圓形擋板最為合適,T 形擋板在信標(biāo)燈坐標(biāo)探測(cè)有所偏差,導(dǎo)致競(jìng)技車停在信標(biāo)燈側(cè)方時(shí),會(huì)有無(wú)法擋住信標(biāo)燈的情況;而扇形擋板在其他競(jìng)技車中使用較多,所以最終選用圓形擋板,如圖8 所示。
圖8 擋板形狀設(shè)計(jì)圖
擋板驅(qū)動(dòng)舵機(jī)采用的是輝盛MG90 微伺服舵機(jī)(圖9)進(jìn)行控制。伺服舵機(jī)具有制動(dòng)迅速、旋轉(zhuǎn)慣量小、啟動(dòng)力矩大等特點(diǎn),且可以使得擋板轉(zhuǎn)動(dòng)遮擋信標(biāo)燈角度更加精確、快速。因此在擋板舵機(jī)選擇上,采用了微伺服舵機(jī)。
圖9 Mg90s微伺服舵機(jī)
競(jìng)技車電路部分由競(jìng)技車舵機(jī)模塊、超聲波測(cè)距模塊、擋板舵機(jī)模塊這三部分組成。
通過(guò)上一章競(jìng)技車的選材,最終確定了由Arduino Teensy 3.2 單片機(jī)作為競(jìng)技車的主控,分別控制這三個(gè)模塊的運(yùn)行。Arduino Teensy 3.2 單片機(jī)通過(guò)PWM 控制競(jìng)技車舵機(jī)模塊的運(yùn)行;超聲波測(cè)距模塊與Arduino Teensy 3.2 單片機(jī)的SDA 和SCL 端口相連;擋板舵機(jī)模塊由Arduino Teensy 3.2 單片機(jī)的伺服電機(jī)控制端口控制。
根據(jù)競(jìng)賽規(guī)則,小車采用采用Arduino 做驅(qū)動(dòng),OpenMV 做圖像處理。OpenMV 找到裁判燈并把中心坐標(biāo)發(fā)給Arduino,Arduino 驅(qū)動(dòng)電機(jī)找到裁判燈并控制舵機(jī)進(jìn)行滅燈。Arduino 用了最新版本的Teensy 開發(fā)板,運(yùn)行速度快。車輪為麥克納姆輪,此輪的好處就是可以讓小車不僅前后運(yùn)行,還能左右平移,大大減少了小車在轉(zhuǎn)彎時(shí)的時(shí)間,如圖10 為小車尋的程序流程圖。
圖10 小車尋的程序流程圖
競(jìng)技車控制方面本文中設(shè)計(jì)如下方案:開始時(shí),給競(jìng)技車通電,Arduino 單片機(jī)控制競(jìng)技車開始原地旋轉(zhuǎn),直至Arduino 單片機(jī)接收到圖像處理系統(tǒng)傳輸方位信號(hào)后,并對(duì)方位信號(hào)進(jìn)行處理,在使競(jìng)技車在短時(shí)間內(nèi)加速到最大速,朝向解析出的坐標(biāo)方位行駛;超聲波探測(cè)器同時(shí)開始工作,在超聲波探測(cè)到距離信標(biāo)燈50厘米時(shí),競(jìng)技車開始迅速減速到設(shè)定運(yùn)行速度,在超聲波探測(cè)到距離信標(biāo)燈10 厘米時(shí),競(jìng)技車剎車,輪胎抱死,同時(shí)滅燈擋板復(fù)位,在競(jìng)技車停穩(wěn)后,滅燈擋板伸出滅燈,停留1 秒,滅燈擋板再收回,競(jìng)技車再次啟動(dòng),向后退一小段距離(大約50 厘米,防止競(jìng)技車做后續(xù)動(dòng)作時(shí)碰撞信標(biāo)燈),競(jìng)技車再次原地旋轉(zhuǎn),尋找下一個(gè)信標(biāo)燈,重復(fù)以上動(dòng)作,直到比賽結(jié)束。
OpenMV 程序的設(shè)計(jì)主要包括兩個(gè)方面一個(gè)是色塊的尋找,一個(gè)是數(shù)據(jù)的發(fā)送。在色塊尋找方面,通過(guò)找到色塊中心位置來(lái)判斷裁判燈的位置。在競(jìng)賽場(chǎng)地,人眼看到裁判燈為紅色,但是OpenMV 看到的不是紅色,并且在場(chǎng)地也會(huì)有很多因素影響會(huì)影響色塊的尋找。在尋找裁判燈是可以采用閾值來(lái)尋找色塊再判斷出色塊中心位置x,y 的坐標(biāo)。在發(fā)送數(shù)據(jù)方面,OpenMV 有兩個(gè)串口通信接口,可以同時(shí)發(fā)送x,y 坐標(biāo)的值。如果采用一個(gè)串口發(fā)送坐標(biāo)的話,第一速度慢了,第二需要先將數(shù)據(jù)打包再發(fā)送,在Arduino 里也需要進(jìn)行解壓讀數(shù)據(jù)。在Arduino 里也有兩個(gè)串口,可以同時(shí)接收兩組數(shù)據(jù)。
通過(guò)第六屆全國(guó)大學(xué)生光電設(shè)計(jì)競(jìng)賽,基于本設(shè)計(jì)的光電尋的小車在47 秒內(nèi)滅燈5 盞符合競(jìng)賽要求完成比賽獲得二等獎(jiǎng)。由于比賽時(shí)間緊任務(wù)重,小車還有用很多可以改進(jìn)的地方,例如圖像質(zhì)量,電機(jī)扭力,車身在運(yùn)動(dòng)過(guò)程中顛簸導(dǎo)致圖像不清晰,色塊尋找算法本身存在的問(wèn)題等。
圖11 競(jìng)賽小車及硬件