在本指南中,我們將學(xué)習(xí)如何將RD-03D雷達(dá)傳感器添加到樹(shù)莓派單板計(jì)算機(jī)上,以便實(shí)時(shí)檢測(cè)和追蹤人類。我們將了解該傳感器的工作原理及可獲取的數(shù)據(jù)、如何將其連接到樹(shù)莓派并讀取數(shù)據(jù),還會(huì)用它搭建一些很酷的東西,如雷達(dá)可視化界面和一款由人體動(dòng)作控制的虛擬空氣曲棍球游戲。讓我們開(kāi)始吧!
目錄:
雷達(dá)的工作原理及輸出數(shù)據(jù)
你需要準(zhǔn)備的東西
將傳感器連接到樹(shù)莓派
安裝樹(shù)莓派操作系統(tǒng)并啟用UART
庫(kù)與示例代碼
雷達(dá)可視化與虛擬空氣曲棍球游戲
雷達(dá)的工作原理及輸出數(shù)據(jù)
RD-03D是一款24 GHz毫米波雷達(dá)傳感器,對(duì)于這樣一款價(jià)格低廉的設(shè)備而言,它能實(shí)現(xiàn)諸多功能,這充分證明了當(dāng)前的技術(shù)水平。
該傳感器發(fā)射頻率約為24 GHz的無(wú)線電波,并接收反射回來(lái)的信號(hào),其原理類似于超聲波測(cè)距傳感器。不過(guò),這款傳感器要先進(jìn)得多。它不僅利用無(wú)線電波反射回來(lái)的時(shí)間(無(wú)線電波以光速傳播)來(lái)測(cè)量人與傳感器之間的距離,還能通過(guò)檢測(cè)多普勒效應(yīng)引起的頻率變化來(lái)測(cè)量人的移動(dòng)速度。就像汽車經(jīng)過(guò)你身邊時(shí),聲音的音調(diào)會(huì)發(fā)生變化,頻率變化越大(由頻率偏移引起),汽車的速度就越快。同樣的原理也適用于雷達(dá)波從人體目標(biāo)反射回來(lái)的情況。這里需要特別注意的是,該傳感器只能測(cè)量目標(biāo)朝向或遠(yuǎn)離傳感器的速度。
此外,它還有2個(gè)接收天線,用于檢測(cè)目標(biāo)的角度。如果發(fā)射的無(wú)線電波在傳感器一側(cè)被人體反射,那么無(wú)線電波返回傳感器時(shí),會(huì)先到達(dá)其中一個(gè)天線,再到達(dá)另一個(gè)天線,傳感器由此來(lái)檢測(cè)目標(biāo)的角度。由于無(wú)線電波以光速傳播,它到達(dá)兩個(gè)不同接收器的時(shí)間差小于0.025納秒。人類最快的眨眼速度是100,000納秒,而該傳感器卻能在這個(gè)極短的時(shí)間內(nèi),精確計(jì)算出人體相對(duì)于傳感器的角度。
那么,它是如何只檢測(cè)到人(或許還有其他體型足夠大的動(dòng)物)的呢?這其實(shí)是該傳感器的神奇之處。當(dāng)它發(fā)射無(wú)線電波時(shí),房間內(nèi)的大多數(shù)物體都會(huì)反射信號(hào),比如椅子、墻壁、電腦、手機(jī)等,那它如何分辨出哪些反射信號(hào)來(lái)自人體呢?簡(jiǎn)單來(lái)說(shuō),人體反射的無(wú)線電波具有獨(dú)特的模式。就像可見(jiàn)光(起始頻率為400,000 GHz)在不同材料上的反射情況不同一樣,我們發(fā)射的24 GHz無(wú)線電波在人體上的反射情況也與其他物體不同。而且,人類是不斷移動(dòng)的生物,從呼吸到手臂的輕微動(dòng)作,這些動(dòng)作在朝向和遠(yuǎn)離傳感器移動(dòng)時(shí),都會(huì)產(chǎn)生微多普勒頻移。在雷達(dá)看來(lái),人體具有一定的“亮度”,并且充滿了微多普勒頻移,傳感器通過(guò)內(nèi)置的處理功能,利用這些特征來(lái)確定人體的位置和身份。
如果把這款傳感器帶回40 - 50年前,僅其信號(hào)處理功能就會(huì)讓當(dāng)時(shí)的頂尖科學(xué)家感到困惑,對(duì)于專業(yè)的雷達(dá)工程師來(lái)說(shuō),這也會(huì)如同魔法一般神奇。
所以,借助這款傳感器,你可以使用24 GHz無(wú)線電波來(lái)檢測(cè)人體,確定其與傳感器的距離(最遠(yuǎn)可達(dá)8米)、相對(duì)于傳感器的角度,以及其朝向或遠(yuǎn)離傳感器的移動(dòng)距離。需要注意的是,該傳感器必須保持靜止,不能移動(dòng)。我們不確定具體原因,但推測(cè)它可能會(huì)進(jìn)行某種房間校準(zhǔn)以獲取基線讀數(shù)。如果移動(dòng)傳感器,校準(zhǔn)就會(huì)失效,導(dǎo)致讀數(shù)不準(zhǔn)確。確保傳感器保持靜止,我們稍后會(huì)詳細(xì)討論如何安裝該傳感器。
現(xiàn)在,你已經(jīng)了解了它的工作原理和可實(shí)現(xiàn)的功能,接下來(lái)學(xué)習(xí)如何使用它吧!
你需要準(zhǔn)備的東西
要按照本指南進(jìn)行操作,你需要準(zhǔn)備以下物品:
RD-03D傳感器。
連接RD-03D傳感器的方法。你可以將導(dǎo)線焊接到傳感器的接觸焊盤上,也可以購(gòu)買一個(gè)用于板載連接器的跳線適配器。該開(kāi)發(fā)板不附帶適配器。
樹(shù)莓派單板計(jì)算機(jī)。我們使用的是樹(shù)莓派5,但經(jīng)過(guò)稍作修改庫(kù)文件后,也能在樹(shù)莓派4上使用(稍后會(huì)介紹)。
至少16GB的Micro-SD卡并且將其插入計(jì)算機(jī)的適配器。
電源、鼠標(biāo)、鍵盤、顯示器和micro-HDMI線——使用樹(shù)莓派所需的常規(guī)物品。
將傳感器連接到樹(shù)莓派
如果你使用的是跳線適配器,請(qǐng)將其連接到RD-03D傳感器。不過(guò)請(qǐng)注意,我們提供的連接是通用線纜,其顏色可能與開(kāi)發(fā)板的匹配度不高。例如,我使用的線纜中,紅色和黑色線是TX和RX引腳,綠色線是5伏引腳,黃色線是接地引腳。在這里,不要過(guò)于依賴線纜的顏色,務(wù)必以開(kāi)發(fā)板上的引腳標(biāo)簽為準(zhǔn)。
首先,將雷達(dá)的5伏引腳連接到樹(shù)莓派的5伏引腳,并將雷達(dá)的接地引腳連接到樹(shù)莓派的某個(gè)接地引腳,為雷達(dá)供電。
雷達(dá)通過(guò)UART輸出所有數(shù)據(jù),因此我們將雷達(dá)的TX引腳連接到樹(shù)莓派的引腳15(一個(gè)RX引腳)。我們還需要向雷達(dá)發(fā)送命令,所以將雷達(dá)的RX引腳連接到樹(shù)莓派的引腳14(一個(gè)TX引腳)。記住,TX引腳用于發(fā)送數(shù)據(jù),RX引腳用于接收數(shù)據(jù),即“RX接TX,TX接RX”。
右側(cè)圖片展示的是正確連接線纜的樹(shù)莓派,請(qǐng)注意,你使用的線纜顏色可能是錯(cuò)誤的。
安裝樹(shù)莓派操作系統(tǒng)并啟用UART
首先,我們需要將樹(shù)莓派操作系統(tǒng)安裝到Micro-SD卡上。將SD卡插入另一臺(tái)計(jì)算機(jī),下載官方的樹(shù)莓派燒錄工具。選擇你使用的樹(shù)莓派型號(hào),將64位樹(shù)莓派操作系統(tǒng)作為操作系統(tǒng),然后選擇Micro-SD卡作為安裝設(shè)備。此安裝過(guò)程將下載操作系統(tǒng)鏡像(約2GB),之后安裝只需幾分鐘。
注意:此安裝過(guò)程將清除SD卡上的所有數(shù)據(jù)。
安裝完成后,將SD卡插入樹(shù)莓派,連接鍵盤、鼠標(biāo)和顯示器,完成首次安裝過(guò)程。這里無(wú)需進(jìn)行特殊操作,按照常規(guī)方式設(shè)置設(shè)備即可。
進(jìn)入桌面環(huán)境后,選擇“開(kāi)始菜單 > 首選項(xiàng) > 樹(shù)莓派配置”。在該菜單的“接口”選項(xiàng)卡中啟用串口,然后重啟樹(shù)莓派(系統(tǒng)可能會(huì)提示你是否重啟)。

