AR眼镜虚实结合标定结果
AR系统中存在虚拟影像空间和现实世界空间两个空间。在实际使用中,我们要求虚拟影像空间与现实世界空间能够对齐,使得虚拟物体与实际物体能够正确地叠加在一起。这需要我们对AR眼镜进行标定,获得传感器与光学屏幕,人眼之间的几何关系1。
AR系统中存在虚拟影像空间和现实世界空间两个空间。在实际使用中,我们要求虚拟影像空间与现实世界空间能够对齐,使得虚拟物体与实际物体能够正确地叠加在一起。这需要我们对AR眼镜进行标定,获得传感器与光学屏幕,人眼之间的几何关系1。
手机已经通过使用Magisk为App提供超级用户的权限,但是需要App主动向系统索求权限。下面我们通过使用一个Java Jar包,使得Unity生成的Android App能够获得root权限。
系统:Ubuntu Unity: 2020.3.13f1 Android Studio 3.6.1
首先,Android Studio
中,菜单栏选择File->New->NewProject
创建一个Empty Activity
项目,Package name
和Minimum SDK
与Unity中的一致:
在菜单栏选择File->Project Structure->Modules->New Module
,新建一个Android Library
1,我们命名为GetRoot。注意Package name
和Minimum SDK
与Unity中的一致:
将/home/luohanjie/Unity/Hub/Editor/2019.4.15f1/Editor/Data/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Development/Classes
下的classes.jar
复制到Android项目Module
文件下的libs
文件夹下,如/home/luohanjie/Documents/Android Projects/Unity2Android/getroot/libs
。
将/home/luohanjie/Unity/Hub/Editor/2019.4.15f1/Editor/Data/PlaybackEngines/AndroidPlayer/Source/com/unity3d
下的UnityPlayerActivity.java
复制到Android
Studio中,Project栏目下Module name/src/main/java/Package name
下:
Android
Studio中,Project栏目下Module name/src/main/java/Package name
新建一个Empty Activity
:
修改MainActivity.java2:
1 | package com.cvte.imagetracker; |
通过Android
Studio中Project栏目下Module name/src/main/
下打开AndroidManifest.xml
文件并且修改,注意package
和android:name
的参数:
1 | <?xml version="1.0" encoding="utf-8"?> |
通过Android
Studio中Project栏目下Module name
下打开build.gradle
文件,修改minSdkVersion
和targetSdkVersion
,并在后面添加exportJar
代码3:
1 | apply plugin: 'com.android.library' |
Android
Studio中执行Sync Project with Gradle Files
,然后在右上角Gradle中Module name/Task/other/
下执行exportJar
:
Project栏目下Module name/release
中放有build生成的AndroidPlugin.jar。将AndroidPlugin.jar
和AndroidManifest.xml
复制到Unity项目的Assets/Plugins/Android/
目录下。使用解压缩软件打开AndroidPlugin.jar
,并且删除BuildConfig.class
:
Unity中编写测试脚本:
1 | using System.Collections; |
Scripting Backend使用IL2CPP,并且注意Package Name和API Level与Java项目中一致。
打包,放到装有Magisk的手机上执行,启动的时候就会提示APP授予超级用户权限。
1 | git clone https://github.com/saki4510t/UVCCamera.git |
打开Android Studio,File->Open打开UVCCamera文件夹。
修改Project/build.gradle文件,修改以下部分:
1 | ext { |
File->Project Structure,修改Android SDK location和Android NDK
location,例如Android SDK location: /home/luohanjie/Android/Sdk
,Android NDK location: /home/luohanjie/Android/Sdk/ndk/android-ndk-r21
。
修改Project/libuvccamera/src/main/jni/Application.mk,
1 | APP_PLATFORM := android-21 |
然后Build->Make Project。