Tango API 之五 Tango 事件

来源:互联网 发布:道德经足不出户知天下 编辑:程序博客网 时间:2024/05/19 02:29

Tango API 之五 Tango 事件

主要事件

Tango设备传感器有独特的数据链,这些数据的接收和传输对于使设备执行核心Tango活动(运动跟踪,深度感应和区域学习)至关重要。 与任何Android设备一样,这些数据也会作为“事件”接收和传递。 主要的Tango事件有:

  • 设备的pose数据(位置、方向)
  • 相机的帧和特征数据
  • 点云数据(由深度相机传感器所产生)

为了接收事件,你可以给事件传递一个回调监听器,回调函数会在每次事件发生时被回调。

接收pose数据

有两种方式接收;推荐使用TangoService_getPoseAtTime()。更详细的解释查看Pose。

接收相机新特征

这对于在OpenGL中为增强现实渲染相机图像很有用。

通过调用TangoService_OnTextureAvailable()。你需要调用TangoService_updateTextureExternalOes来更新特征。

接收相机的帧

不是用来显示,而是当你需要以字节数组连接像素数据是使用。

通过回调TangoService_connectOnFrameAvailable()。

接收点云数据

通过传递OnPointCloudAvailable()回调函数给TangoService_connectOnPointCloudAvailable()。

状态事件

TangoEvent通知回调重要的传感器状态事件,例如错误状态的描述。 要接收TangoEvent,请将onTangoEvent()回调附加到TangoService_connectOnTangoEvent()。 每次发生Tango状态事件时都会调用此回调。

TangoEvent被定义为:

typedef struct TangoEvent {  double timestamp;  TangoEventType type;  const char* event_key;  const char* event_value;} TangoEvent;

其中timestamp指示状态事件何时发生,并且可以与Tango API中其他地方的时间戳相比较。

type被设计为TangoEventType枚举类型,用来告诉你那个传感器触发的事件:

typedef enum {  TANGO_EVENT_UNKNOWN,  TANGO_EVENT_GENERAL,  TANGO_EVENT_FISHEYE_CAMERA,  TANGO_EVENT_COLOR_CAMERA,  TANGO_EVENT_IMU,  TANGO_EVENT_FEATURE_TRACKING,} TangoEventType;

event_key 和 event_value描述发生的特殊事件。下表是可能的键:

Event keyExplanationTangoServiceException服务遭遇异常,其值在 event_value中.FisheyeOverExposed鱼眼图像过度曝光,平均像素值为event_value px.FisheyeUnderExposed鱼眼图像曝光不足,平均像素值为 event_value px.ColorOverExposed点云相机过度曝光,平均像素值为event_value px.ColorUnderExposed点云相机曝光不足,平均像素值为event_value px.TooFewFeaturesTracked鱼眼相机中被跟踪的特征点过少,被跟踪点数为event_value.Unknown位置描述.

根据具体的事件描述,您可以选择提示用户来纠正导致事件的情况。 例如,如果您正在接收ColorUnderExposed,则用户可能位于太暗的地方,Tango框架无法正常工作。