86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | import argparse | ||
|  | import json | ||
|  | import time | ||
|  | 
 | ||
|  | import FramesViewer.utils as fv_utils | ||
|  | import numpy as np | ||
|  | from FramesViewer.viewer import Viewer | ||
|  | from scipy.spatial.transform import Rotation as R | ||
|  | 
 | ||
|  | parser = argparse.ArgumentParser() | ||
|  | parser.add_argument("-f", "--file", type=str, required=True) | ||
|  | parser.add_argument( | ||
|  |     "--hardware", | ||
|  |     action="store_true", | ||
|  |     help="use AMP_for_hardware format. If false, use IsaacGymEnvs format", | ||
|  | ) | ||
|  | args = parser.parse_args() | ||
|  | 
 | ||
|  | fv = Viewer() | ||
|  | fv.start() | ||
|  | 
 | ||
|  | episode = json.load(open(args.file)) | ||
|  | 
 | ||
|  | frame_duration = episode["FrameDuration"] | ||
|  | 
 | ||
|  | frames = episode["Frames"] | ||
|  | if "Debug_info" in episode: | ||
|  |     debug = episode["Debug_info"] | ||
|  | else: | ||
|  |     debug = None | ||
|  | pose = np.eye(4) | ||
|  | if args.hardware: | ||
|  |     vels = {} | ||
|  |     vels["linear_vel"] = [] | ||
|  |     vels["angular_vel"] = [] | ||
|  |     vels["joint_vels"] = [] | ||
|  | for i, frame in enumerate(frames): | ||
|  |     root_position = frame[:3] | ||
|  |     root_orientation_quat = frame[3:7] | ||
|  |     root_orientation_mat = R.from_quat(root_orientation_quat).as_matrix() | ||
|  | 
 | ||
|  |     pose[:3, 3] = root_position | ||
|  |     pose[:3, :3] = root_orientation_mat | ||
|  | 
 | ||
|  |     fv.pushFrame(pose, "aze") | ||
|  | 
 | ||
|  |     if debug is not None: | ||
|  |         left_foot_pose = np.array(debug[i]["left_foot_pose"]).reshape(4, 4) | ||
|  |         right_foot_pose = np.array(debug[i]["right_foot_pose"]).reshape(4, 4) | ||
|  |         fv.pushFrame(left_foot_pose, "left") | ||
|  |         fv.pushFrame(right_foot_pose, "right") | ||
|  | 
 | ||
|  |     if args.hardware: | ||
|  |         vels["linear_vel"].append(frame[28:31]) | ||
|  |         vels["angular_vel"].append(frame[31:34]) | ||
|  |         vels["joint_vels"].append(frame[34:49]) | ||
|  | 
 | ||
|  |         left_toe_pos = frame[22:25] | ||
|  |         right_toe_pos = frame[25:28] | ||
|  |         fv.pushFrame(fv_utils.make_pose(left_toe_pos, [0, 0, 0]), "left_toe") | ||
|  |         fv.pushFrame(fv_utils.make_pose(right_toe_pos, [0, 0, 0]), "right_toe") | ||
|  | 
 | ||
|  |     time.sleep(frame_duration) | ||
|  | 
 | ||
|  | 
 | ||
|  | if args.hardware: | ||
|  |     # plot vels | ||
|  |     from matplotlib import pyplot as plt | ||
|  | 
 | ||
|  |     # TODO | ||
|  |     x_lin_vel = [vels["linear_vel"][i][0] for i in range(len(frames))] | ||
|  |     y_lin_vel = [vels["linear_vel"][i][1] for i in range(len(frames))] | ||
|  |     z_lin_vel = [vels["linear_vel"][i][2] for i in range(len(frames))] | ||
|  | 
 | ||
|  |     joints_vel = [vels["joint_vels"][i] for i in range(len(frames))] | ||
|  |     angular_vel_x = [vels["angular_vel"][i][0] for i in range(len(frames))] | ||
|  |     angular_vel_y = [vels["angular_vel"][i][1] for i in range(len(frames))] | ||
|  |     angular_vel_z = [vels["angular_vel"][i][2] for i in range(len(frames))] | ||
|  | 
 | ||
|  |     plt.plot(angular_vel_x, label="angular_vel_x") | ||
|  |     plt.plot(angular_vel_y, label="angular_vel_y") | ||
|  |     plt.plot(angular_vel_z, label="angular_vel_z") | ||
|  | 
 | ||
|  |     plt.legend() | ||
|  |     plt.show() |