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 key | Explanation |
---|---|
TangoServiceException | 服务遭遇异常,其值在 event_value 中. |
FisheyeOverExposed | 鱼眼图像过度曝光,平均像素值为event_value px. |
FisheyeUnderExposed | 鱼眼图像曝光不足,平均像素值为 event_value px. |
ColorOverExposed | 点云相机过度曝光,平均像素值为event_value px. |
ColorUnderExposed | 点云相机曝光不足,平均像素值为event_value px. |
TooFewFeaturesTracked | 鱼眼相机中被跟踪的特征点过少,被跟踪点数为event_value . |
Unknown | 位置描述. |
根据具体的事件描述,您可以选择提示用户来纠正导致事件的情况。 例如,如果您正在接收ColorUnderExposed,则用户可能位于太暗的地方,Tango框架无法正常工作。