我刚拿到平板电脑,以前我有手机。大多数人可能都知道,手机的 SDK 允许通过 android 相机回调来捕获超帧。如果正确解析,超帧包含所有相关的传感器数据。
在阿基米德,我尝试了以下方法。我做了一个实现 CameraPreviewListener 的活动:
public class MainActivity extends Activity implements CameraPreviewListener
{
// Inside of this class we manage another object that implements PreviewCallback
...
}
这允许捕获相机图像,就像在任何其他 Android 设备上一样。(请注意,在 Peanut 手机上,这提供了超帧;这只是在平板电脑上提供了原始 RGB 缓冲区。)同样,来自 Tango 服务的回调的简单实现也可以正常工作。
public class MainActivity extends Activity
{
private Tango mTango;
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
setTangoListeners();
}
private void setTangoListeners()
{
mTango.connectListener(framePairs, new OnTangoUpdateListener() {
@Override
public void onPoseAvailable(final TangoPoseData pose)
{
System.out.println("Pose data received.");
}
@Override
public void onXyzIjAvailable(final TangoXyzIjData xyzIj)
{
System.out.println("Cloud data received.");
}
@Override
public void onTangoEvent(final TangoEvent event)
{
...
}
}
}
但是,当我尝试将两者结合在一起时,就像这样,
public class MainActivity extends Activity implements CameraPreviewListener
{
// Inside of this class we manage another object that implements PreviewCallback
private Tango mTango;
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
...
setTangoListeners();
}
private void setTangoListeners()
{
mTango.connectListener(framePairs, new OnTangoUpdateListener() {
@Override
public void onPoseAvailable(final TangoPoseData pose)
{
System.out.println("Pose data received.");
}
@Override
public void onXyzIjAvailable(final TangoXyzIjData xyzIj)
{
System.out.println("Cloud data received.");
}
@Override
public void onTangoEvent(final TangoEvent event)
{
...
}
}
}
奇怪的事情发生了。相机回调触发得很好,我也得到了 onPoseAvailable 回调。但是,我不再收到对 onXyzIjAvailable 的任何回调。
所以我的问题是:
我是否正确假设 Tango 服务需要访问相机回调来生成 PointCloud 数据?
如果是这样,是否有任何方法可以让我大致同时获得 RGB 缓冲区和点云?(是的,我知道校准并非易事。)
如果 2 没有解决方案,是否有任何未来的 SDK 更新计划允许这样的事情?
我还没有探索过 C SDK。也许那里有办法做到这一点,如果是这样,有没有人有经验可以借?
理想情况下,我想访问原始 RGB 缓冲区、强度图像和鱼眼图像;我真的不在乎如何,只要它有效。