[ITS]sensor_fusion test_sensor_fusion.py Fail,测试gyro senor和camera sensor看到同一点位的时间和位置的同步。

先确认:

1.设备有Gyro sensor

2. Gyro sensor的GMS 测试都pass

issue1: assert abs(offset) < THRESH_MAX_SHIFT_MS*MSEC_TO_SEC。这种issue最常见。

Best shift without fitting is 12.5 ms

Best correlation of 0.000049 at shift of 12.87ms

threshold是1ms, camera 与gyro看向同一个点的偏差大于1ms,这条case加就会fail。

解决办法:

调整camera frame timestamp,以将偏差减小。

对于高通平台,需要调整ADCReadoutTime这个值,这个是读frame的IO时间。

在4290平台下这个值是写死的,没有解析sensor驱动中的<ADCReadoutTime>。

在 camx/src/core/camximagesensordata.cpp:1113中,强制设置了

m_pSensorData->resolutionInfo->resolutionData[resolutionIndex].ADCReadoutTime = 2.5;

最终的frame的timestamp会要减去exProsure time,ADCReadoutTime。

所以要根据最终的offset的情况,调整ADCReadoutTime的值,来满足assert abs(offset) < 1ms的case要求。

在CT30设备上,需要将m_pSensorData->resolutionInfo->resolutionData[resolutionIndex].ADCReadoutTime = -10。这条case才能pass。

issue 2: 特征点不够。

解决办法: 很可能AF第一帧不够清晰,可以通过缩短对焦的距离,或者调整初始启动对焦位置。

比如4290平台,调整Scenario.Default\XML\STATS\chromatixHAF.xml下的初始对焦点位10.

<initialLensIdx type="int" range="[0,11]">10</initialLensIdx>

issue 3: camera没有放置在Z轴。

原因:目前sensor fusion case,比较的是G sensor Z轴的数据与camera运动轨迹的,如果camera的放置的位置非Z轴,则这条case,常规是无法通过的。

解决办法:Google不同意针对这种特殊的camera位置的手机给予waiver。

研读test_sensor_fusion.py

def _collect_data(cam, fps, w, h, test_length, rot_rig, chart_dist, log_path):

      camera_properties_utils.skip_unless(
             camera_properties_utils.sensor_fusion_capable(props) and
             cam.get_sensors().get('gyro'))

camera_properties_utils.py

def sensor_fusion_capable(props):
  """Determine if test_sensor_fusion is run."""
  return all([sensor_fusion(props),
              manual_sensor(props),
              props['android.lens.facing'] != LENS_FACING_EXTERNAL])

所以将这个camera声明为 external camera,这条case可以被skip掉。

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