農(nóng)業(yè)無人機
工業(yè)無人機
軍警無人機
娛教無人機
水下無人機
反無人機設(shè)備
無人機配件
無人機租賃
無人機培訓(xùn)
當前位置:全球無人機網(wǎng) ? 無人機技術(shù) ? 技術(shù) ? 正文

無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

發(fā)布日期:2017-09-18??來源:CharTen我要投稿我要評論
  • 首先是創(chuàng)建多邊形外接的矩形,將多邊形頂點全部遍歷一遍,取到最大和最小的經(jīng)緯度值。經(jīng)度最大為東,經(jīng)度最小為西。緯度最大為北,緯度最小為南。將這幾個組合一下,獲得西北點,東北點,東南點和西南點,就可以弄出一個矩形出來
 無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動 
  • 然后是計算這個外接矩形穿過了多少條緯度線,跟之前那個場景是一樣的。rect是上面那個函數(shù)創(chuàng)建的數(shù)組,可以看到西北點的索引是0,西南點的索引是3,所以計算西北到西南的點,也就是這個外接矩形的高度。這個方法返回有l(wèi)en條緯度線穿過,而且穿過的緯度相差lat。
   無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動
  • 最后就是結(jié)合上面幾個場景,改寫一下最終的生成函數(shù),這里你是直接將生成的橫線畫了出來,如果需要做折線連接順序處理,還需要聲明一個數(shù)組去存儲生成的點,比如當緯度線的索引是奇數(shù)時,橫線從西往東畫,也就是先放西邊的點再放東邊的點;如果緯度線索引是偶數(shù)時,橫線從東往西畫,也就是反過來。這里就留給你自己處理了
無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動 無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

到這里,基本上已經(jīng)完成了90%,剩下10%那部分最簡單了。簡單么?你歪著頭問,到現(xiàn)在為止只是多邊形與緯度線相交啊,現(xiàn)實中無人機又不可能都是沿著緯度在地圖上橫著飛!它可以在地圖上沿任意方向飛行的,可上面的做法,只能讓無人機橫著走?。?br /> 別急,你這時候要淡定,你要想想開頭不是還留了一個transform函數(shù)么?
這個transform的作用是讓坐標(x,y)繞著(tx,ty)旋轉(zhuǎn)deg度后在縮放SySx倍得到一個的新坐標(_x,_y)。沒錯,這次我們要拿這些坐標進行旋轉(zhuǎn)運動。
而且牛頓告訴過你:

運動都是相對的

先放一張gif圖,看看如何繪制一個斜45度角的航線:


無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動
GIF.gif

先讓多邊形繞著中心點旋轉(zhuǎn)想要的角度,將得到的新多邊形再與緯度線做相交操作,獲取到那些交點之后,再將那些交點旋轉(zhuǎn)回來。換句話說,變換前它是一個任意多邊形,變換后,它還是一個任意多邊形,都是滿足上面已經(jīng)預(yù)設(shè)好的場景的。這樣的好處顯而易見,你不需要修改上面的任何一個函數(shù),也不需要去多寫一條兩個一次函數(shù)求交點的公式。把問題化到最簡單的場景去,只需要添加變換的代碼:

無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

