2017-02-23 2 views
0

Je suis nouveau dans le développement de Google Tango et j'essaie de condenser plusieurs nuages ​​de points en un seul. Pour ce faire, j'ai construit ce code:Le blocage de l'application Tango Java lors de l'appel de TangoSupport.transformPointCloud (transform.matrix, pointCloud)

for (int i = 0; i < mPointCloudList.size(); ++i) { 

    TangoPointCloudData pointCloud = mPointCloudList.get(i); 

    TangoSupport.TangoMatrixTransformData transform = 
         TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp, 
           TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, 
           TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH, 
           TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL, 
           TangoSupport.TANGO_SUPPORT_ENGINE_TANGO, 
           TangoSupport.ROTATION_IGNORED); 

    TangoPointCloudData pcd = TangoSupport.transformPointCloud(transform.matrix, pointCloud); 

    int numPoints = pcd.numPoints; 

    if (numPoints != 0) { 
     int numFloats = 4 * numPoints; 
     for (int j = 0; j < numFloats; j = j + 4) { 
      myOutWriter.write(String.format("v %f %f %f\n", pcd.points.get(j), 
           pcd.points.get(j), pcd.points.get(j + 2))); 
     } 
    } 
} 

Je ne suis pas sûr que le code est correct. Cependant, la raison pour laquelle je suis ici est parce que quand j'exécute ce code l'appel de TangoSupport.transformPointCloud (transform.matrix, pointCloud) fait planter l'application. Erreur que j'obtiens:

A/libc: Fatal signal 11 (SIGSEGV), code 2, fault addr 0x7f61830000 in tid 14384 (.javapointcloud) 

Des idées sur comment résoudre ceci ou comment contourner ce problème?

Merci!

Répondre

1

j'ai réussi à contourner ce problème en faisant:

TangoSupport.TangoMatrixTransformData transform = 
         TangoSupport.getMatrixTransformAtTime(pointCloud.timestamp, 
           TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE, 
           TangoPoseData.COORDINATE_FRAME_CAMERA_DEPTH, 
           TangoSupport.TANGO_SUPPORT_ENGINE_OPENGL, 
           TangoSupport.TANGO_SUPPORT_ENGINE_TANGO, 
           TangoSupport.ROTATION_IGNORED); 

if (transform.statusCode == TangoPoseData.POSE_VALID) { 
    int numPoints = pointCloud.numPoints; 
    Vector3 point = new Vector3(0f, 0f, 0f); 

    double dTransformMatrix[] = new double[transform.matrix.length]; 

    for (int k = 0; k < transform.matrix.length; k++) { 
     dTransformMatrix[k] = (double) transform.matrix[k]; 
    } 

    if (numPoints != 0) { 
     int numFloats = 4 * numPoints; 
     for (int j = 0; j < numFloats; j = j + 4) { 
      if (pointCloud.points.get(j + 3) >= 0.5) { 
       point.x = pointCloud.points.get(j); 
       point.y = pointCloud.points.get(j + 1); 
       point.z = pointCloud.points.get(j + 2); 
       point = point.multiply(dTransformMatrix); 
       myOutWriter.write(String.format("v %f %f %f\n", point.x, point.y, point.z)); 
      } 
     } 
    } 
}