999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

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

2018-01-04 02:55:14,
單片機與嵌入式系統應用 2017年12期

(山東科技大學 計算機科學與工程學院,青島 266590)

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

韓進,許雯雯

(山東科技大學 計算機科學與工程學院,青島 266590)

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

Unreal Engine4;Arduino;MPU6050;姿態控制;六軸陀螺儀

引 言

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

1 系統總體架構

圖1 系統結構框圖

系統結構框圖如圖1所示,系統由兩部分組成:數據采集傳輸部分選用基于ESP8266芯片的Arduino開發板和MPU6050模塊,數據接收分析部分通過Unreal Engine4完成。硬件Arduino與MPU6050通過串口傳輸數據,Arduino板與Unreal Engine4之間的通信則是通過WiFi芯片ESP8266基于UDP協議進行WiFi連接。Unreal Engine4在一個獨立的線程里通過接收端口8000傳送的MPU6050傳感器數據進行解析后,傳送至藍圖,在藍圖中實時更新Actor的位置參數,從而實現實時角度姿態的控制。

2 硬件設計

2.1 硬件接口電路

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

圖2 MPU6050引腳接線圖

2.2 MPU6050芯片

MPU6050是一個集成六軸運動處理器的芯片,包含三軸MEMS陀螺儀和三軸MEMS加速度計,免除了組合陀螺儀與加速度時間軸之差的問題,節約了大量封裝空間。MPU6050的數據寫入和讀出均通過其芯片內部的寄存器實現,這些寄存器的地址為1個字節,即8位尋址空間。查閱寄存器手冊可知加速度和角速度位于表1的寄存器地址中。

表1 MPU6050寄存器地址及含義

系統所用的MPU6050模塊發送的每幀數據為包含加速度包、角速度包和角度包的數據包,3個數據包按順序依次輸出,不同波特率下發包的間隔時間不同,軟件端通過檢測包頭即可判斷數據類型。系統波特率為115 200,每隔10 ms輸出1幀數據。區分3種包的數據內容標識如表2所列。

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

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

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

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

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

表2 數據內容標識

3 軟件設計

3.1 DMP姿態解算

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

圖3 姿態解算過程圖

歐拉角確定物體姿態需要旋轉角度和旋轉順序,地理坐標系與載體坐標系的轉換用到四元數旋轉矩陣,可以有效避免萬向節鎖。四元數q表示為:

旋轉的四元數為單位四元數且模為1,可表示為:

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

3.2 通信與數據傳輸

硬件設備與上位機WiFi通信將經過姿態解算的歐拉角數據打包發送至上位機,具體步驟如下:配置Arduino IDE,導入與WiFi芯片ESP8266相關的庫文件,獲取硬件信息的端口號,設置波特率為115 200。在Arduino IDE平臺編寫代碼,流程如下:

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

② 調用函數WiFi.begin(ssid, password),ssid為路由器的WiFi名稱,password為其密碼。WiFi連接成功后,執行udp.begin(serverPort),serverPort指進行通數據傳輸的端口。

圖5 數據包判斷解析圖

③ 串口發來的原始傳感器數據,每11個字節為一幀,通過UDP協議發送到上位機的8000端口。Serial.avai;able()>0判定串口是否接收了數據,Serial.read()函數讀取串口接收的數據。0x55表示包頭信息,是判斷一幀數據傳輸完成的標識。bufferIndex歸零后,準備下一幀數據的接收。

WiFi通信與數據傳輸流程圖如圖4所示。

圖4 WiFi通信與數據傳輸流程圖

3.3 Unreal Engine4數據接收及解析

Unreal Engine4是一個開源的純C++引擎,硬件設備與Unreal Engine4通信,即Unreal Engine4實時獲取基于UDP協議從電腦端口8000傳送來的MPU6050姿態數據。需使用開源的Poco庫,Poco C++庫是側重于網絡應用程序的類庫,該系統主要使用了Poco的Net類庫和用于多線程的Mutex類庫以及Thread類庫。

基于Visual C++平臺具體實現步驟:

① 綁定8000端口,獲取MPU6050數據信息。Poco::Net::SocketAddress(8000)函數用來綁定端口號并確認IP網絡連接的端點,在這里給定的端口必須是十進制端口號或者是服務名。獲取相應端口后進行綁定來獲取數據信息,這里用到Poco::Net::DatagramSocket.bind()函數。DatagramSocket類用來發送和接收UDP數據包,使用DatagramSocket類的send()和receive()方法來發送和接收DatagramPacket實例。

② Unreal Engine4要與硬件設備進行網絡通信,為了不阻塞主線程和提高CPU的使用率。在綁定相應端口后開辟一個獨立線程來處理數據。即用Poco::Thread,在Poco中將入口函數抽象為一個Runable類,用戶需要繼承至該類來實現自定義的入口函數,同時Poco也將線程抽象為一個thread對象,調用strat方法,并傳入一個Runnable對象來啟動線程。

③ 解析姿態數據。獲取三個X、Y、Z三軸上的加速度、旋轉角速度與角度,判斷解析如圖5所示。

圖6 Unreal Engine4接收處理數據流程圖

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

Unreal Engine4接收處理數據流程圖如圖6所示。

⑤ 重寫Blueprints的BeginPlay()等方法。因為在虛幻引擎中有著自己一套編碼規范與規則,比如在游戲開始前需要先調用BeginPlay()方法,而Tick()方法則表示在每一幀都要進行刷新。在這里要對這兩個方法進行重寫,從而保證其數據傳輸的實時性。

