• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于Unity3D的撲翼飛行器自主尋路的設(shè)計(jì)與實(shí)現(xiàn)

    2021-12-29 10:01:10邵偉平李東洋
    關(guān)鍵詞:腳本引擎飛行器

    邵偉平,李東洋

    (沈陽(yáng)理工大學(xué) 機(jī)械工程學(xué)院,遼寧 沈陽(yáng) 110159)

    隨著無(wú)人飛行器在國(guó)內(nèi)外軍事、民生等領(lǐng)域的廣泛應(yīng)用,作為無(wú)人飛行器中的重要分支,仿生撲翼飛行器也獲得了深入的研究。相較于微小型固定翼飛行器和旋翼飛行器的不穩(wěn)定性,撲翼飛行器的撲翼結(jié)構(gòu)可以產(chǎn)生穩(wěn)定的氣動(dòng)力,實(shí)現(xiàn)懸停。在遇到外界干擾或者突發(fā)情況時(shí),具有更好的穩(wěn)定性、靈活性和機(jī)動(dòng)性[1-3]。

    隨著虛擬仿真和虛擬現(xiàn)實(shí)等技術(shù)的不斷迭代,虛擬仿真的應(yīng)用范圍從最初的游戲領(lǐng)域發(fā)展到工業(yè)仿真、教學(xué)培訓(xùn)、航空航天等各領(lǐng)域,在軍事領(lǐng)域也有著廣闊的前景,無(wú)論是武器仿真還是模擬訓(xùn)練等方面都有很強(qiáng)的可研究性[4-5]。

    Unity3D引擎是現(xiàn)階段虛擬現(xiàn)實(shí)技術(shù)研究使用的主要平臺(tái),支持大多數(shù)三維建模軟件和C#、Java等多種腳本語(yǔ)言,廣泛應(yīng)用于航天、工業(yè)、軍事、醫(yī)學(xué)、教育、建筑等多個(gè)領(lǐng)域[6-7]。傳統(tǒng)的仿真軟件只能從數(shù)據(jù)方面呈現(xiàn)設(shè)計(jì)效果,而虛擬現(xiàn)實(shí)可以更直觀地感受設(shè)計(jì)成果。通過(guò)Unity3D引擎中的NavMesh功能,配合編寫(xiě)的相關(guān)腳本,實(shí)現(xiàn)撲翼飛行器的自主尋路的虛擬仿真。

    1 模型和場(chǎng)景構(gòu)建

    1.1 撲翼飛行器的繪制和處理

    選擇UG進(jìn)行撲80翼飛行器的三維建模,根據(jù)設(shè)計(jì)參數(shù)完成撲翼飛行器的模型制作。將模型導(dǎo)入還原度和精細(xì)度更好的3DMAX中做進(jìn)一步處理,拆分分類(lèi),對(duì)坐標(biāo)軸等進(jìn)行修改,以便在Unity3D中使用,進(jìn)行貼圖后導(dǎo)出FBX格式,導(dǎo)入到Unity3D,根據(jù)需要對(duì)模型部件進(jìn)行父子關(guān)系以及屬性的設(shè)置,完成撲翼飛行器的準(zhǔn)備工作。

    1.2 場(chǎng)景搭建

    根據(jù)實(shí)驗(yàn)需要選擇設(shè)計(jì)場(chǎng)景,以街道為主要地形,建筑群作為尋路時(shí)的避障物體。將做好的街道模型和需要的紋理及貼圖導(dǎo)入到Unity3D引擎。根據(jù)街道的形式依次把紋理貼圖按照順序置于地形上,通過(guò)紋理貼圖的使用,劃出馬路、公路等區(qū)域,處理后的地表模型如圖1所示。

    圖1 處理后的地表模型

    將3DMAX做好的建筑物模型導(dǎo)入U(xiǎn)nity3D,將建筑物組合分區(qū)填入城市,通過(guò)建筑物的分割和街道的連接使場(chǎng)景初步具備一個(gè)現(xiàn)實(shí)的城市樣貌。制作一些搭配場(chǎng)景風(fēng)格的裝飾物導(dǎo)入場(chǎng)景,使城市場(chǎng)景看起來(lái)更加真實(shí),如花壇、路邊長(zhǎng)椅、路燈、告示牌、噴泉和垃圾桶等。

    完成場(chǎng)景內(nèi)部對(duì)象的外觀和形狀后,對(duì)場(chǎng)景中的環(huán)境進(jìn)行設(shè)置,主要包括天空盒和光照系統(tǒng)兩部分。天空盒是Unity3D引擎中對(duì)環(huán)境進(jìn)行渲染的重要組件,由六個(gè)面構(gòu)成,像盒子一樣將場(chǎng)景囊括其中,天空盒可以增加場(chǎng)景的真實(shí)感,并且對(duì)硬件的負(fù)載也較小。將貼圖填入U(xiǎn)nity3D的Skybox(天空盒)組件,把組件應(yīng)用到場(chǎng)景攝像機(jī)上。光源是配合天空盒的重要組成部分,使場(chǎng)景更具真實(shí)感。Unity3D中的光源主要有四種:點(diǎn)光源、平行光、聚光燈和區(qū)域光。使用平行光光源搭配陰影效果達(dá)到模擬真實(shí)太陽(yáng)光的照射情況,路燈上可添加點(diǎn)光源,場(chǎng)景最終效果如圖2所示。

    圖2 場(chǎng)景最終效果

    2 自主尋路方法及原理

    2.1 尋路方法的選擇

    目前尋路方法眾多,各有優(yōu)劣,常用的主流算法有A*算法、NavMesh算法[8-9]。

    A*算法是一種傳統(tǒng)的智能尋路算法,是使用最廣泛的尋路算法之一[10],但在Unity3D內(nèi)有尋路組件NavMeshAgent,無(wú)論是腳本編寫(xiě)方面或是設(shè)定網(wǎng)格和烘焙地形方面,NavMesh算法的便捷性均優(yōu)于A*算法。在算法的效率問(wèn)題上,在這種非大型場(chǎng)景中,NavMesh算法的效率也更高,因此選擇NavMesh算法作為本次實(shí)驗(yàn)的尋路算法。

    2.2 NavMesh算法原理

    NavMesh算法分為Recast算法和Detour算法兩部分。Recast算法是NavMesh的核心,將地圖數(shù)據(jù)進(jìn)行簡(jiǎn)化和抽象處理,使其變成可用于尋路的網(wǎng)格模型,生成可導(dǎo)航地圖,將地圖導(dǎo)入Detour算法,Detour算法再基于導(dǎo)航網(wǎng)格進(jìn)行路徑規(guī)劃。

    Recast算法首先將原地圖網(wǎng)格光柵化,形成一個(gè)高度場(chǎng)。進(jìn)一步定義可通過(guò)部分,將這些部分劃分為連續(xù)的地區(qū),同時(shí)剔除不可通過(guò)的部分。再將劃分好的可通過(guò)地區(qū)轉(zhuǎn)換為簡(jiǎn)單的多邊形,然后進(jìn)行簡(jiǎn)化,簡(jiǎn)化邊界和相近多邊形的邊緣,變成更利于尋路的凸多邊形。將凸多邊形網(wǎng)格三角化,并對(duì)細(xì)節(jié)進(jìn)行優(yōu)化,完成導(dǎo)航網(wǎng)格。Detour算法基于Recast算法生成導(dǎo)航多邊形網(wǎng)格,通過(guò)算法尋找起止點(diǎn)多邊形,進(jìn)行路徑規(guī)劃。提高了一定的效率,平衡了算法的運(yùn)行效率和路徑的準(zhǔn)確性,因此,NavMesh算法在非大型場(chǎng)景中的表現(xiàn)較為優(yōu)秀。

    3 自主尋路的實(shí)現(xiàn)

    3.1 NavMesh導(dǎo)航組件

    在Unity3D引擎的編輯器中,打開(kāi)Navigation面板,包括4種標(biāo)簽,如圖3所示。

    圖3 Navigation面板的4種標(biāo)簽

    (1) 代理:設(shè)定導(dǎo)航時(shí)尋路對(duì)象與障礙物的接近程度,尋路對(duì)象可達(dá)到的高度等。

    (2) 區(qū)域:對(duì)地圖上的物體進(jìn)行分類(lèi),用層來(lái)表示,默認(rèn)有三個(gè),也可自己添加。

    (3) 對(duì)象:對(duì)當(dāng)前選擇的場(chǎng)景中的物體進(jìn)行操作,其中Navigation Static判斷此物體是否作為尋路過(guò)程的一部分,所以前面制作的場(chǎng)景地圖和地圖上設(shè)置的障礙物等都要勾選此項(xiàng)。

    (4) 烘焙:對(duì)當(dāng)前地圖進(jìn)行烘焙。完成上面幾項(xiàng)的設(shè)置后,點(diǎn)擊烘焙,生成可行走的Navmesh導(dǎo)航區(qū)域,如圖4所示。

    圖4 Navmesh導(dǎo)航區(qū)域

    為撲翼飛行器添加NavMesh Agent組件,對(duì)尋路對(duì)象的參數(shù)進(jìn)行初步設(shè)置,如必要的速度、角速度、加速度和制動(dòng)距離等,其中制動(dòng)距離表示離障礙多遠(yuǎn)時(shí)開(kāi)始減速。此外,還有對(duì)障礙進(jìn)行躲避時(shí)的半徑、高度等參數(shù)以及尋路的一些設(shè)置。

    3.2 編寫(xiě)腳本

    Unity3D引擎支持JAVA語(yǔ)言和C#語(yǔ)言進(jìn)行腳本的編寫(xiě),由于C#語(yǔ)言在Unity3D中使用更方便,所以選擇C#作為編程語(yǔ)言,來(lái)配合Navigation面板和NavMesh Agent組件完成自主尋路。腳本設(shè)計(jì)以鼠標(biāo)點(diǎn)擊位置為尋路的目標(biāo)終點(diǎn),且在尋路途中再次點(diǎn)擊其他地點(diǎn),可以隨時(shí)更改目標(biāo),其部分代碼如下:

    NavMeshAgent agent;

    private LineRenderer lr;

    void Start()

    {

    agent = GetComponent();

    //獲取組件

    lr = GetComponent();

    InitLine();

    }

    ……

    if (Input.GetMouseButtonDown(0))

    {

    Ray ray = Camera.main.ScreenPointToRay

    (Input.mousePosition);

    RaycastHit hit;

    ……

    }

    為了更好地看到尋路時(shí)的情況,再編寫(xiě)一個(gè)腳本使場(chǎng)景內(nèi)的攝影機(jī)跟隨撲翼飛行器,將腳本搭載在攝影機(jī)上。

    3.3 實(shí)驗(yàn)測(cè)試

    將撲翼飛行器放入搭建好的場(chǎng)景中,添加Navigation面板,設(shè)置參數(shù),進(jìn)行烘焙生成導(dǎo)航網(wǎng)格。為撲翼飛行器添加NavMesh Agent組件,設(shè)置各種參數(shù),將寫(xiě)好的腳本搭載到撲翼飛行器上。

    在運(yùn)行場(chǎng)景中點(diǎn)擊無(wú)障礙處作為目標(biāo)點(diǎn),撲翼飛行器能避開(kāi)障礙物,準(zhǔn)確地進(jìn)行尋路。為方便查看,使用著色小球作為目標(biāo)點(diǎn)進(jìn)行測(cè)試,如圖5所示,在撲翼飛行器尋路過(guò)程中點(diǎn)擊其他地點(diǎn),可做到即時(shí)重新尋路,并且路線準(zhǔn)確。圖6所示為撲翼飛行器尋路時(shí)的飛行姿態(tài)。

    圖5 撲翼飛行器到達(dá)的目標(biāo)點(diǎn)

    圖6 撲翼飛行器尋路時(shí)的飛行姿態(tài)

    4 結(jié)束語(yǔ)

    基于Unity3D引擎,研究撲翼飛行器的自主尋路,建立相關(guān)模型并且進(jìn)行處理。搭建適于實(shí)驗(yàn)的場(chǎng)景地圖,選擇NavMesh算法作為尋路算法,配合Unity3D內(nèi)組件的使用,大大簡(jiǎn)化了腳本的編寫(xiě),通過(guò)鼠標(biāo)點(diǎn)擊進(jìn)行自主尋路并隨時(shí)更換目標(biāo),實(shí)現(xiàn)了撲翼飛行器自主尋路的虛擬仿真。

    由于Unity3D引擎的可視化,打破了傳統(tǒng)仿真只能用數(shù)據(jù)表現(xiàn)的單一形式,實(shí)時(shí)可見(jiàn)撲翼飛行器的狀態(tài)和尋路過(guò)程。Unity3D引擎作為專(zhuān)業(yè)的虛擬現(xiàn)實(shí)產(chǎn)品,暫時(shí)還無(wú)法與外部的飛行器系統(tǒng)對(duì)接輸出。隨著Unity3D在各場(chǎng)景應(yīng)用的越來(lái)越廣泛,不僅會(huì)有更完善的尋路方法,也會(huì)與外部系統(tǒng)有良好的配合應(yīng)用。

    猜你喜歡
    腳本引擎飛行器
    酒駕
    高超聲速飛行器
    安奇奇與小cool 龍(第二回)
    數(shù)據(jù)庫(kù)系統(tǒng)shell腳本應(yīng)用
    復(fù)雜飛行器的容錯(cuò)控制
    電子制作(2018年2期)2018-04-18 07:13:25
    藍(lán)谷: “涉藍(lán)”新引擎
    商周刊(2017年22期)2017-11-09 05:08:31
    快樂(lè)假期
    無(wú)形的引擎
    河南電力(2015年5期)2015-06-08 06:01:46
    神秘的飛行器
    基于Cocos2d引擎的PuzzleGame開(kāi)發(fā)
    涞水县| 磐石市| 丹巴县| 隆安县| 县级市| 中卫市| 深州市| 昌图县| 阿尔山市| 沙雅县| 泰来县| 壶关县| 绍兴县| 姚安县| 略阳县| 菏泽市| 本溪| 璧山县| 拉孜县| 开江县| 庄河市| 乾安县| 大田县| 桦川县| 鄄城县| 航空| 泰顺县| 曲水县| 黎川县| 搜索| 福泉市| 德清县| 射洪县| 卢氏县| 绵竹市| 永登县| 禹城市| 海丰县| 呼图壁县| 磐安县| 赤壁市|