从 1992 年到 2007 年,美国国家公园每天进行大约 11 次搜救 (SAR) 行动。每次事件的成本约为 895 美元,总计 58、572、164 美元。此外,每年约有 700 人因海岸警卫队的搜救任务而丧生。更好的培训和技术进步帮助降低了死亡人数和成本,但仍然相对昂贵。因此,需要一种能够最大限度地降低搜寻与援救行动的死亡率和成本的新型装置。
该设备是一种无人机,可以成功地在任何地形上自主飞行并搜索丢失的对象。操作员只需插入电池,拨动开关,即可按照可配置为任何搜索区域和模式的编程 SAR 模式起飞。摄像机拍摄下方地面的视频,并将输入输入计算模块以运行卷积神经网络 (CNN)。这个 CNN 能够检测到人类、汽车和其他几个物体,这些物体可以为 SAR 团队找到失踪的对象提供线索。当无人机检测到人时,如果它移动,它将跟随对象,同时将带有时间戳的 GPS 坐标发送给 SAR 团队。操作员还可以查看实时视频,以协调如何以最安全的方式到达失踪对象。电池电量不足时,无人机将自动飞回它起飞的地方。使用无人机而不是使用直升机或陆地团队是执行搜寻与援救行动的一种更便宜、更安全的方式。团队可以使用多架这样的无人机,快速自主地搜索大片区域。
请克隆我的 GitHub存储库以跟随本教程。
在本教程中,我使用了 Raspberry Pi 4 Model B 4GB。如果您有 8GB 版本,请随意使用它以获得更好的性能(您将获得更多 fps,从而实现更好的跟踪功能)。但是,我从未使用 8GB 版本对其进行过测试。该项目确实适用于 Raspberry Pi 3 Model B+,但 fps 较慢。
如果这是您第一次使用 Raspberry Pi,请确保使用最新的 Raspberry Pi 操作系统进行设置。请按照本教程获取指导。如果您过去使用过 Raspberry Pi,请确保使用全新的 RPI 操作系统刷新您的 SD 卡。
启动并设置好所有内容后,在终端中输入:
$ sudo raspi-config
使用箭头键导航到该Interface Options
部分并按enter
。
您将需要通过此菜单打开相机、SSH 和串行:
完成后,您可以退出并重新启动。
启用相机将使我们能够执行必要的计算机视觉以检测失踪人员。SSH 将允许您通过笔记本电脑/PC 远程编程和控制 RPI,而无需将两者连接在一起。这只是为了方便和安全。Serial 将允许 RPI 通过MAVLink与我们的机载飞行控制器进行通信。
启用摄像头、SSH 和串行后,您现在可以通过 SSH 连接到 RPI。
首先,通过在 RPI 的终端中键入以下内容来找出您的 RPI 的 IP 地址:
$ hostname -I
如果您使用的是 Windows 笔记本电脑/PC,请确保您已安装 OpenSSH 客户端。转到设置 > 应用程序 > 应用程序和功能 > 可选功能 > 在文本字段中搜索 OpenSSH 客户端,如果尚未安装,请选择安装 OpenSSH 客户端。
然后在您的终端(对于 Linux 或 Windows 用户)中输入:
ssh pi@
替换
为您的 RPI 的 IP 地址。
然后将提示您输入pi
登录密码。Raspberry Pi OS 上的默认密码是raspberry
.
然后,确保在终端中使用以下两个命令更新 RPI:
$ sudo apt-get update
$ sudo apt-get upgrade
现在,我们可以开始安装必要的软件包和程序,通过 Google Coral Edge TPU USB 加速器启用计算机视觉。
首先,添加 Coral Edge TPU 包存储库:
$ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee /etc/apt/sources.list.d/coral-edgetpu.list
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-get update
现在,安装 EdgeTPU 运行时库:
$ sudo apt-get install libedgetpu1-std
接下来,安装 EdgeTPU Python API:
$ sudo apt-get install python3-edgetpu
然后重新启动以完成安装过程:
$ sudo reboot now
我们现在将设置一个 Python 虚拟环境来帮助隔离本教程中使用的 Python 包。我们将使用 virtualenv 和 virtualenvwrapper。
首先,安装 pip:
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo python3 get-pip.py
$ sudo rm -rf ~/.cache/pip
接下来,安装 virtualenv 和 virtualenvwrapper:
$ sudo pip install virtualenv virtualenvwrapper
安装后,编辑~/.bashrc
文件:
$ sudo nano ~/.bashrc
将以下行添加到文件的底部:
# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
ctrl + x
使用, y
,保存并退出enter
。
接下来,重新加载您的~/.bashrc
文件以应用我们的更改:
$ source ~/.bashrc
最后,创建我们的 Python 3 虚拟环境:
$ mkvirtualenv sar -p python3
注意:从现在开始,请始终确保您处于sar
虚拟环境中。如果不是,请使用以下命令:
$ workon sar
现在我们需要创建一个符号链接来将我们的 EdgeTPU 运行时链接到我们的 sar 虚拟环境中。
运行此命令以查找 Python EdgeTPU 包的安装路径:
$ dpkg -L python3-edgetpu
...
/usr/lib/python3
/usr/lib/python3/dist-packages
/usr/lib/python3/dist-packages/edgetpu
/usr/lib/python3/dist-packages/edgetpu/__init__.py
...
注意线/usr/lib/python3/dist-packages/edgetpu
。这是我们的 edgetpu 库的根目录。
现在,我们可以创建符号链接:
$ cd ~/.virtualenvs/sar/lib/python3.7/site-packages
$ ln -s /usr/lib/python3/dist-packages/edgetpu/ edgetpu
$ cd ~
要测试我们的安装,请打开 Python shell:
$ workon sar
$ python
>>> import edgetpu
>>> edgetpu.__version__
'2.12.2'
通过安装使用 PiCamera 和执行图像处理所需的 python 包,完成 Coral TPU 的设置过程:
$ pip install "picamera[array]" # Raspberry Pi only
$ pip install numpy
$ pip install opencv-contrib-python==4.1.0.25
$ pip install imutils
$ pip install scikit-image
$ pip install pillow
现在我们可以在示例程序上测试 TPU。
首先,安装示例包:
$ sudo apt-get install edgetpu-examples
然后,将写入权限添加到示例目录:
$ sudo chmod a+w /usr/share/edgetpu/examples
更改目录并运行测试程序:
$ cd /usr/share/edgetpu/examples
$ python classify_image.py \
--mode models/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label models/inat_bird_labels.txt \
--image images/parrot.jpg
---------------------------
Ara macao (Scarlet Macaw)
Score : 0.61328125
---------------------------
Platycercus elegans (Crimson Rosella)
Score : 0.15234375
如果您收到与上述类似的回复,则表示您所做的一切都是正确的。
如果你很好奇,下面是parrot.jpg
这样的:
DroneKit允许我们利用配套计算机(在我们的例子中为 RPI)来控制基于ArduPilot的飞行控制器。在本教程中,我们使用 RPI 和 Google Coral TPU 执行对象检测,同时向 PixHawk 4 飞行控制器发送命令以移动我们的无人机并寻找失踪人员。
首先,确保您已安装 pip 和 python-dev:
$ sudo apt-get install python-pip python-dev
接下来,安装 DroneKit:
$ workon sar
$ pip install dronekit
$ pip install dronekit-sitl
现在我们用一个简单的程序测试我们的安装。首先,我们需要克隆 GitHub 存储库:
$ git clone https://github.com/bandofpv/SAR_Drone
导航到SAR_Drone
存储库并运行测试程序:
$ cd SAR_Drone
$ python dronekit_test.py
如果安装正确,您应该得到以下响应:
Start simulator (SITL)
Downloading SITL from http://dronekit-assets.s3.amazonaws.com/sitl/copter/sitl-win-copter-3.3.tar.gz
Extracted.
Connecting to vehicle on: 'tcp:127.0.0.1:5760'
>>> APM:Copter V3.3 (d6053245)
>>> Frame: QUAD
>>> Calibrating barometer
>>> Initialising APM...
>>> barometer calibration complete
>>> GROUND START
Get some vehicle attribute values:
GPS: GPSInfo:fix=3,num_sat=10
Battery: Battery:voltage=12.587,current=0.0,level=100
Last Heartbeat: 0.713999986649
Is Armable?: False
System status: STANDBY
Mode: STABILIZE
Completed
在本教程中,我假设您在构建无人机方面有相当多的经验,所以我不会详细介绍我如何构建我的无人机,因为它相对简单且不言自明。
电机和电调放置都是标准的。这是一个很好的示意图,说明了如何将电池、电机和 ESC 连接到 PDB 上:
PDB 安装在框架的中心(通常是飞行控制器所在的位置),因为 PixHawk 4 无法放入其中:
所以 PixHawk 4 飞控是倒挂在机身底板底部的。确保还使用防振泡沫/凝胶来安装飞行控制器,以减少可能影响飞行性能的振动:
云台也安装在框架底板的底部,但我使用金属支架将云台抬离底板,为飞行控制器留出空间。FPV 摄像头和 RPI RX 也都安装在底板的底部:
RPI 安装在底板顶部的前部,而 Coral TPU 安装在背面:
GPS 模块和天线都直立安装,并且彼此之间保持尽可能远的距离,以最大程度地减少干扰:
注意:请确保 GPS 模块上的箭头向前对齐并与飞控对齐。
您还必须修改 USB-C 连接器以通过电池为 RPI 供电。这可以通过剥去 USB-C 电缆的电缆并将红色和黑色的大线焊接到 5V UBEC 来简单地完成。将 UBEC 的输入电源连接到 PDB(连接电池的地方),RPI 将获得电源。
连接 FPV 系统的相机设置非常简单。只需将 VTX 的电源线焊接到 PDB 并将摄像机连接到 VTX 和天线。
接下来,我们需要连接 PixHawk 4 飞行控制器:
您可以忽略遥测无线电,因为它不需要,因为我们将使用 FrSky 的智能端口遥测技术。
如图所示连接遥测电缆(链接在BOM中):
连接到 PixHawk 4 的电缆将插入UART & I2C B
端口。
现在,我们需要将云台连接到飞行控制器,以便我们可以从 RPI 和/或我们的无线电发射器控制云台。上面链接的云台预装了 STorM32,所以我们需要做的就是将三根线焊接到云台上:
与其将其连接到TELEM 2
,不如将其连接到 ,TELEM 1
因为我们将TELEM 2
用于与 RPI 进行通信。
最后但同样重要的是,我们可以将 RPI 连接到 PixHawk 4 以允许 RPI 通过 MavLink 向飞行控制器发送命令:
此插图使用 RPI 零,但过程相同。将飞行控制器的TELEM 2
端口连接到 RPI 的Ground
,TX
和RX
引脚。这是 RPI 4 Model B 的引脚排列(图像是 RPI 3 Model B+,但引脚排列相同):
重要的是要意识到您将 RPI 连接TX
到飞行控制器RX
,并将 RPIRX
连接到飞行控制器的TX
.
虽然项目BOM中链接的云台预装了 STOrM32 并进行了预校准,但如果云台仍未调平,有时您必须调整微调。要测试是否需要修剪云台,请插入电池为其供电。确保您在水平面上启动它并保持静止,直到您听到哔哔声并且云台将初始化并尝试保持在稳定位置。如果该稳定位置与地平线不齐,则需要修剪云台电机。
首先,下载o323BGC 固件。这个 GUI 将允许我们修剪云台。下载名为:的 zip 文件很重要o323bgc-release-v090-v20160110
:
下载后,在您的文件夹中找到它,Downloads
然后双击 zip 文件将其打开。双击名为的文件夹o323bgc-release-v090-v20160110
,然后双击名为o323BGCTool_v090
. 它会提示你:
单击按钮并通过在第二个提示中Extract all
进行选择来提取文件。Extract
我选择了默认位置,因为我不需要长时间保留此应用程序。如果您确实计划在将来使用 GUI,那么将其解压缩到您的Program Files
文件夹中可能会有所帮助。
如果您保持Show extracted files when complete
选中状态,它应该会自动打开提取所有文件的文件夹。再次,双击名为的文件夹o323bgc-release-v090-v20160110
,然后双击名为o323BGCTool_v090
. 这次它将打开 GUI 应用程序。打开它时,您可能会收到更新提示。只是忽略该消息。
接下来,通过 Mini USB B 连接器将云台插入电脑。
然后,导航到 GUI 的左下角以选择正确的端口。我的是COM6
:
拔下任何/所有 USB 设备以避免 COM 端口之间的混淆也可能会有所帮助。
现在,单击Connect
端口下拉菜单旁边的按钮。它应该会读取有关云台板的大量信息,完成后应如下所示:
导航到Rc Inputs
选项卡:
您现在将看到调整修剪的选项。有一个选项Auto Trim
,但我发现手动执行它更容易。
首先,您需要插入电池并等待其初始化(等待哔声)。
然后,您可以在 GUI 中调整修剪并单击Write
按钮以使更改生效。作为参考,这里有一个很好的图表来解释 Pitch、Roll 和 Yaw 之间的区别:
一旦您的云台与地平线齐平,单击Disconnect
按钮并拔下 USB 数据线。
设置 PixHawk 4 相对简单。您需要做的就是遵循首次设置指南。它将引导您安装 Mission Planner(安装在笔记本电脑/PC 上)、刷新新固件和配置。
注意:配置飞行模式时,至少有Stabilize
、Guided
和RTL
模式很重要。Stabilize
将需要手动控制飞机,Guided
是允许 RPI 控制直升机的模式,并且RTL
作为安全机制很好。
完成后,按照首次飞行指南将您的无人机带上试飞。玩得开心驾驶你的无人机!
如果一切正常并且您有一个成功的处女座,我们可以开始设置飞控以与 RPI、云台和智能端口一起使用。
在 Mission Planner 上,单击CONFIG
选项卡并导航到以下Full Parameter List
部分:
我们将需要更改以下设置:
而不是滚动浏览所有参数选项,使用位于 Mission Planner 右侧的搜索功能非常重要:
进行适当的参数更改后,您可以单击Write Params
按钮应用更改。
现在我们可以设置我们的无线电控制器来接收实时遥测数据(电池、GPS 坐标等)。本教程使用 Taranis X9D+,但任何 Taranis 型号都可以使用。
首先,确保您的收音机已绑定到无人机的接收器。这个过程很简单。只需在您的收音机上创建一个新模型并导航到该Model Setup
页面。向下滚动到该Mode
部分并选择 D16。然后,向下滚动到该Receiver No.
部分并单击绑定按钮。现在,找到bind
无人机接收器上的按钮。按住此按钮,然后插入电池。继续按住此按钮,直到接收器上的灯变为绿色。一旦发生这种情况,您可以单击bind
发射器上的按钮来完成绑定过程。
我们现在可以在我们的发射器上安装一个 lua 脚本,它将以一种很好的格式组织我们所有的遥测数据:
第一步是使用最新的 OpenTX 版本刷新收音机。
首先,下载最新版本的 OpenTX 伴侣。转到 OpenTX下载页面并选择最新版本:
向下滚动到该Download links:
部分并下载并安装OpenTX Companion
到您的操作系统:
现在,通过在开机时向内按下两个水平微调按钮,将您的收音机置于引导加载程序模式:
现在将 USB 电缆插入收音机并将其连接到您的计算机。
打开已安装的 OpenTX Companion,然后单击Settings
顶行的按钮:
在Radio Profile
选项卡上,选择您的 Taranis 模型并选择noheli
和lua
复选框。然后选择Ok
按钮以保存您的更改:
接下来,单击Downloads
按钮:
在弹出的窗口中,单击Download firmware
按钮并保存 .bin 文件:
接下来,单击Download SD contents
将打开一个网站的按钮,您可以在其中下载您需要复制到收音机中的 SD 卡的 SD 卡内容。确保下载最新版本:
现在,首先备份计算机上的 SD 卡文件,然后删除其中的所有内容,并将新的 SD 卡文件复制到其中。然后从 、 和 文件夹中复制您之前拥有的任何自IMAGES
定义SOUNDS
文件MODELS
。
最后,我们可以将新固件刷写到收音机上。单击Write Firmware To Radio
左侧菜单上的按钮并加载您之前保存的固件文件。然后,单击Write to TX
按钮使收音机闪烁:
刷新收音机后,将此文件夹中的内容复制到收音机 SD 卡中。
打开你的收音机并导航到页面Display
并分配类型:yaapu9
Screen 1
Script
您还可以创建一个单独的遥测页面来显示 GPS 坐标。导航到Display
页面并将GPS
遥测变量分配给Screen 2
类型Nums
:
您的第二个遥测屏幕现在应该如下所示:
在我们开始驾驶这架直升机执行搜索和救援任务之前,我们需要运行一些测试程序以确保所有部件都能正常工作。
首先,我们需要测试 RPI 和飞控之间的 MavLink 连接。
在 RPI 上,运行connection_test.py
程序:
$ cd SAR_Drone
$ python connection_test.py
您应该得到类似的响应:
Connecting to vehicle on: serial0
>>> APM:Copter V4.0 (d6053245)
>>> Frame: QUAD
>>> Calibrating barometer
>>> Initialising APM...
>>> barometer calibration complete
>>> GROUND START
Get some vehicle attribute values:
GPS: GPSInfo:fix=3,num_sat=10
Battery: Battery:voltage=16.787,current=0.0,level=100
Last Heartbeat: 0.713999986649
Is Armable?: True
System status: STANDBY
Mode: STABILIZE
Completed
现在我们可以确认 RPI 可以与 PixHawk 4 通信,我们现在可以测试 RPI 和 Coral TPU 是否正常工作。
在 RPI 上,运行video_detect_test.py
程序:
$ python video_detect_test.py \
--model mobilenet_ssd_v2/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite \
--labels mobilenet_ssd_v2/coco_labels.txt
如果您连接了监视器或使用VNC ,您将看到来自 RPI 摄像头模块的视频源的弹出窗口。当您走到镜头前时,结果应该类似于演示中的视频。
现在我们可以确认 RPI 和 Coral TPU 正在相应地运行,我们可以开始驾驶无人机进行一些试飞。我们的第一个试飞计划将是takeoff_test.py
。但首先,我们需要对 RPI 进行编程以在启动时运行程序,因为我们将不再拥有现场的 SSH 控制权。
为此,我们需要 ~/.bashrc
再次编辑文件:
$ sudo nano ~/.bashrc
导航到文件底部并添加以下行:
workon sar
python /home/pi/SAR_Drone/takeoff_test.py
现在,将您的无人机带到现场并执行适当的预装安全检查。准备好布防后,将无人机切换到GUIDED
模式。不久之后,无人机应该武装自己,起飞到 10m,悬停 10 秒,然后降落,然后解除武装。
让我们开始使用该程序移动无人机。square_movement_test.py
和以前一样,编辑~/.bashrc
文件:
$ sudo nano ~/.bashrc
导航到文件底部,删除我们之前添加的内容,并将其替换为以下行:
workon sar
python /home/pi/SAR_Drone/square_movement_test.py
现在,将您的无人机带到现场并执行适当的预装安全检查。准备好布防后,将无人机切换到GUIDED
模式。不久之后,无人机应该武装自己,起飞到 10m,然后继续以大方形模式飞行,然后降落,并解除武装。
我们现在可以测试无人机是否能够使用该record_test.py
程序记录镜头、检测人类对象并同时飞行。
和以前一样,编辑~/.bashrc
文件:
$ sudo nano ~/.bashrc
导航到文件底部,删除我们之前添加的内容,并将其替换为以下行:
workon sar
python /home/pi/SAR_Drone/record_test.py \
--model /home/pi/SAR_Drone/mobilenet_ssd_v2/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite \
--labels /home/pi/SAR_Drone/mobilenet_ssd_v2/coco_labels.txt
现在,将您的无人机带到现场并执行适当的预装安全检查。准备好布防后,将无人机切换到GUIDED
模式。不久之后,无人机应该武装自己,起飞到 6m,悬停并记录摄像机镜头。确保站在无人机的摄像头前,以便它可以检测到人体主体。几秒钟后,您可以将飞行模式切换到RTL
它,它会降落到它启动的地方。
在 RPI 上,您会注意到SAR_Drone
存储库中有一个名为:output.mp4
. 打开它,你会注意到它的录音。确保相机能够在录制中检测到您。
如果无人机能够通过所有这些测试,那么您最终可以将无人机投入使用。如果您有任何问题,请随时自行调试或在评论部分寻求帮助。
我们现在可以~/.bashrc
最后一次编辑文件:
$ sudo nano ~/.bashrc
导航到文件底部,删除我们之前添加的内容,并将其替换为以下行:
workon sar
python /home/pi/SAR_Drone/main.py \
--model /home/pi/SAR_Drone/mobilenet_ssd_v2/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite \
--labels /home/pi/SAR_Drone/mobilenet_ssd_v2/coco_labels.txt
现在,将您的无人机带到现场并执行适当的预装安全检查。准备好布防后,将无人机切换到GUIDED
模式。不久之后,无人机应该武装自己并开始寻找失踪人员。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !