【正文】
vuAllocTracer m_allocTracer。 class myApp : public vpApp { public: myApp() : m_motion(NULL) {} ~myApp() { m_motionunref()。 }5 視景仿真系統(tǒng)驗(yàn)證前面章節(jié)中闡述了整個(gè)飛行模擬視景系統(tǒng)的實(shí)現(xiàn)方法,在本章中將對(duì)飛行可視化系統(tǒng)的實(shí)際運(yùn)行效果進(jìn)行演示與驗(yàn)證。加載運(yùn)行程序?qū)?,根?jù)設(shè)計(jì)要求分步進(jìn)行驗(yàn)證,、。 系統(tǒng)運(yùn)行 飛機(jī)起飛 飛機(jī)爬升 飛機(jī)下滑通過(guò)驗(yàn)證,本系統(tǒng)可以完成設(shè)計(jì)內(nèi)容,能夠滿(mǎn)足較為簡(jiǎn)單的飛行仿真任務(wù),但仍需較大提高。結(jié)論本設(shè)計(jì)方案按照任務(wù)書(shū)的要求,綜合運(yùn)用計(jì)算機(jī)技術(shù)、圖像技術(shù)利用MultigenCreator和Vega Prime軟件,實(shí)現(xiàn)對(duì)飛機(jī)模型的構(gòu)造、虛擬環(huán)境的建模和模型控制,有效地仿真飛行過(guò)程,能夠提供良好的飛行平臺(tái)。在整個(gè)設(shè)計(jì)過(guò)程中,通過(guò)不斷地學(xué)習(xí),進(jìn)行以下方面的研究:研究了飛機(jī)模型構(gòu)造和場(chǎng)景生成所必須的各項(xiàng)模型構(gòu)造技術(shù),并利用這些技術(shù)夠早了飛機(jī)模型和飛行場(chǎng)景模型;研究了飛機(jī)的多視點(diǎn)觀察,并為系統(tǒng)添加了多視點(diǎn)通道的觀察方式,解決了飛機(jī)的狀態(tài)顯示的問(wèn)題;研究了視景系統(tǒng)運(yùn)行必要的粒子系統(tǒng)、碰撞檢測(cè),并深入研究了飛機(jī)起飛著陸階段的視景仿真技術(shù),解決了飛機(jī)起飛著陸階段與跑道之間的碰撞以及飛行過(guò)程中與地形的碰撞及效果;研究了飛機(jī)座艙顯示技術(shù),解決飛行信息顯示問(wèn)題,通過(guò)以上問(wèn)題的研究,解決了飛行模擬視景仿真的基本實(shí)現(xiàn)問(wèn)題,能夠有效地實(shí)施飛行仿真,但同時(shí)也存在許多問(wèn)題,如飛行視景的流暢切換問(wèn)題,如何更好地實(shí)現(xiàn)飛行視點(diǎn)的切換與場(chǎng)景變換;極端天氣等一系列影響飛機(jī)飛行的問(wèn)題的實(shí)現(xiàn)問(wèn)題;以及飛行操縱的問(wèn)題,如何利用操縱桿進(jìn)行飛行模擬等等,這些問(wèn)題的研究,可以更好地完善與提高模擬飛行系統(tǒng),是為進(jìn)一步的能力提高打下基礎(chǔ),具有較高的研究意義。參考文獻(xiàn)[1] [M].北京:北京航空航天大學(xué)出版社,1998:225.[2] 駱玲莉,李冕,張新明. 中國(guó)通用飛機(jī)制造業(yè)分析及研究[J]當(dāng)代經(jīng)濟(jì), 2010,7(4):4649. [3] 白木. 國(guó)外通用航空運(yùn)行及未來(lái)發(fā)展趨勢(shì)[J]綜合運(yùn)輸, 2001,(1):3031.[4] 張雄,葉榛,朱紀(jì)洪,[J].系統(tǒng)仿真學(xué)報(bào), 2002, 14(8): 10221025.[5] 王琳,孟曉風(fēng),鐘波,[J].系統(tǒng)仿真學(xué)報(bào), 2008, 20(1): 7375.[6] 劉亮亮,胡延霖,[J].兵工自動(dòng)化,2008,27:4445.[7] [D] .南京:南京航空航天大學(xué),2003.[8] [J].航空電子技術(shù),2006,3:3436.[9] 王乘,李利軍,周均清,等. Vega實(shí)時(shí)三維視景仿真技術(shù)[M].武漢:華中科技大學(xué)出版社, 2004.[10] [M].航空工業(yè)出版社 2007[11] [[D].西北工業(yè)大學(xué) [12] 劉剛,王行仁,[J]. 航空學(xué)報(bào),2005,26(5).[13] LI of Kingview software in monitoringcontrol system [J].Electric Drive Automation,2006,28 (5):4951.[14] and . Liu,. Rabbath, HardwareInTheLoop Simulation for an UAV Example,AIAA Modeling and Simulation Technologies Conference and Exhibit ,2005:1518.[15] Takuya Kinoshita,Fumiaki Application of an UAV Flight Simulator TheDevelopment of a New Point Mass Model for an Aircraft[C].SICEICASE International Joint Conference[16] 許大偉,陳衛(wèi)東,董小龍,[J]. 23(5)[17] 龍濤,陳璟,馮慶堂,[J].計(jì)算機(jī)仿真, 2003, 20(5): 1014.[18] [M].北京:科學(xué)出版社,2003.[19] 吳曉君, 王昌金. 基于Creator/Vega的戰(zhàn)場(chǎng)飛行視景系統(tǒng)的實(shí)時(shí)仿真 [J]. 系統(tǒng)仿真學(xué)報(bào), 2005, 17(9): 22972300.[20] Multi GenParadigm Inc. Creator Terrain Studio User’s Guide [Z].USA: Multi GenParadigm Inc, 2006.[21] Multi GenParadigm Inc. MetaFlight Concept Guide [Z]. USA:MultiGen Para digm Inc, 2005.[22] Multi GenParadigm Inc. Vega Prime Programmer’s Guide [Z]. USA:MultiGen Paradigm Inc, 2006.致謝附錄Ⅰ 程序清單include include include // track memory leaksvuAllocTracer m_allocTracer。class myApp : public vpApp {public: /** * Constructor */ myApp() : m_motion(NULL) {} /** * Destructor */ ~myApp() { // unreference member variables which cache Vega Prime class instances m_motionunref()。 } /** * Configure my app */ int configure() { // preconfiguration // configure vega prime system first vpApp::configure()。 // postconfiguration // Increase the reference count by one for all member variables which // cache the Vega Prime class instances. // // All VSG/Vega Prime class instances are referenced counted. // The initial reference count is 0 after the instance is created. // When the reference count is smaller or equal to 0 in unref(), // the instance will be deleted automatically. Increasing reference // count here for all member variables will guarantee that they will // not be deleted until myApp is deleted. m_motion = *vpMotionFly::begin()。 assert(m_motion)。 m_motionref()。 return vsgu::SUCCESS。 } /** * Override keyboard input */ virtual void onKeyInput(vrWindow::Key key, int mod) { double dval。 vpObserver *observer = *vpObserver::begin()。 switch (key) { case vrWindow::KEY_a: // decrease the lift dval = m_motiongetLift() 。 if (dval 0) dval = 。 m_motionsetLift(dval)。 printf(lift %g\n, dval)。 break。 case vrWindow::KEY_A: // increase the lift dval = m_motiongetLift() + 。 if (dval 1) dval = 。 m_motionsetLift(dval)。 printf(lift %g\n, dval)。 break。 case vrWindow::KEY_b: // decrease the lift due to flaps dval = m_motiongetLiftFlaps() 。 if (dval 0) dval = 。 m_motionsetLiftFlaps(dval)。 printf(lift flaps %g\n, dval)。 break。 case vrWindow::KEY_B: // increase the lift due to flaps dval = m_motiongetLiftFlaps() + 。 if (dval 1) dval = 。 m_motionsetLiftFlaps(dval)。 printf(lift flaps %g\n, dval)。 break。 case vrWindow::KEY_c: // decrease the lift angle damping dval = m_motiongetDampingLiftAngle() 。 if (dval ) dval = 。 m_motionsetDampingLiftAngle(dval)。 printf(lift angle damping %g\n, dval)。 break。 case vrWindow::KEY_C: // increase the lift angle damping dval = m_motiongetDampingLiftAngle() + 。 if (dval 0) dval = 。 m_motionsetDampingLiftAngle(dval)。 printf(lift angle damping %g\n, dval)。 break。 case vrWindow::KEY_d: // decrease the maximum lift angle dval = m_motiongetLiftMaxAngle() 。 if (dval 0) dval = 。 m_motionsetLiftMaxAngle(dval)。 printf(maximum lift angle %g\n, dval)。 break。 case vrWindow::KEY_D: // increase the maximum lift angle dval = m_motiongetLiftMaxAngle() + 。 if (dval 90) dval = 。 m_motionsetLiftMaxAngle(dval)。 printf(maximum lift angle %g\n, dval)。 break。 case vrWindow::KEY_e: // decrease the pitch rate dval = m_motiongetRatePitch() 。 if (dval 0) dval =