ARCore –会话,框架,相机和姿势

时间:2018-08-09 09:27:19

标签: android augmented-reality arcore

我正在研究ARCore ReferencesDevelop,从Coursera开始学习该课程,并从Samples阅读,理解和学习。

但是我仍然缺少一些实际使用示例的定义。

什么是会话?每次我需要使用ARCore时,都需要一个会话吗?会话始终连接相机,这样我就可以在屏幕上查看和绘制/渲染我的3D模型吗?我可以不参加会议吗?

相机有一个getPose,相框有一个GetPose,它们之间有什么区别?

我考虑过将这些问题分开,但不知何故我知道它们都已连接。会话,CameraAr,帧和姿势。

1 个答案:

答案 0 :(得分:2)

关于ArSession

  

ArSession是AR拼图中最关键的元素 。会话管理AR系统状态并处理会话生命周期。 会话类是ARCore API的主要入口点。此类允许用户创建会话,配置会话,启动或停止会话,最重要的是,接收ArFrames允许访问ARCamera图片和设备 Pose 。< / p>      

要使用ARCore,您需要一个ArSession。 ARCore不会渲染3D模型(Renderables)。这项工作是针对Sceneform框架

enter image description here

代码示例:

private Session mSession;
Config config = new Config(mSession);

if (!mSession.isSupported(config)) {
    showSnackbarMessage("This phone doesn't support AR", true);
}
mSession.configure(config);

此外,Session的配置可以包括嵌套类:

  • Config.AugmentedFaceMode (选择Augmented Faces子系统的行为)
  • Config.CloudAnchorMode Config中的云锚模式)
  • Config.FocusMode (选择camera focus子系统的所需行为)
  • Config.LightEstimationMode (选择lighting estimation子系统的行为)
  • Config.PlaneFindingMode (选择plane detection子系统的行为)
  • Config.UpdateMode (选择update()的行为)

关于姿势

  

Pose 表示从一个坐标空间到另一个坐标空间的不变的刚性变换。正如所有ARCore API提供的那样,姿势总是描述从对象的局部坐标空间到世界坐标空间的转换。使用围绕原点的四元数旋转定义一个变换,然后进行平移。

代码示例:

float[] position = { 0, 0, -2.2 };          //  { x, y, z } position 
float[] rotation = { 0, 0, 0, 1 };          //  { x, y, z, w } quaternion rotation

Session session = arFragment.getArSceneView().getSession();
Anchor myAnchor = session.createAnchor(new Pose(position, rotation));

关于ARCamera

  

ARCamera 代表一个虚拟摄像机,该摄像机确定查看场景的视角。如果相机是ArSceneView的一部分,则相机会自动跟踪ARCore的相机姿势。 ARCamera是一个长期存在的对象,并且每次调用Session.update()时都会更新相机的属性。 Camera类提供有关用于捕获图像的相机的信息以及每个ArFrame内部的其他信息。

代码示例:

// Shared camera access with ARCore

sharedSession = new Session(this, EnumSet.of(Session.Feature.SHARED_CAMERA))
sharedCamera = sharedSession.getSharedCamera();
cameraId = sharedSession.getCameraConfig().getCameraId();

关于ArFrame

  

当ARCore对环境的理解发生变化时,它会调整其世界模型以保持事物的一致性。发生这种情况时,ARCameraARAnchors的数字位置(坐标)会发生很大变化,以保持它们代表的物理位置的适当相对位置。这些变化意味着每个ArFrame应该是被认为位于完全独特的世界坐标空间中。 ARAnchorsARCamera的数字坐标永远不要在检索它们的渲染框架之外使用。

     

每个 ArFrame 存储以下有关ARCore状态的信息:

  • RGB图像本身
  • 跟踪状态
  • 相机相对于世界的姿势
  • 估计的照明参数
  • 有关对象(例如点云)更新的信息

代码示例:

private void onUpdateFrame(FrameTime frameTime) {

    Frame frame = arFragment.getArSceneView().getArFrame();

    // .............
}

希望这会有所帮助。