Leibniz发布中间歇性丢失姿势数据

时间:2015-04-19 16:43:23

标签: google-project-tango

我刚刚将我的设备更新到最新版(Leibniz),这里有一些观察/问题:

1)我的应用程序中存在延长(2-3s)间歇期,其中姿势数据无效。我假设问题出在驱动程序中,因为问题也发生在Tango Explorer中。只需启动资源管理器并让它坐在那里就会导致运动跟踪丢失"弹出和弹出的对话框。谁能证实这一点?

2)TangoService_connectOnFrameAvailable()回调中的颜色缓冲区现在返回,但在YUV420SP中,如发行说明中所述。任何探戈开发者都可以发布代码将其转换为RGB。我知道我可以谷歌这个东西,但有一个样本连接TangoImageBuffer宽度,高度,步幅等将是很好的。

4 个答案:

答案 0 :(得分:2)

很快,这是我以前用于Tango的YUV代码

// http://en.wikipedia.org/wiki/YUV
int halfi, uvOffset, halfj, uvOffsetHalfj;
float y_scaled, v_scaled, u_scaled;
const float Umax = 0.436f;
const float Vmax = 0.615f;

unsigned char* pData = TangoData::cameraImageBuffer;
unsigned char* iData = TangoData::cameraImageBufferRGBA;
float invByte = 0.0039215686274509803921568627451;  // ( 1 / 255)

is_image_dirty = false;
int size = (int)(TangoData::imageBufferStride * TangoData::imageBufferHeight);

int uOffset = size / 4 + size;
int halfstride = TangoData::imageBufferStride / 2;
for (int i = 0; i < TangoData::imageBufferHeight; ++i)
{
    halfi = i / 2;
    uvOffset = halfi * halfstride;
    for (int j = 0; j < TangoData::imageBufferWidth; ++j)
    {
        halfj = j / 2;
        uvOffsetHalfj = uvOffset + halfj;
        y_scaled = pData[i * TangoData::imageBufferStride + j] * invByte;
        v_scaled = 2 * (pData[uvOffsetHalfj + size] * invByte - 0.5f) * Vmax;
        u_scaled = 2 * (pData[uvOffsetHalfj + uOffset] * invByte - 0.5f) * Umax;
        *iData++ = (unsigned char)((y_scaled + 1.13983f * v_scaled) * 255.0);;
        *iData++ = (unsigned char)((y_scaled - 0.39465f * u_scaled - 0.58060f * v_scaled) * 255.0);
        *iData++ = (unsigned char)((y_scaled + 2.03211f * u_scaled) * 255.0);
        *iData++ = 255;
    }
}

现在,当前一次突然改变返回格式时,我对它进行了调整,改变了,并且如果这样做仍然保持一致,那就像往常一样,蟋蟀。然后在两个版本之前他们破坏了整个图像返回,显然没有注意到它,再一次,当被问到..... CRICKETS! 亲爱的Google Devs,我真的不想这么说,但这不是我的第一个牛仔竞技表演。我从Tango开始并且非常兴奋,但由于完全缺乏沟通,以及在发布周期中明显的混乱,我现在已经进步到幻想破灭,并且担心我可能会继续完全厌恶。我认为谷歌以外的人们在研究AR工具时可能会非常需要考虑其他途径。坦率地说,谷歌开发者,如果你为自己的进步感到自豪,你不应该 - 这甚至不是一个学术研究项目的A级。我真的很遗憾地说这个,但这已经太久了,而且你的情况正在恶化。敲掉它!

答案 1 :(得分:1)

我很遗憾没有解决方案,但我也注意到了类似的问题。我一直在我正在开发的应用程序中重复Tango服务异常,并显示消息“服务故障将重新启动”。有时它会重新启动,有时则不重启,我需要重启设备。我最终收到的姿势数据无效 - 例如NaN用于方向。

答案 2 :(得分:0)

冒着轻浮的风险:再次尝试更新。

我上周更新了Leibnez并遇到了同样的问题:NaNs,探戈服务失败,INVALID STATE代码。今晚,我正在探索Tango的设置,试图回滚到Jacobi。当我检查更新时,我收到了一个&#34;内部&#34; Leibnez的OTA更新消息。这个messagae看起来与主要更新消息不同。我让它更新,问题似乎得到解决。我跑了大约5分钟没有失败......

我的设置现在报告:

构建:KOT49H.150414

答案 3 :(得分:0)

我遇到了同样的问题。我使用点云示例作为编程的基础。在最初几秒内没有姿势,另外如果你试图将视图更改为“前视图”,应用程序崩溃(因为没有姿势,他可以改变视图和位置,我猜)。

一个月前你问过你的问题所以我很好奇你是否能够捕获相机数据。我使用此代码进行从NV12到RGB的转换:

 int size = (int)(buffer->width * buffer->height);
 for (int i = 0; i < buffer->height; i++)
 {
   for (int j = 0; j < buffer->width; j++)
     {
     float y = buffer->data[i * buffer->stride + j];
     float u = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))];
     float v = buffer->data[size+2*((i / 2) * (buffer->stride / 2) + (j / 2))+1];

            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)]=y;
            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+1]=u;
            TangoData::GetInstance().color_buffer[3*(i*buffer->width+j)+2]=v;;
}
}

在宽度x高度中保存Y数据,之后是UV数据,交替显示。转换在着色器中完成(比使用FrameAvailable方法更快)使用已知转换(Android YUV format):

attribute vec4 vertex;
attribute vec3 color;
uniform mat4 mvp;
varying vec4 v_color;
void main() {
gl_PointSize = 7.0;
gl_Position = mvp*vertex;
float r=color.x + (1.370705f * (color.z-128.0f));
float g=color.x - (0.698001f * (color.z-128.0f)) - (0.377633f * (color.y-128.0f));
float b=color.x + (1.732446f * (color.y-128.0f));
v_color = vec4(r/255.0f,g/255.0f,b/255.0f,1.0);

此代码不能完全正常工作。

  • 如果我试图捕获Y数据(亮度,因此我应该得到一个灰色图像),只有灰点,没有意义。此外,没有黑/白点只是灰点,对比度很小。
  • 如果我添加UV,我只会得到红色和黄色的颜色。如果我改变紫外线的位置,它都是非常蓝的。我无法检测到任何物体或轮廓。
  • 几帧之后,相机会出现以下异常(第一次出现异常时会显示“RAW”而不是“YUV”):

     E/camera-metadata﹕ /home/ubuntu/jobs/redwood_internal/RedwoodInternal/Redwood/common/player-engine/‌​src/camera-metadata.cc:56 YUV failed to match frame 1545.014677
    

    - 申请很慢,需要很多时间。我使用互斥锁,但这并没有改变任何东西。有没有人解决过这个问题或现在正在解决这个问题?

我稍微更改了配置,因为据说需要启用彩色摄像头。但我找不到任何解释如何做到这一点。我希望以下代码是正确的,它没有给我任何错误消息:

bool TangoData::SetConfig() {

[...]

if (TangoConfig_setBool(config_, "config_enable_color_camera", true) !=
    TANGO_SUCCESS) {
  LOGE("config_enable_color_camera Failed");
  return false;
}

if (TangoConfig_setInt32(config_, "config_color_exp", 300) !=
    TANGO_SUCCESS) {
  LOGE("config_color_exp Failed");
  return false;
}

[...]
return true;
}

希望其中一些有用,或者你已经在Leibniz发布的相机中取得了良好的效果!