无人机面装任务航线生成:支持凹多边形与地形高程的往复式(Lawnmower)路径算法

内容分享6小时前发布
0 0 0

算法核心思路

1. 输入标准化

支持两种点格式:



[[x, y, z], [x, y, z], ...] 
// 或
[{x, y, z}, {x, y, z}, ...]

自动补全缺失的
z
值为 0。

2. 地形平面拟合(关键!)

由于无人机无法沿任意曲面飞行,我们采用最小二乘法拟合一个最佳平面

z=A⋅x+B⋅y+C

💡 技巧:为避免大坐标(如 ECEF,量级 1e6)导致数值不稳定,先对点集进行中心化处理,再解线性方程组,最后还原参数。这极大提升了算法鲁棒性。

若点共线或共面退化,则回退到平均高程
C

3. 坐标系旋转 + 扫描线填充

将多边形按指定航向角 
headingDegrees
 旋转,使扫描方向对齐 X 轴在 Y 方向以 
spacing
 为步长,逐行计算与多边形边的交点成对交点构成有效线段(需用射线法判断中点是否在多边形内)对凹多边形,自动跳过外部“空洞”区域

4. 路径拼接与坐标还原

奇数行正向,偶数行反向,形成“之”字形将旋转后的 2D 路径反变换回原始坐标系每个 (x, y) 点代入拟合平面,得到对应 
z

5. 起终点优化

可选插入起飞点 
homePoint
自动在路径末尾添加多边形质心点(便于返航或悬停)


代码解析

✅ 高精度数值处理



const det = sxx * syy - sxy * sxy;
if (Math.abs(det) < 1e-14 * scale * scale) { /* 退化处理 */ }

使用相对阈值判断矩阵奇异,适应不同坐标尺度(WGS84 vs ECEF)。

✅ 凹多边形支持

通过射线交叉法(Ray Casting)严格判断线段中点是否在多边形内部,确保只保留有效覆盖段。

✅ 无依赖、纯函数

整个算法不依赖任何 GIS 库(如 Turf.js),仅用基础数学,可轻松移植到 Web、Node.js、甚至嵌入式设备。


Cesium 可视化集成

配套提供
drawLawnmowerPathCesium
函数,自动识别输入坐标类型:

若 
[lon, lat, height]
(经度、纬度、高程)→ 调用 
Cesium.Cartesian3.fromDegrees
若 
[x, y, z]
(ECEF 笛卡尔)→ 直接构造 
Cartesian3

支持绘制航线折线 + 控制点,便于调试与展示:



const points = generateLawnmowerPathXYZ(polygon, 45, 10);
drawLawnmowerPathCesium(viewer, points, { drawPoints: true });

🌍 提示:在 Cesium 中,建议关闭
clampToGround
以真实反映高程变化。

无人机面装任务航线生成:支持凹多边形与地形高程的往复式(Lawnmower)路径算法

无人机面装任务航线生成:支持凹多边形与地形高程的往复式(Lawnmower)路径算法

© 版权声明

相关文章

暂无评论

none
暂无评论...