农业无人机
工业无人机
军警无人机
娱教无人机
水下无人机
反无人机设备
无人机配件
无人机租赁
无人机培训
当前位置:全球无人机网 » 无人机技术 » 技术 » 正文

无人机航线规划思路剖析,基于凸多边形地块往复式运动

发布日期:2017-09-18  来源:CharTen我要投稿我要评论
  • 首先是创建多边形外接的矩形,将多边形顶点全部遍历一遍,取到最大和最小的经纬度值。经度最大为东,经度最小为西。纬度最大为北,纬度最小为南。将这几个组合一下,获得西北点,东北点,东南点和西南点,就可以弄出一个矩形出来
 无人机航线规划思路剖析,基于凸多边形地块往复式运动 
  • 然后是计算这个外接矩形穿过了多少条纬度线,跟之前那个场景是一样的。rect是上面那个函数创建的数组,可以看到西北点的索引是0,西南点的索引是3,所以计算西北到西南的点,也就是这个外接矩形的高度。这个方法返回有len条纬度线穿过,而且穿过的纬度相差lat。
   无人机航线规划思路剖析,基于凸多边形地块往复式运动
  • 最后就是结合上面几个场景,改写一下最终的生成函数,这里你是直接将生成的横线画了出来,如果需要做折线连接顺序处理,还需要声明一个数组去存储生成的点,比如当纬度线的索引是奇数时,横线从西往东画,也就是先放西边的点再放东边的点;如果纬度线索引是偶数时,横线从东往西画,也就是反过来。这里就留给你自己处理了
无人机航线规划思路剖析,基于凸多边形地块往复式运动 无人机航线规划思路剖析,基于凸多边形地块往复式运动

到这里,基本上已经完成了90%,剩下10%那部分最简单了。简单么?你歪着头问,到现在为止只是多边形与纬度线相交啊,现实中无人机又不可能都是沿着纬度在地图上横着飞!它可以在地图上沿任意方向飞行的,可上面的做法,只能让无人机横着走啊!
别急,你这时候要淡定,你要想想开头不是还留了一个transform函数么?
这个transform的作用是让坐标(x,y)绕着(tx,ty)旋转deg度后在缩放SySx倍得到一个的新坐标(_x,_y)。没错,这次我们要拿这些坐标进行旋转运动。
而且牛顿告诉过你:

运动都是相对的

先放一张gif图,看看如何绘制一个斜45度角的航线:


无人机航线规划思路剖析,基于凸多边形地块往复式运动
GIF.gif

先让多边形绕着中心点旋转想要的角度,将得到的新多边形再与纬度线做相交操作,获取到那些交点之后,再将那些交点旋转回来。换句话说,变换前它是一个任意多边形,变换后,它还是一个任意多边形,都是满足上面已经预设好的场景的。这样的好处显而易见,你不需要修改上面的任何一个函数,也不需要去多写一条两个一次函数求交点的公式。把问题化到最简单的场景去,只需要添加变换的代码:

无人机航线规划思路剖析,基于凸多边形地块往复式运动

