import torch import pypose as pp from pfp.common.visualization import RerunViewer as RV from pfp.common.se3_utils import pfp_to_state5p_th, state5p_to_pfp_th, pfp_to_pose_th B = 2 T = 2 grippers = torch.ones(B, T, 1) poses = pp.randn_SE3(B, T).matrix() state_pfp = torch.cat([poses[..., :3, 3], poses[..., :3, 0], poses[..., :3, 1], grippers], dim=-1) state_5p = pfp_to_state5p_th(state_pfp) state_5p_pcds = state_5p[:, :, :15].reshape(B, T, 5, 3) noise = torch.randn_like(state_5p) * 0.01 noise[..., 15] = 0 noisy_state_5p = state_5p + noise noisy_5p_pcds = noisy_state_5p[:, :, :15].reshape(B, T, 5, 3) estimated_state_pfp = state5p_to_pfp_th(noisy_state_5p) estimated_poses, gripper = pfp_to_pose_th(estimated_state_pfp) RV("state_5p") for i in range(B): for j in range(T): RV.add_axis(f"state_pfp_{i}_{j}", poses[i, j].numpy()) RV.add_axis(f"estimated_{i}_{j}", estimated_poses[i, j].numpy()) RV.add_np_pointcloud(f"state_5p_{i}_{j}", state_5p_pcds[i, j].numpy(), radii=0.005) RV.add_np_pointcloud(f"noisy_5p_{i}_{j}", noisy_5p_pcds[i, j].numpy(), radii=0.005) print("done")