這里你一定要牢記,lng是經(jīng)度,對應(yīng)x;lat是緯度,對應(yīng)y(被leaflet框架坑哭的我QuQ。。。 然后,將原來的代碼加上去

 無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動  無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

小瑕疵

也許細心的你發(fā)現(xiàn)了,gif圖里面轉(zhuǎn)是轉(zhuǎn)了,斜45度的角也是畫出來了,但是旋轉(zhuǎn)后的圖形好像是被拉長了!旋轉(zhuǎn)回來時又會被壓肥回來。這個嘛。。。
這個問題其實我在寫驗證的時候也發(fā)現(xiàn)了,粗略計算多邊形面積和航線掃過的面積的比值,總是發(fā)現(xiàn)0度的比值最接近于1,90度的比值最小,不管多邊形是什么形狀。
最開始我一直以為是面積算法的原因,直到寫這篇文章的時候去寫那個gif動畫后才發(fā)現(xiàn),多邊形變換后變形了,轉(zhuǎn)換后與緯度相交的數(shù)量變多了。而我猜想變形的原因可能是,地球并不是一個平面,它是彎的你知道吧,這些經(jīng)緯度雖然是投影到了平面上了,但實際上它們是在一個球上。直接拿經(jīng)緯度變換相當于先在球上做了旋轉(zhuǎn),然后在投影到地圖的平面上,這樣看起來就像是被拉長了。
所以,你不能直接變換經(jīng)緯度,而是要將經(jīng)緯度換算成地圖上的像素坐標,變換完之后再轉(zhuǎn)回來,這樣圖像就不會被拉長了。
因此先來兩個像素系與經(jīng)緯度坐標系轉(zhuǎn)換的方法壓壓驚:

 無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

然后將原來的createRotatePolygon函數(shù)改為

無人機航線規(guī)劃思路剖析,基于凸多邊形地塊往復(fù)式運動

這樣就解決了拉長的問題:

GIF.gif
GIF.gif
看到這里,相信你已經(jīng)完全掌握了這種思路,即使你是使用iOS或者android的sdk,你也應(yīng)該可以很快將思路“移植”過去。
至于那個折線的順序,這個只是在push進polyline數(shù)組的時候判斷一下i的奇偶修改不同的push順序,很簡單就得到那種折線效果,我相信你是會寫的,這里就不著筆墨了。
更多的源碼請訪問:github.com/Char-Ten/cp…

寫在最后

終于寫完了此文,真是不容易。這個思路,從最開始思想混亂與Leaflet框架緊密耦合,到一步步解耦,到自己決定寫一個適用于各個地圖平臺的庫,到寫這篇文章,差不多已經(jīng)過去兩個星期了。我發(fā)現(xiàn),很多問題是你調(diào)試過程中發(fā)現(xiàn)不了的,等到你調(diào)試好了,決定寫一篇裝逼的文章,在寫的過程中你就會發(fā)現(xiàn)各種調(diào)試中出現(xiàn)不了的問題,比如那個變換變形的問題。

在動手前,關(guān)于此類的教程文章少之又少,唯一可以找到比較符合場景的竟然是百度文庫里面的一篇論文:
基于作業(yè)航向的不規(guī)則區(qū)域作業(yè)航線規(guī)劃算法研究
論文懂吧,長倒是不長,就是臭,里面堆砌著各種奇奇怪怪的術(shù)語。之后看了兩天后才明白他的實現(xiàn)思路,大同小異,只不過不知道他怎么搞的,新弄出一個坐標系出來,感覺這樣是增加了思路的復(fù)雜度啊。所以在他的算法的基礎(chǔ)上我做了簡化,不做坐標系偏移,取代的是變換地塊坐標,這樣實現(xiàn)起來相對簡單些。

因此在這里,小小貢獻一下這個思路吧,也讓以后有人像我這樣被坑去寫這種無人機航線規(guī)劃的,能夠很快地實現(xiàn),不用再去看那些奇奇怪怪的論文了。。。

最后最后最后,安利一下github.com/Char-Ten/cp… 這個庫(已經(jīng)無恥到這個地步了。。。),可以接入百度、高德、leaflet,然后算航線!什么?你不需要。。。那你需要計算地圖上多邊形地塊的面積不?我也提供算面積的方法,百度地圖、高德地圖都沒有這種算面積的方法!好評給個star!謝謝大家?。▔蛄宋?!(╯‵□′)╯︵┻━┻)
如果你有更好的實現(xiàn)思路,或者新的使用場景,或者有使用問題,或者有bug,歡迎在下面評論。。。或者直接提issue: github.com/Char-Ten/cp…


?
本文鏈接:http://top-g.com.cn/tech/201709/18/528.html
標簽:??
0相關(guān)評論
免責聲明:凡注明來源全球無人機網(wǎng)的所有作品,均為本網(wǎng)合法擁有版權(quán)或有權(quán)使用的作品,歡迎轉(zhuǎn)載,請注明出處。非本網(wǎng)作品均來自互聯(lián)網(wǎng),轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責。

圖文推薦

推薦新聞

推薦品牌

關(guān)于本站

合作服務(wù)電話

  • 客服熱線:0755-23779287
  • 展會負責:18682042306
  • 廣告合作:點擊這里給我發(fā)消息
  • 展會合作:點擊這里給我發(fā)消息

公眾號/APP下載


    (公眾號)


    (Android下載)

Copyright?2005-2021 81UAV.CN All Rights Reserved? 訪問和使用全球無人機網(wǎng),即表明您已完全接受和服從我們的用戶協(xié)議。 SITEMAPS 網(wǎng)站地圖 網(wǎng)站留言
運營商: 湛江中龍網(wǎng)絡(luò)科技有限公司 全球無人機網(wǎng)?
ICP備案號:粵ICP備2023038372號-1 
全國公安機關(guān)?備案信息?可信網(wǎng)站不良舉報?文明轉(zhuǎn)播