xref: /aosp_15_r20/cts/apps/CameraITS/utils/imu_processing_utils.py (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker# Copyright 2024 The Android Open Source Project
2*b7c941bbSAndroid Build Coastguard Worker#
3*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License");
4*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
5*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at
6*b7c941bbSAndroid Build Coastguard Worker#
7*b7c941bbSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
8*b7c941bbSAndroid Build Coastguard Worker#
9*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS,
11*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
13*b7c941bbSAndroid Build Coastguard Worker# limitations under the License.
14*b7c941bbSAndroid Build Coastguard Worker"""Utility functions for IMU data processing."""
15*b7c941bbSAndroid Build Coastguard Worker
16*b7c941bbSAndroid Build Coastguard Worker
17*b7c941bbSAndroid Build Coastguard Workerdef calc_rv_drift(data):
18*b7c941bbSAndroid Build Coastguard Worker  """Calculate data drift accounting for +/-180 degrees for stationary DUT.
19*b7c941bbSAndroid Build Coastguard Worker
20*b7c941bbSAndroid Build Coastguard Worker  Args:
21*b7c941bbSAndroid Build Coastguard Worker    data: list of +180/-180 rotation vector data
22*b7c941bbSAndroid Build Coastguard Worker
23*b7c941bbSAndroid Build Coastguard Worker  Returns:
24*b7c941bbSAndroid Build Coastguard Worker    list of data-data[0] drift
25*b7c941bbSAndroid Build Coastguard Worker  """
26*b7c941bbSAndroid Build Coastguard Worker  data_360 = [i % 360 for i in data]
27*b7c941bbSAndroid Build Coastguard Worker  drift = []
28*b7c941bbSAndroid Build Coastguard Worker  for d in data_360:
29*b7c941bbSAndroid Build Coastguard Worker    if d - data_360[0] <= -180:
30*b7c941bbSAndroid Build Coastguard Worker      drift.append(d - data_360[0] + 360)
31*b7c941bbSAndroid Build Coastguard Worker    elif d - data_360[0] > 180:
32*b7c941bbSAndroid Build Coastguard Worker      drift.append(d - data_360[0] - 360)
33*b7c941bbSAndroid Build Coastguard Worker    else:
34*b7c941bbSAndroid Build Coastguard Worker      drift.append(d - data_360[0])
35*b7c941bbSAndroid Build Coastguard Worker  return drift
36