我刚刚将我的设备更新到最新版(Leibniz),这里有一些观察/问题:
1)我的应用程序中存在延长(2-3s)间歇期,其中姿势数据无效。我假设问题出在驱动程序中,因为问题也发生在Tango Explorer中。只需启动资源管理器并让它坐在那里就会导致运动跟踪丢失"弹出和弹出的对话框。谁能证实这一点?
2)TangoService_connectOnFrameAvailable()回调中的颜色缓冲区现在返回,但在YUV420SP中,如发行说明中所述。任何探戈开发者都可以发布代码将其转换为RGB。我知道我可以谷歌这个东西,但有一个样本连接TangoImageBuffer宽度,高度,步幅等将是很好的。
答案 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);
此代码不能完全正常工作。
几帧之后,相机会出现以下异常(第一次出现异常时会显示“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发布的相机中取得了良好的效果!