| if __name__ == "__main__": |
| import sys |
| import os |
| import pathlib |
|
|
| ROOT_DIR = str(pathlib.Path(__file__).parent.parent.parent) |
| sys.path.append(ROOT_DIR) |
|
|
| import os |
| import click |
| import pathlib |
| import h5py |
| import numpy as np |
| from tqdm import tqdm |
| from scipy.spatial.transform import Rotation |
|
|
| def read_all_actions(hdf5_file, metric_skip_steps=1): |
| n_demos = len(hdf5_file['data']) |
| all_actions = list() |
| for i in tqdm(range(n_demos)): |
| actions = hdf5_file[f'data/demo_{i}/actions'][:] |
| all_actions.append(actions[metric_skip_steps:]) |
| all_actions = np.concatenate(all_actions, axis=0) |
| return all_actions |
|
|
|
|
| @click.command() |
| @click.option('-i', '--input', required=True, help='input hdf5 path') |
| @click.option('-o', '--output', required=True, help='output hdf5 path. Parent directory must exist') |
| def main(input, output): |
| |
| input = pathlib.Path(input).expanduser() |
| assert input.is_file() |
| output = pathlib.Path(output).expanduser() |
| assert output.is_file() |
|
|
| input_file = h5py.File(str(input), 'r') |
| output_file = h5py.File(str(output), 'r') |
|
|
| input_all_actions = read_all_actions(input_file) |
| output_all_actions = read_all_actions(output_file) |
| pos_dist = np.linalg.norm(input_all_actions[:,:3] - output_all_actions[:,:3], axis=-1) |
| rot_dist = (Rotation.from_rotvec(input_all_actions[:,3:6] |
| ) * Rotation.from_rotvec(output_all_actions[:,3:6]).inv() |
| ).magnitude() |
|
|
| print(f'max pos dist: {pos_dist.max()}') |
| print(f'max rot dist: {rot_dist.max()}') |
|
|
| if __name__ == "__main__": |
| main() |
|
|