0

我使用Unity與Tango,並且在獲取姿態數據時遇到問題。 Tango Unity SDK的Unity應用程序是爲Android設備構建的,設備獲取姿態數據並將其發送到使用OpenGL進行附加處理的計算機。 我的問題是,座標系是姿勢數據返回,因爲我不能像C API那樣定義引擎? 團結手柄歌廳姿態數據是這樣,並沒有什麼更多的可以發送:使用Google Tango與Unity獲取OpenGL座標系統的姿態數據

#if UNITY_EDITOR 
     GetEmulatedPoseAtTime(poseData, timeStamp, framePair); 
#else // ANDROID 
     int returnValue = API.TangoService_getPoseAtTime(timeStamp, framePair, poseData); 
     if (returnValue != Common.ErrorType.TANGO_SUCCESS) 
     { 
      Debug.Log(CLASS_NAME + ".GetPoseAtTime() Could not get pose at time : " + timeStamp); 
     } 
#endif 

只是爲了證明我與OpenGL應用程序的工作,因爲它應該,我已經使用C API使用相同的想法(創建探戈項目得到姿態數據,並將其發送):

TangoCoordinateFramePair pair; 
    pair.base = TANGO_COORDINATE_FRAME_START_OF_SERVICE; 
    pair.target = TANGO_COORDINATE_FRAME_DEVICE; 

    base = TANGO_SUPPORT_ENGINE_OPENGL; 
    target = TANGO_SUPPORT_ENGINE_OPENGL; 

    error = TangoSupport_getPoseAtTime(poseTimestamp, pair.base, pair.target, base, target, ROTATION_0, &pose); 

...這工作。

我認爲數據可能在探戈座標系中,我嘗試將姿勢數據與C#等效函數轉換爲QuatTangoToGl和Vec3GlToTango格式here,但仍然不正確。

那麼,在哪個座標系統是Unity SDK中的姿態數據,並且有可能以某種方式定義我想要的引擎?

回答

0

我意識到我可以在TangoSupport中暴露TangoSupport_getPoseAtTime函數,並添加枚舉EngineType和RotationType(值與C API匹配)。

所以,我在TangoSupport.cs加入這個TangoSupportAPI下:

[DllImport(TANGO_SUPPORT_UNITY_DLL)] 
public static extern int TangoSupport_getPoseAtTime(
      double timestamp, TangoEnums.TangoCoordinateFrameType baseFrame, TangoEnums.TangoCoordinateFrameType targetFrame, 
      Common.EngineType baseEngine, Common.EngineType targetEngine, Common.RotationType rotation, [In, Out] TangoPoseData pose); 

和TangoSupport類添加適當的功能。 現在我得到了在OpenGL項目中正確設置的姿勢。

沒有定義引擎類型,給定poseData是用於探戈座標系。