這將使樹(shù)莓派在其GPIO引腳上啟用UART通信。
庫(kù)與示例代碼
我們編寫了一個(gè)基礎(chǔ)庫(kù),極大地簡(jiǎn)化了使用該模塊的過(guò)程,你可以在此處下載其壓縮文件,其中還包含我們將使用的所有示例代碼:
rd03d-Pi5.zip
將文件下載并解壓到桌面等方便的位置。在開(kāi)始之前,如果你使用的不是樹(shù)莓派4或其他開(kāi)發(fā)板,讓我們看看如何修改腳本。如果你使用的是樹(shù)莓派5,可以跳過(guò)此步驟。
打開(kāi)名為rd03d.py的Python文件,這是庫(kù)文件。在大約第23行,你會(huì)看到以下代碼行:
def__init__(self, uart_port='/dev/ttyAMA0', baudrate=256000, multi_mode=True):
這行代碼用于初始化與傳感器的UART通信。與之前的樹(shù)莓派型號(hào)相比,樹(shù)莓派5初始化UART引腳的方法有所不同。你需要將“/dev/ttyAMA0”改為“/dev/ttyS0”。修改后的代碼行如下:
def__init__(self, uart_port='/dev/ttyS0', baudrate=256000, multi_mode=True):
現(xiàn)在,我們準(zhǔn)備讀取傳感器數(shù)據(jù)。打開(kāi)rd03d_demo_usage.py文件。這是一個(gè)非?;A(chǔ)的腳本,演示了如何使用庫(kù)的所有功能。腳本開(kāi)頭導(dǎo)入了你可能剛剛修改過(guò)的庫(kù):
fromrd03dimportRD03Dimporttime
如果你想在任何腳本中導(dǎo)入該庫(kù),庫(kù)文件必須與腳本放在同一文件夾中。
之后,我們創(chuàng)建了一個(gè)雷達(dá)實(shí)例,并設(shè)置了初始化選項(xiàng),用于選擇使用單目標(biāo)模式還是多目標(biāo)模式:
radar = RD03D() # Uses /dev/ttyAMA0 by defaultradar.set_multi_mode(True) # Switch to multi-target mode
多目標(biāo)模式最多可同時(shí)追蹤3個(gè)目標(biāo),但有時(shí)效果不太理想,尤其是當(dāng)人們離傳感器較近時(shí)。而且,雷達(dá)波從墻壁、電視或任何大型平面反射回來(lái)時(shí),可能會(huì)產(chǎn)生誤檢,就像墻上有一面鏡子,你會(huì)看到同一個(gè)人兩次。單目標(biāo)模式始終會(huì)捕捉最強(qiáng)且最有可能是目標(biāo)的那個(gè),這會(huì)消除很多較弱的反射信號(hào)。從可靠性角度來(lái)看,單目標(biāo)模式可能是首選,但不妨嘗試一下多目標(biāo)模式,看看在你的設(shè)置中是否可行。
設(shè)置好雷達(dá)后,我們可以調(diào)用radar.update(),該函數(shù)會(huì)指示庫(kù)從傳感器獲取下一個(gè)讀數(shù)并保存。
whileTrue: ifradar.update(): Do what we wantwiththe codeinhere... else: print('No radar data received.')
它會(huì)保存該讀數(shù),直到我們?cè)俅握{(diào)用update命令。當(dāng)庫(kù)執(zhí)行此操作時(shí),如果獲取到有效讀數(shù),將返回true;如果出現(xiàn)錯(cuò)誤(如獲取到損壞的UART讀數(shù)或線纜松動(dòng)),則返回false。在示例代碼中,我們將此命令放在if語(yǔ)句中,這意味著只有在獲取到有效讀數(shù)時(shí),才會(huì)執(zhí)行嵌套在其中的代碼。這是一種簡(jiǎn)潔且有效的錯(cuò)誤處理方法——如果我們獲取到不完整的讀數(shù)并嘗試打印,樹(shù)莓派可能會(huì)崩潰。
庫(kù)中已保存了相關(guān)信息,現(xiàn)在我們只需獲取這些信息并進(jìn)行相應(yīng)處理即可。以下代碼演示了如何獲取可檢測(cè)到的3個(gè)目標(biāo)的各自數(shù)據(jù)。如果你在單目標(biāo)模式下嘗試獲取目標(biāo)3的信息,或者沒(méi)有檢測(cè)到第3個(gè)人,所有數(shù)據(jù)點(diǎn)都將為零。
target1= radar.get_target(1)target2= radar.get_target(2)target3= radar.get_target(3)
現(xiàn)在,每個(gè)目標(biāo)變量中都存儲(chǔ)了一些信息,這些信息以結(jié)構(gòu)體的形式存在。要獲取其中的單個(gè)信息,只需使用點(diǎn)號(hào)和信息名稱即可。以下是一個(gè)打印出變量中存儲(chǔ)的所有數(shù)據(jù)點(diǎn)的示例:
print('1 dist:', target1.distance,'mm Angle:', target1.angle," deg Speed:", target1.speed,"cm/s X:", target1.x,"mm Y:", target1.y,"mm")print('2 dist:', target2.distance,'mm Angle:', target2.angle," deg Speed:", target2.speed,"cm/s X:", target2.x,"mm Y:", target2.y,"mm")print('3 dist:', target3.distance,'mm Angle:', target3.angle," deg Speed:", target3.speed,"cm/s X:", target3.x,"mm Y:", target3.y,"mm \n")
運(yùn)行該代碼,你應(yīng)該會(huì)在終端中看到所有這些數(shù)據(jù)。距離、角度和速度都很容易理解,但X和Y可能有點(diǎn)復(fù)雜。X軸是測(cè)量一個(gè)人離雷達(dá)中心線的距離,Y軸是測(cè)量一個(gè)人離雷達(dá)平行線的距離。下圖展示了這兩個(gè)軸。請(qǐng)注意,X軸測(cè)量值和角度都有正負(fù)值,下圖也有所展示。該傳感器的最大角度范圍為-60度到+60度。

以下是在項(xiàng)目中使用該傳感器的一些快速提示:
此設(shè)置僅用于檢測(cè)一個(gè)人。如果傳感器前方有多個(gè)人,它將追蹤反射信號(hào)最強(qiáng)的那個(gè)人,通常這是離傳感器最近的人。
如果你要將傳感器安裝在某個(gè)地方來(lái)檢測(cè)人員,將其放置在胸部到頭部高度之間,以獲得最佳效果。
無(wú)線電波會(huì)從表面反射。在測(cè)試時(shí),有時(shí)我直接站在傳感器后面,但它卻檢測(cè)到幾米外的虛假目標(biāo)。這是因?yàn)槔走_(dá)波從墻壁反射回來(lái),在反射中看到了我,就像鏡子一樣。如果出現(xiàn)隨機(jī)讀數(shù),那不是幽靈,很可能是檢測(cè)到了人的反射信號(hào)。
如果你使用多個(gè)這樣的傳感器,它們會(huì)相互干擾。確保它們之間距離足夠遠(yuǎn),以免相互接收到對(duì)方的信號(hào)。
雷達(dá)可視化與虛擬空氣曲棍球游戲
現(xiàn)在,你已經(jīng)掌握了在項(xiàng)目中應(yīng)用該傳感器所需的所有知識(shí)。不過(guò),在我們結(jié)束之前,讓我們看看可以用它做的一些很酷的事情。擁有一個(gè)能追蹤人體位置的雷達(dá)傳感器,自然希望能將數(shù)據(jù)以潛艇雷達(dá)圖像的形式可視化。
打開(kāi)名為radar_visualisation.py的腳本并運(yùn)行它。該腳本使用Pygame(一個(gè)非常實(shí)用的內(nèi)置工具,用于創(chuàng)建視覺(jué)效果和交互式游戲)來(lái)獲取來(lái)自傳感器和庫(kù)的信息,并將其可視化。這是一個(gè)非常有趣的可玩項(xiàng)目,也是一個(gè)實(shí)用的工具,因?yàn)樗軒椭闩挪閭鞲衅鞒霈F(xiàn)的任何問(wèn)題,因?yàn)槲覀內(nèi)祟惛瞄L(zhǎng)分析這種視覺(jué)形式的數(shù)據(jù)。
在如上所示的二維平面上對(duì)被追蹤的人進(jìn)行可視化展示后,不難將其變成一些非常酷的東西。例如,如果你打開(kāi)radar_airhockey.py文件,你會(huì)發(fā)現(xiàn)一個(gè)腳本,它將被追蹤的人的位置映射到虛擬空氣曲棍球游戲中。提前說(shuō)明一下,這個(gè)游戲有點(diǎn)卡頓,AI對(duì)手的表現(xiàn)時(shí)而愚蠢得可笑,時(shí)而又像違反了物理定律一樣作弊——它肯定還有改進(jìn)的空間。

游戲應(yīng)該可以開(kāi)箱即用,但頂部有一堆設(shè)置你可以調(diào)整,這些設(shè)置會(huì)改變游戲的運(yùn)行方式。最重要的是以下幾行代碼:
self.min_play_distance=1000self.max_play_distance=2500
這些代碼通過(guò)限定雷達(dá)的最近和最遠(yuǎn)部分來(lái)設(shè)置游戲區(qū)域。
我們不會(huì)詳細(xì)介紹這600行代碼的工作原理,因?yàn)檫@不是關(guān)于如何使用Pygame的指南,但如果你想要詳細(xì)介紹,或者你在編寫自己的代碼時(shí)需要幫助,像ChatGPT、Claude和Gemini這樣的大型語(yǔ)言模型都能提供幫助。這段代碼的很多部分都是在這些模型的協(xié)助下編寫的。
現(xiàn)在,你已經(jīng)掌握了在項(xiàng)目中應(yīng)用該傳感器的所有知識(shí)。如果你用這個(gè)傳感器制作了任何很酷的東西,想要分享出來(lái),或者你在本指南中遇到任何問(wèn)題需要幫助,歡迎在我們的社區(qū)論壇上發(fā)布!
那么,下次再見(jiàn)啦,祝你制作愉快!
原文地址:
https://core-electronics.com.au/guides/raspberry-pi/using-mmwave-radar-to-detect-and-track-humans-raspberry-pi-guide/
-
傳感器
+關(guān)注
關(guān)注
2567文章
53079瀏覽量
768202 -
毫米波雷達(dá)
+關(guān)注
關(guān)注
107文章
1104瀏覽量
65412 -
樹(shù)莓派
+關(guān)注
關(guān)注
121文章
2024瀏覽量
107568
發(fā)布評(píng)論請(qǐng)先 登錄
評(píng)論