禁飞区检测模块

功能说明

本模块为无人机配送场景提供禁飞区安全校验功能。用户输入取货点和送货点的经纬度坐标,模块自动判断这两个点是否落在预设的禁飞区范围内。

应用场景

在无人机执行配送任务前,需要确认航线起止点不会进入敏感区域(如机场、军事基地、学校上空)。本模块提供了一种基于球面距离的快速检测方法。

算法原理

使用 Haversine 公式 计算两个经纬度坐标之间的球面距离,公式如下:

其中:

  • φ₁、φ₂ 为两点的纬度(弧度)
  • Δφ、Δλ 为两点纬度和经度的差值
  • R 为地球平均半径,取值 6371000 米
  • d 为最终距离(米)

使用方法

需要配合 AirSim 模拟器运行:

cd src/air/no_fly_zone_check
python main.py

运行效果

程序启动后会尝试连接 AirSim 模拟器。

运行截图

说明:上图为本地启动 AirSim 1.8.1 模拟器并成功连接后的运行结果,获取到无人机位置并完成禁飞区检测

违规日志记录

当检测到无人机违规进入禁飞区时,程序会自动将违规时间、禁飞区名称、经纬度及距离信息记录到当前目录的 violation_log.csv 文件中。

终端输出示例: [警告] 无人机已经违规闯入禁飞区【Airport】,当前高度 0.7 米,请立即返航! [INFO] 违规记录已保存至 violation_log.csv

距离预警

当无人机距离禁飞区边缘小于 500 米时,系统会输出预警提示,提醒飞手提前规避。

距离预警示例

3D 禁飞区检测

除了平面坐标外,模块还引入了高度判断。当无人机在禁飞区内且高度超过 120 米时,系统会输出严重违规警告,确保低空空域安全。

低空违规测试(默认高度)

直接运行 python main.py,无人机位于地面(约 0.7 米),触发普通违规警告。

低空违规测试

高空严重违规测试

临时将代码中的高度变量设为 150.0 米,系统准确识别并触发严重违规警告。

高空严重违规测试

2D 可视化

无需启动 AirSim,直接生成禁飞区平面图(红圈为禁飞区,绿色三角为无人机位置): cd src/air/no_fly_zone_check python visualize.py

禁飞区 2D 可视化