Как получить отслеживание состояния в ArCore - PullRequest
1 голос
/ 12 июня 2019

Я создаю приложение AR Android, в котором я хочу, чтобы стрелка появлялась всякий раз, когда изменяется позиция пользователя.Однако я получаю NotTrackingException, когда пытаюсь создать якорь.Как я могу узнать, что ARCore обнаружил самолет, чтобы я мог добавить свой якорь?

Единственное, что я обнаружил, это это , но я мало что смогу из него выбрать.

fun onLocationChanged(location: Location) {
    val session = arFragment.arSceneView.session
    var arrowViewRenderable:ViewRenderable
    val pos = floatArrayOf(0f,0f,-1f)
    val rotation = floatArrayOf(0f,0f,0f,1f)
    val anchor = session!!.createAnchor(Pose(pos,rotation))
    val anchorNode = AnchorNode(anchor)
    anchorNode.setParent(arFragment.arSceneView.scene)
    ViewRenderable.builder()
        .setView(this, R.layout.arrow)
        .setSizer(DpToMetersViewSizer(400  ))
        .build()
        .thenAccept { renderable -> arrowViewRenderable = renderable
                        anchorNode.renderable = arrowViewRenderable
                    }
}
status.cc:156 ArStatusErrorSpace::AR_ERROR_NOT_TRACKING: Cannot create anchors while the camera is not tracking.
2019-06-12 14:58:37.369 29685-29685/com.carmeq.carfind E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.carmeq.carfind, PID: 29685
    com.google.ar.core.exceptions.NotTrackingException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at com.google.ar.core.Session.throwExceptionFromArStatus(Session.java:134)
        at com.google.ar.core.Session.nativeCreateAnchor(Native Method)
        at com.google.ar.core.Session.createAnchor(Session.java:93)
        at com.carmeq.carfind.MainActivity.onLocationChanged(MainActivity.kt:282)
        at com.carmeq.carfind.MainActivity$mLocationCallback$1.onLocationResult(MainActivity.kt:223)
        at com.google.android.gms.internal.zzbzq.zzq(Unknown Source:4)
        at com.google.android.gms.common.api.internal.zzcj.zzb(Unknown Source:8)
        at com.google.android.gms.common.api.internal.zzck.handleMessage(Unknown Source:16)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:6981)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)

1 Ответ

1 голос
/ 13 июня 2019

Вы можете получить TrackingState с камеры текущего кадра.

val frame = session.update()
if (frame.camera.trackingState == TrackingState.tracking) {
    // place anchor
}
...