Skip to content

Commit 3a8bd1f

Browse files
committed
Merge branch 'main' into yunlong/vision_release
2 parents d61f2e6 + 20c3f6c commit 3a8bd1f

File tree

2 files changed

+67
-8
lines changed

2 files changed

+67
-8
lines changed

genesis/engine/entities/rigid_entity/rigid_geom.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,42 @@ def get_trimesh(self):
888888
"""
889889
return self._vmesh.trimesh
890890

891+
# ------------------------------------------------------------------------------------
892+
# -------------------------------- real-time state -----------------------------------
893+
# ------------------------------------------------------------------------------------
894+
895+
@gs.assert_built
896+
def get_pos(self):
897+
"""
898+
Get the position of the geom in world frame.
899+
"""
900+
tensor = torch.empty(self._solver._batch_shape(3, True), dtype=gs.tc_float, device=gs.device)
901+
self._kernel_get_pos(tensor)
902+
if self._solver.n_envs == 0:
903+
tensor = tensor.squeeze(0)
904+
return tensor
905+
906+
@ti.kernel
907+
def _kernel_get_pos(self, tensor: ti.types.ndarray()):
908+
for i, i_b in ti.ndrange(3, self._solver._B):
909+
tensor[i_b, i] = self._solver.vgeoms_state.pos[self._idx, i_b][i]
910+
911+
@gs.assert_built
912+
def get_quat(self):
913+
"""
914+
Get the quaternion of the geom in world frame.
915+
"""
916+
tensor = torch.empty(self._solver._batch_shape(4, True), dtype=gs.tc_float, device=gs.device)
917+
self._kernel_get_quat(tensor)
918+
if self._solver.n_envs == 0:
919+
tensor = tensor.squeeze(0)
920+
return tensor
921+
922+
@ti.kernel
923+
def _kernel_get_quat(self, tensor: ti.types.ndarray()):
924+
for i, i_b in ti.ndrange(4, self._solver._B):
925+
tensor[i_b, i] = self._solver.vgeoms_state.quat[self._idx, i_b][i]
926+
891927
# ------------------------------------------------------------------------------------
892928
# ----------------------------------- properties -------------------------------------
893929
# ------------------------------------------------------------------------------------

tests/test_rigid_physics.py

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,24 +5,24 @@
55
import xml.etree.ElementTree as ET
66
from pathlib import Path
77

8+
import mujoco
9+
import numpy as np
810
import pytest
9-
import trimesh
1011
import torch
11-
import numpy as np
12-
import mujoco
12+
import trimesh
1313

1414
import genesis as gs
1515
import genesis.utils.geom as gu
16-
from genesis.utils.misc import tensor_to_array, get_assets_dir
16+
from genesis.utils.misc import get_assets_dir, tensor_to_array
1717

1818
from .utils import (
19-
get_hf_assets,
2019
assert_allclose,
21-
build_mujoco_sim,
2220
build_genesis_sim,
23-
init_simulators,
24-
check_mujoco_model_consistency,
21+
build_mujoco_sim,
2522
check_mujoco_data_consistency,
23+
check_mujoco_model_consistency,
24+
get_hf_assets,
25+
init_simulators,
2626
simulate_and_check_mujoco_consistency,
2727
)
2828

@@ -2673,3 +2673,26 @@ def test_get_cartesian_space_variables(show_viewer, tol):
26732673
link.solver.apply_links_external_force(force, (link.idx,), ref="link_com", local=False)
26742674

26752675
scene.step()
2676+
2677+
2678+
@pytest.mark.parametrize("backend", [gs.cpu])
2679+
def test_geom_pos_quat(show_viewer, tol):
2680+
scene = gs.Scene(
2681+
sim_options=gs.options.SimOptions(
2682+
gravity=(0.0, 0.0, -10.0),
2683+
),
2684+
show_viewer=show_viewer,
2685+
)
2686+
2687+
box = scene.add_entity(
2688+
gs.morphs.Box(
2689+
size=(1.0, 1.0, 1.0),
2690+
pos=(0.0, 0.0, 2.0),
2691+
)
2692+
)
2693+
scene.build()
2694+
2695+
for link in box.links:
2696+
for vgeom, geom in zip(link.vgeoms, link.geoms):
2697+
assert_allclose(geom.get_pos(), vgeom.get_pos(), atol=tol)
2698+
assert_allclose(geom.get_quat(), vgeom.get_quat(), atol=tol)

0 commit comments

Comments
 (0)