10

刚刚获得了 Project Tango 开发套件平板电脑,并完成了一些演示和示例。

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

不幸的是,“Tango Mapper”应用程序没有预装在我的设备上,而且我似乎无法在 Play 商店中找到它。

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

【型号:yellowstone,Tango Core 版本:1.1:2014.11.14-bernoulli-release】

4

5 回答 5

8

不确定您是否曾经解决过这个问题,但我能够找到 APK 以及使用 Tango 更新的平板电脑版本导出的方法。我使用此博客中描述的方法成功导出了点云数据。

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

编辑

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

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

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

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

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

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

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

由于收集的姿势数据,您将能够看到您的数据并实际播放您录制​​它的动画。

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

源代码和教程的所有功劳都归于 The Kitware 博客

如果链接坏了,私信我,我会把文件发给你。

APK 在这里找到

APK下载

他们还在博客底部列出了他们的源代码。它基于应用商店中的 tango Explorer。

于 2015-05-31T23:46:06.657 回答
5

Tango Mapper 是一个内部工具,目前不向开发人员公开。我认为记录点云数据的最佳方法是使用提供的 c 或 java 示例代码,并且可能进行一些小的修改以将数据记录到文件中。

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

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

于 2014-12-01T19:32:38.957 回答
2

稀疏映射:https ://www.youtube.com/watch?v=x5C_HNnW_3Q

更多室内测绘:https ://www.youtube.com/watch?v=3BNOsxMZD14

似乎有不少 Tango 项目的贡献者被谷歌雇佣或收购。例如,Hidof 的大多数代码和/或文章链接都是 MIA,只剩下一个几乎没有线索的 Facebook 页面。互联网档案馆的 Wayback 机器上有一些他们网站的快照,供好奇的人使用。

于 2014-12-25T02:20:33.430 回答
1

去看看 GitHub 上的 Java Point Cloud 示例——你想看的函数是 PointCloudActivity 中的 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 会使事情变得比您想要的慢

于 2014-12-29T16:51:53.180 回答
0

谢谢马克的建议。我是一名新手程序员,这是我第一次使用 java ...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;
    }
}
于 2015-01-27T01:35:03.260 回答