Maniskill_gen_new / tests /structs /test_pose.py
yqi19's picture
Add Maniskill_gen_new data collection codebase with README
7b8502a
Raw
History Blame Contribute Delete
4.03 kB
import numpy as np
import pytest
import sapien
import torch
from transforms3d.euler import euler2quat
from mani_skill.utils.structs.pose import Pose
def test_pose_creation():
pose = Pose.create_from_pq()
assert pose.raw_pose.shape == (1, 7)
assert isinstance(pose.raw_pose, torch.Tensor)
assert torch.isclose(pose.raw_pose, torch.tensor([[0, 0, 0, 1.0, 0, 0, 0]])).all()
def test_pose_create_with_p():
pose = Pose.create_from_pq(p=[1, 0, 2])
assert torch.isclose(pose.raw_pose, torch.tensor([[1, 0, 2, 1.0, 0, 0, 0]])).all()
pose = Pose.create_from_pq(p=[[1, 0, 2], [1, 0, -2]])
assert torch.isclose(
pose.raw_pose, torch.tensor([[1, 0, 2, 1.0, 0, 0, 0], [1, 0, -2, 1.0, 0, 0, 0]])
).all()
def test_pose_create_with_q():
w, x, y, z = euler2quat(0.3, 0.4, -0.2)
pose = Pose.create_from_pq(q=[w, x, y, z])
assert torch.isclose(
pose.raw_pose, torch.tensor([[0, 0, 0, w, x, y, z]]).float()
).all()
w, x, y, z = euler2quat(0.3, 0.4, -0.2)
w2, x2, y2, z2 = euler2quat(0.3, 0.4, -0.2)
pose = Pose.create_from_pq(p=[1, 2, 3], q=[[w, x, y, z], [w2, x2, y2, z2]])
assert torch.isclose(
pose.raw_pose,
torch.tensor([[1, 2, 3, w, x, y, z], [1, 2, 3, w2, x2, y2, z2]]).float(),
).all()
def test_pose_to_sapien_pose():
p = [1, 2, 4]
q = euler2quat(0, -0.3, 1)
sapien_pose = sapien.Pose(p=p, q=q)
pose = Pose.create_from_pq(p=p, q=q)
assert isinstance(pose.sp, sapien.Pose)
assert np.all(pose.sp.p == sapien_pose.p)
assert np.all(pose.sp.q == sapien_pose.q)
def test_pose_mult():
p = [1, 2, 4]
q = euler2quat(0, -0.3, 1)
sapien_pose = sapien.Pose(p=p, q=q)
pose = Pose.create_from_pq(p=p, q=q)
pose = pose * pose
sapien_pose = sapien_pose * sapien_pose
assert np.isclose(pose.sp.p, sapien_pose.p).all()
assert np.isclose(pose.sp.q, sapien_pose.q).all()
p = [[1, 2, 3], [-2.5, 3, 0]]
q = [euler2quat(0, -0.3, 1), euler2quat(0.9, 0.3, -1)]
sapien_pose1 = sapien.Pose(p=p[0], q=q[0])
sapien_pose2 = sapien.Pose(p=p[1], q=q[1])
pose = Pose.create_from_pq(p=p, q=q)
pose = pose * pose
sapien_pose1 = sapien_pose1 * sapien_pose1
sapien_pose2 = sapien_pose2 * sapien_pose2
for i, sp in enumerate([sapien_pose1, sapien_pose2]):
assert np.isclose(pose.p[i], sp.p).all()
assert np.isclose(pose.q[i], sp.q).all()
def test_pose_inv():
p = [1, 2, 4]
q = euler2quat(0, -0.3, 1)
sapien_pose = sapien.Pose(p=p, q=q)
pose = Pose.create_from_pq(p=p, q=q)
pose = pose.inv()
sapien_pose = sapien_pose.inv()
assert np.isclose(pose.sp.p, sapien_pose.p).all()
assert np.isclose(pose.sp.q, sapien_pose.q).all()
p = [[1, 2, 3], [-2.5, 3, 0]]
q = [euler2quat(0, -0.3, 1), euler2quat(0.9, 0.3, -1)]
sapien_pose1 = sapien.Pose(p=p[0], q=q[0])
sapien_pose2 = sapien.Pose(p=p[1], q=q[1])
pose = Pose.create_from_pq(p=p, q=q)
pose = pose.inv()
sapien_pose1 = sapien_pose1.inv()
sapien_pose2 = sapien_pose2.inv()
for i, sp in enumerate([sapien_pose1, sapien_pose2]):
assert np.isclose(pose.p[i], sp.p).all()
assert np.isclose(pose.q[i], sp.q).all()
def test_pose_transformation_matrix():
p = [1, 2, 4]
q = euler2quat(0, -0.3, 1)
sapien_pose = sapien.Pose(p=p, q=q)
pose = Pose.create_from_pq(p=p, q=q)
pose = pose.to_transformation_matrix()
sapien_pose = sapien_pose.to_transformation_matrix()
assert np.isclose(pose, sapien_pose).all()
p = [[1, 2, 3], [-2.5, 3, 0]]
q = [euler2quat(0, -0.3, 1), euler2quat(0.9, 0.3, -1)]
sapien_pose1 = sapien.Pose(p=p[0], q=q[0])
sapien_pose2 = sapien.Pose(p=p[1], q=q[1])
pose = Pose.create_from_pq(p=p, q=q)
pose = pose.to_transformation_matrix()
sapien_pose1 = sapien_pose1.to_transformation_matrix()
sapien_pose2 = sapien_pose2.to_transformation_matrix()
for i, sp in enumerate([sapien_pose1, sapien_pose2]):
assert np.isclose(pose[i], sp).all()