针对道路、河道等进行飞行测量,驱动无人机进行 带状飞行 是常用手段。这里讨论如何对带状区域进行航线规划。

1. 计算带状区域

规划带状区域,常用的交互手段是让用户根据沿着道路/河道在地图上点击多个点生成一条折线,然后根据折线进行左右的外扩,以确立带状区域。

image.png
如上图,我们点击生成的点是 [0, 1, 2, 3, 4],

  • 根据用户设置的左右外扩距离,求出每个线段左右两边的 平行线 ,两条平行线距离线段的距离即左右外扩的距离。如上图,0-1 线段的平行线是 ab 和 gh , ab 到 0-1 距离是左外扩距离,gh 到 0-1 距离是右外扩距离。

  • 求出所有同一侧的平行线 相交的点 , 如上图,ab 和 de 相交于 c 点。这里还需要求出第一条线段和最后一条线段的垂直线与其平行线的交点,如上图则是 a,g,h,i 这四个点。这一步所求出所有的点即是构成整个带状区域的点。

2. 计算带状航线

根据旁向重叠率,我们可以求出航线之间的 间隔 ,而无人机的航线是平行于带状线段的,求每一条航线的点其实就跟上一节求其带状区域一样,只是将外扩的概念变成间隔的概念。

image.png

3. 计算航带切割点

因为无人机的飞行距离有限,为了高效率地执行,通常需要对航带进行切割,让无人机分段飞行。

其实切割航带,应该在计算航线之前,之所以先讲计算航线是因为这是一个归一化的问题,理解航线是怎样生成的,就能理解切割问题,因为航带的切割,其实就是给原有规划好的线段增加一些点,使其变成多个线段。如下一小节的图,我们将折线段铺直,利于理解。

第一次切割

首先 切割的距离 和整条 航带的总长度 是已知的,这里我们可以对航带进行等距离切割,最后可能会剩余一部分。如下图,切割的点是 B,D,F;则航带可分为 AB,BD,DF,还有剩余的部分。
image.png

根据重叠距离二次确定切割点

因为切割的航带之间需要有一定的重叠率,所以这里不能简单地用一次切割的点作为最终的切割点。

如上一节的图,我们将 BD 段的 起点 往前移动确定的重叠距离得到 C,依此类推剩余的切割段也进行移动。注意这里初始段是不变的,而切割剩余的部分我们后面会聊到。这样最终的切割段就为 AB,CD,EF。

处理切割剩余部分

对于切割剩余的部分,需要计算其长度,然后根据预定的极值以判断是归并到最后一个切割段,还是自己组成一个切割段。

如果 小于 最小切割距离,则归并到最后一个切割段:
如下图,EF 切割段纳入了剩余的切割段
image.png

如果 大于 最小切割距离,则与最后一个点组成切割段:
如下图,剩余的切割段为 GH
image.png

构建切割段与航点的函数

观察图形可以知道,切割的点都是落在原来规划好的航带点之间(或与之重叠)。我们可以构建这样一个方法:输入的是切割航带的起点和终点距离,输出是在这起点和终点之间包含的航带的点(也包含起点和终点),这样这些点就是组成每一个切割航带的点,根据”计算带状航线”的内容分别求出其航线即可。