在树莓派5上,如何使用毫米波雷达检测和追踪人类?

描述

在本指南中,我们将学习如何将RD-03D雷达传感器添加到树莓派单板计算机上,以便实时检测和追踪人类。我们将了解该传感器的工作原理及可获取的数据、如何将其连接到树莓派并读取数据,还会用它搭建一些很酷的东西,如雷达可视化界面和一款由人体动作控制的虚拟空气曲棍球游戏。让我们开始吧!


 

目录:

雷达的工作原理及输出数据

你需要准备的东西

将传感器连接到树莓派

安装树莓派操作系统并启用UART

库与示例代码

雷达可视化与虚拟空气曲棍球游戏


 

雷达的工作原理及输出数据

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文件。这是一个非常基础的脚本,演示了如何使用库的所有功能。脚本开头导入了你可能刚刚修改过的库:

  •  
  •  

from rd03d import RD03Dimport time

如果你想在任何脚本中导入该库,库文件必须与脚本放在同一文件夹中。

之后,我们创建了一个雷达实例,并设置了初始化选项,用于选择使用单目标模式还是多目标模式:

  •  
  •  

radar = RD03D()  # Uses /dev/ttyAMA0 by defaultradar.set_multi_mode(True)   # Switch to multi-target mode

多目标模式最多可同时追踪3个目标,但有时效果不太理想,尤其是当人们离传感器较近时。而且,雷达波从墙壁、电视或任何大型平面反射回来时,可能会产生误检,就像墙上有一面镜子,你会看到同一个人两次。单目标模式始终会捕捉最强且最有可能是目标的那个,这会消除很多较弱的反射信号。从可靠性角度来看,单目标模式可能是首选,但不妨尝试一下多目标模式,看看在你的设置中是否可行。

设置好雷达后,我们可以调用radar.update(),该函数会指示库从传感器获取下一个读数并保存。

  •  
  •  
  •  
  •  
  •  

while True:    if radar.update():        Do what we want with the code in here...    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/

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分