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

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

以下是在項目中使用該傳感器的一些快速提示:
此設置僅用于檢測一個人。如果傳感器前方有多個人,它將追蹤反射信號最強的那個人,通常這是離傳感器最近的人。
如果你要將傳感器安裝在某個地方來檢測人員,將其放置在胸部到頭部高度之間,以獲得最佳效果。
無線電波會從表面反射。在測試時,有時我直接站在傳感器后面,但它卻檢測到幾米外的虛假目標。這是因為雷達波從墻壁反射回來,在反射中看到了我,就像鏡子一樣。如果出現隨機讀數,那不是幽靈,很可能是檢測到了人的反射信號。
如果你使用多個這樣的傳感器,它們會相互干擾。確保它們之間距離足夠遠,以免相互接收到對方的信號。
雷達可視化與虛擬空氣曲棍球游戲
現在,你已經掌握了在項目中應用該傳感器所需的所有知識。不過,在我們結束之前,讓我們看看可以用它做的一些很酷的事情。擁有一個能追蹤人體位置的雷達傳感器,自然希望能將數據以潛艇雷達圖像的形式可視化。
打開名為radar_visualisation.py的腳本并運行它。該腳本使用Pygame(一個非常實用的內置工具,用于創建視覺效果和交互式游戲)來獲取來自傳感器和庫的信息,并將其可視化。這是一個非常有趣的可玩項目,也是一個實用的工具,因為它能幫助你排查傳感器出現的任何問題,因為我們人類更擅長分析這種視覺形式的數據。
在如上所示的二維平面上對被追蹤的人進行可視化展示后,不難將其變成一些非??岬臇|西。例如,如果你打開radar_airhockey.py文件,你會發現一個腳本,它將被追蹤的人的位置映射到虛擬空氣曲棍球游戲中。提前說明一下,這個游戲有點卡頓,AI對手的表現時而愚蠢得可笑,時而又像違反了物理定律一樣作弊——它肯定還有改進的空間。

游戲應該可以開箱即用,但頂部有一堆設置你可以調整,這些設置會改變游戲的運行方式。最重要的是以下幾行代碼:
self.min_play_distance=1000self.max_play_distance=2500
這些代碼通過限定雷達的最近和最遠部分來設置游戲區域。
我們不會詳細介紹這600行代碼的工作原理,因為這不是關于如何使用Pygame的指南,但如果你想要詳細介紹,或者你在編寫自己的代碼時需要幫助,像ChatGPT、Claude和Gemini這樣的大型語言模型都能提供幫助。這段代碼的很多部分都是在這些模型的協助下編寫的。
現在,你已經掌握了在項目中應用該傳感器的所有知識。如果你用這個傳感器制作了任何很酷的東西,想要分享出來,或者你在本指南中遇到任何問題需要幫助,歡迎在我們的社區論壇上發布!
那么,下次再見啦,祝你制作愉快!
原文地址:
https://core-electronics.com.au/guides/raspberry-pi/using-mmwave-radar-to-detect-and-track-humans-raspberry-pi-guide/
-
傳感器
+關注
關注
2567文章
53145瀏覽量
768862 -
毫米波雷達
+關注
關注
107文章
1109瀏覽量
65441 -
樹莓派
+關注
關注
122文章
2031瀏覽量
107658
發布評論請先 登錄
評論