//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實現模型控制

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

4 測試結果

① ESP8266 WiFi連接測試結果如圖7所示,波特率為115 200,端口COM3,與電腦成功進行了WiFi連接。

圖7 WiFi測試結果

② MPU6050數據測試結果,將MPU6050模塊與ESP8266模塊進行串口連接,在成功進行WiFi通信后,對MPU6050的數據傳輸進行測試。旋轉模塊,用MiniIMU進行數據監測以及接收,加速度、角速度以及角度測試結果如圖8所示。

圖8 陀螺儀MPU6050測試結果

③ 姿態追蹤測試結果。在前兩步測試無誤的基礎上,現對虛幻引擎中模型進行姿態控制測試,這里采用的模型為日常生活中隨處可見的電熱水壺,旋轉硬件設備,測試結果如圖9所示。

測試結果無誤后,將芯片嵌入于一個電燒水壺底部,測試結果表明,沉浸感以及體驗感增強,達到了預期結果,測試結果如圖10所示。

圖9 角度控制測試

圖10 模塊嵌入測試結果

結 語

[1] 關麗坤,俞國印,任學平.嵌入式轉動角度采集系統[J].測控技術,2014,33(10):155-158.

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

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

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

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

[6] 馬敏,吳海超.基于四元數自補償四旋翼飛行器姿態解算[J].制造業自動化,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.

韓進(碩士生導師),主要研究方向為嵌入式計算機控制、計算機系統結構、電子電路;許雯雯(碩士研究生),主要研究方向為嵌入式系統技術。

結 語

參考文獻

[1] 彭曉曦.嵌入式Linux下文件系統的研究與實現[D].成都:電子科技大學,2007.

[2] 郭玉東.Linux操作系統結構分析[M].西安:西安電子科技大學出版社,2002.

[3] 新設計團隊.Linux內核設計的藝術:圖解Linux操作系統架構設計與實現原理[M].北京:機械工業出版社,2011.

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

[5] 高劍林.Linux內核探秘:深入解析文件系統和設備驅動的架構與設計[M].北京:機械工業出版社,2014.

[6] 程仲漢.多核環境下的操作系統并行性能問題研究[D].南京:南京大學,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頁面置換算法的改進與實現[J].計算機工程,2012,38(17):24-27.

周俊杰(副教授),主要研究方向為大數據分析、嵌入式系統等;柯躍(碩士研究生),主要研究方向為大數據分析與應用、嵌入式系統。

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

資助:國家自然科學基金(41572244);山東省自然科學基金項目(ZR2015DM013);山東科技大學優秀教學團隊支持計劃(JXTD20170503)。

TP399

A

楊迪娜

2017-08-11)

2017-08-08)

主站蜘蛛池模板: 欧美国产精品拍自| 亚洲第七页| 欧美成人一级| 国产欧美日韩va另类在线播放| 国产精品女熟高潮视频| 直接黄91麻豆网站| 性激烈欧美三级在线播放| 综合网天天| 亚洲不卡影院| 99视频在线观看免费| 制服丝袜亚洲| 国产网站黄| jizz亚洲高清在线观看| 全色黄大色大片免费久久老太| 亚洲人在线| 婷婷综合色| 国产网站黄| 好紧好深好大乳无码中文字幕| 亚洲国产精品VA在线看黑人| 国产在线观看第二页| 无码网站免费观看| 亚洲欧洲日韩综合色天使| 伊人成人在线| 亚洲欧美成人网| 黄色片中文字幕| 91福利免费视频| 欧美一区二区福利视频| 亚洲欧美人成人让影院| 99久久精品视香蕉蕉| 国产又粗又爽视频| 婷婷成人综合| 在线播放91| 强奷白丝美女在线观看| 国产欧美日韩另类| 97久久精品人人做人人爽| 亚洲国产欧美自拍| 国产欧美精品午夜在线播放| 亚洲国产精品一区二区第一页免 | 一本大道在线一本久道| 污网站免费在线观看| 日本在线国产| 欧美日韩国产成人高清视频| 国产永久免费视频m3u8| 国产精品青青| 人妻少妇乱子伦精品无码专区毛片| 色悠久久久| 99热6这里只有精品| 91最新精品视频发布页| 亚洲专区一区二区在线观看| 亚洲第一福利视频导航| 99久久免费精品特色大片| 免费在线a视频| 久久精品丝袜高跟鞋| 精品自拍视频在线观看| 四虎精品黑人视频| 欧美成人一区午夜福利在线| 亚洲国产欧美目韩成人综合| 国产精品成人第一区| 重口调教一区二区视频| 国产精品无码翘臀在线看纯欲| 免费毛片视频| 伊人网址在线| 亚洲欧洲国产成人综合不卡| 国产免费羞羞视频| 一级毛片在线播放| 国产资源免费观看| 中文字幕无码中文字幕有码在线 | av手机版在线播放| 亚洲国产成人久久77| 77777亚洲午夜久久多人| 国产激情无码一区二区APP | 日韩精品无码免费一区二区三区| 免费人欧美成又黄又爽的视频| www.日韩三级| 中文字幕自拍偷拍| 欧美黄网在线| 九九热精品在线视频| 亚洲av色吊丝无码| 国产欧美中文字幕| 一级做a爰片久久免费| 四虎精品黑人视频| 国产高清不卡视频|