Air Strategist Companion 是一个由四旋翼无人机、Web 服务器和 Android 应用程序组成的系统,旨在提高森林消防人员的态势感知能力。该系统实时跟踪火点和消防人员,并在在线地图上显示他们的位置,该地图可以通过网络浏览器和安卓应用程序访问。无人机飞越火区,并使用带有计算机视觉的红外摄像机识别火点。它选择视野中最大的三个,以自主地遵循由它们组成的模式。如果火灾模式改变了形状、大小或位置,无人机将跟踪它并在没有人工干预的情况下重新定位。它还可以单独跟踪图案中的每个火点。每隔几秒,无人机将要在地图上绘制的检测到的火点的多边形近似值以及从其顶视图拍摄的相机照片上传到网络服务器。它还上传自己的 GPS 坐标、地速和全球/相对高度;笛卡尔坐标和每个火点的计算表面积和主要火灾模式,以及在其当前位置获取的地面温度读数。Web 服务器接收所有这些信息并将其可视化在网页上。该网页还有一个控制面板,可以从中选择多达七种无人机的自主跟踪任务模式。它还显示当前天气数据和未来 24 小时的预报天气数据。以及从其顶视图拍摄的相机照片。它还上传自己的 GPS 坐标、地速和全球/相对高度;笛卡尔坐标和每个火点的计算表面积和主要火灾模式,以及在其当前位置获取的地面温度读数。Web 服务器接收所有这些信息并将其可视化在网页上。该网页还有一个控制面板,可以从中选择多达七种无人机的自主跟踪任务模式。它还显示当前天气数据和未来 24 小时的预报天气数据。以及从其顶视图拍摄的相机照片。它还上传自己的 GPS 坐标、地速和全球/相对高度;笛卡尔坐标和每个火点的计算表面积和主要火灾模式,以及在其当前位置获取的地面温度读数。Web 服务器接收所有这些信息并将其可视化在网页上。该网页还有一个控制面板,可以从中选择多达七种无人机的自主跟踪任务模式。它还显示当前天气数据和未来 24 小时的预报天气数据。以及在其当前位置获取的地面温度读数。Web 服务器接收所有这些信息并将其可视化在网页上。该网页还有一个控制面板,可以从中选择多达七种无人机的自主跟踪任务模式。它还显示当前天气数据和未来 24 小时的预报天气数据。以及在其当前位置获取的地面温度读数。Web 服务器接收所有这些信息并将其可视化在网页上。该网页还有一个控制面板,可以从中选择多达七种无人机的自主跟踪任务模式。它还显示当前天气数据和未来 24 小时的预报天气数据。
定制开发的 Android 应用程序旨在安装在消防队员的移动设备中。该应用程序跟踪设备的 GPS 坐标并将其上传到 Web 服务器。系统检测到的所有机组人员的位置通过在线地图上的标记进行可视化,以及他们的姓名、ID 代码、GPS 坐标和当前状态。该应用程序在 GUI 中有一个“SOS 按钮”,机组成员可以在他们认为有必要的任何时候按下以向服务器发送“帮助”信号。可以从网络浏览器访问包含地图的网页,并且还显示在 Android 应用程序的 GUI 中。虽然这个原型使用红外摄像机来识别火点,但系统可以升级为使用热成像摄像机,只需极少的改动,以获得更强大的火灾探测系统。
图 1 显示了系统的主要功能组件。用于原型的无人机是 NXP 的 RDDRONE-FMUK66 HoverGames 四旋翼飞行器,带有 NXP RDDRONE-FMUK66 飞行管理单元 (FMU)。它配备了 Raspberry Pi 3 B+ 作为配套计算机和 Raspberry Pi NoIR V2.0 红外摄像头。为该原型选择了红外 (IR) 摄像头,因为火灾通常会发出红外辐射,可用于通过检测红外光而不是可见颜色来检测火灾,理论上即使在烟雾或灰尘后面也能检测到火点(假设相机能够检测给定燃烧类型发射的特定红外辐射波段)。
配套电脑自带独立电源,可在无人机关机换电池时保持运行。一个基于 OpenCV 的程序在其中运行,以访问摄像机的视频源并检测火点。摄像机安装在四旋翼的框架下方,向下指向地面。一旦检测到火点,算法就会选择三个最大的火点,并计算每个火点的几何近似多边形,以及它们在局部笛卡尔坐标中的对应位置以及它们对应的表面积。它还计算主火图案几何中心或质心的局部笛卡尔坐标。每隔几秒钟,还会从当前无人机的位置拍摄火区的顶视图,
配套计算机通过 MAVLink 协议通过串行端口连接从飞行控制器接收无人机遥测数据(当前 GPS 坐标、全球和相对高度、地速等)。这些数据以及来自计算机视觉系统的火灾跟踪数据通过 HTTP 协议发送到 Web 服务器。配套计算机使用机器人操作系统 (ROS) 中间件“粘合”其所有软件组件:传感器接口、计算机视觉、自主飞行、与服务器的 HTTP 通信以及与无人机飞行控制器的 MAVLink 接口。两个用 Python 编写的 ROS 节点和两个用 C++ 编写的节点负责所有必需的任务。出于“概念验证”的目的,无人机依靠 WiFi 连接向服务器上传/下载所有数据,但它可以通过 GPRS 蜂窝调制解调器轻松升级,以便在相对偏远的地区运行。图 2 显示了完整的无人机构建,图 3 显示了完整的系统,包括指挥中心计算机和几个移动设备。图 4 显示了安装在四轴飞行器底盘上的配套计算机,以及摄像头和温度传感器。图 5 显示了连接图,包括与飞控的接口。
在从无人机和机组成员的移动设备接收到所有上述数据后,服务器将执行额外的计算和数据转换,以准备提供上述网页(见图 6)。网页中的所有信息每隔几秒就会自动刷新一次。
如前所述,已经为消防人员开发了一个定制的 Android 应用程序(参见图 7)。该应用程序从机组成员的移动设备中读取 GPS 坐标,并将这些数据连同他的姓名、身份 (ID) 代码和当前状态一起发送到网络服务器。它还在其 GUI 中显示来自网络服务器的地图,并有一个“SOS 按钮”,消防员可以在认为必要的任何时间向服务器发送 SOS 信号。它还有一个“开始位置跟踪”按钮来启动设备的 GPS 位置跟踪和一个“停止位置跟踪”按钮来停止它,以及一些用于监控辅助数据的额外文本视图。
在指挥中心,负责人员可以监控系统提供的所有信息,同时控制无人机的自主跟踪任务模式,所有这些都来自同一个网页。可以从世界任何地方通过 Internet 连接访问该网页(因此系统应该授予访问权限,但这在此原型中被忽略了)。现场行动开始时,指挥中心的工作人员必须将无人机部署在火区周围;然后,他们必须激活无人机的“自主火力追踪模式”,让它完成任务。无人机被编程为在没有人为干预的情况下跟踪火点和机组人员。从网页(以及 Android 应用程序)可以命令它并将其置于七种不同的跟踪模式:
无论火灾向哪个方向前进或撤退,无人机都会根据从其视觉传感器获取的数据,通过将自身重新定位在主要火灾区域上来自主跟踪火点。一旦电池耗尽,无人机将返回起飞位置并着陆以更换电池,而无需关闭配套计算机,之后可以再次重新部署。
在无线电控制 (RC) 发射器的帮助下,指挥中心始终可以重新获得对无人机的手动控制,并再次将其切换到自主跟踪模式。此外,通过使用 PX4 自动驾驶仪的软件生态系统,无人机的完整遥测数据可通过使用地面站软件(例如 QGroundControl)在指挥中心计算机上获得,该软件通过遥测模块永久连接到无人机。地面站软件还显示了无人机当前位置及其描述的轨迹以及无数遥测数据的地图,如果需要,还可用于在手动控制和自主模式之间切换。因为该系统基于 ROS、实时视频源、原始火灾跟踪数据、消防人员的数据和来自飞行控制器的遥测数据也可以通过默认的 ROS 工具从任何安装了 ROS 的 Linux 计算机上实时访问。例如,来自相机图像处理算法的所有视频输入都可以作为 ROS 主题实时获得。
Raspberry Pi 配套计算机运行安装了 ROS Kinetic 的 Ubuntu MATE 16.04。以下 ROS 节点负责所有必需的任务:
'opencv_node':用 Python 编写,负责访问 Raspberry Pi NoIR 摄像头的实时视频源,并运行火灾检测算法以找到火点。随时可用的“raspicam_node”ROS 节点(请参阅参考资料部分)用于访问摄像机的视频源。该节点与摄像机对话,以获取视频流并将其发布到“opencv_node”订阅的“/raspicam_node/image/compressed”视频主题。在检测到火点后,配套计算机计算构成主要火灾模式的三个最大火点的几何近似多边形。然后它将每个多边形的定义顶点作为 JSON 字符串发布到“/fire_polygons_json”主题;以及每个火点的面积,到“/fire_polygons_area_json”主题。'/fire_pattern/pose_point' 主题中也提供了火灾模式质心的局部笛卡尔坐标。它还发布了“/fire_tracking_image/compressed”主题,该主题带有摄像机的原始视频图像,检测到的火点和近似多边形叠加。从同样的视频内容中,该节点每隔几秒就会在配套计算机的文件系统中保存一个图片帧,然后将其发送到服务器以显示在网页上(参见图 6)。该节点还发布包含相机帧当前宽度和高度的“/modified_image/size”主题,该主题也必须上传到服务器,以便从像素单位计算转换系数,其中表示长度和面积在相机图像中,到米,
已经实施了“运行平均低通滤波器”来过滤火灾模式质心坐标,以过滤火灾检测过程中固有的高频噪声。
'mlx90614_sensor_node':C++编写,负责读取MLX9014红外温度传感器的温度【参考mlx90614教程】。它发布包含温度读数的“/mlx90614/temp”主题。
'http_client_node' :用 Python 编写,订阅前面两个节点发布的所有上述主题,以及一些 MAVROS 主题。例如,它将订阅“/mavros/global_position/global”主题,从中获取无人机当前的纬度/经度坐标,以及全球海拔高度。它还将订阅“/mavros/global_position/rel_alt”,从中获取无人机相对于地面的当前相对高度;最后,到“/mavros/vfr_hud”主题,它将从中获取无人机的地面速度。然后,该节点将分四步继续与服务器交换数据:
这些数据每三秒在无人机和网络服务器之间交换一次。该节点接收到来自 web 服务器的数据后,会发布以下 ROS 主题:
'mavros_offboard_node':无人机通过使用MAVROS(这是MAVLink和ROS之间的桥梁)与同伴计算机接口,该节点负责通过发布到MAVROS主题来控制无人机的自主飞行能力,MAVLink命令将从派生并交付给无人机。该节点使用 C++ 编写,订阅以下主题:
该节点使用 PX4 “offboard” 飞行模式来控制无人机的位置,每次无人机的跟踪目标发生变化时,都会将新的位置坐标发布到 'mavros/setpoint_position/local' 主题。
Android 应用程序是使用 Android Studio IDE 在 Java 中开发的。GUI(参见图 7)由六个对象组成:
应用程序中有一个时间触发功能,负责收集 GPS 数据和当前状态(是否按下 SOS 按钮),并每隔几秒通过 HTTP POST 将数据发送到 Web 服务器。
网络服务器有一个带有 Javascript 代码的主网页,以及一组 PHP 脚本,负责接收来自无人机和机组成员移动设备的数据;以及从主网页的控制面板发出的无人机任务命令。让我们看看每个脚本的作用:
'receive_telemetry_xml.php' :此脚本从配套计算机接收 XML 遥测文件,其中包含以下数据:
收到 XML 文件后,脚本会继续将其副本保存在服务器的本地文件系统中。由于 XML 字符串的副本仍在 RAM 内存中,它会继续将所有接收到的距离和区域(以“相机像素”单位)转换为米。为此,它将计算“$pixel_to_meters”转换因子以将所有测量值从像素单位转换为米。图 8 显示了如何通过使用无人机相对于地面的相对高度、相机的视场角、相机图像大小和勾股定理来计算转换因子。预先做出一些假设以保持计算简单。接下来,借助这个转换因子,火焰多边形顶点和火焰图案质心的笛卡尔坐标从以像素为单位的局部笛卡尔坐标转换为极坐标,距离以米为单位,角度以弧度为单位。然后,将这些极坐标转换为全球经纬度坐标[参考 PHP 距离方位到 GPS]。
然后,该脚本将用新转换的 GPS 坐标替换 XML 字符串中的所有原始本地坐标,并将 XML 字符串作为名为“drone_telemetry_conv.xml”的新副本再次存储在服务器的本地文件系统中。该网页将使用新转换的 GPS 坐标来可视化地图中的火灾多边形。
'receive_image.php' : 该脚本负责接收消防摄像机镜头,之前由同伴计算机中的'opencv_node'保存;然后将显示在网页上并每隔几秒钟刷新一次。
'receive_fighter_data.php' :负责处理来自机组成员移动设备中 Android 应用程序的 HTTP POST 请求。该脚本以一组 [key:value] 对的形式接收消防员数据,其中包含以下可用键:“unix_time”、“name”、“id_code”、“latitude”、“longitude”和“status”。特别是“状态”键携带有关应用程序中的“SOS 按钮”是否被按下的信息。'unix_time' 是获得的 GPS 坐标和其余键的时间戳,我认为是不言自明的。该脚本将接收来自所有正在执行任务的消防员的数据,该应用程序当前在他们的移动设备上运行。然后它将数据存储在服务器本地文件系统中的单个文本文件中,
'dump_fighter_data_xml.php' :该脚本应主网页('index.html')的请求,将每个消防员的可用数据转储为 XML 字符串;网页每隔几秒异步请求一次,以在网页上可视化机组成员的信息。
“ receive_drone_task_cmd.php ”:负责从网页接收无人机任务命令,并将其存储在“drone_commands.xml”文件中。该文件由配套计算机中的“http_client_node”请求,以控制无人机的自主跟踪任务。
'index.html' : 是主网页,运行 Javascript 代码与 Google Maps API、OpenWeatherMap API 和我们自己的网络服务器进行交互,以实现以下任务:
Ajax 技术用于异步刷新上述所有动态数据,而无需重新加载页面。要访问 Google Maps API 和 OpenWeatherMap API,必须在网页的源代码中配置相应的 API 密钥才能访问这两种服务。
除了前面描述的在网页中可视化的对象之外,还有由地图上的点击事件触发的其他数据。图 11 显示了它们。例如,当单击代表无人机当前位置的地图标记时,会出现一个信息窗口,显示无人机的相对高度、地速、GPS 坐标以及在其当前位置测量的地面温度。单击代表火灾模式中心的地图标记时,类似的信息窗口会显示火灾覆盖的总面积(以平方米为单位)和中心的 GPS 坐标。通过单击三个火灾多边形中的任何一个,相应的信息窗口将显示所选火点的覆盖面积(以平方米为单位)以及发出鼠标单击的确切点的 GPS 坐标。最后一项功能有助于轻松获取任何被火覆盖的点的 GPS 坐标,可用于规划工作策略。最后,当单击任何代表机组成员的标记时,会显示消防员的姓名、状态(是否按下 SOS 按钮)、ID 代码和 GPS 坐标。此外,当战斗机状态为“正常”时,其对应的标记图标显示为绿色,当状态变为“帮助”时(按下 SOS 按钮后),标记图标变为红色。
与控制无人机相关的代码是使用模拟开发的。我使用了 PX4 Gazebo 'Software in The Loop' (SITL) 模拟器,在安装了 ROS melodic 的 Ubuntu 18.04 PC 上运行。
该系统在模拟中进行了广泛的测试并且表现非常好。遗憾的是,直到该项目的最终提交日期,没有足够的时间来测试该系统与真正的无人机飞行,但它已准备好进行现场测试,这将在不久的将来进行。
警告:建议使用适当的增量测试/调试策略,从第一个到最后一个分别仔细测试所有描述的步骤,以确保所有软件和硬件正常工作;在没有适当测试的情况下在真正的无人机上运行系统可能非常危险。您可以使用“testing_in_simulation.md”文件中详述的工作流程在模拟中首先测试系统。
该系统在仿真中表现得非常好。还需要用真正的四轴飞行器进行广泛的现场测试。计算机视觉火灾追踪效果很好;虽然火灾检测算法容易出现误报,因为相机还可以检测来自其他来源的红外光。当然,普通的红外热像仪并不是探测火灾的最佳方式。然而,它非常适合构建这个“概念验证”原型的目的。HoverGames 无人机硬件成本低廉且相对实惠。无人机本身经过了广泛的测试(尽管没有足够的时间与系统的其余部分进行测试)并且性能非常好。它对开发非常有用;然而,在某些情况下,对硬件进行一些升级是可取的,甚至是必要的。Raspberry Pi 3 B+ 配套计算机很好地管理了所有计算任务。有必要安装散热器和冷却风扇。在没有散热风扇的情况下,处理器温度轻松升高到 60+°C;随着冷却风扇的出现,温度降至 48°C 左右。
我希望将来对系统进行的一些改进如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !