基于DIGILENT Basys3 FPGA的RFID自動(dòng)駕駛小車(chē)
引言
本日為大家?guī)?lái)的酷創(chuàng)分享作品是一臺(tái)自動(dòng)駕駛小車(chē),它能夠通過(guò)無(wú)線(xiàn)射頻識(shí)別(RFID)在規(guī)劃好的路線(xiàn)上實(shí)現(xiàn)自動(dòng)駕駛。該項(xiàng)目的作者是來(lái)自羅馬尼亞的兩名本科在校創(chuàng)客騷年。目前這個(gè)項(xiàng)目只是打造了一個(gè)雛形,但在作者眼里,這個(gè)作品的初衷更多是去探索一項(xiàng)技術(shù)解決方案,可以讓今后每一輛汽車(chē)通過(guò)物聯(lián)網(wǎng)(IOT)實(shí)現(xiàn)自動(dòng)駕駛功能。他們相信,隨著這一技術(shù)雛形的深入與普及,最終能夠大大幫助降低當(dāng)今的車(chē)禍發(fā)生率及由此所造成的人員事故傷害。
Step 1: 項(xiàng)目功能描述

此項(xiàng)目目前還在完善階段,但作者已經(jīng)制作出了一個(gè)可以用于娛樂(lè)和功能原型測(cè)試的樣品。以下是作品的項(xiàng)目功能描述。
電機(jī)
電機(jī)由FPGA發(fā)出的PWM信號(hào)驅(qū)動(dòng),其轉(zhuǎn)速與PWM波值成正比。它們各自都有一個(gè)由兩個(gè)成90度相位放置的傳感器組成的霍爾編碼器(光電編碼器)。每次檢測(cè)到一個(gè)完整的旋轉(zhuǎn),會(huì)發(fā)出一個(gè)二進(jìn)制數(shù)值,告訴FPGA車(chē)輪已轉(zhuǎn)了完整的一圈或已走過(guò)了大概19cm(項(xiàng)目所用到的車(chē)輪直徑是6cm)。有興趣親手制作的童鞋也可以分別設(shè)置并讀出每個(gè)電機(jī)轉(zhuǎn)動(dòng)的方向。
藍(lán)牙收發(fā)器
作品需要這部分功能來(lái)與移動(dòng)應(yīng)用端進(jìn)行無(wú)線(xiàn)通信,這個(gè)通信是用來(lái)模仿物聯(lián)網(wǎng)的。VHDL模塊用以掌控當(dāng)前標(biāo)簽值的發(fā)送以及接收外部重要信息所需的通信協(xié)議。外部的信息采用FPGA內(nèi)置的有限狀態(tài)機(jī)進(jìn)行實(shí)時(shí)處理。
RFID讀取器
首先,如果你對(duì)射頻識(shí)別技術(shù)不那么了解的話(huà),建議可以先學(xué)習(xí)一下相關(guān)的基礎(chǔ)知識(shí)(請(qǐng)自行度娘)。
標(biāo)簽讀取器的功能:當(dāng)標(biāo)簽信號(hào)到達(dá)讀取器的范圍(即它們達(dá)到同一個(gè)頻率),標(biāo)簽信號(hào)會(huì)反饋一個(gè)預(yù)處理值(12位)。
一般我們會(huì)看到兩種不同類(lèi)型的讀取器:
復(fù)原讀取器:它們的任務(wù)僅僅是讓小車(chē)按照軌跡行駛
位置讀取器:這些讀取器是真正接收標(biāo)簽信號(hào)的
復(fù)原讀取器:
在理想情況下,這些讀取器不會(huì)讀取標(biāo)簽信號(hào);
算法會(huì)將車(chē)輛保持在由兩排標(biāo)簽所組成的跑道內(nèi);
復(fù)原讀取器主要是確保小車(chē)不會(huì)沖出跑道;
當(dāng)一個(gè)讀取器的確讀取到了標(biāo)簽信號(hào),這說(shuō)明車(chē)輛離跑道邊緣很近了;
車(chē)輛為了避免危險(xiǎn)會(huì)自動(dòng)向讀取到的標(biāo)簽信號(hào)相反的方向行駛。
位置讀取器:
與復(fù)原讀取器不同,位置讀取器要一直讀取標(biāo)簽信號(hào)。用于:
實(shí)時(shí)跟蹤車(chē)輛行駛的位置,與信號(hào)地圖相比較并傳送到物聯(lián)網(wǎng)上;
將接收的信號(hào)送到FPGA上進(jìn)行進(jìn)一步的處理與控制;
在FPGA上我們可以為下一個(gè)要轉(zhuǎn)的彎做準(zhǔn)備與計(jì)算;
這個(gè)算法程序是為了避免激活復(fù)位讀取器并確保車(chē)輛的平穩(wěn)行駛。
RFID標(biāo)簽
RFID標(biāo)簽的放置主要取決于讀取器支架臂的范圍。如果你實(shí)際所打印出的3D模型與作者所制作的一致(點(diǎn)擊“閱讀原文”可下載3D打印模型),支架臂應(yīng)被放置在大約離底板上方5cm的位置,且兩個(gè)支架臂間距離約為2cm。
在這里,同時(shí)附上Basys3開(kāi)發(fā)板、RFID讀取器、電機(jī)驅(qū)動(dòng)以及藍(lán)牙模塊的連接原理圖,供有興趣的小伙伴們參考。


Step 2: 準(zhǔn)備工具/材料



一個(gè)具有最少4個(gè)外設(shè)的FPGA開(kāi)發(fā)板,作者采用的是Basys3 FPGA開(kāi)發(fā)板
RFID讀取器 X 4
RFID標(biāo)簽(至少40個(gè))
PmodDHB1雙直流電機(jī)或單步進(jìn)電機(jī)驅(qū)動(dòng)模塊 X 2
直流電機(jī) X 4
電機(jī)驅(qū)動(dòng)器:為了節(jié)省空間,作者采用了2個(gè)雙轉(zhuǎn)子電機(jī)驅(qū)動(dòng)器
由兩個(gè)基座和放置電機(jī)的平臺(tái)組成的簡(jiǎn)易機(jī)器人平臺(tái)
藍(lán)牙通信技術(shù)來(lái)模仿物聯(lián)網(wǎng)
可充電電池 X 6(任何5號(hào)/1.2V電池皆可)
一個(gè)標(biāo)準(zhǔn)的手機(jī)充電器,需要用到它來(lái)為FPGA單獨(dú)供電
一些連接線(xiàn)
其它可視實(shí)際所需自行準(zhǔn)備的材料:
在實(shí)際項(xiàng)目中,作者制作了幾個(gè)為讀取器準(zhǔn)備的3D模型以及一個(gè)為Basys開(kāi)發(fā)板準(zhǔn)備的盒子。如果需要的話(huà),可以通過(guò)點(diǎn)擊“閱讀原文”下載3D打印所需的.stl文件,可以幫助你節(jié)省3D打印所需的精力。
Step 3: 制作移動(dòng)小車(chē)



現(xiàn)在我們有了所有的部件,我們可以開(kāi)始建造小車(chē)移動(dòng)平臺(tái):
用螺絲將電機(jī)固定在電機(jī)平臺(tái)上
用螺絲將電機(jī)平臺(tái)固定在基座底板上
將輪子與移動(dòng)充電器加到車(chē)上
將FPGA加上去并與驅(qū)動(dòng)器連接起來(lái)
將電機(jī)連到電機(jī)驅(qū)動(dòng)器上
將藍(lán)牙接收器與其中一個(gè)PmodDHB1相連
用所提供的項(xiàng)目代碼(點(diǎn)擊“閱讀原文”下載)在Vivado中創(chuàng)建一個(gè)項(xiàng)目
采所提供的安卓應(yīng)用(點(diǎn)擊“閱讀原文”下載)來(lái)進(jìn)行項(xiàng)目測(cè)試
Step 4: 測(cè)試RFID讀取器


在這一步中我們要將RFID讀取器與FPGA的Pmods模塊相連:
根據(jù)作者提供的文檔與圖示照片將線(xiàn)焊接起來(lái)
將支架固定到底板上
將RFID讀取器放置在3D打印出的支架上
這一步需要進(jìn)行現(xiàn)場(chǎng)的調(diào)整。
Step 5: 最終的組裝與測(cè)試


在完成與小車(chē)運(yùn)動(dòng)相關(guān)的部分、RFID讀取器部分、以及藍(lán)牙接收器部分后,最后一步是來(lái)驗(yàn)證并調(diào)試所設(shè)計(jì)的項(xiàng)目。
在這個(gè)階段,我們需要用到代碼包中的“TEST_BASYS_RECOVERY”源文件(可點(diǎn)擊“閱讀原文”下載),在將所有模塊連接起后進(jìn)行優(yōu)化。當(dāng)前作者的項(xiàng)目版本中只開(kāi)發(fā)了復(fù)位讀取器功能,其它功能將隨著項(xiàng)目的推進(jìn)而逐步開(kāi)發(fā)出來(lái)。項(xiàng)目的最終測(cè)試效果已展示在本文開(kāi)篇的視頻中。