2014-11-21 84 views
10

刚拿到Project Tango Development Kit平板电脑,并通过一些演示和示例。如何导出Point Cloud Data(Project Tango)?

一些较早的博客文章使用应该预先加载到设备上的“Tango Mapper”应用程序的日志文件。

不幸的是, “探戈映射器” 应用程序没有预装我的设备上,似乎我不能上找到它Play商店。

是否有其他方法可简单地导出或检索PointCloud数据以进行下游渲染?

[型号:黄石,探戈Core版本:1.1:2014年11月14日 - 伯努利释放]

回答

5

探戈映射器是一个内部的工具,这是目前尚未公开给开发者。我认为记录点云数据的最好方法是使用提供的c或java示例代码,并且可能会做一些小的修改以将数据记录到文件中。

℃实施例:https://github.com/googlesamples/tango-examples-c

Java示例:https://github.com/googlesamples/tango-examples-java

+1

谢谢。已经这样做了,但是想确保没有更简单的方法 – caspertm 2014-12-01 19:38:39

+0

好的,但是如果你想导出一个合适的pointcloud,你通常也想跟踪,而不仅仅是记录距离 – 2016-02-04 14:34:28

1

请看看GitHub上的Java Point Cloud示例 - 您想要查看的函数是PointXualActivity中的onXyzIsAvailable。提取一些相关线路....

public void onXyzIjAvailable(final TangoXyzIjData xyzIj) { 
.... 
       byte[] buffer = new byte[xyzIj.xyzCount * 3 * 4]; 
       FileInputStream fileStream = new FileInputStream(
         xyzIj.xyzParcelFileDescriptor.getFileDescriptor()); 
       try { 
        fileStream.read(buffer, 
          xyzIj.xyzParcelFileDescriptorOffset, buffer.length); 
        fileStream.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

此时buffer包含点云数据 - 我强烈建议你通过二进制服务呼叫出货这一关的设备,因为我觉得让可怜的东西尝试并将其转换为JSON或XML将使事情变得比您想要的慢

0

谢谢马克的建议。我是一个新手程序员,这是我第一次使用java ... 我有兴趣将Tango获取的PointCloud数据导出到一个文件中,我想问你对我的方法的反馈(我创建了一个Save按钮,和onClick数据将被保存到外部驱动器上的文件)。请找到该部分的代码波纹管应保存xyzIj数据:

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    ... 
     case R.id.save_button: 
      savePointCloud(); 
      break; 
     default: 
      Log.w(TAG, "Unrecognized button click."); 
     } 
} 


private static void savePointCloud(final TangoXyzIjData xyzIj, String file) { 
    File directoryName = getAlbumStorageDir(file); 
    FileOutputStream out = new FileOutputStream(directoryName,"text.txt"); 
    byte[] buffer = new byte[xyzIj.xyzCount * 3 * 4]; 
    FileInputStream fileStream = new FileInputStream(
      xyzIj.xyzParcelFileDescriptor.getFileDescriptor()); 
    int read; 
     while ((read=fileStream.read(buffer))!=1){ 
      try{ 
      out.write(buffer, 0, read); 
      out.close(); 
      System.out.println("Printed to file"); 
     }catch(IOException e){e.printStackTrace();} 
     } 
} 

public File getAlbumStorageDir(String dirName) { 
    if (!isExternalStorageWritable()) { 
     return null; 
    } else { 
     // Get the directory for the user's public downloads directory. 
     File file = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_DOWNLOADS), dirName); 
     if (!file.mkdirs() || !file.exists()) { 
      Log.e(TAG, "Directory not created"); 
      return null; 
     } 
     return file; 
    } 
} 

public boolean isExternalStorageWritable() { 
    String state = Environment.getExternalStorageState(); 
    if ((Environment.MEDIA_MOUNTED.equals(state) 
      && Environment.MEDIA_MOUNTED_READ_ONLY.equals(state))) { 
     return true; 
    } else { 
     Log.e(TAG, "External storage is not mounted READ/WRITE."); 
     return false; 
    } 
} 
8

不知道如果你一定要解决这个问题,但我能找到的APK与方法一起使用的探戈更新的平板电脑出口版。我使用本博客中描述的方法成功导出点云数据。

http://www.kitware.com/blog/home/post/838

编辑

程序下载APK或使用源代码在GitHub的项目文件夹中找到。

一旦完成,就像平常一样启动应用程序。会有一个滑块记录和自动。如果您滑动记录,它只会等到您点击快照按钮才能记录您当前正在查看的点云数据。

如果您滑动自动,它将连续记录点云数据并创建文件,因为它跟踪您移动的位置。请记住,文件越大,保存为zip所需的时间越长。

一旦完成滑动记录,它会提示您保存并发送。

我发现保存到Google云端硬盘更容易,因为其他方法有时无法发送。

一旦完成下载免费的Paraview App发现http://www.paraview.org/download/加载您的点云数据。

它应该是两个文件一个你的姿势数据和其他点云。 (您可以使用您在导入之前看到的折叠箭头逐个加载每个数据。)

就是这样,您将能够看到您的数据并实际播放由于姿势数据而录制的动画集。

(只写出这个,因为你正在寻找一种更简单的方式来导出数据)这可能是最简单的。你可以采取上述数据,并开始根据所收集的姿势数据重建了房间。)

所有信贷源代码和教程转到该Kitware博客

如果链路断开DM我和我将文件发送给你。

APK可以在这里找到

APK DOWNLOAD

他们也已在博客的底部列出他们的源代码。它基于在应用商店中发现的探戈探索者。

+0

你应该描述链接过程你的答案也是如此;有一天链接可能会中断,但你的答案仍然可以在这里找到。 – 2015-06-01 00:14:11

相关问题