Unity8.物體空間定位(VuforiaAR)日誌

實現主要參考:VuforiaAR物體空間定位(設備跟蹤):http://blog.sina.com.cn/s/blog_8082aa610102x83i.html

 

高通 Vuforia SDK + Unity3D製作簡易Android AR app

https://tieba.baidu.com/p/5086865037?red_tag=0740748620&traceid=

使用高通 Vuforia SDK http://www.cnblogs.com/mrmocha/p/9737448.html

EasyAR使用:https://www.easyar.cn/doc/EasyAR%20SDK/Getting%20Started/2.0/Setting-up-EasyAR-Unity-SDK.html

Easyar官方有一個關於模型的平移縮放的教程,點擊查看,:

https://blog.csdn.net/qumoy/article/details/78228754

EasyAR開發技巧---模型交互操作:http://forum.easyar.cn/portal.php?mod=view&aid=5

脫卡:http://forum.easyar.cn/portal.php?mod=view&aid=28

ARCamera下也添加一個模型,並設置這個模型在你相機下的位置大小等參數(這裏各位開發者可以將模型大小和位置修改爲一致)

 

AR SDK基本分爲幾個主要功能。

1)動作捕捉:使用手機的傳感器和相機,ARCore可以準確感知手機的位置和姿態,並改變顯示的虛擬物體的位置和姿態

2)環境感知:感知平面,比如你面前的桌子、地面,在虛擬空間中準確復現這個平面

3)光源感知:使用手機的環境光傳感器,感知環境光照情況,對應調整虛擬物體的亮度、陰影和材質,讓它看起來更融入環境。

目前市面上有三款比較主流的AR SDK能支持unity進行AR的開發。分別是VuforiaARcoreARkit

ARcore是谷歌公司研發的AR SDK,軟件開發者現在就可以下載它去開發Android平臺上的增強現實應用,或者爲他們的App增加增強現實功能。ARcore支持動作捕捉,環境感知與光源感知。是一個比較完善的AR SDK。缺陷在於目前只支持谷歌手機以及新版的三星手機,能支持的手機不多,開發成本略高。

ARkit是蘋果公司研發的AR SDK,同樣也支持動作捕捉,環境感知與光源感知,支持ARKitiOS設備爲iPhone SEiPhone6siPhone 6s PlusiPhone 7iPhone 7 PlusiPad Pro (所有型號)9.7英寸iPad(2017)。缺點在於開發成本也相對昂貴,除了需要一部支持ARkit的設備以外,還需要一臺支持蘋果系統的電腦以及一個一年99美元的開發者賬戶。

Vuforia相對前幾者而言相對簡單,適合初級入門。它的原理其實就是圖像識別,通過分析一張圖片來確定一個平面,然後在這個平面上進行創作。不過目前暫不支持環境感知與光源感知,必須要通過特定的圖片來識別平面,Vuforia的優勢在於識別出來的平面相對而言比較穩定,只要攝像機能捕捉到有圖片,那識別的平面基本不會出現抖動或者錯位,這一點是環境感知暫時無法超越的地方。除此之外,Vuforia開發成本相對較低,並且支持大多數安卓系統。

EasyAR使用介紹:https://www.zhihu.com/question/35001692

於是老樣子導入unity包進unity,發現image target的圖片丟了,看了看文檔,再想起之前用的是unity4.6版本,而這次是unity5 ,應該就是版本問題,果然換回unity4就沒問題。

於是再次打包發佈,這次不黑屏了,直接跳出字樣是我的bundle idappid不符,該了多遍未果,於是就上QQ羣問,折騰了一遍,發現是bundle的填寫格式問題,得把com.company.productunitybundle端填寫一致,appid也是一樣。

EasyAR從我的使用體驗上來看,相對Vuforia等國外產品使用簡單、編程友好,隨着更新推進,現在文檔相對比較完善,目前除了視頻存在問題以外,整體非常滿意,自定義識別圖比Vuforia更人性化,如果從功能特性、深度定製這兩個方面來說略顯不足,因爲代碼封裝比較徹底,這種需求採用原生開發會比較好點,跨平臺、免費、無水印是亮點,國產AR引擎做到這樣感覺非常不錯了,因爲閱讀ARToolkit的代碼感覺非常複雜,其次就是現在社區缺乏活力,感覺無論從官方還是開發者都比較沉悶,每次到論壇裏都發現沒有什麼有價值的內容,基本不更新。

某位博主寫的關於EasyAR的四篇博客,基本覆蓋了現在EasyAR的功能,更多的內容請看文檔和官方示例:

http://qinyuanpei.com/2015/10/30/have-a-taste-of-easyar-01.html

http://qinyuanpei.com/2015/11/03/have-a-taste-of-easyar-02.html

http://qinyuanpei.com/2015/12/09/have-a-taste-of-easyar-03.html

http://qinyuanpei.com/2015/12/09/have-a-taste-of-easyar-04.html

可以訪問最後一個地址,進入博客以後,這幾篇文章是以系列形式撰寫的

使用easyAR

爲了初始化 EasyAR SDK,需要先在網頁系統中生成key

登錄 www.easyar.cn ,點擊 開發中心-License管理 ,添加License Key

填寫的app name

導入sdk後多出的文件

需要填app keylicense生成的長key,複製):

Bundle ID

 

com.Company.XXX

 

Bundle ID(iOS): com.Company.ARDesign

PackageName (Android): com.Company.ARDesign

SDK License Key:

UiyP1RsCJfAy4HCDoDDLBzHvwbjwAWRmL5vjIM1OeWdlzIles9jL4NDL17PSYJGYgrcxWXmnpieecy8EFGX7OJCaRwGfOVAq1THCYEB0wWqqJBYoSY5Y0EU7EY8qOmzUwOVoi22dG3kVIofpjNHqLQVGiarpXRn4XC3cub0JL7cL3uBpdA6OMTJlTUc4VShlKFy2ufYY

注:該SDK License Key對應的SDK版本爲2.x。請在項目工程中輸入SDK License KeySDK License Key必須和Bundle ID對應使用

 

我們在FileBuild Setting之後點擊Player Setting,選擇對應的platform. 

最後也是最關鍵的一部分,我們的Graphics API 使用的是OpenGLES2.如圖:

http://zj-test.sightp.com/社區圖片-渲染模型+脫卡/15.png

Easyar

高通有設備跟蹤:

http://s7.sinaimg.cn/mw690/002lUyiJzy7knz8Jd8qb6

使用高通

支持包在File-Build setting的XR settings中可以下載

安裝路徑和引擎安裝路徑的Editor文件夾平級,否則fail to locate Unity.exe

高通文檔:https://library.vuforia.com/content/vuforia-library/en/getting-started/overview.html

高通key

AdVxRLL/////AAABme1DxPOD7U/ThXafckcdIOIf1wbO6UHxUYn34bEigse8MNkkRPvugeNSuBt76X0pTUI/RJbVdSyjqCX3fh2tEbnir/W95IsQDFyfFzQTcL5ZFqOKFM1ORNGVAOB5OYymoCuNs+e+ES3pptf5nQv7CHCtdt2vBqV4wYRT4CZyx/6w82JgbwLCS4APs4lQ6h/83qgHkCZwKofaAGwL3mUMdRQkOp6jgE90rG+thJ7/Kmr8SdW2jQK7Bpz33faRynX8VJ3o7zTNmE7stCIcg6KhFHIrehunCTuCz/UYKe5WCaOlENBlUINrAQjLZghrEZlxaPJ+KiWiDwOqAQt0fKPJ9Nsto59WI2pGFqz8xp1sOEnY

Plan Type: Develop

Status: Active

License UUID: 781a4c7065c34df093c42da582807dad

Permissions:

  • Advanced Camera
  • External Camera
  • Model Targets
  • Watermark

History:

  • License Created - Today 16:45

 

參考http://blog.sina.com.cn/s/blog_8082aa610102x83i.html

需要注意一點設備需要有陀螺儀

啓動程序轉動攝像頭,我們會發現模型就固定現實場景的某個位置,不會固定在屏幕的某個位置。這就實現了物體空間定位的效果

報錯

Exception in callback: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object

  at Vuforia.VuforiaManager.Update (ScreenOrientation counterRotation, System.Boolean& reapplyOldState) [0x00000] in <filename unknown>:0

  at Vuforia.VuforiaARController.UpdateStatePrivate (Boolean forceUpdate, Boolean reapplyOldState) [0x00000] in <filename unknown>:0

  at Vuforia.VuforiaARController.UpdateState (Boolean forceUpdate, Boolean reapplyOldState) [0x00000] in <filename unknown>:0

  at Vuforia.DigitalEyewearARController.Update () [0x00000] in <filename unknown>:0

  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (object,object[],System.Exception&)

  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000d0] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:222

  --- End of inner exception stack trace ---

  at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x000eb] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MonoMethod.cs:232

  at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.Reflection/MethodBase.cs:115

  at System.Delegate.DynamicInvokeImpl (System.Object[] args) [0x000b9] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Delegate.cs:443

  at System.MulticastDelegate.DynamicInvokeImpl (System.Object[] args) [0x00018] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/MulticastDelegate.cs:71

  at System.Delegate.DynamicInvoke (System.Object[] args) [0x00000] in /Users/builduser/buildslave/mono/build/mcs/class/corlib/System/Delegate.cs:415

  at Vuforia.DelegateHelper.InvokeDelegate (System.Delegate action, System.Object[] args) [0x00000] in <filename unknown>:0

UnityEngine.Debug:LogError(Object)

Vuforia.DelegateHelper:InvokeDele

可能是誤刪(丟失了某個文件)嘗試全部刪除後重新導入

識別圖片與其上物體的大小比例可能會影響效果

發現電腦中無法實現物體空間定位(可能是因爲沒有陀螺儀)但手機可以

注意需要定位的物體與ARCamera平級

識別(最後不需要)

參考高通文檔:https://library.vuforia.com/content/vuforia-library/en/getting-started/overview.html

教程集合:http://www.arvrschool.com/read.php?tid=325&fid=21

Vuforia介紹 https://www.cnblogs.com/mrmocha/p/9737448.html

1.相機的世界中心設置

a.SPECIFIC_TARGET:制定一個物體作爲世界中心座標

b.FIRST_TARGET:攝像機所照射到的第一個需要識別的目標爲世界中心座標

C.CAMERA:攝像機爲世界中心的座標

D.DEVICE_TRACKING:設備追蹤(以我們設備正在追蹤的物體爲世界中心座標)

警告(但無影響):

Vuforia Configuration "No webcam profile has been found"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章