亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        六軸陀螺儀MPU6050的虛擬3D模型角度控制*

        2018-01-04 02:55:14
        關(guān)鍵詞:線程串口端口

        ,

        (山東科技大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,青島 266590)

        六軸陀螺儀MPU6050的虛擬3D模型角度控制*

        韓進(jìn),許雯雯

        (山東科技大學(xué) 計(jì)算機(jī)科學(xué)與工程學(xué)院,青島 266590)

        基于六軸陀螺儀MPU6050和集成WiFi芯片的Arduino設(shè)計(jì),搭建了對(duì)Unreal Engine4(虛幻引擎)中3D模型進(jìn)行角度姿態(tài)控制的硬件設(shè)備,該設(shè)備可嵌入到實(shí)際物體與虛擬3D模型進(jìn)行實(shí)時(shí)交互??臻g角度數(shù)據(jù)由DMP姿態(tài)解算器分析處理,MPU6050與Arduino等用串口通信,將數(shù)據(jù)打包,通過(guò)UDP協(xié)議將數(shù)據(jù)上傳至Unreal Engine4(虛幻引擎)獨(dú)立線程處理。測(cè)試結(jié)果表明,硬件設(shè)備與3D模型可以實(shí)現(xiàn)實(shí)時(shí)角度姿態(tài)控制,以低成本的投入提高了用戶的體驗(yàn)感與沉浸感。

        Unreal Engine4;Arduino;MPU6050;姿態(tài)控制;六軸陀螺儀

        引 言

        本文在傳統(tǒng)硬件如鼠標(biāo)、鍵盤交互基礎(chǔ)上,提出一種可嵌入到實(shí)際物體中的硬件交互方式[1],體現(xiàn)出虛擬現(xiàn)實(shí)3D特性。使用集成了WiFi芯片ESP8266的Arduino 開發(fā)板來(lái)與上位機(jī)進(jìn)行WiFi通信與數(shù)據(jù)傳輸,芯片MPU6050完成姿態(tài)數(shù)據(jù)的采集與計(jì)算。Unreal Engine4基于Poco網(wǎng)絡(luò)庫(kù)接收端口姿態(tài)數(shù)據(jù)進(jìn)行分析與處理,分別將X、Y、Z三個(gè)方向的速度、加速度與角速度分別傳送至控制家居模型角度的setRotation()函數(shù),實(shí)現(xiàn)實(shí)時(shí)720°姿態(tài)控制,加強(qiáng)了系統(tǒng)的交互性體驗(yàn)與沉浸感。

        1 系統(tǒng)總體架構(gòu)

        圖1 系統(tǒng)結(jié)構(gòu)框圖

        系統(tǒng)結(jié)構(gòu)框圖如圖1所示,系統(tǒng)由兩部分組成:數(shù)據(jù)采集傳輸部分選用基于ESP8266芯片的Arduino開發(fā)板和MPU6050模塊,數(shù)據(jù)接收分析部分通過(guò)Unreal Engine4完成。硬件Arduino與MPU6050通過(guò)串口傳輸數(shù)據(jù),Arduino板與Unreal Engine4之間的通信則是通過(guò)WiFi芯片ESP8266基于UDP協(xié)議進(jìn)行WiFi連接。Unreal Engine4在一個(gè)獨(dú)立的線程里通過(guò)接收端口8000傳送的MPU6050傳感器數(shù)據(jù)進(jìn)行解析后,傳送至藍(lán)圖,在藍(lán)圖中實(shí)時(shí)更新Actor的位置參數(shù),從而實(shí)現(xiàn)實(shí)時(shí)角度姿態(tài)的控制。

        2 硬件設(shè)計(jì)

        2.1 硬件接口電路

        MPU6050模塊的輸出電壓范圍為3~6 V,TTL電平輸出,通過(guò)串口與Arduino開發(fā)板連接,引腳接線如圖2所示。

        圖2 MPU6050引腳接線圖

        2.2 MPU6050芯片

        MPU6050是一個(gè)集成六軸運(yùn)動(dòng)處理器的芯片,包含三軸MEMS陀螺儀和三軸MEMS加速度計(jì),免除了組合陀螺儀與加速度時(shí)間軸之差的問(wèn)題,節(jié)約了大量封裝空間。MPU6050的數(shù)據(jù)寫入和讀出均通過(guò)其芯片內(nèi)部的寄存器實(shí)現(xiàn),這些寄存器的地址為1個(gè)字節(jié),即8位尋址空間。查閱寄存器手冊(cè)可知加速度和角速度位于表1的寄存器地址中。

        表1 MPU6050寄存器地址及含義

        系統(tǒng)所用的MPU6050模塊發(fā)送的每幀數(shù)據(jù)為包含加速度包、角速度包和角度包的數(shù)據(jù)包,3個(gè)數(shù)據(jù)包按順序依次輸出,不同波特率下發(fā)包的間隔時(shí)間不同,軟件端通過(guò)檢測(cè)包頭即可判斷數(shù)據(jù)類型。系統(tǒng)波特率為115 200,每隔10 ms輸出1幀數(shù)據(jù)。區(qū)分3種包的數(shù)據(jù)內(nèi)容標(biāo)識(shí)如表2所列。

        以加速度計(jì)算公式為例,數(shù)據(jù)是short類型,在乘以表示的量程之前,除以short類型表示的數(shù)據(jù)范圍為-32 768~32 768,加速度的計(jì)算公式如下所示:

        ax=((AxH<<8)|AxL)/32768×16g

        ay=((AyH<<8)|AyL)/32768×16g

        az=((AzH<<8)|AzL)/32768×16g

        式中,_H和_L分別表示其高、低字節(jié)位。

        表2 數(shù)據(jù)內(nèi)容標(biāo)識(shí)

        3 軟件設(shè)計(jì)

        3.1 DMP姿態(tài)解算

        MPU6050在實(shí)際應(yīng)用中,需要根據(jù)原始數(shù)據(jù)得到三軸的歐拉角(即俯仰角)、滾仰角和偏航角確定姿態(tài)。MPU6050內(nèi)部集成的數(shù)字運(yùn)動(dòng)處理器DMP(Digital Motion Processor)基于自身運(yùn)動(dòng)處理演算算法處理數(shù)據(jù)后并自動(dòng)生成角度值,直接輸出格式為q30的四元數(shù),反三角函數(shù)運(yùn)算后得到三個(gè)歐拉角。姿態(tài)解算過(guò)程圖如圖3所示。

        圖3 姿態(tài)解算過(guò)程圖

        歐拉角確定物體姿態(tài)需要旋轉(zhuǎn)角度和旋轉(zhuǎn)順序,地理坐標(biāo)系與載體坐標(biāo)系的轉(zhuǎn)換用到四元數(shù)旋轉(zhuǎn)矩陣,可以有效避免萬(wàn)向節(jié)鎖。四元數(shù)q表示為:

        旋轉(zhuǎn)的四元數(shù)為單位四元數(shù)且模為1,可表示為:

        “四元數(shù)表示”可轉(zhuǎn)為“歐拉角表示”,α為Z軸的偏航角,φ為Y軸的俯仰角,θ為X軸的滾轉(zhuǎn)角。

        3.2 通信與數(shù)據(jù)傳輸

        硬件設(shè)備與上位機(jī)WiFi通信將經(jīng)過(guò)姿態(tài)解算的歐拉角數(shù)據(jù)打包發(fā)送至上位機(jī),具體步驟如下:配置Arduino IDE,導(dǎo)入與WiFi芯片ESP8266相關(guān)的庫(kù)文件,獲取硬件信息的端口號(hào),設(shè)置波特率為115 200。在Arduino IDE平臺(tái)編寫代碼,流程如下:

        ① Serial.begin(115200),設(shè)置ESP8266波特率,波特率要和Arduino以及MPU6050保持一致。

        ② 調(diào)用函數(shù)WiFi.begin(ssid, password),ssid為路由器的WiFi名稱,password為其密碼。WiFi連接成功后,執(zhí)行udp.begin(serverPort),serverPort指進(jìn)行通數(shù)據(jù)傳輸?shù)亩丝凇?/p>

        圖5 數(shù)據(jù)包判斷解析圖

        ③ 串口發(fā)來(lái)的原始傳感器數(shù)據(jù),每11個(gè)字節(jié)為一幀,通過(guò)UDP協(xié)議發(fā)送到上位機(jī)的8000端口。Serial.avai;able()>0判定串口是否接收了數(shù)據(jù),Serial.read()函數(shù)讀取串口接收的數(shù)據(jù)。0x55表示包頭信息,是判斷一幀數(shù)據(jù)傳輸完成的標(biāo)識(shí)。bufferIndex歸零后,準(zhǔn)備下一幀數(shù)據(jù)的接收。

        WiFi通信與數(shù)據(jù)傳輸流程圖如圖4所示。

        圖4 WiFi通信與數(shù)據(jù)傳輸流程圖

        3.3 Unreal Engine4數(shù)據(jù)接收及解析

        Unreal Engine4是一個(gè)開源的純C++引擎,硬件設(shè)備與Unreal Engine4通信,即Unreal Engine4實(shí)時(shí)獲取基于UDP協(xié)議從電腦端口8000傳送來(lái)的MPU6050姿態(tài)數(shù)據(jù)。需使用開源的Poco庫(kù),Poco C++庫(kù)是側(cè)重于網(wǎng)絡(luò)應(yīng)用程序的類庫(kù),該系統(tǒng)主要使用了Poco的Net類庫(kù)和用于多線程的Mutex類庫(kù)以及Thread類庫(kù)。

        基于Visual C++平臺(tái)具體實(shí)現(xiàn)步驟:

        ① 綁定8000端口,獲取MPU6050數(shù)據(jù)信息。Poco::Net::SocketAddress(8000)函數(shù)用來(lái)綁定端口號(hào)并確認(rèn)IP網(wǎng)絡(luò)連接的端點(diǎn),在這里給定的端口必須是十進(jìn)制端口號(hào)或者是服務(wù)名。獲取相應(yīng)端口后進(jìn)行綁定來(lái)獲取數(shù)據(jù)信息,這里用到Poco::Net::DatagramSocket.bind()函數(shù)。DatagramSocket類用來(lái)發(fā)送和接收UDP數(shù)據(jù)包,使用DatagramSocket類的send()和receive()方法來(lái)發(fā)送和接收DatagramPacket實(shí)例。

        ② Unreal Engine4要與硬件設(shè)備進(jìn)行網(wǎng)絡(luò)通信,為了不阻塞主線程和提高CPU的使用率。在綁定相應(yīng)端口后開辟一個(gè)獨(dú)立線程來(lái)處理數(shù)據(jù)。即用Poco::Thread,在Poco中將入口函數(shù)抽象為一個(gè)Runable類,用戶需要繼承至該類來(lái)實(shí)現(xiàn)自定義的入口函數(shù),同時(shí)Poco也將線程抽象為一個(gè)thread對(duì)象,調(diào)用strat方法,并傳入一個(gè)Runnable對(duì)象來(lái)啟動(dòng)線程。

        ③ 解析姿態(tài)數(shù)據(jù)。獲取三個(gè)X、Y、Z三軸上的加速度、旋轉(zhuǎn)角速度與角度,判斷解析如圖5所示。

        圖6 Unreal Engine4接收處理數(shù)據(jù)流程圖

        ④ 更新數(shù)據(jù)至藍(lán)圖。在接收MPU6050數(shù)據(jù)的MPUServe類和綁定數(shù)據(jù)到藍(lán)圖MPUActor類中用到一個(gè)接口,即MPUInterface。此外,在進(jìn)行實(shí)時(shí)更新數(shù)據(jù)的同時(shí),要先獲取Actor當(dāng)前的位置信息,包括X、Y、Z三個(gè)方向上的旋轉(zhuǎn)角度以及加速度,用到UE4底層提供的函數(shù),即getLocation()和getRotation()函數(shù)。需要實(shí)時(shí)更新Actor的姿態(tài)數(shù)據(jù),“Poco:Mutex”可用于線程間同步或者是同一線程中不同進(jìn)程間的同步;“Poco:Mutex:ScopedLock()”是一個(gè)模板類,在函數(shù)構(gòu)造的時(shí)候會(huì)自動(dòng)獲取鎖,在函數(shù)退出的時(shí)候則自動(dòng)釋放鎖。

        Unreal Engine4接收處理數(shù)據(jù)流程圖如圖6所示。

        ⑤ 重寫B(tài)lueprints的BeginPlay()等方法。因?yàn)樵谔摶靡嬷杏兄约阂惶拙幋a規(guī)范與規(guī)則,比如在游戲開始前需要先調(diào)用BeginPlay()方法,而Tick()方法則表示在每一幀都要進(jìn)行刷新。在這里要對(duì)這兩個(gè)方法進(jìn)行重寫,從而保證其數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性。

        //Called when the game starts or when

        //spawned

        void AMPU6050Actor∷BeginPlay(){

        Super∷BeginPlay()

        mpuServer=new MPU6050Server(8000,this);

        }

        //Called every frame

        void AMPU6050Actor∷Tick(float DeltaTime)|

        Super∷Tick(DeltaTime)

        CurrentPosition = actorPose.GetLocation();

        CurrentPotation = actorPose.GetRotation();

        }

        3.4 Blueprint實(shí)現(xiàn)模型控制

        這部分工作主要在Unreal Engine4引擎的可視化腳本Blueprints中完成。在VC++中定義以及重寫的部分函數(shù)進(jìn)行調(diào)用及傳參,調(diào)用重寫的Tick()函數(shù),每一幀都要獲取到所操作模型的Current Rotation()以及Current Position()。同時(shí)也要把傳感器的數(shù)據(jù)分為Roll、Pitch、Yaw三個(gè)方向傳送給所操作模型,實(shí)現(xiàn)用setRelativeRotation()實(shí)時(shí)確定模型姿態(tài)位置。

        4 測(cè)試結(jié)果

        ① ESP8266 WiFi連接測(cè)試結(jié)果如圖7所示,波特率為115 200,端口COM3,與電腦成功進(jìn)行了WiFi連接。

        圖7 WiFi測(cè)試結(jié)果

        ② MPU6050數(shù)據(jù)測(cè)試結(jié)果,將MPU6050模塊與ESP8266模塊進(jìn)行串口連接,在成功進(jìn)行WiFi通信后,對(duì)MPU6050的數(shù)據(jù)傳輸進(jìn)行測(cè)試。旋轉(zhuǎn)模塊,用MiniIMU進(jìn)行數(shù)據(jù)監(jiān)測(cè)以及接收,加速度、角速度以及角度測(cè)試結(jié)果如圖8所示。

        圖8 陀螺儀MPU6050測(cè)試結(jié)果

        ③ 姿態(tài)追蹤測(cè)試結(jié)果。在前兩步測(cè)試無(wú)誤的基礎(chǔ)上,現(xiàn)對(duì)虛幻引擎中模型進(jìn)行姿態(tài)控制測(cè)試,這里采用的模型為日常生活中隨處可見的電熱水壺,旋轉(zhuǎn)硬件設(shè)備,測(cè)試結(jié)果如圖9所示。

        測(cè)試結(jié)果無(wú)誤后,將芯片嵌入于一個(gè)電燒水壺底部,測(cè)試結(jié)果表明,沉浸感以及體驗(yàn)感增強(qiáng),達(dá)到了預(yù)期結(jié)果,測(cè)試結(jié)果如圖10所示。

        圖9 角度控制測(cè)試

        圖10 模塊嵌入測(cè)試結(jié)果

        結(jié) 語(yǔ)

        [1] 關(guān)麗坤,俞國(guó)印,任學(xué)平.嵌入式轉(zhuǎn)動(dòng)角度采集系統(tǒng)[J].測(cè)控技術(shù),2014,33(10):155-158.

        [2] 李景輝,楊立才.基于多傳感器信息融合的人體姿態(tài)解算算法[J].山東大學(xué)學(xué)報(bào):工學(xué)版,2013,5(43):49-54.

        [3] 葉锃峰,馮恩信.基于四元數(shù)和卡爾曼濾波的兩輪車姿態(tài)穩(wěn)定方法[J].傳感技術(shù)學(xué)報(bào),2010,25(4):524-528.

        [4] 崔陽(yáng),張維華.一種基于Arduino的智能家居控制系統(tǒng)[J].電子技術(shù)應(yīng)用,2014(4):123-125.

        [5] 劉秀玲,李明昭,耿佳,等,真車信號(hào)采集的虛擬駕駛交互控制研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2012,33(8):3154-3158.

        [6] 馬敏,吳海超.基于四元數(shù)自補(bǔ)償四旋翼飛行器姿態(tài)解算[J].制造業(yè)自動(dòng)化,2013,35(12):18-21.

        [7] Jing Li, Wei Zhang, Bing Xu.Design of Two-Wheeled Self-Balancing Robot Control System[J].Trans Tech,2014(1044):774-777.

        [8] Qing Hui Wang, Dan Li,Lei Chang.The Design of Strapdown Inertial AHRS Based on MEMS[J].TransTech,2013(756-759):518-522.

        韓進(jìn)(碩士生導(dǎo)師),主要研究方向?yàn)榍度胧接?jì)算機(jī)控制、計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)、電子電路;許雯雯(碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng)技術(shù)。

        結(jié) 語(yǔ)

        參考文獻(xiàn)

        [1] 彭曉曦.嵌入式Linux下文件系統(tǒng)的研究與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2007.

        [2] 郭玉東.Linux操作系統(tǒng)結(jié)構(gòu)分析[M].西安:西安電子科技大學(xué)出版社,2002.

        [3] 新設(shè)計(jì)團(tuán)隊(duì).Linux內(nèi)核設(shè)計(jì)的藝術(shù):圖解Linux操作系統(tǒng)架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理[M].北京:機(jī)械工業(yè)出版社,2011.

        [4] Chan T.UNIX System Programming Using C++[M]. Upper Saddle River:Prentice-Hall,1997.

        [5] 高劍林.Linux內(nèi)核探秘:深入解析文件系統(tǒng)和設(shè)備驅(qū)動(dòng)的架構(gòu)與設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2014.

        [6] 程仲漢.多核環(huán)境下的操作系統(tǒng)并行性能問(wèn)題研究[D].南京:南京大學(xué),2015.

        [7] Cheng J.FILE SYSTEM, AND METHOD AND DEVICE FOR RETRIEVING,WRITING,MODIFYING OR DELETING FILE:WO,CN 102184211 A[P].2011.

        [8] 趙俊化,胡金霞.LRU頁(yè)面置換算法的改進(jìn)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2012,38(17):24-27.

        周俊杰(副教授),主要研究方向?yàn)榇髷?shù)據(jù)分析、嵌入式系統(tǒng)等;柯躍(碩士研究生),主要研究方向?yàn)榇髷?shù)據(jù)分析與應(yīng)用、嵌入式系統(tǒng)。

        Virtual3DModelAngleControlBasedonSix-axisGyroscopeMPU6050

        HanJin,XuWenwen

        (College of Computer Science and Engineering,Shandong University of Science and Technology,Qingdao 266590,China)

        In the paper,a hardware device is built based on MPU6050 and Arduino,which can control the 3D model angle attitude of Unreal Engine4,and the hardware device can be embedded into real object and real-time interaction with 3D model.The spatial angle data is analyzed and processed by the DMP gesture solver.The MPU6050 communicates with the Arduino serial port to upload the data to the Unreal Engine 4 independent thread processing via the UDP protocol.The test results show that the hardware device and the 3D model can realize the real-time angle attitude control.The interactive way of the hardware greatly enhances the user's sense of experience and immersion with low-cost investment.

        Unreal Engine4;Arduino;MPU6050;attitude control;six-axis gyroscope

        資助:國(guó)家自然科學(xué)基金(41572244);山東省自然科學(xué)基金項(xiàng)目(ZR2015DM013);山東科技大學(xué)優(yōu)秀教學(xué)團(tuán)隊(duì)支持計(jì)劃(JXTD20170503)。

        TP399

        A

        楊迪娜

        2017-08-11)

        2017-08-08)

        猜你喜歡
        線程串口端口
        一種端口故障的解決方案
        淺談AB PLC串口跟RFID傳感器的通訊應(yīng)用
        端口阻塞與優(yōu)先級(jí)
        淺談linux多線程協(xié)作
        USB接口的多串口數(shù)據(jù)并行接收方法探索
        基于藍(lán)牙串口適配器的GPS接收機(jī)與AutoCAD的實(shí)時(shí)無(wú)線通信
        初識(shí)電腦端口
        電腦迷(2015年6期)2015-05-30 08:52:42
        生成樹協(xié)議實(shí)例探討
        基于并行控制的FPGA多串口拓展實(shí)現(xiàn)
        Linux線程實(shí)現(xiàn)技術(shù)研究
        377p日本欧洲亚洲大胆张筱雨| 精品女厕偷拍视频一区二区区| 草逼短视频免费看m3u8| 一区二区三区av波多野结衣| 国产黑色丝袜在线观看下| 四虎无码精品a∨在线观看| 精品国产一区二区三区a| 97精品人人妻人人| 丰满少妇愉情中文字幕18禁片| 欧美日韩国产高清| 日本美女中文字幕第一区| 后入到高潮免费观看| 四虎成人精品无码永久在线| 国产精品国产三级国产在线观 | 久久人人97超碰超国产| 国产粉嫩嫩00在线正在播放| 午夜男女靠比视频免费| 成在线人免费视频| 欧美中文字幕在线| 国产精品亚洲精品日韩动图| 国产美女高潮流白浆免费视频| 久久久精品456亚洲影院| 成人无码视频在线观看网站| 亚洲中文字幕第一页免费| 久久偷看各类wc女厕嘘嘘偷窃| 国产999精品久久久久久| 国产一区二区丁香婷婷| 日本一二三四高清在线| 伊人激情av一区二区三区| 亚洲国产精品久久久天堂不卡海量 | 日本免费一区二区三区影院| 免费1级做爰片1000部视频| 超91精品手机国产在线| 亚洲三区av在线播放| 性欧美长视频免费观看不卡| √天堂中文官网8在线| 亚洲区精品久久一区二区三区女同 | 精品一级一片内射播放| 人妻av鲁丝一区二区三区| 国产综合精品久久亚洲| 国产精品亚洲综合久久|