在Google Samples上,我可以获取有关从ArAnchorArPlane生成的姿势获取矩阵的示例。但是,当我尝试从ArCamera获取信息不起作用时,我的结果是 Identity Matrix

我的代码的一小部分:

ScopedArPose scopedArPose(ar_session_);
ArCamera_getPose(ar_session_, ar_camera, scopedArPose.GetArPose());
std::array<float, 16> out_matrix_col_major_4x4;

ArPose_getMatrix(ar_session_, scopedArPose.GetArPose(), out_matrix_col_major_4x4.data());

工作原理:
ArSession工作正常,ArFrame正常,我能够获得ArCameraArCameraIntrinsics正常,ArImage正常,AImage正常。

来自Image的Format和NumberOfPlanes可以。
ScopedArPose类与Google示例相同。 array<float, 16>工作正常,已在Google示例中进行了测试。

什么东西少了?

最佳答案

要解决此问题,需要先检查相机状态。

ArTrackingState camera_tracking_state;
ArCamera_getTrackingState(ar_session_, ar_camera, &camera_tracking_state);
// If the camera isn't tracking don't bother to go forward
if (camera_tracking_state != AR_TRACKING_STATE_TRACKING) {
    LOGI("ARCoreOdometry: Camera Not Tracking");
    return;
}

08-27 00:15