这里你一定要牢记,lng是经度,对应x;lat是纬度,对应y(被leaflet框架坑哭的我QuQ。。。 然后,将原来的代码加上去

 无人机航线规划思路剖析,基于凸多边形地块往复式运动  无人机航线规划思路剖析,基于凸多边形地块往复式运动

小瑕疵

也许细心的你发现了,gif图里面转是转了,斜45度的角也是画出来了,但是旋转后的图形好像是被拉长了!旋转回来时又会被压肥回来。这个嘛。。。
这个问题其实我在写验证的时候也发现了,粗略计算多边形面积和航线扫过的面积的比值,总是发现0度的比值最接近于1,90度的比值最小,不管多边形是什么形状。
最开始我一直以为是面积算法的原因,直到写这篇文章的时候去写那个gif动画后才发现,多边形变换后变形了,转换后与纬度相交的数量变多了。而我猜想变形的原因可能是,地球并不是一个平面,它是弯的你知道吧,这些经纬度虽然是投影到了平面上了,但实际上它们是在一个球上。直接拿经纬度变换相当于先在球上做了旋转,然后在投影到地图的平面上,这样看起来就像是被拉长了。
所以,你不能直接变换经纬度,而是要将经纬度换算成地图上的像素坐标,变换完之后再转回来,这样图像就不会被拉长了。
因此先来两个像素系与经纬度坐标系转换的方法压压惊:

 无人机航线规划思路剖析,基于凸多边形地块往复式运动

然后将原来的createRotatePolygon函数改为

无人机航线规划思路剖析,基于凸多边形地块往复式运动

这样就解决了拉长的问题:

GIF.gif
GIF.gif
看到这里,相信你已经完全掌握了这种思路,即使你是使用iOS或者android的sdk,你也应该可以很快将思路“移植”过去。
至于那个折线的顺序,这个只是在push进polyline数组的时候判断一下i的奇偶修改不同的push顺序,很简单就得到那种折线效果,我相信你是会写的,这里就不着笔墨了。
更多的源码请访问:github.com/Char-Ten/cp…

写在最后

终于写完了此文,真是不容易。这个思路,从最开始思想混乱与Leaflet框架紧密耦合,到一步步解耦,到自己决定写一个适用于各个地图平台的库,到写这篇文章,差不多已经过去两个星期了。我发现,很多问题是你调试过程中发现不了的,等到你调试好了,决定写一篇装逼的文章,在写的过程中你就会发现各种调试中出现不了的问题,比如那个变换变形的问题。

在动手前,关于此类的教程文章少之又少,唯一可以找到比较符合场景的竟然是百度文库里面的一篇论文:
基于作业航向的不规则区域作业航线规划算法研究
论文懂吧,长倒是不长,就是臭,里面堆砌着各种奇奇怪怪的术语。之后看了两天后才明白他的实现思路,大同小异,只不过不知道他怎么搞的,新弄出一个坐标系出来,感觉这样是增加了思路的复杂度啊。所以在他的算法的基础上我做了简化,不做坐标系偏移,取代的是变换地块坐标,这样实现起来相对简单些。

因此在这里,小小贡献一下这个思路吧,也让以后有人像我这样被坑去写这种无人机航线规划的,能够很快地实现,不用再去看那些奇奇怪怪的论文了。。。

最后最后最后,安利一下github.com/Char-Ten/cp… 这个库(已经无耻到这个地步了。。。),可以接入百度、高德、leaflet,然后算航线!什么?你不需要。。。那你需要计算地图上多边形地块的面积不?我也提供算面积的方法,百度地图、高德地图都没有这种算面积的方法!好评给个star!谢谢大家!(够了喂!(╯‵□′)╯︵┻━┻)
如果你有更好的实现思路,或者新的使用场景,或者有使用问题,或者有bug,欢迎在下面评论。。。或者直接提issue: github.com/Char-Ten/cp…


 
本文链接:https://www.81uav.cn/tech/201709/18/528.html
标签:  
0相关评论
免责声明:凡注明来源全球无人机网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,请注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

图文推荐

推荐新闻

推荐品牌

关于本站

合作服务电话

  • 客服热线:0755-23779287
  • 展会负责:18682042306
  • 广告合作:点击这里给我发消息
  • 展会合作:点击这里给我发消息

公众号/APP下载


    (公众号)


    (Android下载)

Copyright©2005-2021 81UAV.CN All Rights Reserved  访问和使用全球无人机网,即表明您已完全接受和服从我们的用户协议。 SITEMAPS 网站地图 网站留言
运营商: 湛江中龙网络科技有限公司 全球无人机网 
ICP备案号:粤ICP备2023038372号-1 
全国公安机关 备案信息 可信网站不良举报 文明转播