本發(fā)明涉及算法設(shè)計及仿真領(lǐng)域,特別涉及一種基于禁飛區(qū)約束的航路規(guī)劃方法與裝置。
背景技術(shù):
無人機(jī)能夠高、低空飛行,以其靈活、便捷的特點(diǎn)可以完成噴灑農(nóng)藥、安全監(jiān)控等特定任務(wù)。在完成任務(wù)的飛行過程中,無人機(jī)會遇到高樓、高壓電線、安全禁飛等區(qū)域,此時,無人機(jī)需要繞過禁飛區(qū)域飛到待執(zhí)行任務(wù)的區(qū)域。此外,無人機(jī)在完成特定任務(wù)的飛行過程中,帶載能源有限,飛行的時間有限,因此,無人機(jī)需要在有限的時間內(nèi)完成特定的任務(wù),這就需要在飛行前求解可行航線,選擇最優(yōu)的航線飛行;同時,當(dāng)飛行過程中遇到規(guī)劃外的禁飛區(qū)域時,可以實(shí)時求解可行航線并選擇最優(yōu)的航線來飛行。
現(xiàn)有技術(shù)中,求解無人機(jī)的可行航線的重要途徑是采用航路規(guī)劃算法,目前,航路規(guī)劃算法很多,常用的算法有基于圖論的幾何方法和智能規(guī)劃算法。
技術(shù)實(shí)現(xiàn)要素:
發(fā)明人在研究過程中發(fā)現(xiàn),現(xiàn)有的基于圖論的幾何方法要求用來表示規(guī)劃空間或狀態(tài)空間的圖模型中,必須羅列出對應(yīng)空間所有可能的航線,否則該方法就可能丟失最優(yōu)解。此外,由于智能航路規(guī)劃算法解算過程通常比較耗時,使得無人機(jī)遇到規(guī)劃外的禁飛區(qū)域時,不能實(shí)時地求解出最優(yōu)的航線。
有鑒于此,本發(fā)明的主要目的是提供一種基于禁飛區(qū)約束的航路規(guī)劃方法與裝置,既可以實(shí)現(xiàn)在無人機(jī)飛行前對規(guī)劃空間最優(yōu)航線的求解,還可以實(shí)現(xiàn)無人機(jī)遇到規(guī)劃外的禁飛區(qū)域時,實(shí)時對最優(yōu)航線的求解,并且在求解最優(yōu)航線的過程中不丟失最優(yōu)解。
為了解決上述問題,本發(fā)明公開了一種基于禁飛區(qū)約束的航路規(guī)劃方法,該方法應(yīng)用于無人機(jī)上,該方法包括:
將所述無人機(jī)從起點(diǎn)位置到終點(diǎn)位置之間的禁飛區(qū)域中的交叉區(qū)域和密集小區(qū)域進(jìn)行分片,得到不同的分片禁飛區(qū)域;
將每個所述分片禁飛區(qū)域的外切圓包含的區(qū)域確定為圓形禁飛區(qū)域;
在所述圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置間的各直線可行路徑和可行航路點(diǎn),所述可行航路點(diǎn)為所述直線可行路徑與所述圓形禁飛區(qū)域的交點(diǎn);
根據(jù)所述直線可行路徑確定從所述起點(diǎn)位置到所述終點(diǎn)位置間的所有可行航線;
依據(jù)所述所有可行航線與所述可行航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
其中,所述依據(jù)所述所有可行航線與所述可行航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路,包括:
從所述所有可行航線中選擇路徑最短的航線為最優(yōu)航線;
根據(jù)所述可行航路點(diǎn)的屬性為入切點(diǎn)還是出切點(diǎn),確定所述最優(yōu)航線中相鄰兩條所述直線可行路徑中相鄰的兩個所述可行航路點(diǎn)間的飛行模式,得到所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
其中,所述根據(jù)所述可行航路點(diǎn)的屬性為入切點(diǎn)還是出切點(diǎn),確定所述最優(yōu)航線中相鄰兩條所述直線可行路徑中相鄰的兩個所述可行航路點(diǎn)間的飛行模式,包括:
若所述最優(yōu)航線中所述相鄰兩條直線可行路徑中所述相鄰的兩個可行航路點(diǎn)是由出切點(diǎn)到入切點(diǎn),則采用直線飛行模式,所述出切點(diǎn)為根據(jù)所述可行航線的方向離開所述圓形禁飛區(qū)域的直線可行路徑與所述圓形禁飛區(qū)域的切點(diǎn),所述入切點(diǎn)為根據(jù)所述可行航線的方向飛入所述圓形禁飛區(qū)域的直線可行路徑與所述圓形禁飛區(qū)域的切點(diǎn);
若所述最優(yōu)航線中相鄰兩條直線可行路徑中所述相鄰的兩個可行航路點(diǎn)是由所述入切點(diǎn)到所述出切點(diǎn),則采用弧線飛行模式。
其中,所述在所述圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置間的各直線可行路徑和可行航路點(diǎn),包括:
獲取所述起點(diǎn)位置作為當(dāng)前位置;
針對所述當(dāng)前位置,執(zhí)行當(dāng)前直線可行路徑的尋找流程,所述尋找流程包括:
確定所述當(dāng)前位置與所述終點(diǎn)位置之間的當(dāng)前連接線;
判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域;
如果所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域,則確定所述當(dāng)前連接線上距離所述當(dāng)前位置最近的圓形禁飛區(qū)域,并確定所述當(dāng)前位置所在圓形禁飛區(qū)域與所述距離最近的圓形禁飛區(qū)域間,經(jīng)過所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若否,判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交;如果否,則確定所述當(dāng)前公切線為當(dāng)前直線可行路徑;
以所述當(dāng)前直線可行路徑的終點(diǎn)為當(dāng)前位置,執(zhí)行所述尋找流程,直至所述起點(diǎn)位置到所述終點(diǎn)位置之間的所有直線可行路徑確定完畢。
其中,所述判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交,還包括:
如果相交,則將與所述當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域和所述當(dāng)前公切線確定的路徑的終點(diǎn)所在的圓形禁飛區(qū)域間的在所述當(dāng)前公切線側(cè)的外公切線,作為當(dāng)前連接線,執(zhí)行判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域的步驟。
其中,針對所述當(dāng)前位置,執(zhí)行當(dāng)前直線可行路徑的尋找流程,所述尋找流程,還包括:
如果所述當(dāng)前連接線不經(jīng)過所述圓形禁飛區(qū)域,判斷所述當(dāng)前位置是否為所述終點(diǎn)位置,若是所述終點(diǎn)位置,則確定所述當(dāng)前連接線為所述當(dāng)前直線可行路徑;
若不是所述終點(diǎn)位置,則計算所述終點(diǎn)位置到所述當(dāng)前位置所在圓形禁飛區(qū)域的所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若經(jīng)過,將所述當(dāng)前公切線作為當(dāng)前連接線,執(zhí)行所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域的步驟;
若不經(jīng)過,則確定所述當(dāng)前連接線為當(dāng)前直線可行路徑。
本發(fā)明還提供了一種基于禁飛區(qū)約束的航路規(guī)劃裝置,該裝置集成在無人機(jī)上,其特征在于,該裝置包括:
獲取單元,用于將所述無人機(jī)從起點(diǎn)位置到終點(diǎn)位置之間的禁飛區(qū)域中的交叉區(qū)域和密集小區(qū)域進(jìn)行分片,得到不同的分片禁飛區(qū)域;
第一確定單元,用于將每個所述分片禁飛區(qū)域的外切圓包含的區(qū)域確定為圓形禁飛區(qū)域;
計算單元,用于在所述圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置間的各直線可行路徑和可行航路點(diǎn),所述可行航路點(diǎn)為所述直線可行路徑與所述圓形禁飛區(qū)域的交點(diǎn);
第二確定單元,用于根據(jù)所述直線可行路徑確定從所述起點(diǎn)位置到所述終點(diǎn)位置間的所有可行航線;
第三確定單元,用于依據(jù)所述所有可行航線與所述可行航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
所述第三確定單元包括:
第一確定子單元,用于從所述所有可行航線中選擇路徑最短的航線為最優(yōu)航線。
第二確定子單元,用于根據(jù)所述可行航路點(diǎn)的屬性為入切點(diǎn)還是出切點(diǎn),確定所述最優(yōu)航線中相鄰兩條所述直線可行路徑中相鄰的兩個所述可行航路點(diǎn)間的飛行模式,得到所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
其中,所述第二確定子單元,具體用于:
在所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由出切點(diǎn)到入切點(diǎn)的情況下,則確定采用直線飛行模式;或者,在所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由入切點(diǎn)到出切點(diǎn),則采用弧線飛行模式,所述出切點(diǎn)為根據(jù)可行航線的方向離開圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域的切點(diǎn),所述入切點(diǎn)為根據(jù)可行航線的方向飛入圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域的切點(diǎn)。
其中,所述計算單元包括:
獲取子單元,用于獲取所述起點(diǎn)位置作為當(dāng)前位置。
執(zhí)行子單元,用于針對所述當(dāng)前位置,確定所述當(dāng)前位置與所述終點(diǎn)位置之間的當(dāng)前連接線;
判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域;
如果所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域,則確定所述當(dāng)前連接線上距離所述當(dāng)前位置最近的圓形禁飛區(qū)域,并確定所述當(dāng)前位置所在圓形禁飛區(qū)域與所述距離最近的圓形禁飛區(qū)域間,經(jīng)過所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若否,判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交;如果否,則確定所述當(dāng)前公切線為當(dāng)前直線可行路徑。
觸發(fā)子單元,用于以所述當(dāng)前直線可行路徑的終點(diǎn)為當(dāng)前位置,尋找從當(dāng)前位置開始的直線可行路徑,直至所述起點(diǎn)位置到所述終點(diǎn)位置之間的所有直線可行路徑確定完畢。
其中,所述執(zhí)行子單元,還用于:
如果所述當(dāng)前連接線不經(jīng)過所述圓形禁飛區(qū)域,判斷所述當(dāng)前位置是否為所述終點(diǎn)位置,若是所述終點(diǎn)位置,則確定所述當(dāng)前連接線為所述當(dāng)前直線可行路徑;
若不是所述終點(diǎn)位置,則計算所述終點(diǎn)位置到所述當(dāng)前位置所在圓形禁飛區(qū)域的所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若經(jīng)過,將所述當(dāng)前公切線作為當(dāng)前連接線,執(zhí)行所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域的步驟;
若不經(jīng)過,則確定所述當(dāng)前連接線為當(dāng)前直線可行路徑。
其中,所述判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交,還可以包括:
如果相交,則將與所述當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域和所述當(dāng)前公切線確定的路徑的終點(diǎn)所在的圓形禁飛區(qū)域間的在所述當(dāng)前公切線側(cè)的外公切線,作為當(dāng)前連接線,執(zhí)行判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域的步驟。
與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
為了實(shí)現(xiàn)無人機(jī)飛行前求解出最優(yōu)航線,以及在飛行過程中遇到規(guī)劃外的禁飛區(qū)域時可以實(shí)時求解出最優(yōu)航線,并且不丟失最優(yōu)解,本發(fā)明提出了基于禁飛區(qū)約束的航路規(guī)劃方法與裝置。本發(fā)明在求解最優(yōu)航線的過程中,將規(guī)劃空間中的禁飛區(qū)域分片整合成外切圓區(qū)域,并對外切圓區(qū)域采用公切線方法解算可行航線和航路點(diǎn),簡化了求解最優(yōu)航線的思路,使其不容易丟失最優(yōu)航線,并且求解速度更快,同時,所選的最優(yōu)航線適合無人機(jī)的飛行模式并且是最短的航線,使得無人機(jī)實(shí)際飛行的時間縮短,克服了現(xiàn)有技術(shù)中基于圖論的幾何算法可能丟失最優(yōu)解以及智能航線規(guī)劃算法耗時的缺點(diǎn),從而確保無人機(jī)在有限的時間內(nèi)完成特定的任務(wù)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1是本發(fā)明中一種基于禁飛區(qū)約束的航路規(guī)劃方法的方法流程圖;
圖2(a)是本發(fā)明中依據(jù)交叉區(qū)域得到的圓形禁飛區(qū)域的示意圖;
圖2(b)是本發(fā)明中依據(jù)密集小區(qū)域得到的圓形禁飛區(qū)域的示意圖;
圖3是本發(fā)明中求解起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑的方法流程圖;
圖4(a)是本發(fā)明中兩條直線路徑組成的存在繞飛路徑的示意圖;
圖4(b)是本發(fā)明中存在繞飛路徑時計算得到新路徑的示意圖;
圖5是本發(fā)明中對禁飛區(qū)域進(jìn)行規(guī)劃得到圓形禁飛區(qū)域的方法流程圖;
圖6是本發(fā)明中尋找從起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑的方法流程圖;
圖7是本發(fā)明中一種基于禁飛區(qū)約束的航路規(guī)劃裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
在無人機(jī)需要從起點(diǎn)位置飛到終點(diǎn)位置完成特定的任務(wù)的時候,無人機(jī)從起點(diǎn)位置飛到終點(diǎn)位置的飛行區(qū)域是三維空間區(qū)域,為了方便對無人機(jī)在三維空間的航路進(jìn)行規(guī)劃,通常將無人機(jī)可能經(jīng)過的空間進(jìn)行簡化,如將三維空間簡化為平面空間,將禁飛區(qū)域簡化為簡單的幾何形狀等。
本發(fā)明在規(guī)劃無人機(jī)從起點(diǎn)位置到終點(diǎn)位置之間的航路時,將無人機(jī)可能經(jīng)過的三維空間區(qū)域簡化為平面區(qū)域,并按照三維空間中禁飛區(qū)域是否存在交叉情況以及禁飛區(qū)域的密集程度,對禁飛區(qū)域進(jìn)行分片得到分片禁飛區(qū)域,并將每個禁飛區(qū)域的外切圓包含的區(qū)域確定為圓形禁飛區(qū)域;然后,在圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解從起點(diǎn)位置到終點(diǎn)位置的各直線可行路徑與可行航路點(diǎn);最后,根據(jù)各直線可行路徑確定從起點(diǎn)位置到終點(diǎn)位置之間的可行航線,將可行航線中最短路徑的航線確定為最優(yōu)航線,根據(jù)最優(yōu)航線的可行航路點(diǎn)的屬性確定相鄰兩條直線可行路徑間的飛行模式,進(jìn)而得到從起點(diǎn)位置到終點(diǎn)位置間的最優(yōu)航路。
為了使本領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步的詳細(xì)說明。
實(shí)施例1
圖1,是本發(fā)明實(shí)施例1提供的一種航路規(guī)劃方法的流程圖,該方法包括:
步驟S101:將所述無人機(jī)的、從起點(diǎn)位置到終點(diǎn)位置之間的禁飛區(qū)域中的交叉區(qū)域和密集小區(qū)域進(jìn)行分片,得到不同的分片禁飛區(qū)域。
一般情況下,無人機(jī)從起點(diǎn)位置到終點(diǎn)位置的飛行區(qū)域是以北、東和天三個方向確定的三維區(qū)域,其中,起點(diǎn)位置為此三維坐標(biāo)系的原點(diǎn)。在此三維空間區(qū)域中有多個禁飛區(qū)域,為了方便求解無人機(jī)從起點(diǎn)位置到終點(diǎn)位置的最優(yōu)航路,將此三維空間中的三維禁飛區(qū)域在北和東兩個方向確定的平面內(nèi)投影,得到平面禁飛區(qū)域,因此,就可以將求解無人機(jī)在三維空間的最優(yōu)航路問題簡化為:求解在北和東兩個方向確定的平面內(nèi),平面禁飛區(qū)域間的最優(yōu)航路問題。為了方便表述,在下文中將出現(xiàn)的平面禁飛區(qū)域統(tǒng)稱為禁飛區(qū)域。
又因為在北和東兩個方向確定的平面內(nèi),存在多個形狀和分布不規(guī)則的禁飛區(qū)域,所以為了方便求解此平面內(nèi)無人機(jī)的最優(yōu)航路,將各禁飛區(qū)域按照是否是交叉區(qū)域或密集小區(qū)域進(jìn)行分片,得到各分片禁飛區(qū)域。其中,交叉區(qū)域是指禁飛區(qū)域相交所形成的區(qū)域,每一個交叉區(qū)域為一個分片禁飛區(qū)域;密集小區(qū)域是相鄰的禁飛區(qū)域間的距離大于無人機(jī)最小轉(zhuǎn)彎半徑并且小于無人機(jī)最小轉(zhuǎn)彎半徑的2倍,每一個密集小區(qū)域也為一個分片禁飛區(qū)域;以及,將所有禁飛區(qū)域中除了交叉區(qū)域與密集小區(qū)域之外的每一個禁飛區(qū)域也確定為一個分片禁飛區(qū)域。
步驟S102:將每個分片禁飛區(qū)域的外切圓包含的區(qū)域確定為圓形禁飛區(qū)域。
為了方便求解起點(diǎn)位置到終點(diǎn)位置間所有分片禁飛區(qū)域間的最優(yōu)航路,做每個分片禁飛區(qū)域的外切圓,將得到的每個外切圓包含的區(qū)域確定為圓形禁飛區(qū)域,以便在此圓形禁飛區(qū)域的基礎(chǔ)上,采用圓的內(nèi)外公切線的方法求解起點(diǎn)位置到終點(diǎn)位置間的各直線可行路徑與可行航路點(diǎn)。例如,針對交叉區(qū)域,可以做一個能包括每一個交叉的禁飛區(qū)域的最小外切圓作為圓形禁飛區(qū)域;針對密集小區(qū)域,則可以做一個包括密集小區(qū)域中的每一個禁飛區(qū)域的最小外切圓作為圓形禁飛區(qū)域,其他分片禁飛區(qū)域,則按照能包括該分片禁飛區(qū)域內(nèi)所有區(qū)域的最小外切圓作為圓形禁飛區(qū)域。具體可以參考圖2(a)和圖2(b)所示,其中,圖2(a)為依據(jù)交叉區(qū)域得到的圓形禁飛區(qū)域的示意圖,圖2(b)是依據(jù)密集小區(qū)域得到的圓形禁飛區(qū)域的示意圖。
步驟S103:在所述圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置間的各直線可行路徑和可行航路點(diǎn),所述可行航路點(diǎn)為所述直線可行路徑與圓形禁飛區(qū)域的交點(diǎn)。
本步驟S103在圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置的各直線可行路徑和可行航路點(diǎn)。其中,所要求解的直線可行路徑為兩個圓形禁飛區(qū)域間的直線路徑且不經(jīng)過其他圓形禁飛區(qū)域,直線可行路徑與圓形禁飛區(qū)域的交點(diǎn)為可行航路點(diǎn)。
具體的,求解直線可行路徑與可行航路點(diǎn)的流程如圖3所示,其流程包括步驟S301~步驟S312:
步驟S301:獲取所述起點(diǎn)位置作為當(dāng)前位置。
首先,將無人機(jī)待起飛的起點(diǎn)位置作為當(dāng)前位置,找到從當(dāng)前位置所在圓形禁飛區(qū)域出發(fā)的直線可行路徑。
步驟S302:針對所述當(dāng)前位置,確定所述當(dāng)前位置與所述終點(diǎn)位置之間的當(dāng)前連接線。
在確定了當(dāng)前位置后,連接當(dāng)前位置與終點(diǎn)位置,將此連接當(dāng)前位置與終點(diǎn)位置的直線確定為當(dāng)前連接線,進(jìn)入步驟S303。
步驟S303:判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域,如果經(jīng)過所述圓形禁飛區(qū)域,則進(jìn)入步驟S304,如果不經(jīng)過所述圓形禁飛區(qū)域,則進(jìn)入步驟S309。
得到當(dāng)前位置與終點(diǎn)位置間的當(dāng)前連接線后,根據(jù)此時的標(biāo)志位是否為1,若標(biāo)志位為1表示當(dāng)前連接線從當(dāng)前位置到終點(diǎn)位置經(jīng)過其他的圓形禁飛區(qū)域,則進(jìn)入步驟S304;若標(biāo)志位不為1表示當(dāng)前連接線從當(dāng)前位置到終點(diǎn)位置沒經(jīng)過其他的圓形禁飛區(qū)域,則進(jìn)入步驟S309。
需要說明的是,標(biāo)志位的數(shù)值用于表示當(dāng)前連接線是否穿過其他圓形禁飛區(qū)域,標(biāo)志位可以選取任何的數(shù)值來表示此時的當(dāng)前連接線是否穿過禁飛區(qū)域。
步驟S304:確定當(dāng)前連接線上距離所述當(dāng)前位置最近的圓形禁飛區(qū)域,并確定所述當(dāng)前位置所在圓形禁飛區(qū)域與所述距離最近的圓形禁飛區(qū)域,經(jīng)過所述當(dāng)前位置側(cè)的當(dāng)前公切線,進(jìn)入步驟S305。
具體的,在得到當(dāng)前連接線后,首先,判斷此當(dāng)前連接線是否經(jīng)過圓形禁飛區(qū)域,若經(jīng)過圓形禁飛區(qū)域,需要找到在當(dāng)前連接線上,距離當(dāng)前位置最近的圓形禁飛區(qū)域;然后,獲取當(dāng)前位置所在圓形禁飛區(qū)域與距離最近的圓形禁飛區(qū)域間的公切線,該公切線共有四條,其中兩條為外公切線,另外兩條為內(nèi)公切線,在此四條公切線中,選取經(jīng)過當(dāng)前位置所在圓形禁飛區(qū)域的那一側(cè)的兩條公切線,從兩條公切線中分別選取一條公切線作為當(dāng)前公切線,執(zhí)行步驟S305。直到兩條公切線都分別作為當(dāng)前公切線,都執(zhí)行完步驟S305,此時尋找到從當(dāng)前位置所在圓形禁飛區(qū)域出發(fā),并且不存在繞飛路徑的直線可行路徑。
特殊的,當(dāng)起點(diǎn)位置為當(dāng)前位置時,當(dāng)前位置所在圓形禁飛區(qū)域的面積為零,在這種情況下,直接獲取當(dāng)前位置和與當(dāng)前位置距離最近的圓形禁飛區(qū)域的公切線,此時得到兩條公切線,將此兩條公切線作為當(dāng)前公切線,直到尋找到從當(dāng)前位置所在圓形禁飛區(qū)域出發(fā),并且不存在繞飛路徑的直線可行路徑。
步驟S305:判斷所述當(dāng)前公切線是否經(jīng)過圓形禁飛區(qū)域,若經(jīng)過,則將所述當(dāng)前公切線作為當(dāng)前連接線,進(jìn)入步驟S304,若不經(jīng)過,則進(jìn)入步驟S306。
判斷此時的標(biāo)志位是否為1,若為1,表示當(dāng)前公切線經(jīng)過其他圓形禁飛區(qū)域,以所述當(dāng)前公切線作為當(dāng)前連接線,并執(zhí)行步驟S304,若不為1,表示當(dāng)前公切線不經(jīng)過其他圓形禁飛區(qū)域,執(zhí)行步驟S306。
具體的,將當(dāng)前的公切線作為當(dāng)前連接線按照步驟S304,繼續(xù)尋找距離當(dāng)前位置最近的圓形禁飛區(qū)域,確定當(dāng)前位置所在圓形禁飛區(qū)域與距離最近的圓形禁飛區(qū)域間的公切線,并選取在當(dāng)前位置側(cè)的兩條公切線,將其中一條公切線作為當(dāng)前公切線,接著執(zhí)行步驟S305,以此循環(huán),直到當(dāng)前公切線不經(jīng)過圓形禁飛區(qū)域,進(jìn)入步驟S306。
步驟S306:判斷與當(dāng)前公切線相鄰的直線可行路徑是否與當(dāng)前公切線確定的路徑相交;如果是,則進(jìn)入步驟S307,如果否,則進(jìn)入步驟S311。
本步驟的目的是為了判斷,當(dāng)前公切線和與當(dāng)前公切線相鄰直線可行路徑間是否存在繞飛路徑。圖4(a)為兩條直線路徑交叉部分組成的繞飛路徑示意圖,圖4(b)為存在繞飛路徑時本發(fā)明計算得到的新路徑。
具體的,在圖4(a)中,圓01、圓02與圓03分別表示三個圓形禁飛區(qū)域,分別做圓01與圓02之間的公切線p1p2,以及,圓02與圓03之間的公切線p3p4,則公切線p1p2與圓01之間的交點(diǎn)p1為可行航路點(diǎn),公切線p1p2與圓02之間的交點(diǎn)p2也為可行航路點(diǎn),p1p2為圓形禁飛區(qū)域01與圓形禁飛區(qū)域02間的直線可行路徑。同理,p3、p4為可行航路點(diǎn),p3p4表示圓形禁飛區(qū)域02與圓形禁飛區(qū)域03間的直線可行路徑。從圖4(a)可以看出,直線可行路徑p1p2與直線可行路徑p3p4相交于一點(diǎn),如果無人機(jī)從圓形禁飛區(qū)域01飛到圓形禁飛區(qū)域02,再飛到圓形禁飛區(qū)域03,那么飛行路徑為:首先沿直線可行路徑p1p2飛行,飛到p1p2與p3p4的交點(diǎn)后接著飛到可行航路點(diǎn)p2,緊接著繞圓形禁飛區(qū)域02飛一圈飛到可行航路點(diǎn)p3;然后,從可行航路點(diǎn)p3飛到p1p2與p3p4的交點(diǎn);最后,從交點(diǎn)飛到可行航路點(diǎn)p4。那么由可行航路點(diǎn)p1飛到可行航路點(diǎn)p4的過程中,從p1p2與p3p4的交點(diǎn)飛到可行航路點(diǎn)p2,接著繞圓形禁飛區(qū)域02飛一圈飛到可行航路點(diǎn)p3,再從可行航路點(diǎn)p3飛到p1p2與p3p4的交點(diǎn)的路徑就是繞飛路徑。
在算法中,對于判斷p3p4和與p1p2間是否存在繞飛路徑,采用的是線段p3p4與線段p1p2是否相交,如果相交,則點(diǎn)p1到點(diǎn)p4的路徑存在繞飛路徑,如果不相交,則點(diǎn)p1到點(diǎn)p4的路徑不存在繞飛路徑。
步驟S307:將與當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域,和,所述當(dāng)前公切線確定的路徑的終點(diǎn)所在的圓形禁飛區(qū)域間的,在所述當(dāng)前公切線側(cè)的外公切線,作為當(dāng)前連接線,執(zhí)行步驟S303。
此步驟是存在繞飛路徑下執(zhí)行的動作,如果當(dāng)前公切線與其相鄰的直線可行路徑間存在繞飛路徑時,需要刪除當(dāng)前公切線,重新計算新的路徑,新路徑的計算方法為:首先,確定與當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域,和當(dāng)前公切線的終點(diǎn)所在的圓形禁飛區(qū)域;然后,做與當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在圓形禁飛區(qū)域,與當(dāng)前公切線的終點(diǎn)所在的圓形禁飛區(qū)域間的外公切線,此時,得到的外公切線有兩條,將兩條公切線中在當(dāng)前公切線一側(cè)的那條公切線確定為當(dāng)前連接線,進(jìn)入步驟S303。
具體的,針對圖4(a)所示的可行航路點(diǎn)p1到可行航路點(diǎn)p4間的繞飛路徑,本步驟計算新路徑的方法為:刪除路徑p3p4,做圓形禁飛區(qū)域01與圓形禁飛區(qū)域03間的外公切線,此時,得到兩條外公切線,將通過線段p1p2與線段p3p4所在側(cè)的外公切線作為當(dāng)前連接直線,外公切線的起點(diǎn)作為當(dāng)前位置,進(jìn)入步驟S303,采用本步驟計算新路徑的方法得到的新路徑如圖4(b)所示。
步驟S308:判斷當(dāng)前位置是否為所述終點(diǎn)位置,若是終點(diǎn)位置,則進(jìn)入步驟S312,若不是終點(diǎn)位置,則進(jìn)入步驟S309。
本步驟是步驟S303的判斷結(jié)果為所述當(dāng)前連接線不經(jīng)過圓形禁飛區(qū)域時,繼續(xù)判斷當(dāng)前位置是否為終點(diǎn)位置,若是,則進(jìn)入步驟S312,若不是,則進(jìn)入步驟S309。
步驟S309:計算所述終點(diǎn)位置到當(dāng)前位置所在圓形禁飛區(qū)域的當(dāng)前位置側(cè)的當(dāng)前公切線,進(jìn)入步驟S310。
此步驟是在當(dāng)前位置與終點(diǎn)的當(dāng)前連接線不經(jīng)過其他圓形禁飛區(qū)域時,并且當(dāng)前位置不是終點(diǎn)位置時,此時,從終點(diǎn)位置向當(dāng)前位置所在圓形禁飛區(qū)域做公切線,由于終點(diǎn)位置為一個點(diǎn),因此,當(dāng)前公切線有兩條,從這兩條公切線中選取經(jīng)過當(dāng)前位置在圓形禁飛區(qū)域的一側(cè)的公切線,作為當(dāng)前公切線,接著進(jìn)入步驟S310。
步驟S310:判斷所述當(dāng)前公切線是否經(jīng)過圓形禁飛區(qū)域,若經(jīng)過,將所述當(dāng)前公切線作為當(dāng)前連接線,則進(jìn)入步驟S304,若不經(jīng)過,則進(jìn)入步驟S311。
步驟S311:確定所述當(dāng)前公切線為當(dāng)前直線可行路徑,進(jìn)入步驟S312。
此步驟是當(dāng)前公切線和與當(dāng)前公切線相鄰的直線可行路徑間不存在繞飛路徑時,此時求解到的當(dāng)前公切線為直線可行路徑,接著進(jìn)入步驟S312,以直線可行路徑的終點(diǎn)為當(dāng)前位置繼續(xù)求解直線可行路徑。
步驟S312:以直線可行路徑的終點(diǎn)為當(dāng)前位置繼續(xù)求解直線可行路徑,直到所述起點(diǎn)位置到所述終點(diǎn)位置之間的所有直線可行路徑確定完畢。
在本步驟中,當(dāng)步驟S303判斷得到的當(dāng)前位置與終點(diǎn)位置的當(dāng)前連接線不經(jīng)過圓形禁飛區(qū)域,并且當(dāng)前位置是終點(diǎn)位置時;或者,在步驟S311中,確定所述當(dāng)前公切線為當(dāng)前直線可行路徑時,執(zhí)行本步驟,即按照步驟S302~步驟S311來尋找直線可行路徑,直到,當(dāng)前直線可行路徑的終點(diǎn)為本發(fā)明實(shí)施例所確定的終點(diǎn)位置,此時,表示從起點(diǎn)位置到終點(diǎn)位置的所有直線可行路徑都尋找完畢。
在介紹完步驟S103求解到起點(diǎn)位置和終點(diǎn)位置之間的所有直線可行路徑之后,接著返回圖1,進(jìn)入步驟S104。
步驟S104:根據(jù)所述直線可行路徑確定從所述起點(diǎn)位置到所述終點(diǎn)位置間的所有可行航線。
在求解得到起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑后,從起點(diǎn)位置開始沿著直線可行路徑到達(dá)終點(diǎn)位置時,存在多條從起點(diǎn)位置到終點(diǎn)位置的可行航線??尚泻骄€的確定方法為:從起點(diǎn)位置開始,沿著直線可行路徑一直到終點(diǎn)位置,此過程順序經(jīng)過的直線可行路徑組成一條可行航線。按照上述尋找可行航線的方法,依次找到從起點(diǎn)位置到終點(diǎn)位置間所有的可行航線。
步驟S105:依據(jù)所述所有可行航線與所述可行航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
在上述得到的起點(diǎn)位置到終點(diǎn)位置間的所有可行航線后,將所有可行航線中直線可行路徑最短的航線確定為最優(yōu)航線。此時最優(yōu)航線包括了從起點(diǎn)位置到終點(diǎn)位置選取的若干條直線可行路徑,以及無人機(jī)按照這些直線可行路徑飛行的先后順序。
接著,根據(jù)此最優(yōu)航線以及最優(yōu)航線上的各個可行航路點(diǎn)的屬性,來確定無人機(jī)沿著此條最優(yōu)航線的飛行模式,進(jìn)而得到最優(yōu)路徑。
具體的,若所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由出切點(diǎn)到入切點(diǎn),則從出切點(diǎn)沿著直線飛行到入切點(diǎn),所述出切點(diǎn)為根據(jù)最優(yōu)航線的方向離開圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域的切點(diǎn),所述入切點(diǎn)為根據(jù)最優(yōu)航線的方向飛入圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域切點(diǎn)。
若所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由入切點(diǎn)到出切點(diǎn),則沿著出切點(diǎn)與入切點(diǎn)所在的圓形禁飛區(qū)域上由入切點(diǎn)到出切點(diǎn)的弧線進(jìn)行飛行。
本發(fā)明實(shí)施例,首先,將三維空間中的三維禁飛區(qū)域轉(zhuǎn)化為二維平面內(nèi)的禁飛區(qū)域;其次,對二維平面區(qū)域內(nèi)禁飛區(qū)域進(jìn)行分片,其中,將存在交叉的禁飛區(qū)域作為一個分片禁飛區(qū)域,相鄰的兩個禁飛區(qū)域間距離滿足,大于無人機(jī)最小轉(zhuǎn)彎半徑并且小于無人機(jī)最小轉(zhuǎn)彎半徑的2倍的禁飛區(qū)域作為一個分片區(qū)域,將即不屬于交叉類型同時不滿足與相鄰的禁飛區(qū)域間的距離大于無人機(jī)最小轉(zhuǎn)彎半徑并且小于無人機(jī)最小轉(zhuǎn)彎半徑的2倍的禁飛區(qū)域作為一個分片禁飛區(qū)域;再次,對于每個分片禁飛區(qū)域,都做包含此分片禁飛區(qū)域所有區(qū)域的最小外切圓作為此分片禁飛區(qū)域的圓形禁飛區(qū)域,并且采用圓的內(nèi)外公切線的方法,求解從起點(diǎn)位置到終點(diǎn)位置間的所有圓形禁飛區(qū)域間的直線可行路徑;最后,從所有的直線可行路徑中確定起點(diǎn)位置到終點(diǎn)位置間的所有可行航線,進(jìn)而確定最優(yōu)航線以及最優(yōu)航路。
本發(fā)明實(shí)施例采用圓的內(nèi)外公切線的方法求解起點(diǎn)位置到終點(diǎn)位置間的所有直線可行航路點(diǎn),然后確定可行航線,最后確定最優(yōu)航線以及最優(yōu)航路,這種采用漸進(jìn)的方法確定最優(yōu)航路,克服了現(xiàn)有基于圖論的方法,需要羅列出起點(diǎn)位置到終點(diǎn)位置間所有的可行航路來確定最優(yōu)航路,進(jìn)而容易丟失最優(yōu)航路的缺點(diǎn)。同時,克服了現(xiàn)有的智能算法比較耗時,進(jìn)而不利于在線解算和工程應(yīng)用的缺點(diǎn)。
實(shí)施例2
本發(fā)明實(shí)施例對本發(fā)明提出的航路規(guī)劃方法實(shí)施過程進(jìn)行了更詳細(xì)的描述,主要包括對禁飛區(qū)域進(jìn)行規(guī)劃得到圓形禁飛區(qū)域的過程,和,基于確定的圓形禁飛區(qū)域?qū)ふ覐钠瘘c(diǎn)位置到終點(diǎn)位置的所有直線可行路徑。
具體的,圖5,是對禁飛區(qū)域進(jìn)行規(guī)劃得到圓形禁飛區(qū)域的方法流程圖。該方法可以包括:
步驟S501:將無人機(jī)在空間內(nèi)可能遇到的三維禁飛區(qū)域簡化為二維的平面禁飛區(qū)域,此平面禁飛區(qū)域在下面統(tǒng)稱為禁飛區(qū)域。
步驟S502:將禁飛區(qū)域中的交叉區(qū)域和密集小區(qū)域進(jìn)行分片得到不同的分片禁飛區(qū)域。
上述步驟S501~步驟S502與實(shí)施例1中的步驟S101對應(yīng),對于步驟S501~步驟S502的具體實(shí)施步驟參考實(shí)施例1的步驟S101,這里不再贅述。
步驟S503:做每個分片禁飛區(qū)域的外切圓,將外切圓確定的區(qū)域作為此分片禁飛區(qū)域?qū)?yīng)的圓形禁飛區(qū)域。
由于步驟S502得到的不同分片禁飛區(qū)域的大小與形狀不規(guī)則,對求解不同分片禁飛區(qū)域間的各直線可行路徑帶來了困難,為了快速地求解從起點(diǎn)位置到終點(diǎn)位置間所有分片禁飛區(qū)域間的各直線可行路徑,對每個分片禁飛區(qū)域做外切圓,將外切圓確定的區(qū)域作為圓形禁飛區(qū)域,在得到的圓形禁飛區(qū)域的基礎(chǔ)上,采用圓的內(nèi)外公切線的方法求解起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑,此時,求解各分片禁飛區(qū)域間的直線可行路徑的過程就會變得簡單。
步驟S503與實(shí)施例1中的步驟S102對應(yīng)。
本發(fā)明實(shí)施采用圓的內(nèi)外切公切線的方法求解起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑,求解起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑與可行航路點(diǎn)的過程,是一個循環(huán)的過程。首先,從起點(diǎn)位置開始,尋找從起點(diǎn)位置出發(fā)的所有當(dāng)前直線可行路徑,這是第一次循環(huán);其次,分別以第一次循環(huán)得到的每條當(dāng)前直線可行路徑的終點(diǎn)作為當(dāng)前位置,從當(dāng)前位置出發(fā),求解第一次循環(huán)得到的所有當(dāng)前直線可行路徑對應(yīng)的下一條直線可行路徑作為此次循環(huán)得到的所有當(dāng)前直線可行路徑;再次,分別以所有當(dāng)前直線可行路徑的終點(diǎn)為當(dāng)前位置,尋找從當(dāng)前位置所在圓形禁飛區(qū)域出發(fā)的直線可行路徑,以此循環(huán),直到得到的所有當(dāng)前直線可行路徑的終點(diǎn)為無人機(jī)需要完成任務(wù)的終點(diǎn)位置,此時,表示從起點(diǎn)位置到終點(diǎn)位置的所有直線可行路徑尋找完畢。
接著,基于劃分出的圓形禁飛區(qū)域?qū)ふ覐钠瘘c(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑的方法流程如圖6所示,該方法可以包括:
步驟S601:初始化起點(diǎn)位置、終點(diǎn)位置、當(dāng)前位置、標(biāo)志位、路徑存儲器,直線可行路徑計數(shù)器,圓形禁飛區(qū)域計數(shù)器。
本步驟初始化的變量包括:起點(diǎn)位置、終點(diǎn)位置、當(dāng)前位置、標(biāo)志位、路徑存儲器,直線可行路徑計數(shù)器,圓形禁飛區(qū)域計數(shù)器;其中,起點(diǎn)位置是無人機(jī)執(zhí)行任務(wù)時的出發(fā)位置,終點(diǎn)位置是無人機(jī)執(zhí)行任務(wù)的位置;標(biāo)志位用于表示兩個圓形禁飛區(qū)域間的公切線是否與其他圓形禁飛區(qū)域相交,若標(biāo)志位為1表示所述公切線與其他圓形禁飛區(qū)域相交,若不為1,表示所述公切線與其他圓形禁飛區(qū)域不相交,路徑存儲器包括直線可行路徑存儲器、當(dāng)前直線可行路徑存儲器與不可行路徑存儲器,直線可行路徑存儲器用來存儲直線可行路徑,當(dāng)前直線可行路徑存儲器存儲在一次循環(huán)過程中得到的所有直線可行路徑,不可行路徑存儲器用于存儲不可行路徑;直線可行路徑計數(shù)器用于顯示當(dāng)前直線可行路徑存儲器所保存的當(dāng)前直線可行路徑中已被求解下一步直線可行路徑的,當(dāng)前直線可行路徑的數(shù)目;圓形禁飛區(qū)域計數(shù)器自動顯示到當(dāng)前位置為止,已被求解直線可行路徑的圓形禁飛區(qū)域的數(shù)目。
在初始時刻,標(biāo)志位不為1、當(dāng)前直線路徑存儲器數(shù)目為0,直線可行路徑計數(shù)器顯示值為0,圓形禁飛區(qū)域計數(shù)器顯示值為0。
步驟S602:讀取起點(diǎn)位置與終點(diǎn)位置,將起點(diǎn)位置作為當(dāng)前位置。
獲取無人機(jī)待起飛的位置,并將此待起飛的起點(diǎn)位置作為當(dāng)前位置。同時獲取無人機(jī)需要執(zhí)行任務(wù)的位置,將起點(diǎn)位置與終點(diǎn)位置作為航路規(guī)劃算法的初始量。
步驟S603:做當(dāng)前位置與終點(diǎn)位置間的當(dāng)前連接線。
在本步驟中,做當(dāng)前位置到終點(diǎn)位置間的連接線,將此連接線作為當(dāng)前連接線,對于當(dāng)前連接線是否經(jīng)過其他圓形禁飛區(qū)域,通過標(biāo)志位來體現(xiàn),如果標(biāo)志位為1,則表示當(dāng)前連接線經(jīng)過其他圓形禁飛區(qū)域,如果標(biāo)志位不為1,則表示當(dāng)前連接線不經(jīng)過其他圓形禁飛區(qū)域。
步驟S604:判斷此時標(biāo)志位是否為1,若不是1,則執(zhí)行步驟S605,若是1,則執(zhí)行步驟S607。
標(biāo)志位用于顯示當(dāng)前連接線是否經(jīng)過其他圓形禁飛區(qū)域,若經(jīng)過,標(biāo)志位為1,若不經(jīng)過,標(biāo)志位不是1。
需要說明的是,若當(dāng)前連接線經(jīng)過圓形禁飛區(qū)域時,標(biāo)志位可以為其他值,只要標(biāo)志位的數(shù)值可以反映當(dāng)前連接線是否經(jīng)過圓形禁飛區(qū)域就可以。
本步驟是判斷當(dāng)前連接線是否穿過了當(dāng)前位置到終點(diǎn)位置間的圓形禁飛區(qū)域,如果標(biāo)志位為1,說明當(dāng)前連接線所確定的路徑是不可行的,因此,保存此不可行路徑,需要重新尋找從當(dāng)前位置所在圓形禁飛區(qū)域出發(fā)的直線可行路徑。
步驟S605:判斷當(dāng)前位置是否為終點(diǎn)位置,若是,確定當(dāng)前連接線為當(dāng)前公切線,轉(zhuǎn)入步驟S612,若否,則執(zhí)行,步驟S606。
此步驟是在步驟S604確定的當(dāng)前位置與終點(diǎn)位置間的當(dāng)前連接線不經(jīng)過圓形禁飛區(qū)域時,執(zhí)行的動作。
步驟S606:計算所述終點(diǎn)位置到當(dāng)前位置所在圓形禁飛區(qū)域的當(dāng)前公切線,將所述當(dāng)前公切線作為當(dāng)前連接線,執(zhí)行步驟S604。
在此步驟中,首先,從終點(diǎn)位置向當(dāng)前位置所在的圓形禁飛區(qū)域做公切線,由于終點(diǎn)位置為一個點(diǎn),因此,此時的公切線有兩條;然后,從此兩條公切線中選取經(jīng)過當(dāng)前位置側(cè)的公切線作為當(dāng)前公切線,并將當(dāng)前公切線作為當(dāng)前連接線,進(jìn)入步驟S604,繼續(xù)執(zhí)行。
步驟S607:找到在當(dāng)前連接線經(jīng)過的圓形禁飛區(qū)域中,距離當(dāng)前位置最近的圓形禁飛區(qū)域,并計算當(dāng)前位置所在圓形禁飛區(qū)域與距離當(dāng)前位置最近的圓形禁飛區(qū)域間的公切線,確定所述公切線中經(jīng)過當(dāng)前位置側(cè)的公切線為當(dāng)前公切線,進(jìn)入步驟S608。
具體的,首先,需要找到在當(dāng)前連接線穿過的圓形禁飛區(qū)域中,確定與當(dāng)前位置最近的圓形禁飛區(qū)域;然后,計算當(dāng)前位置所在圓形禁飛區(qū)域與距離當(dāng)前位置最近的圓形禁飛區(qū)域間的公切線。
若當(dāng)前位置不是起點(diǎn)位置時,此公切線有四條,選取經(jīng)過圓形禁飛區(qū)域當(dāng)前位置側(cè)的兩條公切線,作為當(dāng)前公切線;若當(dāng)前位置為起點(diǎn)位置時,則計算當(dāng)前位置到距離當(dāng)前位置最近的圓形禁飛區(qū)域的公切線,此時,所述公切線為當(dāng)前公切線。
步驟S608:判斷當(dāng)前標(biāo)志位是否為1,若為1,則執(zhí)行步驟S609,若不為1,則執(zhí)行步驟S610。
本步驟中的當(dāng)前標(biāo)志位是否為1,表示的是步驟S607中得到的當(dāng)前公切線是否經(jīng)過其他圓形禁飛區(qū)域,若標(biāo)志位為1,表示當(dāng)前公切線經(jīng)過其他圓形禁飛區(qū)域,則執(zhí)行步驟S609;若標(biāo)志位不為1,表示當(dāng)前公切線不經(jīng)過其他圓形禁飛區(qū)域,則執(zhí)行步驟S610。
步驟S609:將當(dāng)前公切線存儲在不可行路徑存儲器中,將當(dāng)前公切線作為當(dāng)前連接線,并轉(zhuǎn)入步驟S607。
轉(zhuǎn)入步驟S607后,繼續(xù)計算當(dāng)前位置所在圓形禁飛區(qū)域與距離當(dāng)前位置最近的圓形禁飛區(qū)域間的公切線,確定所述公切線中經(jīng)過當(dāng)前位置側(cè)的公切線為當(dāng)前公切線,接著執(zhí)行步驟S608,依次循環(huán),直到步驟S608判斷出標(biāo)志位不為1時,跳出此步驟,進(jìn)入步驟S610。
步驟S610:判斷與當(dāng)前公切線相鄰的直線可行路徑是否與當(dāng)前公切線確定的路徑相交,若是,進(jìn)入步驟S611,若不是,進(jìn)入步驟S612。
此步驟就是判斷當(dāng)前公切線和與當(dāng)前公切線相鄰的直線可行路徑,是否存在繞飛路徑,具體繞飛路徑的細(xì)節(jié)在實(shí)施例1中進(jìn)行了詳細(xì)的描述,這里不再贅述。
步驟S611:將與當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域,和,所述當(dāng)前公切線確定的路徑的終點(diǎn)所在的圓形禁飛區(qū)域間的在所述當(dāng)前公切線側(cè)的外公切線,作為當(dāng)前連接線,轉(zhuǎn)向步驟S604繼續(xù)執(zhí)行,以此循環(huán),直到步驟S610的判斷結(jié)果為否,進(jìn)入步驟S612。
步驟S612:確定當(dāng)前公切線為當(dāng)前直線可行路徑,將當(dāng)前直線可行路徑保存在當(dāng)前直線可行路徑存儲器中,當(dāng)前直線可行路徑存儲器的數(shù)目加上此時直線可行路徑的數(shù)目,并且可行航路點(diǎn)數(shù)目加上此時當(dāng)前直線可行路徑條數(shù)的2倍,接著進(jìn)入步驟S613。
步驟S613:判斷此時直線可行路徑計數(shù)器的數(shù)目加1是否大于直線可行路徑數(shù)值,若不大于,則進(jìn)入步驟S614,若大于,則進(jìn)入步驟S615。
在此步驟中,直線可行路徑數(shù)值是指在上一次循環(huán)過程中得到的所有當(dāng)前直線可行路徑的數(shù)目。直線可行路徑計數(shù)器表示的是,在本次循環(huán)過程中,已對上次循環(huán)得到的所有當(dāng)前直線可行路徑求解到下一條直線可行路徑的當(dāng)前直線可行路徑的數(shù)目。如果直線可行路徑計數(shù)器的數(shù)目加1大于直線可行路徑的數(shù)目,表示在上一步的循環(huán)中得到的所有當(dāng)前直線可行路徑都已被求解到下一步的直線可行路徑;如果不大于,表示上一次循環(huán)中得到的所有當(dāng)前直線可行路徑中還存在未被求解下一條直線可行路徑的當(dāng)前直線可行路徑。
步驟S614:獲取可行路徑存儲器中未被求解下一步直線可行路徑的當(dāng)前直線可行路徑,并將所述獲取的直線可行路徑的終點(diǎn)作為當(dāng)前位置,直線可行路徑計數(shù)器加1,執(zhí)行步驟S603。
步驟S615:直線可行路徑計數(shù)器清零,直線可行路徑數(shù)值為當(dāng)前直線可行路徑存儲器的數(shù)目,并將當(dāng)前直線可行路徑存儲器中的直線可行路徑保存在可行路徑存儲器中,當(dāng)前直線可行路徑存儲器清零。
本步驟中,直線可行路徑存儲器用于存儲在每次循環(huán)過程中得到的當(dāng)前直線可行路徑對應(yīng)的下一步直線可行路徑。
步驟S616:判斷圓形禁飛區(qū)域計數(shù)器的數(shù)目是否小于圓形禁飛區(qū)域的個數(shù),若小于,則執(zhí)行步驟S613,若不小于,則執(zhí)行步驟S617。
步驟S617:結(jié)束流程。
本步驟表示,起點(diǎn)位置到終點(diǎn)位置間的所有圓形禁飛區(qū)域間的直線可行路徑與可行航路點(diǎn)確定完畢。
通過上述步驟S601~步驟S617尋找到從起點(diǎn)位置到終點(diǎn)位置的所有直線可行路徑,并且此直線可行路徑保存在直線可行路徑存儲器中。根據(jù)此直線可行路徑存儲器中存儲的直線可行路徑,從起點(diǎn)位置尋找到終點(diǎn)位置的所有可行航線的方法為:首先,從起點(diǎn)位置開始,尋找直線可行存儲器中所保存的起點(diǎn)位置開始的所有直線可行路徑;然后,以此時的所有直線可行路徑的終點(diǎn)開始尋找,以此終點(diǎn)為起點(diǎn)的直線可行路徑,并按照上述步驟,直到尋找到所有直線可行路徑的終點(diǎn)為終點(diǎn)位置;最后,從起點(diǎn)位置沿著上述尋找到的直線可行路徑直到終點(diǎn)位置,此時,每一條從起點(diǎn)位置到終點(diǎn)位置的航線都是一條可行航線。
依據(jù)所述所有可行航線與所述航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路的過程與實(shí)施例中的步驟S105相同,這里不再贅述。
本發(fā)明實(shí)施例詳細(xì)說明了本發(fā)明的航路規(guī)劃方法的具體實(shí)施步驟,可將此步驟置于無人機(jī)內(nèi),當(dāng)無人機(jī)在飛行的過程中遇到未被規(guī)劃的禁飛區(qū)域時,無人機(jī)上的傳感器采集到無人機(jī)的當(dāng)前位置,按照本發(fā)明實(shí)施例的方法,在有限的時間內(nèi)尋找到從當(dāng)前位置到終點(diǎn)位置的最優(yōu)航路,以便在規(guī)定的時間內(nèi),完成特定的任務(wù)。
實(shí)施例3
本發(fā)明實(shí)施例公開了一種基于禁飛區(qū)約束的航路規(guī)劃裝置,該裝置集成在無人機(jī)上,用于無人機(jī)對起點(diǎn)位置到終點(diǎn)位置間的航路進(jìn)行規(guī)劃,請參見圖7,該裝置可以包括:
獲取單元701,用于將所述無人機(jī)從起點(diǎn)位置到終點(diǎn)位置之間的禁飛區(qū)域中的交叉區(qū)域和密集小區(qū)域進(jìn)行分片,得到不同的分片禁飛區(qū)域。
第一確定單元702,用于將每個所述分片禁飛區(qū)域的外切圓包含的區(qū)域確定為圓形禁飛區(qū)域。
計算單元703,用于在所述圓形禁飛區(qū)域間采用圓的內(nèi)外公切線的方法,求解所述起點(diǎn)位置到所述終點(diǎn)位置間的各直線可行路徑和可行航路點(diǎn),所述可行航路點(diǎn)為所述直線可行路徑與所述圓形禁飛區(qū)域的交點(diǎn)。
第二確定單元704,用于根據(jù)所述直線可行路徑確定從所述起點(diǎn)位置到所述終點(diǎn)位置間的所有可行航線。
第三確定單元705,用于依據(jù)所述所有可行航線與所述可行航路點(diǎn)規(guī)劃所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
具體的,在本發(fā)明實(shí)施例中,所述第三確定單元可以包括:第一確定子單元與第二確定子單元。其中,
第一確定子單元,用于從所述所有可行航線中選擇路徑最短的航線為最優(yōu)航線。
第二確定子單元,用于根據(jù)所述可行航路點(diǎn)的屬性為入切點(diǎn)還是出切點(diǎn),確定所述最優(yōu)航線中相鄰兩條所述直線可行路徑中相鄰的兩個所述可行航路點(diǎn)間的飛行模式,得到所述起點(diǎn)位置到所述終點(diǎn)位置之間的最優(yōu)航路。
具體的,在本發(fā)明實(shí)施例中,所述第二確定子單元具體用于:
在所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由出切點(diǎn)到入切點(diǎn)的情況下,則確定采用直線飛行模式;或者,在所述最優(yōu)航線中相鄰兩條直線可行路徑中相鄰的兩個可行航路點(diǎn)是由入切點(diǎn)到出切點(diǎn),則采用弧線飛行模式,所述出切點(diǎn)為根據(jù)可行航線的方向離開圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域的切點(diǎn),所述入切點(diǎn)為根據(jù)可行航線的方向飛入圓形禁飛區(qū)域的直線可行路徑與圓形禁飛區(qū)域的切點(diǎn)。
具體的,在本發(fā)明實(shí)施例中,所述計算單元可以包括:獲取子單元、執(zhí)行子單元和觸發(fā)子單元。其中,
獲取子單元,用于獲取所述起點(diǎn)位置作為當(dāng)前位置。
執(zhí)行子單元,用于針對所述當(dāng)前位置,確定所述當(dāng)前位置與所述終點(diǎn)位置之間的當(dāng)前連接線;
判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域;
如果所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域,則確定所述當(dāng)前連接線上距離所述當(dāng)前位置最近的圓形禁飛區(qū)域,并確定所述當(dāng)前位置所在圓形禁飛區(qū)域與所述距離最近的圓形禁飛區(qū)域間,經(jīng)過所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若否,判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交;如果否,則確定所述當(dāng)前公切線為當(dāng)前直線可行路徑。
觸發(fā)子單元,用于以所述當(dāng)前直線可行路徑的終點(diǎn)為當(dāng)前位置,尋找從當(dāng)前位置開始的直線可行路徑,直至所述起點(diǎn)位置到所述終點(diǎn)位置之間的所有直線可行路徑確定完畢。
在本發(fā)明裝置實(shí)施例中,執(zhí)行子單元,還可以用于:
如果所述當(dāng)前連接線不經(jīng)過所述圓形禁飛區(qū)域,判斷所述當(dāng)前位置是否為所述終點(diǎn)位置,若是所述終點(diǎn)位置,則確定所述當(dāng)前連接線為所述當(dāng)前直線可行路徑;
若不是所述終點(diǎn)位置,則計算所述終點(diǎn)位置到所述當(dāng)前位置所在圓形禁飛區(qū)域的所述當(dāng)前位置側(cè)的當(dāng)前公切線;
判斷所述當(dāng)前公切線是否經(jīng)過所述圓形禁飛區(qū)域;
若經(jīng)過,將所述當(dāng)前公切線作為當(dāng)前連接線,執(zhí)行所述當(dāng)前連接線經(jīng)過所述圓形禁飛區(qū)域的步驟;
若不經(jīng)過,則確定所述當(dāng)前連接線為當(dāng)前直線可行路徑。
判斷與所述當(dāng)前公切線相鄰的直線可行路徑是否與所述當(dāng)前公切線確定的路徑相交,還可以包括:
如果相交,則將與所述當(dāng)前公切線相鄰的直線可行路徑的起點(diǎn)所在的圓形禁飛區(qū)域和所述當(dāng)前公切線確定的路徑的終點(diǎn)所在的圓形禁飛區(qū)域間的在所述當(dāng)前公切線側(cè)的外公切線,作為當(dāng)前連接線,執(zhí)行判斷所述當(dāng)前連接線是否經(jīng)過所述圓形禁飛區(qū)域的步驟。
在本發(fā)明裝置實(shí)施例中,無人機(jī)首先通過獲取單元,獲得從起點(diǎn)位置到終點(diǎn)位置之間的分片禁飛區(qū)域;然后,通過第一確定單元,確定各個分片禁飛區(qū)域的外切圓作為圓形禁飛區(qū)域,以便后續(xù)采用計算單元,采用圓的內(nèi)外公切線的方法求解從起點(diǎn)位置到終點(diǎn)位置間的所有直線可行路徑與可行航路點(diǎn);最后,通過第二確定單元與第三確定單元,確定起點(diǎn)位置到終點(diǎn)位置間的所有可行航線,將所有可行航線中路徑最短的一條航線確定為最優(yōu)航線,依據(jù)此最優(yōu)航線與此最優(yōu)航線中的可行航路點(diǎn)屬性,確定無人機(jī)從起點(diǎn)位置到終點(diǎn)位置間的最優(yōu)航路。
對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。
最后,還需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實(shí)體或者操作與另一個實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。