物体空间定位(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

可能是误删(丢失了某个文件)尝试全部删除后重新导入

识别图片与其上物体的大小比例可能会影响效果

发现电脑中无法实现物体空间定位(可能是因为没有陀螺仪)但手机可以

识别(最后不需要)

参考高通文档: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"

 

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