Import google-deepmind/mujoco_warp from GitHub.
PiperOrigin-RevId: 899731493 Change-Id: Ib563023047e85db1aff56e78724dc28d769ef91e
This commit is contained in:
committed by
Copybara-Service
parent
5724158593
commit
8bf11166b1
@@ -456,6 +456,9 @@ def _put_model_warp(
|
||||
if not hasattr(mw, k) or k in ('stat', 'opt'):
|
||||
continue
|
||||
field = _wp_to_np_type(getattr(mw, k), k)
|
||||
if k == 'geom_dataid' and field.ndim > 1:
|
||||
# Batched geom_dataid is not supported in MJX.
|
||||
field = field[0]
|
||||
fields[k] = field
|
||||
|
||||
impl_fields = {}
|
||||
|
||||
@@ -41,18 +41,18 @@ def _sum(stack1, stack2):
|
||||
@wp.kernel
|
||||
def ctrl_noise(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
actuator_ctrllimited: wp.array(dtype=bool),
|
||||
actuator_ctrlrange: wp.array2d(dtype=wp.vec2),
|
||||
opt_timestep: wp.array[float],
|
||||
actuator_ctrllimited: wp.array[bool],
|
||||
actuator_ctrlrange: wp.array2d[wp.vec2],
|
||||
# Data in:
|
||||
ctrl_in: wp.array2d(dtype=float),
|
||||
ctrl_in: wp.array2d[float],
|
||||
# In:
|
||||
ctrl_center: wp.array1d(dtype=float),
|
||||
ctrl_center: wp.array[float],
|
||||
step: int,
|
||||
ctrlnoisestd: float,
|
||||
ctrlnoiserate: float,
|
||||
# Data out:
|
||||
ctrl_out: wp.array2d(dtype=float),
|
||||
ctrl_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ def create_blocked_cholesky_func(block_size: int):
|
||||
@wp.func
|
||||
def blocked_cholesky_func(
|
||||
# In:
|
||||
A: wp.array(dtype=float, ndim=2),
|
||||
A: wp.array2d[float],
|
||||
matrix_size: int,
|
||||
# Out:
|
||||
L: wp.array(dtype=float, ndim=2),
|
||||
L: wp.array2d[float],
|
||||
):
|
||||
"""Computes the Cholesky factorization of a symmetric positive definite matrix A in blocks.
|
||||
|
||||
@@ -68,11 +68,11 @@ def create_blocked_cholesky_solve_func(block_size: int, matrix_size_static: int)
|
||||
@wp.func
|
||||
def blocked_cholesky_solve_func(
|
||||
# In:
|
||||
L: wp.array(dtype=float, ndim=2),
|
||||
b: wp.array(dtype=float, ndim=2),
|
||||
L: wp.array2d[float],
|
||||
b: wp.array2d[float],
|
||||
matrix_size: int,
|
||||
# Out:
|
||||
x: wp.array(dtype=float, ndim=2),
|
||||
x: wp.array2d[float],
|
||||
):
|
||||
"""Block Cholesky factorization and solve.
|
||||
|
||||
|
||||
+79
-69
@@ -173,21 +173,21 @@ def _compute_cylinder_bounds(
|
||||
@wp.kernel
|
||||
def _compute_bvh_bounds(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
bvh_ngeom: int,
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
mesh_bounds_size: wp.array(dtype=wp.vec3),
|
||||
hfield_bounds_size: wp.array(dtype=wp.vec3),
|
||||
enabled_geom_ids: wp.array[int],
|
||||
mesh_bounds_size: wp.array[wp.vec3],
|
||||
hfield_bounds_size: wp.array[wp.vec3],
|
||||
# Out:
|
||||
lower_out: wp.array(dtype=wp.vec3),
|
||||
upper_out: wp.array(dtype=wp.vec3),
|
||||
group_out: wp.array(dtype=int),
|
||||
lower_out: wp.array[wp.vec3],
|
||||
upper_out: wp.array[wp.vec3],
|
||||
group_out: wp.array[int],
|
||||
):
|
||||
worldid, geom_local_id = wp.tid()
|
||||
geom_id = enabled_geom_ids[geom_local_id]
|
||||
@@ -205,8 +205,13 @@ def _compute_bvh_bounds(
|
||||
elif type == GeomType.PLANE:
|
||||
lower_bound, upper_bound = _compute_plane_bounds(pos, rot, size)
|
||||
elif type == GeomType.MESH:
|
||||
size = mesh_bounds_size[geom_dataid[geom_id]]
|
||||
lower_bound, upper_bound = _compute_box_bounds(pos, rot, size)
|
||||
did = geom_dataid[worldid % geom_dataid.shape[0], geom_id]
|
||||
if did >= 0:
|
||||
size = mesh_bounds_size[did]
|
||||
lower_bound, upper_bound = _compute_box_bounds(pos, rot, size)
|
||||
else:
|
||||
lower_bound = pos
|
||||
upper_bound = pos
|
||||
elif type == GeomType.ELLIPSOID:
|
||||
lower_bound, upper_bound = _compute_ellipsoid_bounds(pos, rot, size)
|
||||
elif type == GeomType.CYLINDER:
|
||||
@@ -214,9 +219,14 @@ def _compute_bvh_bounds(
|
||||
elif type == GeomType.BOX:
|
||||
lower_bound, upper_bound = _compute_box_bounds(pos, rot, size)
|
||||
elif type == GeomType.HFIELD:
|
||||
size = hfield_bounds_size[geom_dataid[geom_id]]
|
||||
hfield_center = pos + rot[:, 2] * size[2]
|
||||
lower_bound, upper_bound = _compute_box_bounds(hfield_center, rot, size)
|
||||
did = geom_dataid[worldid % geom_dataid.shape[0], geom_id]
|
||||
if did >= 0:
|
||||
size = hfield_bounds_size[did]
|
||||
hfield_center = pos + rot[:, 2] * size[2]
|
||||
lower_bound, upper_bound = _compute_box_bounds(hfield_center, rot, size)
|
||||
else:
|
||||
lower_bound = pos
|
||||
upper_bound = pos
|
||||
|
||||
lower_out[worldid * bvh_ngeom + geom_local_id] = lower_bound
|
||||
upper_out[worldid * bvh_ngeom + geom_local_id] = upper_bound
|
||||
@@ -228,7 +238,7 @@ def compute_bvh_group_roots(
|
||||
# In:
|
||||
bvh_id: wp.uint64,
|
||||
# Out:
|
||||
group_root_out: wp.array(dtype=int),
|
||||
group_root_out: wp.array[int],
|
||||
):
|
||||
tid = wp.tid()
|
||||
root = wp.bvh_get_group_root(bvh_id, tid)
|
||||
@@ -238,21 +248,21 @@ def compute_bvh_group_roots(
|
||||
@wp.kernel
|
||||
def _compute_flex_bvh_bounds(
|
||||
# Model:
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_vertnum: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_vertnum: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
flex_geom_flexid: wp.array(dtype=int),
|
||||
flex_geom_edgeid: wp.array(dtype=int),
|
||||
flex_geom_flexid: wp.array[int],
|
||||
flex_geom_edgeid: wp.array[int],
|
||||
bvh_ngeom: int,
|
||||
total_bvh_size: int,
|
||||
# Out:
|
||||
lower_out: wp.array(dtype=wp.vec3),
|
||||
upper_out: wp.array(dtype=wp.vec3),
|
||||
group_out: wp.array(dtype=int),
|
||||
lower_out: wp.array[wp.vec3],
|
||||
upper_out: wp.array[wp.vec3],
|
||||
group_out: wp.array[int],
|
||||
):
|
||||
worldid, flexlocalid = wp.tid()
|
||||
|
||||
@@ -289,7 +299,7 @@ def build_scene_bvh(mjm: mujoco.MjModel, mjd: mujoco.MjData, rc: RenderContext,
|
||||
total_bvh_size = rc.bvh_ngeom + rc.bvh_nflexgeom
|
||||
|
||||
geom_type = wp.array(mjm.geom_type, dtype=int)
|
||||
geom_dataid = wp.array(mjm.geom_dataid, dtype=int)
|
||||
geom_dataid = wp.array(np.tile(mjm.geom_dataid, (nworld, 1)), dtype=int)
|
||||
geom_size = wp.array(np.tile(mjm.geom_size[np.newaxis, :, :], (nworld, 1, 1)), dtype=wp.vec3)
|
||||
geom_xpos = wp.array(np.tile(mjd.geom_xpos[np.newaxis, :, :], (nworld, 1, 1)), dtype=wp.vec3)
|
||||
geom_xmat = wp.array(np.tile(mjd.geom_xmat.reshape(mjm.ngeom, 3, 3)[np.newaxis, :, :, :], (nworld, 1, 1, 1)), dtype=wp.mat33)
|
||||
@@ -599,16 +609,16 @@ def build_hfield_bvh(
|
||||
def accumulate_flex_vertex_normals(
|
||||
# Model:
|
||||
nflex: int,
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_elemadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_dim: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_elemadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_elem: wp.array[int],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# Out:
|
||||
flexvert_norm_out: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_norm_out: wp.array2d[wp.vec3],
|
||||
):
|
||||
"""Accumulate per-vertex normals by summing adjacent face normals."""
|
||||
worldid, elemid = wp.tid()
|
||||
@@ -644,7 +654,7 @@ def accumulate_flex_vertex_normals(
|
||||
@wp.kernel
|
||||
def normalize_vertex_normals(
|
||||
# Out:
|
||||
flexvert_norm_out: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_norm_out: wp.array2d[wp.vec3],
|
||||
):
|
||||
"""Normalize accumulated vertex normals."""
|
||||
worldid, vertid = wp.tid()
|
||||
@@ -654,20 +664,20 @@ def normalize_vertex_normals(
|
||||
@wp.kernel
|
||||
def _build_flex_2d_elements(
|
||||
# Model:
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_elem: wp.array[int],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
flexvert_norm_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_norm_in: wp.array2d[wp.vec3],
|
||||
elem_adr: int,
|
||||
vert_adr: int,
|
||||
face_offset: int,
|
||||
radius: float,
|
||||
nfaces: int,
|
||||
# Out:
|
||||
face_point_out: wp.array(dtype=wp.vec3),
|
||||
face_index_out: wp.array(dtype=int),
|
||||
group_out: wp.array(dtype=int),
|
||||
face_point_out: wp.array[wp.vec3],
|
||||
face_index_out: wp.array[int],
|
||||
group_out: wp.array[int],
|
||||
):
|
||||
"""Create faces from 2D flex elements (triangles).
|
||||
|
||||
@@ -728,20 +738,20 @@ def _build_flex_2d_elements(
|
||||
@wp.kernel
|
||||
def _build_flex_2d_sides(
|
||||
# Model:
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_shell: wp.array[int],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
flexvert_norm_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_norm_in: wp.array2d[wp.vec3],
|
||||
shell_adr: int,
|
||||
vert_adr: int,
|
||||
face_offset: int,
|
||||
radius: float,
|
||||
nface: int,
|
||||
# Out:
|
||||
face_point_out: wp.array(dtype=wp.vec3),
|
||||
face_index_out: wp.array(dtype=int),
|
||||
group_out: wp.array(dtype=int),
|
||||
face_point_out: wp.array[wp.vec3],
|
||||
face_index_out: wp.array[int],
|
||||
group_out: wp.array[int],
|
||||
):
|
||||
"""Create side faces from 2D flex shell fragments.
|
||||
|
||||
@@ -790,18 +800,18 @@ def _build_flex_2d_sides(
|
||||
@wp.kernel
|
||||
def _build_flex_3d_shells(
|
||||
# Model:
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_shell: wp.array[int],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
shell_adr: int,
|
||||
vert_adr: int,
|
||||
face_offset: int,
|
||||
nface: int,
|
||||
# Out:
|
||||
face_point_out: wp.array(dtype=wp.vec3),
|
||||
face_index_out: wp.array(dtype=int),
|
||||
group_out: wp.array(dtype=int),
|
||||
face_point_out: wp.array[wp.vec3],
|
||||
face_index_out: wp.array[int],
|
||||
group_out: wp.array[int],
|
||||
):
|
||||
"""Create faces from 3D flex shell fragments (triangles).
|
||||
|
||||
@@ -836,22 +846,22 @@ def _build_flex_3d_shells(
|
||||
@wp.kernel
|
||||
def _update_flex_2d_face_points(
|
||||
# Model:
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_shelldataadr: wp.array(dtype=int),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_shelldataadr: wp.array[int],
|
||||
flex_elem: wp.array[int],
|
||||
flex_shell: wp.array[int],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
flexvert_norm_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_norm_in: wp.array2d[wp.vec3],
|
||||
flex_id: int,
|
||||
nface: int,
|
||||
smooth: bool,
|
||||
# Out:
|
||||
face_point_out: wp.array(dtype=wp.vec3),
|
||||
face_point_out: wp.array[wp.vec3],
|
||||
):
|
||||
worldid, workid = wp.tid()
|
||||
|
||||
@@ -935,16 +945,16 @@ def _update_flex_2d_face_points(
|
||||
@wp.kernel
|
||||
def _update_flex_3d_face_points(
|
||||
# Model:
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_shelldataadr: wp.array(dtype=int),
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_shelldataadr: wp.array[int],
|
||||
flex_shell: wp.array[int],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
flex_id: int,
|
||||
nface: int,
|
||||
# Out:
|
||||
face_point_out: wp.array(dtype=wp.vec3),
|
||||
face_point_out: wp.array[wp.vec3],
|
||||
):
|
||||
worldid, shellid = wp.tid()
|
||||
|
||||
|
||||
+189
-188
@@ -55,20 +55,20 @@ mat_maxconpair = wp.types.matrix(shape=(MJ_MAXCONPAIR, 3), dtype=float)
|
||||
@wp.func
|
||||
def _hfield_filter(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_graph: wp.array[int],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
worldid: int,
|
||||
g1: int,
|
||||
@@ -79,7 +79,8 @@ def _hfield_filter(
|
||||
See MuJoCo mjc_ConvexHField.
|
||||
"""
|
||||
# height field info
|
||||
hfdataid = geom_dataid[g1]
|
||||
dataid_setid = worldid % geom_dataid.shape[0]
|
||||
hfdataid = geom_dataid[dataid_setid, g1]
|
||||
size1 = hfield_size[hfdataid]
|
||||
|
||||
# geom info
|
||||
@@ -124,7 +125,7 @@ def _hfield_filter(
|
||||
|
||||
# load mesh vertex data for support function queries
|
||||
if geomtype2 == GeomType.MESH:
|
||||
dataid = geom_dataid[g2]
|
||||
dataid = geom_dataid[dataid_setid, g2]
|
||||
geom2.vertadr = wp.where(dataid >= 0, mesh_vertadr[dataid], -1)
|
||||
geom2.vertnum = wp.where(dataid >= 0, mesh_vertnum[dataid], -1)
|
||||
geom2.graphadr = wp.where(dataid >= 0, mesh_graphadr[dataid], -1)
|
||||
@@ -167,78 +168,78 @@ def ccd_hfield_kernel_builder(
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def ccd_hfield_kernel(
|
||||
# Model:
|
||||
opt_ccd_tolerance: wp.array(dtype=float),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
hfield_nrow: wp.array(dtype=int),
|
||||
hfield_ncol: wp.array(dtype=int),
|
||||
hfield_adr: wp.array(dtype=int),
|
||||
hfield_data: wp.array(dtype=float),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
pair_solimp: wp.array2d(dtype=vec5),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_friction: wp.array2d(dtype=vec5),
|
||||
opt_ccd_tolerance: wp.array[float],
|
||||
geom_type: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_gap: wp.array2d[float],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
hfield_nrow: wp.array[int],
|
||||
hfield_ncol: wp.array[int],
|
||||
hfield_adr: wp.array[int],
|
||||
hfield_data: wp.array[float],
|
||||
pair_dim: wp.array[int],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
pair_solimp: wp.array2d[vec5],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_friction: wp.array2d[vec5],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
naconmax_in: int,
|
||||
naccdmax_in: int,
|
||||
ncollision_in: wp.array(dtype=int),
|
||||
ncollision_in: wp.array[int],
|
||||
# In:
|
||||
collision_pair_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_in: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_in: wp.array(dtype=int),
|
||||
epa_vert_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_vert_index_in: wp.array2d(dtype=int),
|
||||
epa_face_in: wp.array2d(dtype=int),
|
||||
epa_pr_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_norm2_in: wp.array2d(dtype=float),
|
||||
epa_horizon_in: wp.array2d(dtype=int),
|
||||
nccd_in: wp.array(dtype=int),
|
||||
collision_pair_in: wp.array[wp.vec2i],
|
||||
collision_pairid_in: wp.array[wp.vec2i],
|
||||
collision_worldid_in: wp.array[int],
|
||||
epa_vert_in: wp.array2d[wp.vec3],
|
||||
epa_vert_index_in: wp.array2d[int],
|
||||
epa_face_in: wp.array2d[int],
|
||||
epa_pr_in: wp.array2d[wp.vec3],
|
||||
epa_norm2_in: wp.array2d[float],
|
||||
epa_horizon_in: wp.array2d[int],
|
||||
nccd_in: wp.array[int],
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
collisionid = wp.tid()
|
||||
if collisionid >= ncollision_in[0]:
|
||||
@@ -339,7 +340,7 @@ def ccd_hfield_kernel_builder(
|
||||
geom1.rot = wp.identity(n=3, dtype=float)
|
||||
|
||||
# see MuJoCo mjc_ConvexHField
|
||||
geom1_dataid = geom_dataid[g1]
|
||||
geom1_dataid = geom_dataid[worldid % geom_dataid.shape[0], g1]
|
||||
|
||||
# height field subgrid
|
||||
nrow = hfield_nrow[geom1_dataid]
|
||||
@@ -710,27 +711,27 @@ def ccd_kernel_builder(
|
||||
@wp.func
|
||||
def eval_ccd_write_contact(
|
||||
# Model:
|
||||
opt_ccd_tolerance: wp.array(dtype=float),
|
||||
opt_ccd_tolerance: wp.array[float],
|
||||
# Data in:
|
||||
naconmax_in: int,
|
||||
# In:
|
||||
epa_vert_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_vert_index_in: wp.array2d(dtype=int),
|
||||
epa_face_in: wp.array2d(dtype=int),
|
||||
epa_pr_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_norm2_in: wp.array2d(dtype=float),
|
||||
epa_horizon_in: wp.array2d(dtype=int),
|
||||
multiccd_polygon_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_clipped_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_pnormal_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_pdist_in: wp.array2d(dtype=float),
|
||||
multiccd_idx1_in: wp.array2d(dtype=int),
|
||||
multiccd_idx2_in: wp.array2d(dtype=int),
|
||||
multiccd_n1_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_n2_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_endvert_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_face1_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_face2_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_vert_in: wp.array2d[wp.vec3],
|
||||
epa_vert_index_in: wp.array2d[int],
|
||||
epa_face_in: wp.array2d[int],
|
||||
epa_pr_in: wp.array2d[wp.vec3],
|
||||
epa_norm2_in: wp.array2d[float],
|
||||
epa_horizon_in: wp.array2d[int],
|
||||
multiccd_polygon_in: wp.array2d[wp.vec3],
|
||||
multiccd_clipped_in: wp.array2d[wp.vec3],
|
||||
multiccd_pnormal_in: wp.array2d[wp.vec3],
|
||||
multiccd_pdist_in: wp.array2d[float],
|
||||
multiccd_idx1_in: wp.array2d[int],
|
||||
multiccd_idx2_in: wp.array2d[int],
|
||||
multiccd_n1_in: wp.array2d[wp.vec3],
|
||||
multiccd_n2_in: wp.array2d[wp.vec3],
|
||||
multiccd_endvert_in: wp.array2d[wp.vec3],
|
||||
multiccd_face1_in: wp.array2d[wp.vec3],
|
||||
multiccd_face2_in: wp.array2d[wp.vec3],
|
||||
geom1: Geom,
|
||||
geom2: Geom,
|
||||
geoms: wp.vec2i,
|
||||
@@ -747,21 +748,21 @@ def ccd_kernel_builder(
|
||||
x2: wp.vec3,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
) -> int:
|
||||
points = mat43()
|
||||
witness1 = mat43()
|
||||
@@ -892,83 +893,83 @@ def ccd_kernel_builder(
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def ccd_kernel(
|
||||
# Model:
|
||||
opt_ccd_tolerance: wp.array(dtype=float),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
pair_solimp: wp.array2d(dtype=vec5),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_friction: wp.array2d(dtype=vec5),
|
||||
opt_ccd_tolerance: wp.array[float],
|
||||
geom_type: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_gap: wp.array2d[float],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
pair_dim: wp.array[int],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
pair_solimp: wp.array2d[vec5],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_friction: wp.array2d[vec5],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
naconmax_in: int,
|
||||
naccdmax_in: int,
|
||||
ncollision_in: wp.array(dtype=int),
|
||||
ncollision_in: wp.array[int],
|
||||
# In:
|
||||
collision_pair_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_in: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_in: wp.array(dtype=int),
|
||||
epa_vert_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_vert_index_in: wp.array2d(dtype=int),
|
||||
epa_face_in: wp.array2d(dtype=int),
|
||||
epa_pr_in: wp.array2d(dtype=wp.vec3),
|
||||
epa_norm2_in: wp.array2d(dtype=float),
|
||||
epa_horizon_in: wp.array2d(dtype=int),
|
||||
multiccd_polygon_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_clipped_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_pnormal_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_pdist_in: wp.array2d(dtype=float),
|
||||
multiccd_idx1_in: wp.array2d(dtype=int),
|
||||
multiccd_idx2_in: wp.array2d(dtype=int),
|
||||
multiccd_n1_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_n2_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_endvert_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_face1_in: wp.array2d(dtype=wp.vec3),
|
||||
multiccd_face2_in: wp.array2d(dtype=wp.vec3),
|
||||
nccd_in: wp.array(dtype=int),
|
||||
collision_pair_in: wp.array[wp.vec2i],
|
||||
collision_pairid_in: wp.array[wp.vec2i],
|
||||
collision_worldid_in: wp.array[int],
|
||||
epa_vert_in: wp.array2d[wp.vec3],
|
||||
epa_vert_index_in: wp.array2d[int],
|
||||
epa_face_in: wp.array2d[int],
|
||||
epa_pr_in: wp.array2d[wp.vec3],
|
||||
epa_norm2_in: wp.array2d[float],
|
||||
epa_horizon_in: wp.array2d[int],
|
||||
multiccd_polygon_in: wp.array2d[wp.vec3],
|
||||
multiccd_clipped_in: wp.array2d[wp.vec3],
|
||||
multiccd_pnormal_in: wp.array2d[wp.vec3],
|
||||
multiccd_pdist_in: wp.array2d[float],
|
||||
multiccd_idx1_in: wp.array2d[int],
|
||||
multiccd_idx2_in: wp.array2d[int],
|
||||
multiccd_n1_in: wp.array2d[wp.vec3],
|
||||
multiccd_n2_in: wp.array2d[wp.vec3],
|
||||
multiccd_endvert_in: wp.array2d[wp.vec3],
|
||||
multiccd_face1_in: wp.array2d[wp.vec3],
|
||||
multiccd_face2_in: wp.array2d[wp.vec3],
|
||||
nccd_in: wp.array[int],
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
collisionid = wp.tid()
|
||||
if collisionid >= ncollision_in[0]:
|
||||
|
||||
+64
-62
@@ -47,44 +47,44 @@ class Geom:
|
||||
hfprism: mat63
|
||||
vertadr: int
|
||||
vertnum: int
|
||||
vert: wp.array(dtype=wp.vec3)
|
||||
vert: wp.array[wp.vec3]
|
||||
graphadr: int
|
||||
graph: wp.array(dtype=int)
|
||||
graph: wp.array[int]
|
||||
mesh_polynum: int
|
||||
mesh_polyadr: int
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3)
|
||||
mesh_polyvertadr: wp.array(dtype=int)
|
||||
mesh_polyvertnum: wp.array(dtype=int)
|
||||
mesh_polyvert: wp.array(dtype=int)
|
||||
mesh_polymapadr: wp.array(dtype=int)
|
||||
mesh_polymapnum: wp.array(dtype=int)
|
||||
mesh_polymap: wp.array(dtype=int)
|
||||
mesh_polynormal: wp.array[wp.vec3]
|
||||
mesh_polyvertadr: wp.array[int]
|
||||
mesh_polyvertnum: wp.array[int]
|
||||
mesh_polyvert: wp.array[int]
|
||||
mesh_polymapadr: wp.array[int]
|
||||
mesh_polymapnum: wp.array[int]
|
||||
mesh_polymap: wp.array[int]
|
||||
index: int
|
||||
|
||||
|
||||
@wp.func
|
||||
def geom_collision_pair(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
geoms: wp.vec2i,
|
||||
worldid: int,
|
||||
@@ -109,8 +109,10 @@ def geom_collision_pair(
|
||||
# z-axis of the rotation matrix, used as the surface normal for plane collisions
|
||||
geom2.normal = wp.vec3(geom2.rot[0, 2], geom2.rot[1, 2], geom2.rot[2, 2])
|
||||
|
||||
dataid_setid = worldid % geom_dataid.shape[0]
|
||||
|
||||
if geom_type1 == GeomType.MESH:
|
||||
dataid = geom_dataid[g1]
|
||||
dataid = geom_dataid[dataid_setid, g1]
|
||||
geom1.vertadr = wp.where(dataid >= 0, mesh_vertadr[dataid], -1)
|
||||
geom1.vertnum = wp.where(dataid >= 0, mesh_vertnum[dataid], -1)
|
||||
geom1.graphadr = wp.where(dataid >= 0, mesh_graphadr[dataid], -1)
|
||||
@@ -128,7 +130,7 @@ def geom_collision_pair(
|
||||
geom1.mesh_polymap = mesh_polymap
|
||||
|
||||
if geom_type2 == GeomType.MESH:
|
||||
dataid = geom_dataid[g2]
|
||||
dataid = geom_dataid[dataid_setid, g2]
|
||||
geom2.vertadr = wp.where(dataid >= 0, mesh_vertadr[dataid], -1)
|
||||
geom2.vertnum = wp.where(dataid >= 0, mesh_vertnum[dataid], -1)
|
||||
geom2.graphadr = wp.where(dataid >= 0, mesh_graphadr[dataid], -1)
|
||||
@@ -174,21 +176,21 @@ def write_contact(
|
||||
pairid_in: wp.vec2i,
|
||||
worldid_in: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
) -> int:
|
||||
"""Atomically write a detected contact into the contact output arrays.
|
||||
|
||||
@@ -233,24 +235,24 @@ def write_contact(
|
||||
@wp.func
|
||||
def contact_params(
|
||||
# Model:
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
pair_solimp: wp.array2d(dtype=vec5),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_friction: wp.array2d(dtype=vec5),
|
||||
geom_condim: wp.array[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_gap: wp.array2d[float],
|
||||
pair_dim: wp.array[int],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
pair_solimp: wp.array2d[vec5],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_friction: wp.array2d[vec5],
|
||||
# In:
|
||||
collision_pair_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pair_in: wp.array[wp.vec2i],
|
||||
collision_pairid_in: wp.array[wp.vec2i],
|
||||
cid: int,
|
||||
worldid: int,
|
||||
):
|
||||
|
||||
+54
-54
@@ -80,8 +80,8 @@ MJ_COLLISION_TABLE = {
|
||||
@wp.kernel
|
||||
def _zero_nacon_ncollision(
|
||||
# Data out:
|
||||
nacon_out: wp.array(dtype=int),
|
||||
ncollision_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array[int],
|
||||
ncollision_out: wp.array[int],
|
||||
):
|
||||
ncollision_out[0] = 0
|
||||
nacon_out[0] = 0
|
||||
@@ -275,12 +275,12 @@ def _broadphase_filter(opt_broadphase_filter: int, ngeom_aabb: int, ngeom_rbound
|
||||
@wp.func
|
||||
def func(
|
||||
# Model:
|
||||
geom_aabb: wp.array3d(dtype=wp.vec3),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_aabb: wp.array3d[wp.vec3],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
geom1: int,
|
||||
geom2: int,
|
||||
@@ -324,8 +324,8 @@ def _broadphase_filter(opt_broadphase_filter: int, ngeom_aabb: int, ngeom_rbound
|
||||
@wp.func
|
||||
def _add_geom_pair(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
nxn_pairid: wp.array(dtype=wp.vec2i),
|
||||
geom_type: wp.array[int],
|
||||
nxn_pairid: wp.array[wp.vec2i],
|
||||
# Data in:
|
||||
naconmax_in: int,
|
||||
# In:
|
||||
@@ -334,11 +334,11 @@ def _add_geom_pair(
|
||||
worldid: int,
|
||||
nxnid: int,
|
||||
# Data out:
|
||||
ncollision_out: wp.array(dtype=int),
|
||||
ncollision_out: wp.array[int],
|
||||
# Out:
|
||||
collision_pair_out: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_out: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_out: wp.array(dtype=int),
|
||||
collision_pair_out: wp.array[wp.vec2i],
|
||||
collision_pairid_out: wp.array[wp.vec2i],
|
||||
collision_worldid_out: wp.array[int],
|
||||
):
|
||||
pairid = wp.atomic_add(ncollision_out, 0, 1)
|
||||
|
||||
@@ -359,7 +359,7 @@ def _add_geom_pair(
|
||||
|
||||
|
||||
@wp.func
|
||||
def _binary_search(values: wp.array(dtype=Any), value: Any, lower: int, upper: int) -> int:
|
||||
def _binary_search(values: wp.array[Any], value: Any, lower: int, upper: int) -> int:
|
||||
while lower < upper:
|
||||
mid = (lower + upper) >> 1
|
||||
if values[mid] > value:
|
||||
@@ -375,18 +375,18 @@ def _sap_project(opt_broadphase: int):
|
||||
def sap_project(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
nworld_in: int,
|
||||
# In:
|
||||
direction_in: wp.vec3,
|
||||
# Out:
|
||||
projection_lower_out: wp.array2d(dtype=float),
|
||||
projection_upper_out: wp.array2d(dtype=float),
|
||||
sort_index_out: wp.array2d(dtype=int),
|
||||
segmented_index_out: wp.array(dtype=int),
|
||||
projection_lower_out: wp.array2d[float],
|
||||
projection_upper_out: wp.array2d[float],
|
||||
sort_index_out: wp.array2d[int],
|
||||
segmented_index_out: wp.array[int],
|
||||
):
|
||||
worldid, geomid = wp.tid()
|
||||
|
||||
@@ -422,11 +422,11 @@ def _sap_range(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
# In:
|
||||
projection_lower_in: wp.array2d(dtype=float),
|
||||
projection_upper_in: wp.array2d(dtype=float),
|
||||
sort_index_in: wp.array2d(dtype=int),
|
||||
projection_lower_in: wp.array2d[float],
|
||||
projection_upper_in: wp.array2d[float],
|
||||
sort_index_in: wp.array2d[int],
|
||||
# Out:
|
||||
range_out: wp.array2d(dtype=int),
|
||||
range_out: wp.array2d[int],
|
||||
):
|
||||
worldid, geomid = wp.tid()
|
||||
|
||||
@@ -448,26 +448,26 @@ def _sap_broadphase(opt_broadphase_filter: int, ngeom_aabb: int, ngeom_rbound: i
|
||||
def kernel(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_aabb: wp.array3d(dtype=wp.vec3),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
nxn_pairid: wp.array(dtype=wp.vec2i),
|
||||
geom_type: wp.array[int],
|
||||
geom_aabb: wp.array3d[wp.vec3],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
nxn_pairid: wp.array[wp.vec2i],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
nworld_in: int,
|
||||
naconmax_in: int,
|
||||
# In:
|
||||
sort_index_in: wp.array2d(dtype=int),
|
||||
cumulative_sum_in: wp.array(dtype=int),
|
||||
sort_index_in: wp.array2d[int],
|
||||
cumulative_sum_in: wp.array[int],
|
||||
nsweep_in: int,
|
||||
# Data out:
|
||||
ncollision_out: wp.array(dtype=int),
|
||||
ncollision_out: wp.array[int],
|
||||
# Out:
|
||||
collision_pair_out: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_out: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_out: wp.array(dtype=int),
|
||||
collision_pair_out: wp.array[wp.vec2i],
|
||||
collision_pairid_out: wp.array[wp.vec2i],
|
||||
collision_worldid_out: wp.array[int],
|
||||
):
|
||||
worldgeomid = wp.tid()
|
||||
|
||||
@@ -528,11 +528,11 @@ def _segmented_sort(tile_size: int):
|
||||
@wp.kernel(module="unique")
|
||||
def segmented_sort(
|
||||
# In:
|
||||
projection_lower_in: wp.array2d(dtype=float),
|
||||
sort_index_in: wp.array2d(dtype=int),
|
||||
projection_lower_in: wp.array2d[float],
|
||||
sort_index_in: wp.array2d[int],
|
||||
# Out:
|
||||
projection_lower_out: wp.array2d(dtype=float),
|
||||
sort_index_out: wp.array2d(dtype=int),
|
||||
projection_lower_out: wp.array2d[float],
|
||||
sort_index_out: wp.array2d[int],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
@@ -648,22 +648,22 @@ def _nxn_broadphase(opt_broadphase_filter: int, ngeom_aabb: int, ngeom_rbound: i
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def kernel(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_aabb: wp.array3d(dtype=wp.vec3),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
nxn_geom_pair: wp.array(dtype=wp.vec2i),
|
||||
nxn_pairid: wp.array(dtype=wp.vec2i),
|
||||
geom_type: wp.array[int],
|
||||
geom_aabb: wp.array3d[wp.vec3],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
nxn_geom_pair: wp.array[wp.vec2i],
|
||||
nxn_pairid: wp.array[wp.vec2i],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
naconmax_in: int,
|
||||
# Data out:
|
||||
ncollision_out: wp.array(dtype=int),
|
||||
ncollision_out: wp.array[int],
|
||||
# Out:
|
||||
collision_pair_out: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_out: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_out: wp.array(dtype=int),
|
||||
collision_pair_out: wp.array[wp.vec2i],
|
||||
collision_pairid_out: wp.array[wp.vec2i],
|
||||
collision_worldid_out: wp.array[int],
|
||||
):
|
||||
worldid, elementid = wp.tid()
|
||||
|
||||
|
||||
+138
-138
@@ -46,22 +46,22 @@ def _write_flex_contact(
|
||||
vertid: int,
|
||||
worldid: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
if dist >= margin or dist >= MJ_MAXVAL:
|
||||
return
|
||||
@@ -110,22 +110,22 @@ def _collide_geom_triangle(
|
||||
vertex_id: int,
|
||||
worldid: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
if gtype == int(GeomType.SPHERE):
|
||||
sphere_radius = size_val[0]
|
||||
@@ -262,41 +262,41 @@ def _flex_plane_narrowphase(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
nflexvert: int,
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
flex_condim: wp.array(dtype=int),
|
||||
flex_friction: wp.array(dtype=wp.vec3),
|
||||
flex_margin: wp.array(dtype=float),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_vertflexid: wp.array(dtype=int),
|
||||
geom_type: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
flex_condim: wp.array[int],
|
||||
flex_friction: wp.array[wp.vec3],
|
||||
flex_margin: wp.array[float],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_radius: wp.array[float],
|
||||
flex_vertflexid: wp.array[int],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
nworld_in: int,
|
||||
naconmax_in: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
worldid, vertid = wp.tid()
|
||||
|
||||
@@ -382,48 +382,48 @@ def _flex_narrowphase_dim2(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
nflex: int,
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_contype: wp.array(dtype=int),
|
||||
geom_conaffinity: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
flex_contype: wp.array(dtype=int),
|
||||
flex_conaffinity: wp.array(dtype=int),
|
||||
flex_margin: wp.array(dtype=float),
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_elemadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_contype: wp.array[int],
|
||||
geom_conaffinity: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
flex_contype: wp.array[int],
|
||||
flex_conaffinity: wp.array[int],
|
||||
flex_margin: wp.array[float],
|
||||
flex_dim: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_elemadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_elem: wp.array[int],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
nworld_in: int,
|
||||
naconmax_in: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
worldid, elemid = wp.tid()
|
||||
|
||||
@@ -533,47 +533,47 @@ def _flex_narrowphase_dim3(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
nflex: int,
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_contype: wp.array(dtype=int),
|
||||
geom_conaffinity: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
flex_contype: wp.array(dtype=int),
|
||||
flex_conaffinity: wp.array(dtype=int),
|
||||
flex_margin: wp.array(dtype=float),
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_shellnum: wp.array(dtype=int),
|
||||
flex_shelldataadr: wp.array(dtype=int),
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_contype: wp.array[int],
|
||||
geom_conaffinity: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
flex_contype: wp.array[int],
|
||||
flex_conaffinity: wp.array[int],
|
||||
flex_margin: wp.array[float],
|
||||
flex_dim: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_shellnum: wp.array[int],
|
||||
flex_shelldataadr: wp.array[int],
|
||||
flex_shell: wp.array[int],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
nworld_in: int,
|
||||
naconmax_in: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
worldid, shellid = wp.tid()
|
||||
|
||||
|
||||
+68
-74
@@ -63,20 +63,20 @@ class Polytope:
|
||||
status: int
|
||||
|
||||
# vertices in polytope (packed geom1 followed by geom2)
|
||||
vert: wp.array(dtype=wp.vec3)
|
||||
vert_index: wp.array(dtype=int)
|
||||
vert: wp.array[wp.vec3]
|
||||
vert_index: wp.array[int]
|
||||
nvert: int
|
||||
|
||||
# faces in polytope
|
||||
# 10 bits per each vertex index, while the last significant bits are for
|
||||
# invalid and deleted face
|
||||
face: wp.array(dtype=int)
|
||||
face_pr: wp.array(dtype=wp.vec3)
|
||||
face_norm2: wp.array(dtype=float)
|
||||
face: wp.array[int]
|
||||
face_pr: wp.array[wp.vec3]
|
||||
face_norm2: wp.array[float]
|
||||
nface: int
|
||||
|
||||
# edges that make up the horizon when adding new vertices to polytope
|
||||
horizon: wp.array(dtype=int)
|
||||
horizon: wp.array[int]
|
||||
nhorizon: int
|
||||
|
||||
|
||||
@@ -1335,7 +1335,7 @@ def _area4(a: wp.vec3, b: wp.vec3, c: wp.vec3, d: wp.vec3) -> float:
|
||||
|
||||
|
||||
@wp.func
|
||||
def _polygon_quad(polygon: wp.array(dtype=wp.vec3), npolygon: int) -> wp.vec4i:
|
||||
def _polygon_quad(polygon: wp.array[wp.vec3], npolygon: int) -> wp.vec4i:
|
||||
"""Returns the indices of a quadrilateral of maximum area in a convex polygon (npolygon > 4)."""
|
||||
b = int(1)
|
||||
c = int(2)
|
||||
@@ -1376,7 +1376,7 @@ def _polygon_quad(polygon: wp.array(dtype=wp.vec3), npolygon: int) -> wp.vec4i:
|
||||
# return number (1, 2 or 3) of dimensions of a simplex; reorder vertices if necessary
|
||||
@wp.func
|
||||
def _feature_dim(
|
||||
face: wp.vec3i, vert_index: wp.array(dtype=int), vert: wp.array(dtype=wp.vec3), offset: int
|
||||
face: wp.vec3i, vert_index: wp.array[int], vert: wp.array[wp.vec3], offset: int
|
||||
) -> Tuple[int, wp.vec3i, wp.mat33]:
|
||||
v1i = vert_index[2 * face[0] + offset]
|
||||
v2i = vert_index[2 * face[1] + offset]
|
||||
@@ -1401,9 +1401,7 @@ def _feature_dim(
|
||||
|
||||
# find two normals that are facing each other within a tolerance, return 1 if found
|
||||
@wp.func
|
||||
def _aligned_faces(
|
||||
vert1: wp.array(dtype=wp.vec3), len1: int, vert2: wp.array(dtype=wp.vec3), len2: int
|
||||
) -> Tuple[int, wp.vec2i]:
|
||||
def _aligned_faces(vert1: wp.array[wp.vec3], len1: int, vert2: wp.array[wp.vec3], len2: int) -> Tuple[int, wp.vec2i]:
|
||||
res = wp.vec2i()
|
||||
for i in range(len1):
|
||||
for j in range(len2):
|
||||
@@ -1417,9 +1415,7 @@ def _aligned_faces(
|
||||
# find two normals that are perpendicular to each other within a tolerance
|
||||
# return 1 if found
|
||||
@wp.func
|
||||
def _aligned_face_edge(
|
||||
edge: wp.array(dtype=wp.vec3), nedge: int, face: wp.array(dtype=wp.vec3), nface: int
|
||||
) -> Tuple[int, wp.vec2i]:
|
||||
def _aligned_face_edge(edge: wp.array[wp.vec3], nedge: int, face: wp.array[wp.vec3], nface: int) -> Tuple[int, wp.vec2i]:
|
||||
res = wp.vec2i()
|
||||
for i in range(nface):
|
||||
for j in range(nedge):
|
||||
@@ -1432,9 +1428,7 @@ def _aligned_face_edge(
|
||||
|
||||
# find up to n <= 2 common integers of two arrays, return n
|
||||
@wp.func
|
||||
def _intersect1(
|
||||
a1: wp.array(dtype=int), a2: wp.array(dtype=int), start1: int, start2: int, len1: int, len2: int
|
||||
) -> Tuple[int, wp.vec2i]:
|
||||
def _intersect1(a1: wp.array[int], a2: wp.array[int], start1: int, start2: int, len1: int, len2: int) -> Tuple[int, wp.vec2i]:
|
||||
count = int(0)
|
||||
res = wp.vec2i()
|
||||
for i in range(start1, start1 + len1):
|
||||
@@ -1448,7 +1442,7 @@ def _intersect1(
|
||||
|
||||
|
||||
@wp.func
|
||||
def _intersect2(a1: wp.vec2i, a2: wp.array(dtype=int), start2: int, len1: int, len2: int) -> Tuple[int, wp.vec2i]:
|
||||
def _intersect2(a1: wp.vec2i, a2: wp.array[int], start2: int, len1: int, len2: int) -> Tuple[int, wp.vec2i]:
|
||||
count = int(0)
|
||||
res = wp.vec2i()
|
||||
for i in range(len1):
|
||||
@@ -1470,13 +1464,13 @@ def _mesh_normals(
|
||||
mat: wp.mat33,
|
||||
vertadr: int,
|
||||
polyadr: int,
|
||||
polynormal: wp.array(dtype=wp.vec3),
|
||||
polymapadr: wp.array(dtype=int),
|
||||
polymapnum: wp.array(dtype=int),
|
||||
polymap: wp.array(dtype=int),
|
||||
polynormal: wp.array[wp.vec3],
|
||||
polymapadr: wp.array[int],
|
||||
polymapnum: wp.array[int],
|
||||
polymap: wp.array[int],
|
||||
# Out:
|
||||
normals_out: wp.array(dtype=wp.vec3),
|
||||
indices_out: wp.array(dtype=int),
|
||||
normals_out: wp.array[wp.vec3],
|
||||
indices_out: wp.array[int],
|
||||
) -> int:
|
||||
v1 = feature_index[0]
|
||||
v2 = feature_index[1]
|
||||
@@ -1540,19 +1534,19 @@ def _mesh_edge_normals(
|
||||
pos: wp.vec3,
|
||||
vertadr: int,
|
||||
polyadr: int,
|
||||
vert: wp.array(dtype=wp.vec3),
|
||||
polyvertadr: wp.array(dtype=int),
|
||||
polyvertnum: wp.array(dtype=int),
|
||||
polyvert: wp.array(dtype=int),
|
||||
polymapadr: wp.array(dtype=int),
|
||||
polymapnum: wp.array(dtype=int),
|
||||
polymap: wp.array(dtype=int),
|
||||
vert: wp.array[wp.vec3],
|
||||
polyvertadr: wp.array[int],
|
||||
polyvertnum: wp.array[int],
|
||||
polyvert: wp.array[int],
|
||||
polymapadr: wp.array[int],
|
||||
polymapnum: wp.array[int],
|
||||
polymap: wp.array[int],
|
||||
v1: wp.vec3,
|
||||
v2: wp.vec3,
|
||||
v1i: int,
|
||||
# Out:
|
||||
normals_out: wp.array(dtype=wp.vec3),
|
||||
endverts_out: wp.array(dtype=wp.vec3),
|
||||
normals_out: wp.array[wp.vec3],
|
||||
endverts_out: wp.array[wp.vec3],
|
||||
) -> int:
|
||||
# only one edge
|
||||
if dim == 2:
|
||||
@@ -1586,8 +1580,8 @@ def _box_normals2(
|
||||
mat: wp.mat33,
|
||||
n: wp.vec3,
|
||||
# Out:
|
||||
normal_out: wp.array(dtype=wp.vec3),
|
||||
index_out: wp.array(dtype=int),
|
||||
normal_out: wp.array[wp.vec3],
|
||||
index_out: wp.array[int],
|
||||
) -> int:
|
||||
# list of box face normals
|
||||
face_normals = mat63(1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, -1.0)
|
||||
@@ -1621,8 +1615,8 @@ def _box_normals(
|
||||
mat: wp.mat33,
|
||||
dir: wp.vec3,
|
||||
# Out:
|
||||
normal_out: wp.array(dtype=wp.vec3),
|
||||
index_out: wp.array(dtype=int),
|
||||
normal_out: wp.array[wp.vec3],
|
||||
index_out: wp.array[int],
|
||||
) -> int:
|
||||
v1 = feature_index[0]
|
||||
v2 = feature_index[1]
|
||||
@@ -1669,7 +1663,7 @@ def _box_normals(
|
||||
# c is 1 if edge is diagonal of a box face
|
||||
# c is 2 if edge is an external edge of box
|
||||
if c == 1 or c == 2:
|
||||
return 2
|
||||
return c
|
||||
return _box_normals2(mat, dir, normal_out, index_out)
|
||||
|
||||
if feature_dim == 1:
|
||||
@@ -1698,8 +1692,8 @@ def _box_edge_normals(
|
||||
v2: wp.vec3,
|
||||
v1i: int,
|
||||
# Out:
|
||||
normal_out: wp.array(dtype=wp.vec3),
|
||||
endvert_out: wp.array(dtype=wp.vec3),
|
||||
normal_out: wp.array[wp.vec3],
|
||||
endvert_out: wp.array[wp.vec3],
|
||||
) -> int:
|
||||
if dim == 2:
|
||||
endvert_out[0] = v2
|
||||
@@ -1726,7 +1720,7 @@ def _box_edge_normals(
|
||||
|
||||
# recover face of a box from its index
|
||||
@wp.func
|
||||
def _box_face(mat: wp.mat33, pos: wp.vec3, size: wp.vec3, idx: int, face_out: wp.array(dtype=wp.vec3)) -> int:
|
||||
def _box_face(mat: wp.mat33, pos: wp.vec3, size: wp.vec3, idx: int, face_out: wp.array[wp.vec3]) -> int:
|
||||
# compute global coordinates of the box face and face normal
|
||||
if idx == 0: # right
|
||||
face_out[0] = mat @ wp.vec3(size[0], size[1], size[2]) + pos
|
||||
@@ -1775,13 +1769,13 @@ def _mesh_face(
|
||||
pos: wp.vec3,
|
||||
vertadr: int,
|
||||
polyadr: int,
|
||||
vert: wp.array(dtype=wp.vec3),
|
||||
polyvertadr: wp.array(dtype=int),
|
||||
polyvertnum: wp.array(dtype=int),
|
||||
polyvert: wp.array(dtype=int),
|
||||
vert: wp.array[wp.vec3],
|
||||
polyvertadr: wp.array[int],
|
||||
polyvertnum: wp.array[int],
|
||||
polyvert: wp.array[int],
|
||||
idx: int,
|
||||
# Out:
|
||||
face_out: wp.array(dtype=wp.vec3),
|
||||
face_out: wp.array[wp.vec3],
|
||||
) -> int:
|
||||
adr = polyvertadr[polyadr + idx]
|
||||
j = int(0)
|
||||
@@ -1821,17 +1815,17 @@ def _plane_intersect(pn: wp.vec3, pd: float, a: wp.vec3, b: wp.vec3) -> float:
|
||||
@wp.func
|
||||
def _polygon_clip(
|
||||
# In:
|
||||
plane_normal: wp.array(dtype=wp.vec3),
|
||||
plane_dist: wp.array(dtype=float),
|
||||
face1: wp.array(dtype=wp.vec3),
|
||||
plane_normal: wp.array[wp.vec3],
|
||||
plane_dist: wp.array[float],
|
||||
face1: wp.array[wp.vec3],
|
||||
nface1: int,
|
||||
face2: wp.array(dtype=wp.vec3),
|
||||
face2: wp.array[wp.vec3],
|
||||
nface2: int,
|
||||
n: wp.vec3,
|
||||
dir: wp.vec3,
|
||||
# Out:
|
||||
polygon_out: wp.array(dtype=wp.vec3),
|
||||
clipped_out: wp.array(dtype=wp.vec3),
|
||||
polygon_out: wp.array[wp.vec3],
|
||||
clipped_out: wp.array[wp.vec3],
|
||||
) -> Tuple[int, mat43, mat43]:
|
||||
witness1 = mat43()
|
||||
witness2 = mat43()
|
||||
@@ -1918,13 +1912,13 @@ def _polygon_clip(
|
||||
@wp.func
|
||||
def _set_edge(
|
||||
# In:
|
||||
vert1: wp.array(dtype=wp.vec3),
|
||||
vert2: wp.array(dtype=wp.vec3),
|
||||
vert1: wp.array[wp.vec3],
|
||||
vert2: wp.array[wp.vec3],
|
||||
start: int,
|
||||
end: int,
|
||||
offset: int,
|
||||
# Out:
|
||||
face_out: wp.array(dtype=wp.vec3),
|
||||
face_out: wp.array[wp.vec3],
|
||||
) -> int:
|
||||
face_out[0] = vert1[2 * start + offset]
|
||||
face_out[1] = vert2[end]
|
||||
@@ -1935,19 +1929,19 @@ def _set_edge(
|
||||
@wp.func
|
||||
def multicontact(
|
||||
# In:
|
||||
polygon: wp.array(dtype=wp.vec3),
|
||||
clipped: wp.array(dtype=wp.vec3),
|
||||
plane_normal: wp.array(dtype=wp.vec3),
|
||||
plane_dist: wp.array(dtype=float),
|
||||
idx1: wp.array(dtype=int),
|
||||
idx2: wp.array(dtype=int),
|
||||
n1: wp.array(dtype=wp.vec3),
|
||||
n2: wp.array(dtype=wp.vec3),
|
||||
endvert: wp.array(dtype=wp.vec3),
|
||||
face1: wp.array(dtype=wp.vec3),
|
||||
face2: wp.array(dtype=wp.vec3),
|
||||
epa_vert: wp.array(dtype=wp.vec3),
|
||||
epa_vert_index: wp.array(dtype=int),
|
||||
polygon: wp.array[wp.vec3],
|
||||
clipped: wp.array[wp.vec3],
|
||||
plane_normal: wp.array[wp.vec3],
|
||||
plane_dist: wp.array[float],
|
||||
idx1: wp.array[int],
|
||||
idx2: wp.array[int],
|
||||
n1: wp.array[wp.vec3],
|
||||
n2: wp.array[wp.vec3],
|
||||
endvert: wp.array[wp.vec3],
|
||||
face1: wp.array[wp.vec3],
|
||||
face2: wp.array[wp.vec3],
|
||||
epa_vert: wp.array[wp.vec3],
|
||||
epa_vert_index: wp.array[int],
|
||||
epa_face: int,
|
||||
x1: wp.vec3,
|
||||
x2: wp.vec3,
|
||||
@@ -2215,12 +2209,12 @@ def ccd(
|
||||
geomtype2: int,
|
||||
x_1: wp.vec3,
|
||||
x_2: wp.vec3,
|
||||
vert: wp.array(dtype=wp.vec3),
|
||||
vert_index: wp.array(dtype=int),
|
||||
face: wp.array(dtype=int),
|
||||
face_pr: wp.array(dtype=wp.vec3),
|
||||
face_norm2: wp.array(dtype=float),
|
||||
horizon: wp.array(dtype=int),
|
||||
vert: wp.array[wp.vec3],
|
||||
vert_index: wp.array[int],
|
||||
face: wp.array[int],
|
||||
face_pr: wp.array[wp.vec3],
|
||||
face_norm2: wp.array[float],
|
||||
horizon: wp.array[int],
|
||||
) -> Tuple[float, int, wp.vec3, wp.vec3, int]:
|
||||
"""General convex collision detection via GJK/EPA."""
|
||||
full_margin1 = 0.0
|
||||
|
||||
+248
-248
@@ -295,21 +295,21 @@ def plane_sphere_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contact between a sphere and a plane."""
|
||||
normal = plane.normal
|
||||
@@ -367,21 +367,21 @@ def sphere_sphere_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contact between two spheres."""
|
||||
dist, pos, normal = sphere_sphere(sphere1.pos, sphere1.size[0], sphere2.pos, sphere2.size[0])
|
||||
@@ -438,21 +438,21 @@ def sphere_capsule_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates one contact between a sphere and a capsule."""
|
||||
# capsule axis
|
||||
@@ -512,21 +512,21 @@ def capsule_capsule_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between two capsules."""
|
||||
# capsule axes
|
||||
@@ -598,21 +598,21 @@ def plane_capsule_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a capsule and a plane."""
|
||||
# capsule axis
|
||||
@@ -680,21 +680,21 @@ def plane_ellipsoid_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between an ellipsoid and a plane."""
|
||||
dist, pos, normal = plane_ellipsoid(plane.normal, plane.pos, ellipsoid.pos, ellipsoid.rot, ellipsoid.size)
|
||||
@@ -751,21 +751,21 @@ def plane_box_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a box and a plane."""
|
||||
dist, pos, normal = plane_box(plane.normal, plane.pos, box.pos, box.rot, box.size)
|
||||
@@ -824,21 +824,21 @@ def plane_convex_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a plane and a convex object."""
|
||||
dist, pos, normal = plane_convex(plane.normal, plane.pos, convex)
|
||||
@@ -897,21 +897,21 @@ def sphere_cylinder_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a sphere and a cylinder."""
|
||||
# cylinder axis
|
||||
@@ -978,21 +978,21 @@ def plane_cylinder_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a cylinder and a plane."""
|
||||
# cylinder axis
|
||||
@@ -1061,21 +1061,21 @@ def sphere_box_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
dist, pos, normal = sphere_box(sphere.pos, sphere.size[0], box.pos, box.rot, box.size)
|
||||
|
||||
@@ -1131,21 +1131,21 @@ def capsule_box_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between a capsule and a box."""
|
||||
# Extract capsule axis
|
||||
@@ -1216,21 +1216,21 @@ def box_box_wrapper(
|
||||
geoms: wp.vec2i,
|
||||
pairid: wp.vec2i,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
"""Calculates contacts between two boxes."""
|
||||
# Call the core function to get contact geometry
|
||||
@@ -1302,63 +1302,63 @@ def _primitive_narrowphase(primitive_collisions_types, primitive_collisions_func
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def primitive_narrowphase(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
pair_solimp: wp.array2d(dtype=vec5),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_friction: wp.array2d(dtype=vec5),
|
||||
geom_type: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_gap: wp.array2d[float],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
pair_dim: wp.array[int],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
pair_solimp: wp.array2d[vec5],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_friction: wp.array2d[vec5],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
naconmax_in: int,
|
||||
ncollision_in: wp.array(dtype=int),
|
||||
ncollision_in: wp.array[int],
|
||||
# In:
|
||||
collision_pair_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_in: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_in: wp.array(dtype=int),
|
||||
collision_pair_in: wp.array[wp.vec2i],
|
||||
collision_pairid_in: wp.array[wp.vec2i],
|
||||
collision_worldid_in: wp.array[int],
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
tid = wp.tid()
|
||||
|
||||
|
||||
+101
-81
@@ -54,9 +54,9 @@ class AABB:
|
||||
class VolumeData:
|
||||
center: wp.vec3
|
||||
half_size: wp.vec3
|
||||
oct_aabb: wp.array2d(dtype=wp.vec3)
|
||||
oct_child: wp.array(dtype=vec8i)
|
||||
oct_coeff: wp.array(dtype=vec8)
|
||||
oct_aabb: wp.array2d[wp.vec3]
|
||||
oct_child: wp.array[vec8i]
|
||||
oct_coeff: wp.array[vec8]
|
||||
root: int = 0
|
||||
valid: bool = False
|
||||
|
||||
@@ -64,10 +64,10 @@ class VolumeData:
|
||||
@wp.struct
|
||||
class MeshData:
|
||||
nmeshface: int
|
||||
mesh_vertadr: wp.array(dtype=int)
|
||||
mesh_vert: wp.array(dtype=wp.vec3)
|
||||
mesh_faceadr: wp.array(dtype=int)
|
||||
mesh_face: wp.array(dtype=wp.vec3i)
|
||||
mesh_vertadr: wp.array[int]
|
||||
mesh_vert: wp.array[wp.vec3]
|
||||
mesh_faceadr: wp.array[int]
|
||||
mesh_face: wp.array[wp.vec3i]
|
||||
data_id: int
|
||||
pos: wp.vec3
|
||||
mat: wp.mat33
|
||||
@@ -80,12 +80,12 @@ class MeshData:
|
||||
@wp.func
|
||||
def get_sdf_params(
|
||||
# Model:
|
||||
oct_child: wp.array(dtype=vec8i),
|
||||
oct_aabb: wp.array2d(dtype=wp.vec3),
|
||||
oct_coeff: wp.array(dtype=vec8),
|
||||
mesh_octadr: wp.array(dtype=int),
|
||||
plugin: wp.array(dtype=int),
|
||||
plugin_attr: wp.array(dtype=vec_pluginattr),
|
||||
oct_child: wp.array[vec8i],
|
||||
oct_aabb: wp.array2d[wp.vec3],
|
||||
oct_coeff: wp.array[vec8],
|
||||
mesh_octadr: wp.array[int],
|
||||
plugin: wp.array[int],
|
||||
plugin_attr: wp.array[vec_pluginattr],
|
||||
# In:
|
||||
g_type: int,
|
||||
g_size: wp.vec3,
|
||||
@@ -252,7 +252,7 @@ def user_sdf_grad(p: wp.vec3, attr: vec_pluginattr, sdf_type: int) -> wp.vec3:
|
||||
|
||||
@wp.func
|
||||
def find_oct(
|
||||
oct_child: wp.array(dtype=vec8i), oct_aabb: wp.array2d(dtype=wp.vec3), p: wp.vec3, grad: bool, root: int
|
||||
oct_child: wp.array[vec8i], oct_aabb: wp.array2d[wp.vec3], p: wp.vec3, grad: bool, root: int
|
||||
) -> Tuple[int, Tuple[vec8, vec8, vec8]]:
|
||||
stack = root
|
||||
niter = int(100)
|
||||
@@ -665,75 +665,75 @@ def gradient_descent(
|
||||
def _sdf_narrowphase(
|
||||
# Model:
|
||||
nmeshface: int,
|
||||
oct_child: wp.array(dtype=vec8i),
|
||||
oct_aabb: wp.array2d(dtype=wp.vec3),
|
||||
oct_coeff: wp.array(dtype=vec8),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_solimp: wp.array2d(dtype=vec5),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_aabb: wp.array3d(dtype=wp.vec3),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mesh_octadr: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_face: wp.array(dtype=wp.vec3i),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
pair_solimp: wp.array2d(dtype=vec5),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_friction: wp.array2d(dtype=vec5),
|
||||
plugin: wp.array(dtype=int),
|
||||
plugin_attr: wp.array(dtype=vec_pluginattr),
|
||||
geom_plugin_index: wp.array(dtype=int),
|
||||
oct_child: wp.array[vec8i],
|
||||
oct_aabb: wp.array2d[wp.vec3],
|
||||
oct_coeff: wp.array[vec8],
|
||||
geom_type: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_solimp: wp.array2d[vec5],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_aabb: wp.array3d[wp.vec3],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_gap: wp.array2d[float],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mesh_octadr: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_face: wp.array[wp.vec3i],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
pair_dim: wp.array[int],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
pair_solimp: wp.array2d[vec5],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_friction: wp.array2d[vec5],
|
||||
plugin: wp.array[int],
|
||||
plugin_attr: wp.array[vec_pluginattr],
|
||||
geom_plugin_index: wp.array[int],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
naconmax_in: int,
|
||||
ncollision_in: wp.array(dtype=int),
|
||||
ncollision_in: wp.array[int],
|
||||
# In:
|
||||
collision_pair_in: wp.array(dtype=wp.vec2i),
|
||||
collision_pairid_in: wp.array(dtype=wp.vec2i),
|
||||
collision_worldid_in: wp.array(dtype=int),
|
||||
collision_pair_in: wp.array[wp.vec2i],
|
||||
collision_pairid_in: wp.array[wp.vec2i],
|
||||
collision_worldid_in: wp.array[int],
|
||||
sdf_initpoints: int,
|
||||
sdf_iterations: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
i, contact_tid = wp.tid()
|
||||
if i >= sdf_initpoints:
|
||||
@@ -817,12 +817,32 @@ def _sdf_narrowphase(
|
||||
pos1 = geom1.pos
|
||||
rot1 = geom1.rot
|
||||
|
||||
dataid_setid = worldid % geom_dataid.shape[0]
|
||||
|
||||
attr1, g1_plugin_id, volume_data1, mesh_data1 = get_sdf_params(
|
||||
oct_child, oct_aabb, oct_coeff, mesh_octadr, plugin, plugin_attr, type1, geom1.size, g1_plugin, geom_dataid[g1]
|
||||
oct_child,
|
||||
oct_aabb,
|
||||
oct_coeff,
|
||||
mesh_octadr,
|
||||
plugin,
|
||||
plugin_attr,
|
||||
type1,
|
||||
geom1.size,
|
||||
g1_plugin,
|
||||
geom_dataid[dataid_setid, g1],
|
||||
)
|
||||
|
||||
attr2, g2_plugin_id, volume_data2, mesh_data2 = get_sdf_params(
|
||||
oct_child, oct_aabb, oct_coeff, mesh_octadr, plugin, plugin_attr, type2, geom2.size, g2_plugin, geom_dataid[g2]
|
||||
oct_child,
|
||||
oct_aabb,
|
||||
oct_coeff,
|
||||
mesh_octadr,
|
||||
plugin,
|
||||
plugin_attr,
|
||||
type2,
|
||||
geom2.size,
|
||||
g2_plugin,
|
||||
geom_dataid[dataid_setid, g2],
|
||||
)
|
||||
|
||||
mesh_data1.nmeshface = nmeshface
|
||||
@@ -830,7 +850,7 @@ def _sdf_narrowphase(
|
||||
mesh_data1.mesh_vert = mesh_vert
|
||||
mesh_data1.mesh_faceadr = mesh_faceadr
|
||||
mesh_data1.mesh_face = mesh_face
|
||||
mesh_data1.data_id = geom_dataid[g1]
|
||||
mesh_data1.data_id = geom_dataid[dataid_setid, g1]
|
||||
mesh_data1.pos = geom1.pos
|
||||
mesh_data1.mat = geom1.rot
|
||||
mesh_data1.size = geom1.size
|
||||
@@ -843,7 +863,7 @@ def _sdf_narrowphase(
|
||||
mesh_data2.mesh_vert = mesh_vert
|
||||
mesh_data2.mesh_faceadr = mesh_faceadr
|
||||
mesh_data2.mesh_face = mesh_face
|
||||
mesh_data2.data_id = geom_dataid[g2]
|
||||
mesh_data2.data_id = geom_dataid[dataid_setid, g2]
|
||||
mesh_data2.pos = geom2.pos
|
||||
mesh_data2.mat = geom2.rot
|
||||
mesh_data2.size = geom2.size
|
||||
|
||||
+400
-400
@@ -32,12 +32,12 @@ wp.set_module_options({"enable_backward": False})
|
||||
@wp.kernel
|
||||
def _zero_constraint_counts(
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nf_out: wp.array(dtype=int),
|
||||
nl_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
ne_out: wp.array[int],
|
||||
nf_out: wp.array[int],
|
||||
nl_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
@@ -68,14 +68,14 @@ def _efc_row(
|
||||
type: int,
|
||||
id: int,
|
||||
# Out:
|
||||
type_out: wp.array2d(dtype=int),
|
||||
id_out: wp.array2d(dtype=int),
|
||||
pos_out: wp.array2d(dtype=float),
|
||||
margin_out: wp.array2d(dtype=float),
|
||||
D_out: wp.array2d(dtype=float),
|
||||
vel_out: wp.array2d(dtype=float),
|
||||
aref_out: wp.array2d(dtype=float),
|
||||
frictionloss_out: wp.array2d(dtype=float),
|
||||
type_out: wp.array2d[int],
|
||||
id_out: wp.array2d[int],
|
||||
pos_out: wp.array2d[float],
|
||||
margin_out: wp.array2d[float],
|
||||
D_out: wp.array2d[float],
|
||||
vel_out: wp.array2d[float],
|
||||
aref_out: wp.array2d[float],
|
||||
frictionloss_out: wp.array2d[float],
|
||||
):
|
||||
# calculate kbi
|
||||
timeconst = solref[0]
|
||||
@@ -126,52 +126,52 @@ def _equality_connect(
|
||||
# Model:
|
||||
nv: int,
|
||||
nsite: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_weldid: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_invweight0: wp.array2d(dtype=wp.vec2),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_parentid: wp.array(dtype=int),
|
||||
site_bodyid: wp.array(dtype=int),
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_obj2id: wp.array(dtype=int),
|
||||
eq_objtype: wp.array(dtype=int),
|
||||
eq_solref: wp.array2d(dtype=wp.vec2),
|
||||
eq_solimp: wp.array2d(dtype=vec5),
|
||||
eq_data: wp.array2d(dtype=vec11),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_weldid: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
body_dofadr: wp.array[int],
|
||||
body_invweight0: wp.array2d[wp.vec2],
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_parentid: wp.array[int],
|
||||
site_bodyid: wp.array[int],
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_obj2id: wp.array[int],
|
||||
eq_objtype: wp.array[int],
|
||||
eq_solref: wp.array2d[wp.vec2],
|
||||
eq_solimp: wp.array2d[vec5],
|
||||
eq_data: wp.array2d[vec11],
|
||||
is_sparse: bool,
|
||||
eq_connect_adr: wp.array(dtype=int),
|
||||
eq_connect_adr: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
eq_active_in: wp.array2d(dtype=bool),
|
||||
xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
site_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
qvel_in: wp.array2d[float],
|
||||
eq_active_in: wp.array2d[bool],
|
||||
xpos_in: wp.array2d[wp.vec3],
|
||||
xmat_in: wp.array2d[wp.mat33],
|
||||
site_xpos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
ne_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
"""Calculates constraint rows for connect equality constraints."""
|
||||
worldid, eqconnectid = wp.tid()
|
||||
@@ -368,42 +368,42 @@ def _equality_connect(
|
||||
def _equality_joint(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
qpos0: wp.array2d(dtype=float),
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
dof_invweight0: wp.array2d(dtype=float),
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_obj2id: wp.array(dtype=int),
|
||||
eq_solref: wp.array2d(dtype=wp.vec2),
|
||||
eq_solimp: wp.array2d(dtype=vec5),
|
||||
eq_data: wp.array2d(dtype=vec11),
|
||||
qpos0: wp.array2d[float],
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
dof_invweight0: wp.array2d[float],
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_obj2id: wp.array[int],
|
||||
eq_solref: wp.array2d[wp.vec2],
|
||||
eq_solimp: wp.array2d[vec5],
|
||||
eq_data: wp.array2d[vec11],
|
||||
is_sparse: bool,
|
||||
eq_jnt_adr: wp.array(dtype=int),
|
||||
eq_jnt_adr: wp.array[int],
|
||||
# Data in:
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
eq_active_in: wp.array2d(dtype=bool),
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
eq_active_in: wp.array2d[bool],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
ne_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, eqjntid = wp.tid()
|
||||
eqid = eq_jnt_adr[eqjntid]
|
||||
@@ -499,44 +499,44 @@ def _equality_joint(
|
||||
def _equality_tendon(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_obj2id: wp.array(dtype=int),
|
||||
eq_solref: wp.array2d(dtype=wp.vec2),
|
||||
eq_solimp: wp.array2d(dtype=vec5),
|
||||
eq_data: wp.array2d(dtype=vec11),
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
tendon_length0: wp.array2d(dtype=float),
|
||||
tendon_invweight0: wp.array2d(dtype=float),
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_obj2id: wp.array[int],
|
||||
eq_solref: wp.array2d[wp.vec2],
|
||||
eq_solimp: wp.array2d[vec5],
|
||||
eq_data: wp.array2d[vec11],
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
tendon_length0: wp.array2d[float],
|
||||
tendon_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
eq_ten_adr: wp.array(dtype=int),
|
||||
eq_ten_adr: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
eq_active_in: wp.array2d(dtype=bool),
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
ten_length_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
eq_active_in: wp.array2d[bool],
|
||||
ten_J_in: wp.array2d[float],
|
||||
ten_length_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
ne_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, eqtenid = wp.tid()
|
||||
eqid = eq_ten_adr[eqtenid]
|
||||
@@ -679,42 +679,42 @@ def _equality_flex(is_sparse: bool):
|
||||
def kernel(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
flex_edgeadr: wp.array(dtype=int),
|
||||
flex_edgenum: wp.array(dtype=int),
|
||||
flexedge_length0: wp.array(dtype=float),
|
||||
flexedge_invweight0: wp.array(dtype=float),
|
||||
flexedge_J_rownnz: wp.array(dtype=int),
|
||||
flexedge_J_rowadr: wp.array(dtype=int),
|
||||
flexedge_J_colind: wp.array(dtype=int),
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_solref: wp.array2d(dtype=wp.vec2),
|
||||
eq_solimp: wp.array2d(dtype=vec5),
|
||||
eq_flex_adr: wp.array(dtype=int),
|
||||
flex_edgeadr: wp.array[int],
|
||||
flex_edgenum: wp.array[int],
|
||||
flexedge_length0: wp.array[float],
|
||||
flexedge_invweight0: wp.array[float],
|
||||
flexedge_J_rownnz: wp.array[int],
|
||||
flexedge_J_rowadr: wp.array[int],
|
||||
flexedge_J_colind: wp.array[int],
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_solref: wp.array2d[wp.vec2],
|
||||
eq_solimp: wp.array2d[vec5],
|
||||
eq_flex_adr: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
flexedge_J_in: wp.array2d(dtype=float),
|
||||
flexedge_length_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
flexedge_J_in: wp.array2d[float],
|
||||
flexedge_length_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
ne_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, eqflexid, edgeid = wp.tid()
|
||||
eqid = eq_flex_adr[eqflexid]
|
||||
@@ -794,54 +794,54 @@ def _equality_weld(
|
||||
# Model:
|
||||
nv: int,
|
||||
nsite: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_weldid: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_invweight0: wp.array2d(dtype=wp.vec2),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_parentid: wp.array(dtype=int),
|
||||
site_bodyid: wp.array(dtype=int),
|
||||
site_quat: wp.array2d(dtype=wp.quat),
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_obj2id: wp.array(dtype=int),
|
||||
eq_objtype: wp.array(dtype=int),
|
||||
eq_solref: wp.array2d(dtype=wp.vec2),
|
||||
eq_solimp: wp.array2d(dtype=vec5),
|
||||
eq_data: wp.array2d(dtype=vec11),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_weldid: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
body_dofadr: wp.array[int],
|
||||
body_invweight0: wp.array2d[wp.vec2],
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_parentid: wp.array[int],
|
||||
site_bodyid: wp.array[int],
|
||||
site_quat: wp.array2d[wp.quat],
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_obj2id: wp.array[int],
|
||||
eq_objtype: wp.array[int],
|
||||
eq_solref: wp.array2d[wp.vec2],
|
||||
eq_solimp: wp.array2d[vec5],
|
||||
eq_data: wp.array2d[vec11],
|
||||
is_sparse: bool,
|
||||
eq_wld_adr: wp.array(dtype=int),
|
||||
eq_wld_adr: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
eq_active_in: wp.array2d(dtype=bool),
|
||||
xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
xquat_in: wp.array2d(dtype=wp.quat),
|
||||
xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
site_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
qvel_in: wp.array2d[float],
|
||||
eq_active_in: wp.array2d[bool],
|
||||
xpos_in: wp.array2d[wp.vec3],
|
||||
xquat_in: wp.array2d[wp.quat],
|
||||
xmat_in: wp.array2d[wp.mat33],
|
||||
site_xpos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
ne_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
ne_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, eqweldid = wp.tid()
|
||||
eqid = eq_wld_adr[eqweldid]
|
||||
@@ -1114,34 +1114,34 @@ def _equality_weld(
|
||||
def _friction_dof(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
dof_solref: wp.array2d(dtype=wp.vec2),
|
||||
dof_solimp: wp.array2d(dtype=vec5),
|
||||
dof_frictionloss: wp.array2d(dtype=float),
|
||||
dof_invweight0: wp.array2d(dtype=float),
|
||||
dof_solref: wp.array2d[wp.vec2],
|
||||
dof_solimp: wp.array2d[vec5],
|
||||
dof_frictionloss: wp.array2d[float],
|
||||
dof_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
nf_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nf_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
|
||||
@@ -1204,38 +1204,38 @@ def _friction_dof(
|
||||
def _friction_tendon(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
tendon_solref_fri: wp.array2d(dtype=wp.vec2),
|
||||
tendon_solimp_fri: wp.array2d(dtype=vec5),
|
||||
tendon_frictionloss: wp.array2d(dtype=float),
|
||||
tendon_invweight0: wp.array2d(dtype=float),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
tendon_solref_fri: wp.array2d[wp.vec2],
|
||||
tendon_solimp_fri: wp.array2d[vec5],
|
||||
tendon_frictionloss: wp.array2d[float],
|
||||
tendon_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
ten_J_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
nf_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nf_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, tenid = wp.tid()
|
||||
|
||||
@@ -1317,39 +1317,39 @@ def _friction_tendon(
|
||||
def _limit_slide_hinge(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
jnt_solref: wp.array2d(dtype=wp.vec2),
|
||||
jnt_solimp: wp.array2d(dtype=vec5),
|
||||
jnt_range: wp.array2d(dtype=wp.vec2),
|
||||
jnt_margin: wp.array2d(dtype=float),
|
||||
dof_invweight0: wp.array2d(dtype=float),
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
jnt_solref: wp.array2d[wp.vec2],
|
||||
jnt_solimp: wp.array2d[vec5],
|
||||
jnt_range: wp.array2d[wp.vec2],
|
||||
jnt_margin: wp.array2d[float],
|
||||
dof_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
jnt_limited_slide_hinge_adr: wp.array(dtype=int),
|
||||
jnt_limited_slide_hinge_adr: wp.array[int],
|
||||
# Data in:
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
nl_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nl_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, jntlimitedid = wp.tid()
|
||||
jntid = jnt_limited_slide_hinge_adr[jntlimitedid]
|
||||
@@ -1422,39 +1422,39 @@ def _limit_slide_hinge(
|
||||
def _limit_ball(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
jnt_solref: wp.array2d(dtype=wp.vec2),
|
||||
jnt_solimp: wp.array2d(dtype=vec5),
|
||||
jnt_range: wp.array2d(dtype=wp.vec2),
|
||||
jnt_margin: wp.array2d(dtype=float),
|
||||
dof_invweight0: wp.array2d(dtype=float),
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
jnt_solref: wp.array2d[wp.vec2],
|
||||
jnt_solimp: wp.array2d[vec5],
|
||||
jnt_range: wp.array2d[wp.vec2],
|
||||
jnt_margin: wp.array2d[float],
|
||||
dof_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
jnt_limited_ball_adr: wp.array(dtype=int),
|
||||
jnt_limited_ball_adr: wp.array[int],
|
||||
# Data in:
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
nl_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nl_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, jntlimitedid = wp.tid()
|
||||
jntid = jnt_limited_ball_adr[jntlimitedid]
|
||||
@@ -1547,41 +1547,41 @@ def _limit_ball(
|
||||
def _limit_tendon(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
tendon_solref_lim: wp.array2d(dtype=wp.vec2),
|
||||
tendon_solimp_lim: wp.array2d(dtype=vec5),
|
||||
tendon_range: wp.array2d(dtype=wp.vec2),
|
||||
tendon_margin: wp.array2d(dtype=float),
|
||||
tendon_invweight0: wp.array2d(dtype=float),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
tendon_solref_lim: wp.array2d[wp.vec2],
|
||||
tendon_solimp_lim: wp.array2d[vec5],
|
||||
tendon_range: wp.array2d[wp.vec2],
|
||||
tendon_margin: wp.array2d[float],
|
||||
tendon_invweight0: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
tendon_limited_adr: wp.array(dtype=int),
|
||||
tendon_limited_adr: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
ten_length_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
ten_J_in: wp.array2d[float],
|
||||
ten_length_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
# Data out:
|
||||
nl_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nl_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
worldid, tenlimitedid = wp.tid()
|
||||
tenid = tendon_limited_adr[tenlimitedid]
|
||||
@@ -1669,59 +1669,59 @@ def _limit_tendon(
|
||||
def _contact_pyramidal(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
opt_impratio_invsqrt: wp.array(dtype=float),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_weldid: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_invweight0: wp.array2d(dtype=wp.vec2),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_parentid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_vertbodyid: wp.array(dtype=int),
|
||||
opt_impratio_invsqrt: wp.array[float],
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_weldid: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
body_dofadr: wp.array[int],
|
||||
body_invweight0: wp.array2d[wp.vec2],
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_parentid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_vertbodyid: wp.array[int],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
qvel_in: wp.array2d[float],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
nacon_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
# In:
|
||||
dist_in: wp.array(dtype=float),
|
||||
condim_in: wp.array(dtype=int),
|
||||
includemargin_in: wp.array(dtype=float),
|
||||
worldid_in: wp.array(dtype=int),
|
||||
geom_in: wp.array(dtype=wp.vec2i),
|
||||
flex_in: wp.array(dtype=wp.vec2i),
|
||||
vert_in: wp.array(dtype=wp.vec2i),
|
||||
pos_in: wp.array(dtype=wp.vec3),
|
||||
frame_in: wp.array(dtype=wp.mat33),
|
||||
friction_in: wp.array(dtype=vec5),
|
||||
solref_in: wp.array(dtype=wp.vec2),
|
||||
solimp_in: wp.array(dtype=vec5),
|
||||
type_in: wp.array(dtype=int),
|
||||
dist_in: wp.array[float],
|
||||
condim_in: wp.array[int],
|
||||
includemargin_in: wp.array[float],
|
||||
worldid_in: wp.array[int],
|
||||
geom_in: wp.array[wp.vec2i],
|
||||
flex_in: wp.array[wp.vec2i],
|
||||
vert_in: wp.array[wp.vec2i],
|
||||
pos_in: wp.array[wp.vec3],
|
||||
frame_in: wp.array[wp.mat33],
|
||||
friction_in: wp.array[vec5],
|
||||
solref_in: wp.array[wp.vec2],
|
||||
solimp_in: wp.array[vec5],
|
||||
type_in: wp.array[int],
|
||||
# Data out:
|
||||
nefc_out: wp.array(dtype=int),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nefc_out: wp.array[int],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
conid, dimid = wp.tid()
|
||||
|
||||
@@ -1940,60 +1940,60 @@ def _contact_pyramidal(
|
||||
def _contact_elliptic(
|
||||
# Model:
|
||||
nv: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
opt_impratio_invsqrt: wp.array(dtype=float),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_weldid: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_invweight0: wp.array2d(dtype=wp.vec2),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_parentid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_vertbodyid: wp.array(dtype=int),
|
||||
opt_impratio_invsqrt: wp.array[float],
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_weldid: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
body_dofadr: wp.array[int],
|
||||
body_invweight0: wp.array2d[wp.vec2],
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_parentid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_vertbodyid: wp.array[int],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
qvel_in: wp.array2d[float],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
nacon_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
# In:
|
||||
dist_in: wp.array(dtype=float),
|
||||
condim_in: wp.array(dtype=int),
|
||||
includemargin_in: wp.array(dtype=float),
|
||||
worldid_in: wp.array(dtype=int),
|
||||
geom_in: wp.array(dtype=wp.vec2i),
|
||||
flex_in: wp.array(dtype=wp.vec2i),
|
||||
vert_in: wp.array(dtype=wp.vec2i),
|
||||
pos_in: wp.array(dtype=wp.vec3),
|
||||
frame_in: wp.array(dtype=wp.mat33),
|
||||
friction_in: wp.array(dtype=vec5),
|
||||
solref_in: wp.array(dtype=wp.vec2),
|
||||
solreffriction_in: wp.array(dtype=wp.vec2),
|
||||
solimp_in: wp.array(dtype=vec5),
|
||||
type_in: wp.array(dtype=int),
|
||||
dist_in: wp.array[float],
|
||||
condim_in: wp.array[int],
|
||||
includemargin_in: wp.array[float],
|
||||
worldid_in: wp.array[int],
|
||||
geom_in: wp.array[wp.vec2i],
|
||||
flex_in: wp.array[wp.vec2i],
|
||||
vert_in: wp.array[wp.vec2i],
|
||||
pos_in: wp.array[wp.vec3],
|
||||
frame_in: wp.array[wp.mat33],
|
||||
friction_in: wp.array[vec5],
|
||||
solref_in: wp.array[wp.vec2],
|
||||
solreffriction_in: wp.array[wp.vec2],
|
||||
solimp_in: wp.array[vec5],
|
||||
type_in: wp.array[int],
|
||||
# Data out:
|
||||
nefc_out: wp.array(dtype=int),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
efc_type_out: wp.array2d(dtype=int),
|
||||
efc_id_out: wp.array2d(dtype=int),
|
||||
efc_J_rownnz_out: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_out: wp.array2d(dtype=int),
|
||||
efc_J_colind_out: wp.array3d(dtype=int),
|
||||
efc_J_out: wp.array3d(dtype=float),
|
||||
efc_pos_out: wp.array2d(dtype=float),
|
||||
efc_margin_out: wp.array2d(dtype=float),
|
||||
efc_D_out: wp.array2d(dtype=float),
|
||||
efc_vel_out: wp.array2d(dtype=float),
|
||||
efc_aref_out: wp.array2d(dtype=float),
|
||||
efc_frictionloss_out: wp.array2d(dtype=float),
|
||||
nefc_out: wp.array[int],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
efc_type_out: wp.array2d[int],
|
||||
efc_id_out: wp.array2d[int],
|
||||
efc_J_rownnz_out: wp.array2d[int],
|
||||
efc_J_rowadr_out: wp.array2d[int],
|
||||
efc_J_colind_out: wp.array3d[int],
|
||||
efc_J_out: wp.array3d[float],
|
||||
efc_pos_out: wp.array2d[float],
|
||||
efc_margin_out: wp.array2d[float],
|
||||
efc_D_out: wp.array2d[float],
|
||||
efc_vel_out: wp.array2d[float],
|
||||
efc_aref_out: wp.array2d[float],
|
||||
efc_frictionloss_out: wp.array2d[float],
|
||||
# Out:
|
||||
efc_nnz_out: wp.array(dtype=int),
|
||||
efc_nnz_out: wp.array[int],
|
||||
):
|
||||
conid, dimid = wp.tid()
|
||||
|
||||
|
||||
+53
-53
@@ -31,27 +31,27 @@ wp.set_module_options({"enable_backward": False})
|
||||
@wp.kernel
|
||||
def _qderiv_actuator_passive_vel(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
actuator_dyntype: wp.array(dtype=int),
|
||||
actuator_gaintype: wp.array(dtype=int),
|
||||
actuator_biastype: wp.array(dtype=int),
|
||||
actuator_actadr: wp.array(dtype=int),
|
||||
actuator_actnum: wp.array(dtype=int),
|
||||
actuator_forcelimited: wp.array(dtype=bool),
|
||||
actuator_actlimited: wp.array(dtype=bool),
|
||||
actuator_dynprm: wp.array2d(dtype=vec10f),
|
||||
actuator_gainprm: wp.array2d(dtype=vec10f),
|
||||
actuator_biasprm: wp.array2d(dtype=vec10f),
|
||||
actuator_actearly: wp.array(dtype=bool),
|
||||
actuator_forcerange: wp.array2d(dtype=wp.vec2),
|
||||
actuator_actrange: wp.array2d(dtype=wp.vec2),
|
||||
opt_timestep: wp.array[float],
|
||||
actuator_dyntype: wp.array[int],
|
||||
actuator_gaintype: wp.array[int],
|
||||
actuator_biastype: wp.array[int],
|
||||
actuator_actadr: wp.array[int],
|
||||
actuator_actnum: wp.array[int],
|
||||
actuator_forcelimited: wp.array[bool],
|
||||
actuator_actlimited: wp.array[bool],
|
||||
actuator_dynprm: wp.array2d[vec10f],
|
||||
actuator_gainprm: wp.array2d[vec10f],
|
||||
actuator_biasprm: wp.array2d[vec10f],
|
||||
actuator_actearly: wp.array[bool],
|
||||
actuator_forcerange: wp.array2d[wp.vec2],
|
||||
actuator_actrange: wp.array2d[wp.vec2],
|
||||
# Data in:
|
||||
act_in: wp.array2d(dtype=float),
|
||||
ctrl_in: wp.array2d(dtype=float),
|
||||
act_dot_in: wp.array2d(dtype=float),
|
||||
actuator_force_in: wp.array2d(dtype=float),
|
||||
act_in: wp.array2d[float],
|
||||
ctrl_in: wp.array2d[float],
|
||||
act_dot_in: wp.array2d[float],
|
||||
actuator_force_in: wp.array2d[float],
|
||||
# Out:
|
||||
vel_out: wp.array2d(dtype=float),
|
||||
vel_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -121,16 +121,16 @@ def _qderiv_actuator_passive_actuation_dense(
|
||||
# Model:
|
||||
nu: int,
|
||||
# Data in:
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
# In:
|
||||
vel_in: wp.array2d(dtype=float),
|
||||
qMi: wp.array(dtype=int),
|
||||
qMj: wp.array(dtype=int),
|
||||
vel_in: wp.array2d[float],
|
||||
qMi: wp.array[int],
|
||||
qMj: wp.array[int],
|
||||
# Out:
|
||||
qDeriv_out: wp.array3d(dtype=float),
|
||||
qDeriv_out: wp.array3d[float],
|
||||
):
|
||||
worldid, elemid = wp.tid()
|
||||
|
||||
@@ -171,18 +171,18 @@ def _qderiv_actuator_passive_actuation_dense(
|
||||
@wp.kernel
|
||||
def _qderiv_actuator_passive_actuation_sparse(
|
||||
# Model:
|
||||
M_rownnz: wp.array(dtype=int),
|
||||
M_rowadr: wp.array(dtype=int),
|
||||
M_rownnz: wp.array[int],
|
||||
M_rowadr: wp.array[int],
|
||||
# Data in:
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
# In:
|
||||
vel_in: wp.array2d(dtype=float),
|
||||
qMj: wp.array(dtype=int),
|
||||
vel_in: wp.array2d[float],
|
||||
qMj: wp.array[int],
|
||||
# Out:
|
||||
qDeriv_out: wp.array3d(dtype=float),
|
||||
qDeriv_out: wp.array3d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -225,18 +225,18 @@ def _qderiv_actuator_passive_actuation_sparse(
|
||||
@wp.kernel
|
||||
def _qderiv_actuator_passive(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
opt_disableflags: int,
|
||||
dof_damping: wp.array2d(dtype=float),
|
||||
dof_damping: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
qM_in: wp.array3d(dtype=float),
|
||||
qM_in: wp.array3d[float],
|
||||
# In:
|
||||
qMi: wp.array(dtype=int),
|
||||
qMj: wp.array(dtype=int),
|
||||
qDeriv_in: wp.array3d(dtype=float),
|
||||
qMi: wp.array[int],
|
||||
qMj: wp.array[int],
|
||||
qDeriv_in: wp.array3d[float],
|
||||
# Out:
|
||||
qDeriv_out: wp.array3d(dtype=float),
|
||||
qDeriv_out: wp.array3d[float],
|
||||
):
|
||||
worldid, elemid = wp.tid()
|
||||
|
||||
@@ -267,19 +267,19 @@ def _qderiv_actuator_passive(
|
||||
def _qderiv_tendon_damping(
|
||||
# Model:
|
||||
ntendon: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
tendon_damping: wp.array2d(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
tendon_damping: wp.array2d[float],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d[float],
|
||||
# In:
|
||||
qMi: wp.array(dtype=int),
|
||||
qMj: wp.array(dtype=int),
|
||||
qMi: wp.array[int],
|
||||
qMj: wp.array[int],
|
||||
# Out:
|
||||
qDeriv_out: wp.array3d(dtype=float),
|
||||
qDeriv_out: wp.array3d[float],
|
||||
):
|
||||
worldid, elemid = wp.tid()
|
||||
dofiid = qMi[elemid]
|
||||
@@ -318,7 +318,7 @@ def _qderiv_tendon_damping(
|
||||
|
||||
|
||||
@event_scope
|
||||
def deriv_smooth_vel(m: Model, d: Data, out: wp.array2d(dtype=float)):
|
||||
def deriv_smooth_vel(m: Model, d: Data, out: wp.array2d[float]):
|
||||
"""Analytical derivative of smooth forces w.r.t. velocities.
|
||||
|
||||
Args:
|
||||
|
||||
+113
-113
@@ -51,17 +51,17 @@ wp.set_module_options({"enable_backward": False})
|
||||
@wp.kernel
|
||||
def _next_position(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
opt_timestep: wp.array[float],
|
||||
jnt_type: wp.array[int],
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
# Data in:
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
# In:
|
||||
qvel_scale_in: float,
|
||||
# Data out:
|
||||
qpos_out: wp.array2d(dtype=float),
|
||||
qpos_out: wp.array2d[float],
|
||||
):
|
||||
worldid, jntid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -115,14 +115,14 @@ def _next_position(
|
||||
@wp.kernel
|
||||
def _next_velocity(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qacc_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
qacc_in: wp.array2d[float],
|
||||
# In:
|
||||
qacc_scale_in: float,
|
||||
# Data out:
|
||||
qvel_out: wp.array2d(dtype=float),
|
||||
qvel_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -132,21 +132,21 @@ def _next_velocity(
|
||||
@wp.kernel
|
||||
def _next_activation(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
actuator_dyntype: wp.array(dtype=int),
|
||||
actuator_actadr: wp.array(dtype=int),
|
||||
actuator_actnum: wp.array(dtype=int),
|
||||
actuator_actlimited: wp.array(dtype=bool),
|
||||
actuator_dynprm: wp.array2d(dtype=vec10f),
|
||||
actuator_actrange: wp.array2d(dtype=wp.vec2),
|
||||
opt_timestep: wp.array[float],
|
||||
actuator_dyntype: wp.array[int],
|
||||
actuator_actadr: wp.array[int],
|
||||
actuator_actnum: wp.array[int],
|
||||
actuator_actlimited: wp.array[bool],
|
||||
actuator_dynprm: wp.array2d[vec10f],
|
||||
actuator_actrange: wp.array2d[wp.vec2],
|
||||
# Data in:
|
||||
act_in: wp.array2d(dtype=float),
|
||||
act_dot_in: wp.array2d(dtype=float),
|
||||
act_in: wp.array2d[float],
|
||||
act_dot_in: wp.array2d[float],
|
||||
# In:
|
||||
act_dot_scale: float,
|
||||
limit: bool,
|
||||
# Data out:
|
||||
act_out: wp.array2d(dtype=float),
|
||||
act_out: wp.array2d[float],
|
||||
):
|
||||
worldid, uid = wp.tid()
|
||||
opt_timestep_id = worldid % opt_timestep.shape[0]
|
||||
@@ -171,21 +171,21 @@ def _next_activation(
|
||||
@wp.kernel
|
||||
def _next_time(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
is_sparse: bool,
|
||||
# Data in:
|
||||
nefc_in: wp.array(dtype=int),
|
||||
time_in: wp.array(dtype=float),
|
||||
efc_J_rownnz_in: wp.array2d(dtype=int),
|
||||
efc_J_rowadr_in: wp.array2d(dtype=int),
|
||||
nefc_in: wp.array[int],
|
||||
time_in: wp.array[float],
|
||||
efc_J_rownnz_in: wp.array2d[int],
|
||||
efc_J_rowadr_in: wp.array2d[int],
|
||||
nworld_in: int,
|
||||
naconmax_in: int,
|
||||
njmax_in: int,
|
||||
njmax_nnz_in: int,
|
||||
nacon_in: wp.array(dtype=int),
|
||||
ncollision_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
ncollision_in: wp.array[int],
|
||||
# Data out:
|
||||
time_out: wp.array(dtype=float),
|
||||
time_out: wp.array[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
time_out[worldid] = time_in[worldid] + opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -277,11 +277,11 @@ def _advance(m: Model, d: Data, qacc: wp.array, qvel: Optional[wp.array] = None)
|
||||
@wp.kernel
|
||||
def _euler_damp_qfrc_sparse(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
dof_Madr: wp.array(dtype=int),
|
||||
dof_damping: wp.array2d(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
dof_Madr: wp.array[int],
|
||||
dof_damping: wp.array2d[float],
|
||||
# Out:
|
||||
qM_integration_out: wp.array3d(dtype=float),
|
||||
qM_integration_out: wp.array3d[float],
|
||||
):
|
||||
worldid, tid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -295,15 +295,15 @@ def _tile_euler_dense(tile: TileSet):
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def euler_dense(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
dof_damping: wp.array2d(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
dof_damping: wp.array2d[float],
|
||||
# Data in:
|
||||
qM_in: wp.array3d(dtype=float),
|
||||
efc_Ma_in: wp.array2d(dtype=float),
|
||||
qM_in: wp.array3d[float],
|
||||
efc_Ma_in: wp.array2d[float],
|
||||
# In:
|
||||
adr_in: wp.array(dtype=int),
|
||||
adr_in: wp.array[int],
|
||||
# Data out:
|
||||
qacc_out: wp.array2d(dtype=float),
|
||||
qacc_out: wp.array2d[float],
|
||||
):
|
||||
worldid, nodeid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -358,8 +358,8 @@ def _rk_perturb_state(
|
||||
m: Model,
|
||||
d: Data,
|
||||
scale: float,
|
||||
qpos_t0: wp.array2d(dtype=float),
|
||||
qvel_t0: wp.array2d(dtype=float),
|
||||
qpos_t0: wp.array2d[float],
|
||||
qvel_t0: wp.array2d[float],
|
||||
act_t0: Optional[wp.array] = None,
|
||||
):
|
||||
# position
|
||||
@@ -403,13 +403,13 @@ def _rk_perturb_state(
|
||||
@wp.kernel
|
||||
def _rk_accumulate_velocity_acceleration(
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qacc_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
qacc_in: wp.array2d[float],
|
||||
# In:
|
||||
scale: float,
|
||||
# Data out:
|
||||
qvel_out: wp.array2d(dtype=float),
|
||||
qacc_out: wp.array2d(dtype=float),
|
||||
qvel_out: wp.array2d[float],
|
||||
qacc_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
qvel_out[worldid, dofid] += scale * qvel_in[worldid, dofid]
|
||||
@@ -419,11 +419,11 @@ def _rk_accumulate_velocity_acceleration(
|
||||
@wp.kernel
|
||||
def _rk_accumulate_activation_velocity(
|
||||
# Data in:
|
||||
act_dot_in: wp.array2d(dtype=float),
|
||||
act_dot_in: wp.array2d[float],
|
||||
# In:
|
||||
scale: float,
|
||||
# Data out:
|
||||
act_dot_out: wp.array2d(dtype=float),
|
||||
act_dot_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
act_dot_out[worldid, actid] += scale * act_dot_in[worldid, actid]
|
||||
@@ -433,8 +433,8 @@ def _rk_accumulate(
|
||||
m: Model,
|
||||
d: Data,
|
||||
scale: float,
|
||||
qvel_rk: wp.array2d(dtype=float),
|
||||
qacc_rk: wp.array2d(dtype=float),
|
||||
qvel_rk: wp.array2d[float],
|
||||
qacc_rk: wp.array2d[float],
|
||||
act_dot_rk: Optional[wp.array] = None,
|
||||
):
|
||||
"""Computes one term of 1/6 k_1 + 1/3 k_2 + 1/3 k_3 + 1/6 k_4."""
|
||||
@@ -540,13 +540,13 @@ def fwd_position(m: Model, d: Data, factorize: bool = True):
|
||||
@wp.kernel
|
||||
def _actuator_velocity(
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
# Data out:
|
||||
actuator_velocity_out: wp.array2d(dtype=float),
|
||||
actuator_velocity_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -565,14 +565,14 @@ def _actuator_velocity(
|
||||
@wp.kernel
|
||||
def _tendon_velocity(
|
||||
# Model:
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
# Data in:
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d[float],
|
||||
ten_J_in: wp.array2d[float],
|
||||
# Data out:
|
||||
ten_velocity_out: wp.array2d(dtype=float),
|
||||
ten_velocity_out: wp.array2d[float],
|
||||
):
|
||||
worldid, tenid = wp.tid()
|
||||
|
||||
@@ -617,34 +617,34 @@ def fwd_velocity(m: Model, d: Data):
|
||||
def _actuator_force(
|
||||
# Model:
|
||||
na: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
actuator_dyntype: wp.array(dtype=int),
|
||||
actuator_gaintype: wp.array(dtype=int),
|
||||
actuator_biastype: wp.array(dtype=int),
|
||||
actuator_actadr: wp.array(dtype=int),
|
||||
actuator_actnum: wp.array(dtype=int),
|
||||
actuator_ctrllimited: wp.array(dtype=bool),
|
||||
actuator_forcelimited: wp.array(dtype=bool),
|
||||
actuator_actlimited: wp.array(dtype=bool),
|
||||
actuator_dynprm: wp.array2d(dtype=vec10f),
|
||||
actuator_gainprm: wp.array2d(dtype=vec10f),
|
||||
actuator_biasprm: wp.array2d(dtype=vec10f),
|
||||
actuator_actearly: wp.array(dtype=bool),
|
||||
actuator_ctrlrange: wp.array2d(dtype=wp.vec2),
|
||||
actuator_forcerange: wp.array2d(dtype=wp.vec2),
|
||||
actuator_actrange: wp.array2d(dtype=wp.vec2),
|
||||
actuator_acc0: wp.array2d(dtype=float),
|
||||
actuator_lengthrange: wp.array2d(dtype=wp.vec2),
|
||||
opt_timestep: wp.array[float],
|
||||
actuator_dyntype: wp.array[int],
|
||||
actuator_gaintype: wp.array[int],
|
||||
actuator_biastype: wp.array[int],
|
||||
actuator_actadr: wp.array[int],
|
||||
actuator_actnum: wp.array[int],
|
||||
actuator_ctrllimited: wp.array[bool],
|
||||
actuator_forcelimited: wp.array[bool],
|
||||
actuator_actlimited: wp.array[bool],
|
||||
actuator_dynprm: wp.array2d[vec10f],
|
||||
actuator_gainprm: wp.array2d[vec10f],
|
||||
actuator_biasprm: wp.array2d[vec10f],
|
||||
actuator_actearly: wp.array[bool],
|
||||
actuator_ctrlrange: wp.array2d[wp.vec2],
|
||||
actuator_forcerange: wp.array2d[wp.vec2],
|
||||
actuator_actrange: wp.array2d[wp.vec2],
|
||||
actuator_acc0: wp.array2d[float],
|
||||
actuator_lengthrange: wp.array2d[wp.vec2],
|
||||
# Data in:
|
||||
act_in: wp.array2d(dtype=float),
|
||||
ctrl_in: wp.array2d(dtype=float),
|
||||
actuator_length_in: wp.array2d(dtype=float),
|
||||
actuator_velocity_in: wp.array2d(dtype=float),
|
||||
act_in: wp.array2d[float],
|
||||
ctrl_in: wp.array2d[float],
|
||||
actuator_length_in: wp.array2d[float],
|
||||
actuator_velocity_in: wp.array2d[float],
|
||||
# In:
|
||||
dsbl_clampctrl: int,
|
||||
# Data out:
|
||||
act_dot_out: wp.array2d(dtype=float),
|
||||
actuator_force_out: wp.array2d(dtype=float),
|
||||
act_dot_out: wp.array2d[float],
|
||||
actuator_force_out: wp.array2d[float],
|
||||
):
|
||||
worldid, uid = wp.tid()
|
||||
|
||||
@@ -738,12 +738,12 @@ def _actuator_force(
|
||||
@wp.kernel
|
||||
def _tendon_actuator_force(
|
||||
# Model:
|
||||
actuator_trntype: wp.array(dtype=int),
|
||||
actuator_trnid: wp.array(dtype=wp.vec2i),
|
||||
actuator_trntype: wp.array[int],
|
||||
actuator_trnid: wp.array[wp.vec2i],
|
||||
# Data in:
|
||||
actuator_force_in: wp.array2d(dtype=float),
|
||||
actuator_force_in: wp.array2d[float],
|
||||
# Out:
|
||||
ten_actfrc_out: wp.array2d(dtype=float),
|
||||
ten_actfrc_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -756,14 +756,14 @@ def _tendon_actuator_force(
|
||||
@wp.kernel
|
||||
def _tendon_actuator_force_clamp(
|
||||
# Model:
|
||||
tendon_actfrclimited: wp.array(dtype=bool),
|
||||
tendon_actfrcrange: wp.array2d(dtype=wp.vec2),
|
||||
actuator_trntype: wp.array(dtype=int),
|
||||
actuator_trnid: wp.array(dtype=wp.vec2i),
|
||||
tendon_actfrclimited: wp.array[bool],
|
||||
tendon_actfrcrange: wp.array2d[wp.vec2],
|
||||
actuator_trntype: wp.array[int],
|
||||
actuator_trnid: wp.array[wp.vec2i],
|
||||
# In:
|
||||
ten_actfrc_in: wp.array2d(dtype=float),
|
||||
ten_actfrc_in: wp.array2d[float],
|
||||
# Data out:
|
||||
actuator_force_out: wp.array2d(dtype=float),
|
||||
actuator_force_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -782,13 +782,13 @@ def _tendon_actuator_force_clamp(
|
||||
@wp.kernel
|
||||
def _qfrc_actuator(
|
||||
# Data in:
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
actuator_force_in: wp.array2d(dtype=float),
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
actuator_force_in: wp.array2d[float],
|
||||
# Data out:
|
||||
qfrc_actuator_out: wp.array2d(dtype=float),
|
||||
qfrc_actuator_out: wp.array2d[float],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
|
||||
@@ -806,15 +806,15 @@ def _qfrc_actuator(
|
||||
def _qfrc_actuator_gravcomp_limits(
|
||||
# Model:
|
||||
ngravcomp: int,
|
||||
jnt_actfrclimited: wp.array(dtype=bool),
|
||||
jnt_actgravcomp: wp.array(dtype=int),
|
||||
jnt_actfrcrange: wp.array2d(dtype=wp.vec2),
|
||||
dof_jntid: wp.array(dtype=int),
|
||||
jnt_actfrclimited: wp.array[bool],
|
||||
jnt_actgravcomp: wp.array[int],
|
||||
jnt_actfrcrange: wp.array2d[wp.vec2],
|
||||
dof_jntid: wp.array[int],
|
||||
# Data in:
|
||||
qfrc_gravcomp_in: wp.array2d(dtype=float),
|
||||
qfrc_actuator_in: wp.array2d(dtype=float),
|
||||
qfrc_gravcomp_in: wp.array2d[float],
|
||||
qfrc_actuator_in: wp.array2d[float],
|
||||
# Data out:
|
||||
qfrc_actuator_out: wp.array2d(dtype=float),
|
||||
qfrc_actuator_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
jntid = dof_jntid[dofid]
|
||||
@@ -930,12 +930,12 @@ def fwd_actuation(m: Model, d: Data):
|
||||
@wp.kernel
|
||||
def _qfrc_smooth(
|
||||
# Data in:
|
||||
qfrc_applied_in: wp.array2d(dtype=float),
|
||||
qfrc_bias_in: wp.array2d(dtype=float),
|
||||
qfrc_passive_in: wp.array2d(dtype=float),
|
||||
qfrc_actuator_in: wp.array2d(dtype=float),
|
||||
qfrc_applied_in: wp.array2d[float],
|
||||
qfrc_bias_in: wp.array2d[float],
|
||||
qfrc_passive_in: wp.array2d[float],
|
||||
qfrc_actuator_in: wp.array2d[float],
|
||||
# Data out:
|
||||
qfrc_smooth_out: wp.array2d(dtype=float),
|
||||
qfrc_smooth_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
qfrc_smooth_out[worldid, dofid] = (
|
||||
|
||||
+10
-10
@@ -34,12 +34,12 @@ wp.set_module_options({"enable_backward": False})
|
||||
@wp.kernel
|
||||
def _qfrc_eulerdamp(
|
||||
# Model:
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
dof_damping: wp.array2d(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
dof_damping: wp.array2d[float],
|
||||
# Data in:
|
||||
qacc_in: wp.array2d(dtype=float),
|
||||
qacc_in: wp.array2d[float],
|
||||
# Out:
|
||||
qfrc_out: wp.array2d(dtype=float),
|
||||
qfrc_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -49,13 +49,13 @@ def _qfrc_eulerdamp(
|
||||
@wp.kernel
|
||||
def _qfrc_inverse(
|
||||
# Data in:
|
||||
qfrc_bias_in: wp.array2d(dtype=float),
|
||||
qfrc_passive_in: wp.array2d(dtype=float),
|
||||
qfrc_constraint_in: wp.array2d(dtype=float),
|
||||
qfrc_bias_in: wp.array2d[float],
|
||||
qfrc_passive_in: wp.array2d[float],
|
||||
qfrc_constraint_in: wp.array2d[float],
|
||||
# In:
|
||||
Ma: wp.array2d(dtype=float),
|
||||
Ma: wp.array2d[float],
|
||||
# Data out:
|
||||
qfrc_inverse_out: wp.array2d(dtype=float),
|
||||
qfrc_inverse_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
|
||||
@@ -67,7 +67,7 @@ def _qfrc_inverse(
|
||||
qfrc_inverse_out[worldid, dofid] = qfrc_inverse
|
||||
|
||||
|
||||
def discrete_acc(m: Model, d: Data, qacc: wp.array2d(dtype=float)):
|
||||
def discrete_acc(m: Model, d: Data, qacc: wp.array2d[float]):
|
||||
"""Convert discrete-time qacc to continuous-time qacc.
|
||||
|
||||
Args:
|
||||
|
||||
+161
-151
@@ -34,14 +34,20 @@ from mujoco.mjx.third_party.mujoco_warp._src.types import vec10
|
||||
from mujoco.mjx.third_party.mujoco_warp._src.util_pkg import check_version
|
||||
|
||||
|
||||
def _create_array(data: Any, spec: wp.array, sizes: dict[str, int]) -> wp.array | None:
|
||||
def _is_array_spec(typ) -> bool:
|
||||
"""Check if a type annotation is an array spec (wp.array instance or bracket annotation)."""
|
||||
return isinstance(typ, wp.array) or type(typ).__name__ == "_ArrayAnnotation"
|
||||
|
||||
|
||||
def _create_array(data: Any, spec, sizes: dict[str, int]) -> wp.array | None:
|
||||
"""Creates a warp array and populates it with data.
|
||||
|
||||
The array shape is determined by a field spec referencing MjModel / MjData array sizes.
|
||||
"""
|
||||
spec_shape = getattr(spec, "shape", (0,))
|
||||
shape = None
|
||||
if spec.shape != (0,):
|
||||
shape = tuple(sizes[dim] if isinstance(dim, str) else dim for dim in spec.shape)
|
||||
if spec_shape != (0,):
|
||||
shape = tuple(sizes[dim] if isinstance(dim, str) else dim for dim in spec_shape)
|
||||
|
||||
if data is None and shape is None:
|
||||
return None # nothing to do
|
||||
@@ -50,7 +56,7 @@ def _create_array(data: Any, spec: wp.array, sizes: dict[str, int]) -> wp.array
|
||||
else:
|
||||
array = wp.array(np.array(data), dtype=spec.dtype, shape=shape)
|
||||
|
||||
if spec.shape[0] == "*":
|
||||
if spec_shape and spec_shape[0] == "*":
|
||||
# add private attribute for JAX to determine which fields are batched
|
||||
array._is_batched = True
|
||||
# also set stride 0 to 0 which is expected legacy behavior (but is deprecated)
|
||||
@@ -194,7 +200,7 @@ def put_model(mjm: mujoco.MjModel) -> types.Model:
|
||||
|
||||
# place opt on device
|
||||
for f in dataclasses.fields(types.Option):
|
||||
if isinstance(f.type, wp.array):
|
||||
if _is_array_spec(f.type):
|
||||
setattr(opt, f.name, _create_array(getattr(opt, f.name), f.type, {"*": 1}))
|
||||
else:
|
||||
setattr(opt, f.name, f.type(getattr(opt, f.name)))
|
||||
@@ -635,7 +641,7 @@ def put_model(mjm: mujoco.MjModel) -> types.Model:
|
||||
# place m on device
|
||||
sizes = dict({"*": 1}, **{f.name: getattr(m, f.name) for f in dataclasses.fields(types.Model) if f.type is int})
|
||||
for f in dataclasses.fields(types.Model):
|
||||
if isinstance(f.type, wp.array):
|
||||
if _is_array_spec(f.type):
|
||||
setattr(m, f.name, _create_array(getattr(m, f.name), f.type, sizes))
|
||||
|
||||
return m
|
||||
@@ -1459,7 +1465,7 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
"""
|
||||
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def reset_xfrc_applied(reset_in: wp.array(dtype=bool), xfrc_applied_out: wp.array2d(dtype=wp.spatial_vector)):
|
||||
def reset_xfrc_applied(reset_in: wp.array[bool], xfrc_applied_out: wp.array2d[wp.spatial_vector]):
|
||||
worldid, bodyid, elemid = wp.tid()
|
||||
|
||||
if wp.static(reset is not None):
|
||||
@@ -1469,7 +1475,7 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
xfrc_applied_out[worldid, bodyid][elemid] = 0.0
|
||||
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def reset_qM(reset_in: wp.array(dtype=bool), qM_out: wp.array3d(dtype=float)):
|
||||
def reset_qM(reset_in: wp.array[bool], qM_out: wp.array3d[float]):
|
||||
worldid, elemid1, elemid2 = wp.tid()
|
||||
|
||||
if wp.static(reset is not None):
|
||||
@@ -1487,31 +1493,31 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
na: int,
|
||||
neq: int,
|
||||
nsensordata: int,
|
||||
qpos0: wp.array2d(dtype=float),
|
||||
eq_active0: wp.array(dtype=bool),
|
||||
qpos0: wp.array2d[float],
|
||||
eq_active0: wp.array[bool],
|
||||
# Data in:
|
||||
nworld_in: int,
|
||||
# In:
|
||||
reset_in: wp.array(dtype=bool),
|
||||
reset_in: wp.array[bool],
|
||||
# Data out:
|
||||
solver_niter_out: wp.array(dtype=int),
|
||||
ne_out: wp.array(dtype=int),
|
||||
nf_out: wp.array(dtype=int),
|
||||
nl_out: wp.array(dtype=int),
|
||||
nefc_out: wp.array(dtype=int),
|
||||
time_out: wp.array(dtype=float),
|
||||
energy_out: wp.array(dtype=wp.vec2),
|
||||
qpos_out: wp.array2d(dtype=float),
|
||||
qvel_out: wp.array2d(dtype=float),
|
||||
act_out: wp.array2d(dtype=float),
|
||||
qacc_warmstart_out: wp.array2d(dtype=float),
|
||||
ctrl_out: wp.array2d(dtype=float),
|
||||
qfrc_applied_out: wp.array2d(dtype=float),
|
||||
eq_active_out: wp.array2d(dtype=bool),
|
||||
qacc_out: wp.array2d(dtype=float),
|
||||
act_dot_out: wp.array2d(dtype=float),
|
||||
sensordata_out: wp.array2d(dtype=float),
|
||||
nacon_out: wp.array(dtype=int),
|
||||
solver_niter_out: wp.array[int],
|
||||
ne_out: wp.array[int],
|
||||
nf_out: wp.array[int],
|
||||
nl_out: wp.array[int],
|
||||
nefc_out: wp.array[int],
|
||||
time_out: wp.array[float],
|
||||
energy_out: wp.array[wp.vec2],
|
||||
qpos_out: wp.array2d[float],
|
||||
qvel_out: wp.array2d[float],
|
||||
act_out: wp.array2d[float],
|
||||
qacc_warmstart_out: wp.array2d[float],
|
||||
ctrl_out: wp.array2d[float],
|
||||
qfrc_applied_out: wp.array2d[float],
|
||||
eq_active_out: wp.array2d[bool],
|
||||
qacc_out: wp.array2d[float],
|
||||
act_dot_out: wp.array2d[float],
|
||||
sensordata_out: wp.array2d[float],
|
||||
nacon_out: wp.array[int],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
@@ -1549,14 +1555,14 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def reset_mocap(
|
||||
# Model:
|
||||
body_mocapid: wp.array(dtype=int),
|
||||
body_pos: wp.array2d(dtype=wp.vec3),
|
||||
body_quat: wp.array2d(dtype=wp.quat),
|
||||
body_mocapid: wp.array[int],
|
||||
body_pos: wp.array2d[wp.vec3],
|
||||
body_quat: wp.array2d[wp.quat],
|
||||
# In:
|
||||
reset_in: wp.array(dtype=bool),
|
||||
reset_in: wp.array[bool],
|
||||
# Data out:
|
||||
mocap_pos_out: wp.array2d(dtype=wp.vec3),
|
||||
mocap_quat_out: wp.array2d(dtype=wp.quat),
|
||||
mocap_pos_out: wp.array2d[wp.vec3],
|
||||
mocap_quat_out: wp.array2d[wp.quat],
|
||||
):
|
||||
worldid, bodyid = wp.tid()
|
||||
|
||||
@@ -1573,27 +1579,27 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def reset_contact(
|
||||
# Data in:
|
||||
nacon_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
# In:
|
||||
reset_in: wp.array(dtype=bool),
|
||||
reset_in: wp.array[bool],
|
||||
nefcaddress: int,
|
||||
# Data out:
|
||||
contact_dist_out: wp.array(dtype=float),
|
||||
contact_pos_out: wp.array(dtype=wp.vec3),
|
||||
contact_frame_out: wp.array(dtype=wp.mat33),
|
||||
contact_includemargin_out: wp.array(dtype=float),
|
||||
contact_friction_out: wp.array(dtype=types.vec5),
|
||||
contact_solref_out: wp.array(dtype=wp.vec2),
|
||||
contact_solreffriction_out: wp.array(dtype=wp.vec2),
|
||||
contact_solimp_out: wp.array(dtype=types.vec5),
|
||||
contact_dim_out: wp.array(dtype=int),
|
||||
contact_geom_out: wp.array(dtype=wp.vec2i),
|
||||
contact_flex_out: wp.array(dtype=wp.vec2i),
|
||||
contact_vert_out: wp.array(dtype=wp.vec2i),
|
||||
contact_efc_address_out: wp.array2d(dtype=int),
|
||||
contact_worldid_out: wp.array(dtype=int),
|
||||
contact_type_out: wp.array(dtype=int),
|
||||
contact_geomcollisionid_out: wp.array(dtype=int),
|
||||
contact_dist_out: wp.array[float],
|
||||
contact_pos_out: wp.array[wp.vec3],
|
||||
contact_frame_out: wp.array[wp.mat33],
|
||||
contact_includemargin_out: wp.array[float],
|
||||
contact_friction_out: wp.array[types.vec5],
|
||||
contact_solref_out: wp.array[wp.vec2],
|
||||
contact_solreffriction_out: wp.array[wp.vec2],
|
||||
contact_solimp_out: wp.array[types.vec5],
|
||||
contact_dim_out: wp.array[int],
|
||||
contact_geom_out: wp.array[wp.vec2i],
|
||||
contact_flex_out: wp.array[wp.vec2i],
|
||||
contact_vert_out: wp.array[wp.vec2i],
|
||||
contact_efc_address_out: wp.array2d[int],
|
||||
contact_worldid_out: wp.array[int],
|
||||
contact_type_out: wp.array[int],
|
||||
contact_geomcollisionid_out: wp.array[int],
|
||||
):
|
||||
conid = wp.tid()
|
||||
|
||||
@@ -1697,8 +1703,8 @@ def reset_data(m: types.Model, d: types.Data, reset: Optional[wp.array] = None):
|
||||
# kernel_analyzer: off
|
||||
@wp.kernel
|
||||
def _init_subtreemass(
|
||||
body_mass_in: wp.array2d(dtype=float),
|
||||
body_subtreemass_out: wp.array2d(dtype=float),
|
||||
body_mass_in: wp.array2d[float],
|
||||
body_subtreemass_out: wp.array2d[float],
|
||||
):
|
||||
worldid, bodyid = wp.tid()
|
||||
body_mass_id = worldid % body_mass_in.shape[0]
|
||||
@@ -1708,9 +1714,9 @@ def _init_subtreemass(
|
||||
|
||||
@wp.kernel
|
||||
def _accumulate_subtreemass(
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_subtreemass_io: wp.array2d(dtype=float),
|
||||
body_tree_: wp.array(dtype=int),
|
||||
body_parentid: wp.array[int],
|
||||
body_subtreemass_io: wp.array2d[float],
|
||||
body_tree_: wp.array[int],
|
||||
):
|
||||
worldid, nodeid = wp.tid()
|
||||
body_subtreemass_id = worldid % body_subtreemass_io.shape[0]
|
||||
@@ -1722,8 +1728,8 @@ def _accumulate_subtreemass(
|
||||
|
||||
@wp.kernel
|
||||
def _copy_qpos0_to_qpos(
|
||||
qpos0: wp.array2d(dtype=float),
|
||||
qpos_out: wp.array2d(dtype=float),
|
||||
qpos0: wp.array2d[float],
|
||||
qpos_out: wp.array2d[float],
|
||||
):
|
||||
worldid, i = wp.tid()
|
||||
qpos0_id = worldid % qpos0.shape[0]
|
||||
@@ -1732,8 +1738,8 @@ def _copy_qpos0_to_qpos(
|
||||
|
||||
@wp.kernel
|
||||
def _copy_tendon_length0(
|
||||
ten_length_in: wp.array2d(dtype=float),
|
||||
tendon_length0_out: wp.array2d(dtype=float),
|
||||
ten_length_in: wp.array2d[float],
|
||||
tendon_length0_out: wp.array2d[float],
|
||||
):
|
||||
worldid, tenid = wp.tid()
|
||||
tendon_length0_id = worldid % tendon_length0_out.shape[0]
|
||||
@@ -1744,9 +1750,9 @@ def _copy_tendon_length0(
|
||||
def _compute_meaninertia(
|
||||
nv: int,
|
||||
is_sparse: bool,
|
||||
dof_Madr_in: wp.array(dtype=int),
|
||||
qM_in: wp.array3d(dtype=float),
|
||||
meaninertia_out: wp.array(dtype=float),
|
||||
dof_Madr_in: wp.array[int],
|
||||
qM_in: wp.array3d[float],
|
||||
meaninertia_out: wp.array[float],
|
||||
):
|
||||
"""Compute mean diagonal inertia from qM at qpos0."""
|
||||
worldid = wp.tid()
|
||||
@@ -1771,7 +1777,7 @@ def _compute_meaninertia(
|
||||
@wp.kernel
|
||||
def _set_unit_vector(
|
||||
dofid_target: int,
|
||||
unit_vec_out: wp.array2d(dtype=float),
|
||||
unit_vec_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
nv = unit_vec_out.shape[1]
|
||||
@@ -1785,8 +1791,8 @@ def _set_unit_vector(
|
||||
@wp.kernel
|
||||
def _extract_dof_A_diag(
|
||||
dofid: int,
|
||||
result_vec_in: wp.array2d(dtype=float),
|
||||
dof_A_diag_out: wp.array2d(dtype=float),
|
||||
result_vec_in: wp.array2d[float],
|
||||
dof_A_diag_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
dof_A_diag_id = worldid % dof_A_diag_out.shape[0]
|
||||
@@ -1795,11 +1801,11 @@ def _extract_dof_A_diag(
|
||||
|
||||
@wp.kernel
|
||||
def _finalize_dof_invweight0(
|
||||
dof_jntid: wp.array(dtype=int),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
dof_A_diag_in: wp.array2d(dtype=float),
|
||||
dof_invweight0_out: wp.array2d(dtype=float),
|
||||
dof_jntid: wp.array[int],
|
||||
jnt_type: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
dof_A_diag_in: wp.array2d[float],
|
||||
dof_invweight0_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
dof_invweight0_id = worldid % dof_invweight0_out.shape[0]
|
||||
@@ -1842,15 +1848,15 @@ def _compute_body_jac_row(
|
||||
nv: int,
|
||||
bodyid_target: int,
|
||||
row_idx: int,
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
dof_parentid: wp.array(dtype=int),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
xipos_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
body_jac_row_out: wp.array2d(dtype=float),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_dofadr: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
dof_parentid: wp.array[int],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
xipos_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
body_jac_row_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
@@ -1901,9 +1907,9 @@ def _compute_body_A_diag_entry(
|
||||
nv: int,
|
||||
bodyid_target: int,
|
||||
row_idx: int,
|
||||
body_jac_row_in: wp.array2d(dtype=float),
|
||||
result_vec_in: wp.array2d(dtype=float),
|
||||
body_A_diag_out: wp.array3d(dtype=float),
|
||||
body_jac_row_in: wp.array2d[float],
|
||||
result_vec_in: wp.array2d[float],
|
||||
body_A_diag_out: wp.array3d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
body_A_diag_id = worldid % body_A_diag_out.shape[0]
|
||||
@@ -1916,9 +1922,9 @@ def _compute_body_A_diag_entry(
|
||||
|
||||
@wp.kernel
|
||||
def _finalize_body_invweight0(
|
||||
body_weldid: wp.array(dtype=int),
|
||||
body_A_diag_in: wp.array3d(dtype=float),
|
||||
body_invweight0_out: wp.array2d(dtype=wp.vec2),
|
||||
body_weldid: wp.array[int],
|
||||
body_A_diag_in: wp.array3d[float],
|
||||
body_invweight0_out: wp.array2d[wp.vec2],
|
||||
):
|
||||
worldid, bodyid = wp.tid()
|
||||
body_invweight0_id = worldid % body_invweight0_out.shape[0]
|
||||
@@ -1953,11 +1959,11 @@ def _finalize_body_invweight0(
|
||||
@wp.kernel
|
||||
def _copy_tendon_jacobian(
|
||||
tenid_target: int,
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
ten_J_vec_out: wp.array2d(dtype=float),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
ten_J_in: wp.array2d[float],
|
||||
ten_J_vec_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
nv = ten_J_in.shape[2]
|
||||
@@ -1971,15 +1977,15 @@ def _copy_tendon_jacobian(
|
||||
@wp.kernel
|
||||
def _compute_tendon_dot_product(
|
||||
# Model:
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
# In:
|
||||
tenid_target: int,
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
result_vec_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d[float],
|
||||
result_vec_in: wp.array2d[float],
|
||||
# Out:
|
||||
tendon_invweight0_out: wp.array2d(dtype=float),
|
||||
tendon_invweight0_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
tendon_invweight0_id = worldid % tendon_invweight0_out.shape[0]
|
||||
@@ -1997,15 +2003,15 @@ def _compute_tendon_dot_product(
|
||||
|
||||
@wp.kernel
|
||||
def _compute_cam_pos0(
|
||||
cam_bodyid: wp.array(dtype=int),
|
||||
cam_targetbodyid: wp.array(dtype=int),
|
||||
cam_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
cam_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cam_pos0_out: wp.array2d(dtype=wp.vec3),
|
||||
cam_poscom0_out: wp.array2d(dtype=wp.vec3),
|
||||
cam_mat0_out: wp.array2d(dtype=wp.mat33),
|
||||
cam_bodyid: wp.array[int],
|
||||
cam_targetbodyid: wp.array[int],
|
||||
cam_xpos_in: wp.array2d[wp.vec3],
|
||||
cam_xmat_in: wp.array2d[wp.mat33],
|
||||
xpos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cam_pos0_out: wp.array2d[wp.vec3],
|
||||
cam_poscom0_out: wp.array2d[wp.vec3],
|
||||
cam_mat0_out: wp.array2d[wp.mat33],
|
||||
):
|
||||
worldid, camid = wp.tid()
|
||||
cam_pos0_id = worldid % cam_pos0_out.shape[0]
|
||||
@@ -2023,15 +2029,15 @@ def _compute_cam_pos0(
|
||||
|
||||
@wp.kernel
|
||||
def _compute_light_pos0(
|
||||
light_bodyid: wp.array(dtype=int),
|
||||
light_targetbodyid: wp.array(dtype=int),
|
||||
light_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
light_xdir_in: wp.array2d(dtype=wp.vec3),
|
||||
xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
light_pos0_out: wp.array2d(dtype=wp.vec3),
|
||||
light_poscom0_out: wp.array2d(dtype=wp.vec3),
|
||||
light_dir0_out: wp.array2d(dtype=wp.vec3),
|
||||
light_bodyid: wp.array[int],
|
||||
light_targetbodyid: wp.array[int],
|
||||
light_xpos_in: wp.array2d[wp.vec3],
|
||||
light_xdir_in: wp.array2d[wp.vec3],
|
||||
xpos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
light_pos0_out: wp.array2d[wp.vec3],
|
||||
light_poscom0_out: wp.array2d[wp.vec3],
|
||||
light_dir0_out: wp.array2d[wp.vec3],
|
||||
):
|
||||
worldid, lightid = wp.tid()
|
||||
light_pos0_id = worldid % light_pos0_out.shape[0]
|
||||
@@ -2050,11 +2056,11 @@ def _compute_light_pos0(
|
||||
@wp.kernel
|
||||
def _copy_actuator_moment(
|
||||
actid_target: int,
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
act_moment_vec_out: wp.array2d(dtype=float),
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
act_moment_vec_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
nv = act_moment_vec_out.shape[1]
|
||||
@@ -2072,8 +2078,8 @@ def _copy_actuator_moment(
|
||||
def _compute_actuator_acc0(
|
||||
actid_target: int,
|
||||
nv: int,
|
||||
result_vec_in: wp.array2d(dtype=float),
|
||||
actuator_acc0_out: wp.array2d(dtype=float),
|
||||
result_vec_in: wp.array2d[float],
|
||||
actuator_acc0_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
norm_sq = float(0.0)
|
||||
@@ -2084,11 +2090,11 @@ def _compute_actuator_acc0(
|
||||
|
||||
@wp.kernel
|
||||
def _compute_dof_M0(
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_armature: wp.array2d(dtype=float),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
crb_in: wp.array2d(dtype=vec10),
|
||||
dof_M0_out: wp.array2d(dtype=float),
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_armature: wp.array2d[float],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
crb_in: wp.array2d[vec10],
|
||||
dof_M0_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
bodyid = dof_bodyid[dofid]
|
||||
@@ -2099,15 +2105,15 @@ def _compute_dof_M0(
|
||||
|
||||
@wp.kernel
|
||||
def _resolve_dampratio(
|
||||
actuator_biastype: wp.array(dtype=int),
|
||||
actuator_gainprm: wp.array2d(dtype=types.vec10f),
|
||||
moment_rownnz_in: wp.array2d(dtype=int),
|
||||
moment_rowadr_in: wp.array2d(dtype=int),
|
||||
moment_colind_in: wp.array2d(dtype=int),
|
||||
actuator_moment_in: wp.array2d(dtype=float),
|
||||
dof_M0_in: wp.array2d(dtype=float),
|
||||
actuator_biastype: wp.array[int],
|
||||
actuator_gainprm: wp.array2d[types.vec10f],
|
||||
moment_rownnz_in: wp.array2d[int],
|
||||
moment_rowadr_in: wp.array2d[int],
|
||||
moment_colind_in: wp.array2d[int],
|
||||
actuator_moment_in: wp.array2d[float],
|
||||
dof_M0_in: wp.array2d[float],
|
||||
nv: int,
|
||||
actuator_biasprm: wp.array2d(dtype=types.vec10f),
|
||||
actuator_biasprm: wp.array2d[types.vec10f],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
biastype = actuator_biastype[actid]
|
||||
@@ -2150,15 +2156,15 @@ def _resolve_dampratio(
|
||||
|
||||
@wp.kernel
|
||||
def _set_length_range(
|
||||
actuator_trntype: wp.array(dtype=int),
|
||||
actuator_trnid: wp.array(dtype=wp.vec2i),
|
||||
actuator_gear: wp.array2d(dtype=wp.spatial_vector),
|
||||
jnt_limited: wp.array(dtype=int),
|
||||
jnt_range: wp.array2d(dtype=wp.vec2),
|
||||
tendon_limited: wp.array(dtype=int),
|
||||
tendon_range: wp.array2d(dtype=wp.vec2),
|
||||
actuator_trntype: wp.array[int],
|
||||
actuator_trnid: wp.array[wp.vec2i],
|
||||
actuator_gear: wp.array2d[wp.spatial_vector],
|
||||
jnt_limited: wp.array[int],
|
||||
jnt_range: wp.array2d[wp.vec2],
|
||||
tendon_limited: wp.array[int],
|
||||
tendon_range: wp.array2d[wp.vec2],
|
||||
ntendon: int,
|
||||
actuator_lengthrange_out: wp.array2d(dtype=wp.vec2),
|
||||
actuator_lengthrange_out: wp.array2d[wp.vec2],
|
||||
):
|
||||
worldid, actid = wp.tid()
|
||||
trntype = actuator_trntype[actid]
|
||||
@@ -2515,7 +2521,13 @@ def override_model(model: types.Model | mujoco.MjModel, overrides: dict[str, Any
|
||||
"AUTO": mujoco.mjtJacobian.mjJAC_AUTO,
|
||||
},
|
||||
}
|
||||
mjw_only_fields = {"opt.broadphase", "opt.broadphase_filter", "opt.ls_parallel", "opt.graph_conditional"}
|
||||
mjw_only_fields = {
|
||||
"opt.broadphase",
|
||||
"opt.broadphase_filter",
|
||||
"opt.ls_parallel",
|
||||
"opt.graph_conditional",
|
||||
"opt.contact_sensor_maxmatch",
|
||||
}
|
||||
mj_only_fields = {"opt.jacobian"}
|
||||
|
||||
if not isinstance(overrides, dict):
|
||||
@@ -2626,7 +2638,7 @@ def _build_rays(
|
||||
intrinsic: wp.vec4,
|
||||
znear: float,
|
||||
# Out:
|
||||
ray_out: wp.array(dtype=wp.vec3),
|
||||
ray_out: wp.array[wp.vec3],
|
||||
):
|
||||
xid, yid = wp.tid()
|
||||
ray_out[offset + xid + yid * img_w] = render_util.compute_ray(
|
||||
@@ -2682,18 +2694,16 @@ def create_render_context(
|
||||
if callable(_cubql_avail) and _cubql_avail():
|
||||
constructor = "cubql"
|
||||
|
||||
# Mesh BVHs
|
||||
# Mesh BVHs – build for all meshes so per-world variants are available
|
||||
nmesh = mjm.nmesh
|
||||
geom_enabled_mask = np.isin(mjm.geom_group, list(enabled_geom_groups))
|
||||
mesh_geom_mask = geom_enabled_mask & (mjm.geom_type == types.GeomType.MESH) & (mjm.geom_dataid >= 0)
|
||||
used_mesh_id = set(mjm.geom_dataid[mesh_geom_mask].astype(int))
|
||||
geom_enabled_idx = np.nonzero(geom_enabled_mask)[0]
|
||||
|
||||
mesh_registry = {}
|
||||
mesh_bvh_id = [wp.uint64(0) for _ in range(nmesh)]
|
||||
mesh_bounds_size = [wp.vec3(0.0, 0.0, 0.0) for _ in range(nmesh)]
|
||||
|
||||
for mid in used_mesh_id:
|
||||
for mid in range(nmesh):
|
||||
mesh, half = bvh.build_mesh_bvh(mjm, mid, constructor=constructor)
|
||||
mesh_registry[mesh.id] = mesh
|
||||
mesh_bvh_id[mid] = mesh.id
|
||||
|
||||
+22
-22
@@ -26,24 +26,24 @@ from mujoco.mjx.third_party.mujoco_warp._src.warp_util import event_scope
|
||||
def _tree_edges(
|
||||
# Model:
|
||||
nv: int,
|
||||
body_treeid: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
dof_treeid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
site_bodyid: wp.array(dtype=int),
|
||||
eq_type: wp.array(dtype=int),
|
||||
eq_obj1id: wp.array(dtype=int),
|
||||
eq_obj2id: wp.array(dtype=int),
|
||||
eq_objtype: wp.array(dtype=int),
|
||||
body_treeid: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
dof_treeid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
site_bodyid: wp.array[int],
|
||||
eq_type: wp.array[int],
|
||||
eq_obj1id: wp.array[int],
|
||||
eq_obj2id: wp.array[int],
|
||||
eq_objtype: wp.array[int],
|
||||
# Data in:
|
||||
nefc_in: wp.array(dtype=int),
|
||||
contact_geom_in: wp.array(dtype=wp.vec2i),
|
||||
efc_type_in: wp.array2d(dtype=int),
|
||||
efc_id_in: wp.array2d(dtype=int),
|
||||
efc_J_in: wp.array3d(dtype=float),
|
||||
nefc_in: wp.array[int],
|
||||
contact_geom_in: wp.array[wp.vec2i],
|
||||
efc_type_in: wp.array2d[int],
|
||||
efc_id_in: wp.array2d[int],
|
||||
efc_J_in: wp.array3d[float],
|
||||
njmax_in: int,
|
||||
# Out:
|
||||
tree_tree: wp.array3d(dtype=int), # kernel_analyzer: off
|
||||
tree_tree: wp.array3d[int], # kernel_analyzer: off
|
||||
):
|
||||
"""Find tree edges."""
|
||||
worldid, efcid = wp.tid()
|
||||
@@ -151,7 +151,7 @@ def _tree_edges(
|
||||
wp.atomic_max(tree_tree, worldid, first_tree, first_tree, 1)
|
||||
|
||||
|
||||
def tree_edges(m: types.Model, d: types.Data, tree_tree: wp.array3d(dtype=int)):
|
||||
def tree_edges(m: types.Model, d: types.Data, tree_tree: wp.array3d[int]):
|
||||
"""Compute tree-tree adjacency matrix."""
|
||||
tree_tree.zero_()
|
||||
wp.launch(
|
||||
@@ -184,14 +184,14 @@ def _flood_fill(
|
||||
# Model:
|
||||
ntree: int,
|
||||
# In:
|
||||
tree_tree_in: wp.array3d(dtype=int),
|
||||
labels_in: wp.array2d(dtype=int),
|
||||
stack_in: wp.array2d(dtype=int),
|
||||
tree_tree_in: wp.array3d[int],
|
||||
labels_in: wp.array2d[int],
|
||||
stack_in: wp.array2d[int],
|
||||
# Data out:
|
||||
nisland_out: wp.array(dtype=int),
|
||||
tree_island_out: wp.array2d(dtype=int),
|
||||
nisland_out: wp.array[int],
|
||||
tree_island_out: wp.array2d[int],
|
||||
# Out:
|
||||
stack_out: wp.array2d(dtype=int),
|
||||
stack_out: wp.array2d[int],
|
||||
):
|
||||
"""DFS flood fill to discover islands using tree_tree matrix."""
|
||||
worldid = wp.tid()
|
||||
|
||||
+87
-87
@@ -71,18 +71,18 @@ def _ellipsoid_max_moment(size: wp.vec3, dir: int) -> float:
|
||||
def _spring_damper_dof_passive(
|
||||
# Model:
|
||||
opt_disableflags: int,
|
||||
qpos_spring: wp.array2d(dtype=float),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
jnt_stiffness: wp.array2d(dtype=float),
|
||||
dof_damping: wp.array2d(dtype=float),
|
||||
qpos_spring: wp.array2d[float],
|
||||
jnt_type: wp.array[int],
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
jnt_stiffness: wp.array2d[float],
|
||||
dof_damping: wp.array2d[float],
|
||||
# Data in:
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
# Data out:
|
||||
qfrc_spring_out: wp.array2d(dtype=float),
|
||||
qfrc_damper_out: wp.array2d(dtype=float),
|
||||
qfrc_spring_out: wp.array2d[float],
|
||||
qfrc_damper_out: wp.array2d[float],
|
||||
):
|
||||
worldid, jntid = wp.tid()
|
||||
dofid = jnt_dofadr[jntid]
|
||||
@@ -182,22 +182,22 @@ def _spring_damper_dof_passive(
|
||||
@wp.kernel
|
||||
def _spring_damper_tendon_passive(
|
||||
# Model:
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
tendon_stiffness: wp.array2d(dtype=float),
|
||||
tendon_damping: wp.array2d(dtype=float),
|
||||
tendon_lengthspring: wp.array2d(dtype=wp.vec2),
|
||||
ten_J_rownnz: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
tendon_stiffness: wp.array2d[float],
|
||||
tendon_damping: wp.array2d[float],
|
||||
tendon_lengthspring: wp.array2d[wp.vec2],
|
||||
# Data in:
|
||||
ten_J_in: wp.array2d(dtype=float),
|
||||
ten_length_in: wp.array2d(dtype=float),
|
||||
ten_velocity_in: wp.array2d(dtype=float),
|
||||
ten_J_in: wp.array2d[float],
|
||||
ten_length_in: wp.array2d[float],
|
||||
ten_velocity_in: wp.array2d[float],
|
||||
# In:
|
||||
dsbl_spring: bool,
|
||||
dsbl_damper: bool,
|
||||
# Data out:
|
||||
qfrc_spring_out: wp.array2d(dtype=float),
|
||||
qfrc_damper_out: wp.array2d(dtype=float),
|
||||
qfrc_spring_out: wp.array2d[float],
|
||||
qfrc_damper_out: wp.array2d[float],
|
||||
):
|
||||
worldid, tenid, dofid_sparse = wp.tid()
|
||||
|
||||
@@ -246,18 +246,18 @@ def _spring_damper_tendon_passive(
|
||||
@wp.kernel
|
||||
def _gravity_force(
|
||||
# Model:
|
||||
opt_gravity: wp.array(dtype=wp.vec3),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_mass: wp.array2d(dtype=float),
|
||||
body_gravcomp: wp.array2d(dtype=float),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
opt_gravity: wp.array[wp.vec3],
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_mass: wp.array2d[float],
|
||||
body_gravcomp: wp.array2d[float],
|
||||
dof_bodyid: wp.array[int],
|
||||
# Data in:
|
||||
xipos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
xipos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
# Data out:
|
||||
qfrc_gravcomp_out: wp.array2d(dtype=float),
|
||||
qfrc_gravcomp_out: wp.array2d[float],
|
||||
):
|
||||
worldid, bodyid, dofid = wp.tid()
|
||||
bodyid += 1 # skip world body
|
||||
@@ -275,27 +275,27 @@ def _gravity_force(
|
||||
@wp.kernel
|
||||
def _fluid_force(
|
||||
# Model:
|
||||
opt_wind: wp.array(dtype=wp.vec3),
|
||||
opt_density: wp.array(dtype=float),
|
||||
opt_viscosity: wp.array(dtype=float),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_geomnum: wp.array(dtype=int),
|
||||
body_geomadr: wp.array(dtype=int),
|
||||
body_mass: wp.array2d(dtype=float),
|
||||
body_inertia: wp.array2d(dtype=wp.vec3),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_fluid: wp.array2d(dtype=float),
|
||||
body_fluid_ellipsoid: wp.array(dtype=bool),
|
||||
opt_wind: wp.array[wp.vec3],
|
||||
opt_density: wp.array[float],
|
||||
opt_viscosity: wp.array[float],
|
||||
body_rootid: wp.array[int],
|
||||
body_geomnum: wp.array[int],
|
||||
body_geomadr: wp.array[int],
|
||||
body_mass: wp.array2d[float],
|
||||
body_inertia: wp.array2d[wp.vec3],
|
||||
geom_type: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_fluid: wp.array2d[float],
|
||||
body_fluid_ellipsoid: wp.array[bool],
|
||||
# Data in:
|
||||
xipos_in: wp.array2d(dtype=wp.vec3),
|
||||
ximat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cvel_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
xipos_in: wp.array2d[wp.vec3],
|
||||
ximat_in: wp.array2d[wp.mat33],
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cvel_in: wp.array2d[wp.spatial_vector],
|
||||
# Out:
|
||||
fluid_applied_out: wp.array2d(dtype=wp.spatial_vector),
|
||||
fluid_applied_out: wp.array2d[wp.spatial_vector],
|
||||
):
|
||||
"""Computes body-space fluid forces for both inertia-box and ellipsoid models."""
|
||||
worldid, bodyid = wp.tid()
|
||||
@@ -535,18 +535,18 @@ def _fluid(m: Model, d: Data):
|
||||
@wp.kernel
|
||||
def _qfrc_passive(
|
||||
# Model:
|
||||
jnt_actgravcomp: wp.array(dtype=int),
|
||||
dof_jntid: wp.array(dtype=int),
|
||||
jnt_actgravcomp: wp.array[int],
|
||||
dof_jntid: wp.array[int],
|
||||
has_fluid: bool,
|
||||
# Data in:
|
||||
qfrc_spring_in: wp.array2d(dtype=float),
|
||||
qfrc_damper_in: wp.array2d(dtype=float),
|
||||
qfrc_gravcomp_in: wp.array2d(dtype=float),
|
||||
qfrc_fluid_in: wp.array2d(dtype=float),
|
||||
qfrc_spring_in: wp.array2d[float],
|
||||
qfrc_damper_in: wp.array2d[float],
|
||||
qfrc_gravcomp_in: wp.array2d[float],
|
||||
qfrc_fluid_in: wp.array2d[float],
|
||||
# In:
|
||||
gravcomp: bool,
|
||||
# Data out:
|
||||
qfrc_passive_out: wp.array2d(dtype=float),
|
||||
qfrc_passive_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
qfrc_passive = qfrc_spring_in[worldid, dofid]
|
||||
@@ -567,29 +567,29 @@ def _qfrc_passive(
|
||||
def _flex_elasticity(
|
||||
# Model:
|
||||
nflex: int,
|
||||
opt_timestep: wp.array(dtype=float),
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edgeadr: wp.array(dtype=int),
|
||||
flex_elemadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_elemedgeadr: wp.array(dtype=int),
|
||||
flex_vertbodyid: wp.array(dtype=int),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_elemedge: wp.array(dtype=int),
|
||||
flexedge_length0: wp.array(dtype=float),
|
||||
flex_stiffness: wp.array2d(dtype=float),
|
||||
flex_damping: wp.array(dtype=float),
|
||||
opt_timestep: wp.array[float],
|
||||
body_dofadr: wp.array[int],
|
||||
flex_dim: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edgeadr: wp.array[int],
|
||||
flex_elemadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_elemedgeadr: wp.array[int],
|
||||
flex_vertbodyid: wp.array[int],
|
||||
flex_elem: wp.array[int],
|
||||
flex_elemedge: wp.array[int],
|
||||
flexedge_length0: wp.array[float],
|
||||
flex_stiffness: wp.array2d[float],
|
||||
flex_damping: wp.array[float],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexedge_length_in: wp.array2d(dtype=float),
|
||||
flexedge_velocity_in: wp.array2d(dtype=float),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
flexedge_length_in: wp.array2d[float],
|
||||
flexedge_velocity_in: wp.array2d[float],
|
||||
# In:
|
||||
dsbl_damper: bool,
|
||||
# Data out:
|
||||
qfrc_spring_out: wp.array2d(dtype=float),
|
||||
qfrc_spring_out: wp.array2d[float],
|
||||
):
|
||||
worldid, elemid = wp.tid()
|
||||
timestep = opt_timestep[worldid % opt_timestep.shape[0]]
|
||||
@@ -665,19 +665,19 @@ def _flex_elasticity(
|
||||
def _flex_bending(
|
||||
# Model:
|
||||
nflex: int,
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edgeadr: wp.array(dtype=int),
|
||||
flex_edgenum: wp.array(dtype=int),
|
||||
flex_vertbodyid: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_edgeflap: wp.array(dtype=wp.vec2i),
|
||||
flex_bending: wp.array2d(dtype=float),
|
||||
body_dofadr: wp.array[int],
|
||||
flex_dim: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edgeadr: wp.array[int],
|
||||
flex_edgenum: wp.array[int],
|
||||
flex_vertbodyid: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_edgeflap: wp.array[wp.vec2i],
|
||||
flex_bending: wp.array2d[float],
|
||||
# Data in:
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# Data out:
|
||||
qfrc_spring_out: wp.array2d(dtype=float),
|
||||
qfrc_spring_out: wp.array2d[float],
|
||||
):
|
||||
worldid, edgeid = wp.tid()
|
||||
nvert = 4
|
||||
|
||||
+114
-112
@@ -52,12 +52,12 @@ def _ray_map(pos: wp.vec3, mat: wp.mat33, pnt: wp.vec3, vec: wp.vec3) -> Tuple[w
|
||||
@wp.func
|
||||
def _ray_eliminate(
|
||||
# Model:
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_matid: wp.array(dtype=int), # kernel_analyzer: ignore
|
||||
geom_group: wp.array(dtype=int),
|
||||
geom_rgba: wp.array(dtype=wp.vec4), # kernel_analyzer: ignore
|
||||
mat_rgba: wp.array(dtype=wp.vec4), # kernel_analyzer: ignore
|
||||
body_weldid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_matid: wp.array[int], # kernel_analyzer: ignore
|
||||
geom_group: wp.array[int],
|
||||
geom_rgba: wp.array[wp.vec4], # kernel_analyzer: ignore
|
||||
mat_rgba: wp.array[wp.vec4], # kernel_analyzer: ignore
|
||||
# In:
|
||||
geomid: int,
|
||||
geomgroup: vec6,
|
||||
@@ -451,26 +451,27 @@ def ray_box(pos: wp.vec3, mat: wp.mat33, size: wp.vec3, pnt: wp.vec3, vec: wp.ve
|
||||
@wp.func
|
||||
def ray_hfield(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
hfield_nrow: wp.array(dtype=int),
|
||||
hfield_ncol: wp.array(dtype=int),
|
||||
hfield_adr: wp.array(dtype=int),
|
||||
hfield_data: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
hfield_nrow: wp.array[int],
|
||||
hfield_ncol: wp.array[int],
|
||||
hfield_adr: wp.array[int],
|
||||
hfield_data: wp.array[float],
|
||||
# In:
|
||||
pos: wp.vec3,
|
||||
mat: wp.mat33,
|
||||
pnt: wp.vec3,
|
||||
vec: wp.vec3,
|
||||
id: int,
|
||||
worldid: int,
|
||||
) -> Tuple[float, wp.vec3]:
|
||||
# check geom type
|
||||
if geom_type[id] != GeomType.HFIELD:
|
||||
return -1.0, wp.vec3()
|
||||
|
||||
# hfield id and dimensions
|
||||
hid = geom_dataid[id]
|
||||
hid = geom_dataid[worldid % geom_dataid.shape[0], id]
|
||||
nrow = hfield_nrow[hid]
|
||||
ncol = hfield_ncol[hid]
|
||||
|
||||
@@ -622,10 +623,10 @@ def ray_hfield(
|
||||
def ray_mesh(
|
||||
# Model:
|
||||
nmeshface: int,
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_face: wp.array(dtype=wp.vec3i),
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_face: wp.array[wp.vec3i],
|
||||
# In:
|
||||
data_id: int,
|
||||
pos: wp.vec3,
|
||||
@@ -699,7 +700,7 @@ def ray_mesh(
|
||||
@wp.func
|
||||
def ray_mesh_with_bvh(
|
||||
# In:
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
mesh_geom_id: int,
|
||||
pos: wp.vec3,
|
||||
mat: wp.mat33,
|
||||
@@ -732,7 +733,7 @@ def ray_mesh_with_bvh(
|
||||
@wp.func
|
||||
def ray_mesh_with_bvh_anyhit(
|
||||
# In:
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
mesh_geom_id: int,
|
||||
pos: wp.vec3,
|
||||
mat: wp.mat33,
|
||||
@@ -752,7 +753,7 @@ def ray_mesh_with_bvh_anyhit(
|
||||
@wp.func
|
||||
def ray_flex_with_bvh(
|
||||
# In:
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flexid: int,
|
||||
group_root: int,
|
||||
pnt: wp.vec3,
|
||||
@@ -781,7 +782,7 @@ def ray_flex_with_bvh(
|
||||
@wp.func
|
||||
def ray_flex_with_bvh_anyhit(
|
||||
# In:
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flexid: int,
|
||||
group_root: int,
|
||||
pnt: wp.vec3,
|
||||
@@ -823,27 +824,27 @@ def ray_geom(pos: wp.vec3, mat: wp.mat33, size: wp.vec3, pnt: wp.vec3, vec: wp.v
|
||||
def _ray_geom_mesh(
|
||||
# Model:
|
||||
nmeshface: int,
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_group: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_face: wp.array(dtype=wp.vec3i),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
hfield_nrow: wp.array(dtype=int),
|
||||
hfield_ncol: wp.array(dtype=int),
|
||||
hfield_adr: wp.array(dtype=int),
|
||||
hfield_data: wp.array(dtype=float),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
body_weldid: wp.array[int],
|
||||
geom_type: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_group: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_face: wp.array[wp.vec3i],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
hfield_nrow: wp.array[int],
|
||||
hfield_ncol: wp.array[int],
|
||||
hfield_adr: wp.array[int],
|
||||
hfield_data: wp.array[float],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
worldid: int,
|
||||
pnt: wp.vec3,
|
||||
@@ -876,7 +877,7 @@ def _ray_geom_mesh(
|
||||
mesh_faceadr,
|
||||
mesh_vert,
|
||||
mesh_face,
|
||||
geom_dataid[geomid],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], geomid],
|
||||
pos,
|
||||
mat,
|
||||
geom_size[worldid % geom_size.shape[0], geomid],
|
||||
@@ -897,6 +898,7 @@ def _ray_geom_mesh(
|
||||
pnt,
|
||||
vec,
|
||||
geomid,
|
||||
worldid,
|
||||
)
|
||||
else:
|
||||
return ray_geom(pos, mat, geom_size[worldid % geom_size.shape[0], geomid], pnt, vec, type)
|
||||
@@ -909,37 +911,37 @@ def _ray(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
nmeshface: int,
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_group: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_face: wp.array(dtype=wp.vec3i),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
hfield_nrow: wp.array(dtype=int),
|
||||
hfield_ncol: wp.array(dtype=int),
|
||||
hfield_adr: wp.array(dtype=int),
|
||||
hfield_data: wp.array(dtype=float),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
body_weldid: wp.array[int],
|
||||
geom_type: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_group: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_face: wp.array[wp.vec3i],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
hfield_nrow: wp.array[int],
|
||||
hfield_ncol: wp.array[int],
|
||||
hfield_adr: wp.array[int],
|
||||
hfield_data: wp.array[float],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
pnt: wp.array2d(dtype=wp.vec3),
|
||||
vec: wp.array2d(dtype=wp.vec3),
|
||||
pnt: wp.array2d[wp.vec3],
|
||||
vec: wp.array2d[wp.vec3],
|
||||
geomgroup: vec6,
|
||||
flg_static: bool,
|
||||
bodyexclude: wp.array(dtype=int),
|
||||
bodyexclude: wp.array[int],
|
||||
# Out:
|
||||
dist_out: wp.array2d(dtype=float),
|
||||
geomid_out: wp.array2d(dtype=int),
|
||||
normal_out: wp.array2d(dtype=wp.vec3),
|
||||
dist_out: wp.array2d[float],
|
||||
geomid_out: wp.array2d[int],
|
||||
normal_out: wp.array2d[wp.vec3],
|
||||
):
|
||||
worldid, rayid, tid = wp.tid()
|
||||
|
||||
@@ -1011,18 +1013,18 @@ def _ray(
|
||||
@wp.func
|
||||
def _ray_geom_mesh_bvh(
|
||||
# Model:
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_group: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
body_weldid: wp.array[int],
|
||||
geom_type: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_group: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
worldid: int,
|
||||
pnt: wp.vec3,
|
||||
@@ -1031,8 +1033,8 @@ def _ray_geom_mesh_bvh(
|
||||
flg_static: bool,
|
||||
bodyexclude: int,
|
||||
geomid: int,
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
min_dist: float,
|
||||
) -> Tuple[float, wp.vec3]:
|
||||
if not _ray_eliminate(
|
||||
@@ -1055,7 +1057,7 @@ def _ray_geom_mesh_bvh(
|
||||
bvh_ids = mesh_bvh_id if gtype == GeomType.MESH else hfield_bvh_id
|
||||
t, n, u, v, f, geom_mesh_id = ray_mesh_with_bvh(
|
||||
bvh_ids,
|
||||
geom_dataid[geomid],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], geomid],
|
||||
pos,
|
||||
mat,
|
||||
pnt,
|
||||
@@ -1081,33 +1083,33 @@ def _ray_geom_mesh_bvh(
|
||||
def _ray_bvh(
|
||||
# Model:
|
||||
ngeom: int,
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_group: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
body_weldid: wp.array[int],
|
||||
geom_type: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_group: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
# In:
|
||||
pnt: wp.array2d(dtype=wp.vec3),
|
||||
vec: wp.array2d(dtype=wp.vec3),
|
||||
pnt: wp.array2d[wp.vec3],
|
||||
vec: wp.array2d[wp.vec3],
|
||||
geomgroup: vec6,
|
||||
flg_static: bool,
|
||||
bodyexclude: wp.array(dtype=int),
|
||||
bodyexclude: wp.array[int],
|
||||
bvh_id: wp.uint64,
|
||||
group_root: wp.array(dtype=int),
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
group_root: wp.array[int],
|
||||
enabled_geom_ids: wp.array[int],
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
# Out:
|
||||
dist_out: wp.array2d(dtype=float),
|
||||
geomid_out: wp.array2d(dtype=int),
|
||||
normal_out: wp.array2d(dtype=wp.vec3),
|
||||
dist_out: wp.array2d[float],
|
||||
geomid_out: wp.array2d[int],
|
||||
normal_out: wp.array2d[wp.vec3],
|
||||
):
|
||||
worldid, rayid = wp.tid()
|
||||
|
||||
@@ -1166,8 +1168,8 @@ def _ray_bvh(
|
||||
def ray(
|
||||
m: Model,
|
||||
d: Data,
|
||||
pnt: wp.array2d(dtype=wp.vec3),
|
||||
vec: wp.array2d(dtype=wp.vec3),
|
||||
pnt: wp.array2d[wp.vec3],
|
||||
vec: wp.array2d[wp.vec3],
|
||||
geomgroup: vec6 | None = None,
|
||||
flg_static: bool = True,
|
||||
bodyexclude: int = -1,
|
||||
@@ -1210,14 +1212,14 @@ def ray(
|
||||
def rays(
|
||||
m: Model,
|
||||
d: Data,
|
||||
pnt: wp.array2d(dtype=wp.vec3),
|
||||
vec: wp.array2d(dtype=wp.vec3),
|
||||
pnt: wp.array2d[wp.vec3],
|
||||
vec: wp.array2d[wp.vec3],
|
||||
geomgroup: vec6,
|
||||
flg_static: bool,
|
||||
bodyexclude: wp.array(dtype=int),
|
||||
dist: wp.array2d(dtype=float),
|
||||
geomid: wp.array2d(dtype=int),
|
||||
normal: wp.array2d(dtype=wp.vec3),
|
||||
bodyexclude: wp.array[int],
|
||||
dist: wp.array2d[float],
|
||||
geomid: wp.array2d[int],
|
||||
normal: wp.array2d[wp.vec3],
|
||||
rc: RenderContext | None = None,
|
||||
):
|
||||
"""Ray intersection for multiple worlds and multiple rays.
|
||||
|
||||
+108
-108
@@ -43,17 +43,17 @@ wp.set_module_options({"enable_backward": False})
|
||||
@wp.func
|
||||
def sample_texture(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
geom_type: wp.array[int],
|
||||
mesh_faceadr: wp.array[int],
|
||||
# In:
|
||||
geom_id: int,
|
||||
tex_repeat: wp.vec2,
|
||||
tex: wp.Texture2D,
|
||||
pos: wp.vec3,
|
||||
rot: wp.mat33,
|
||||
mesh_facetexcoord: wp.array(dtype=wp.vec3i),
|
||||
mesh_texcoord: wp.array(dtype=wp.vec2),
|
||||
mesh_texcoord_offsets: wp.array(dtype=int),
|
||||
mesh_facetexcoord: wp.array[wp.vec3i],
|
||||
mesh_texcoord: wp.array[wp.vec2],
|
||||
mesh_texcoord_offsets: wp.array[int],
|
||||
hit_point: wp.vec3,
|
||||
bary_u: float,
|
||||
bary_v: float,
|
||||
@@ -88,29 +88,29 @@ def sample_texture(
|
||||
@wp.func
|
||||
def cast_ray(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
bvh_id: wp.uint64,
|
||||
group_root: int,
|
||||
worldid: int,
|
||||
bvh_ngeom: int,
|
||||
flex_bvh_ngeom: int,
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_geom_flexid: wp.array(dtype=int),
|
||||
flex_geom_edgeid: wp.array(dtype=int),
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_group_root: wp.array2d(dtype=int),
|
||||
enabled_geom_ids: wp.array[int],
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
flex_geom_flexid: wp.array[int],
|
||||
flex_geom_edgeid: wp.array[int],
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flex_group_root: wp.array2d[int],
|
||||
ray_origin_world: wp.vec3,
|
||||
ray_dir_world: wp.vec3,
|
||||
) -> Tuple[int, float, wp.vec3, float, float, int, int]:
|
||||
@@ -159,7 +159,7 @@ def cast_ray(
|
||||
if gtype == GeomType.HFIELD:
|
||||
d, n, u, v, f, geom_hfield_id = ray_mesh_with_bvh(
|
||||
hfield_bvh_id,
|
||||
geom_dataid[gi],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], gi],
|
||||
geom_xpos_in[worldid, gi],
|
||||
geom_xmat_in[worldid, gi],
|
||||
ray_origin_world,
|
||||
@@ -208,7 +208,7 @@ def cast_ray(
|
||||
if gtype == GeomType.MESH:
|
||||
d, n, u, v, f, hit_mesh_id = ray_mesh_with_bvh(
|
||||
mesh_bvh_id,
|
||||
geom_dataid[gi],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], gi],
|
||||
geom_xpos_in[worldid, gi],
|
||||
geom_xmat_in[worldid, gi],
|
||||
ray_origin_world,
|
||||
@@ -256,29 +256,29 @@ def cast_ray(
|
||||
@wp.func
|
||||
def cast_ray_first_hit(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
bvh_id: wp.uint64,
|
||||
group_root: int,
|
||||
worldid: int,
|
||||
bvh_ngeom: int,
|
||||
bvh_nflexgeom: int,
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_geom_flexid: wp.array(dtype=int),
|
||||
flex_geom_edgeid: wp.array(dtype=int),
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_group_root: wp.array2d(dtype=int),
|
||||
enabled_geom_ids: wp.array[int],
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
flex_geom_flexid: wp.array[int],
|
||||
flex_geom_edgeid: wp.array[int],
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flex_group_root: wp.array2d[int],
|
||||
ray_origin_world: wp.vec3,
|
||||
ray_dir_world: wp.vec3,
|
||||
max_dist: float,
|
||||
@@ -314,7 +314,7 @@ def cast_ray_first_hit(
|
||||
if gtype == GeomType.HFIELD:
|
||||
d, n, u, v, f, geom_hfield_id = ray_mesh_with_bvh(
|
||||
hfield_bvh_id,
|
||||
geom_dataid[gi],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], gi],
|
||||
geom_xpos_in[worldid, gi],
|
||||
geom_xmat_in[worldid, gi],
|
||||
ray_origin_world,
|
||||
@@ -363,7 +363,7 @@ def cast_ray_first_hit(
|
||||
if gtype == GeomType.MESH:
|
||||
hit = ray_mesh_with_bvh_anyhit(
|
||||
mesh_bvh_id,
|
||||
geom_dataid[gi],
|
||||
geom_dataid[worldid % geom_dataid.shape[0], gi],
|
||||
geom_xpos_in[worldid, gi],
|
||||
geom_xmat_in[worldid, gi],
|
||||
ray_origin_world,
|
||||
@@ -409,30 +409,30 @@ def cast_ray_first_hit(
|
||||
@wp.func
|
||||
def compute_lighting(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
use_shadows: bool,
|
||||
bvh_id: wp.uint64,
|
||||
group_root: int,
|
||||
bvh_ngeom: int,
|
||||
bvh_nflexgeom: int,
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
enabled_geom_ids: wp.array[int],
|
||||
worldid: int,
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_geom_flexid: wp.array(dtype=int),
|
||||
flex_geom_edgeid: wp.array(dtype=int),
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_group_root: wp.array2d(dtype=int),
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
flex_geom_flexid: wp.array[int],
|
||||
flex_geom_edgeid: wp.array[int],
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flex_group_root: wp.array2d[int],
|
||||
lightactive: bool,
|
||||
lighttype: int,
|
||||
lightcastshadow: bool,
|
||||
@@ -530,65 +530,65 @@ def render(m: Model, d: Data, rc: RenderContext):
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def _render_megakernel(
|
||||
# Model:
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
cam_projection: wp.array(dtype=int),
|
||||
cam_fovy: wp.array2d(dtype=float),
|
||||
cam_sensorsize: wp.array(dtype=wp.vec2),
|
||||
cam_intrinsic: wp.array2d(dtype=wp.vec4),
|
||||
light_type: wp.array2d(dtype=int),
|
||||
light_castshadow: wp.array2d(dtype=bool),
|
||||
light_active: wp.array2d(dtype=bool),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mat_texid: wp.array3d(dtype=int),
|
||||
mat_texrepeat: wp.array2d(dtype=wp.vec2),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
geom_type: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
cam_projection: wp.array[int],
|
||||
cam_fovy: wp.array2d[float],
|
||||
cam_sensorsize: wp.array[wp.vec2],
|
||||
cam_intrinsic: wp.array2d[wp.vec4],
|
||||
light_type: wp.array2d[int],
|
||||
light_castshadow: wp.array2d[bool],
|
||||
light_active: wp.array2d[bool],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mat_texid: wp.array3d[int],
|
||||
mat_texrepeat: wp.array2d[wp.vec2],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
# Data in:
|
||||
geom_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
cam_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
cam_xmat_in: wp.array2d(dtype=wp.mat33),
|
||||
light_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
light_xdir_in: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
|
||||
geom_xpos_in: wp.array2d[wp.vec3],
|
||||
geom_xmat_in: wp.array2d[wp.mat33],
|
||||
cam_xpos_in: wp.array2d[wp.vec3],
|
||||
cam_xmat_in: wp.array2d[wp.mat33],
|
||||
light_xpos_in: wp.array2d[wp.vec3],
|
||||
light_xdir_in: wp.array2d[wp.vec3],
|
||||
flexvert_xpos_in: wp.array2d[wp.vec3],
|
||||
# In:
|
||||
nrender: int,
|
||||
use_shadows: bool,
|
||||
bvh_ngeom: int,
|
||||
bvh_nflexgeom: int,
|
||||
cam_res: wp.array(dtype=wp.vec2i),
|
||||
cam_id_map: wp.array(dtype=int),
|
||||
ray: wp.array(dtype=wp.vec3),
|
||||
rgb_adr: wp.array(dtype=int),
|
||||
depth_adr: wp.array(dtype=int),
|
||||
seg_adr: wp.array(dtype=int),
|
||||
render_rgb: wp.array(dtype=bool),
|
||||
render_depth: wp.array(dtype=bool),
|
||||
render_seg: wp.array(dtype=bool),
|
||||
cam_res: wp.array[wp.vec2i],
|
||||
cam_id_map: wp.array[int],
|
||||
ray: wp.array[wp.vec3],
|
||||
rgb_adr: wp.array[int],
|
||||
depth_adr: wp.array[int],
|
||||
seg_adr: wp.array[int],
|
||||
render_rgb: wp.array[bool],
|
||||
render_depth: wp.array[bool],
|
||||
render_seg: wp.array[bool],
|
||||
bvh_id: wp.uint64,
|
||||
group_root: wp.array(dtype=int),
|
||||
flex_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_group_root: wp.array2d(dtype=int),
|
||||
enabled_geom_ids: wp.array(dtype=int),
|
||||
mesh_bvh_id: wp.array(dtype=wp.uint64),
|
||||
mesh_facetexcoord: wp.array(dtype=wp.vec3i),
|
||||
mesh_texcoord: wp.array(dtype=wp.vec2),
|
||||
mesh_texcoord_offsets: wp.array(dtype=int),
|
||||
hfield_bvh_id: wp.array(dtype=wp.uint64),
|
||||
flex_rgba: wp.array(dtype=wp.vec4),
|
||||
flex_geom_flexid: wp.array(dtype=int),
|
||||
flex_geom_edgeid: wp.array(dtype=int),
|
||||
textures: wp.array(dtype=wp.Texture2D),
|
||||
group_root: wp.array[int],
|
||||
flex_bvh_id: wp.array[wp.uint64],
|
||||
flex_group_root: wp.array2d[int],
|
||||
enabled_geom_ids: wp.array[int],
|
||||
mesh_bvh_id: wp.array[wp.uint64],
|
||||
mesh_facetexcoord: wp.array[wp.vec3i],
|
||||
mesh_texcoord: wp.array[wp.vec2],
|
||||
mesh_texcoord_offsets: wp.array[int],
|
||||
hfield_bvh_id: wp.array[wp.uint64],
|
||||
flex_rgba: wp.array[wp.vec4],
|
||||
flex_geom_flexid: wp.array[int],
|
||||
flex_geom_edgeid: wp.array[int],
|
||||
textures: wp.array[wp.Texture2D],
|
||||
# Out:
|
||||
rgb_out: wp.array2d(dtype=wp.uint32),
|
||||
depth_out: wp.array2d(dtype=float),
|
||||
seg_out: wp.array2d(dtype=int),
|
||||
rgb_out: wp.array2d[wp.uint32],
|
||||
depth_out: wp.array2d[float],
|
||||
seg_out: wp.array2d[int],
|
||||
):
|
||||
worldid, rayid = wp.tid()
|
||||
|
||||
|
||||
+14
-14
@@ -28,9 +28,9 @@ def _convert_texture_data(
|
||||
width: int,
|
||||
adr: int,
|
||||
nc: int,
|
||||
tex_data_in: wp.array(dtype=wp.uint8),
|
||||
tex_data_in: wp.array[wp.uint8],
|
||||
# Out:
|
||||
tex_data_out: wp.array3d(dtype=float),
|
||||
tex_data_out: wp.array3d[float],
|
||||
):
|
||||
"""Convert uint8 texture data to vec4 format for efficient sampling."""
|
||||
x, y = wp.tid()
|
||||
@@ -134,11 +134,11 @@ def pack_rgba_to_uint32(r: float, g: float, b: float, a: float) -> wp.uint32:
|
||||
@wp.kernel
|
||||
def unpack_rgb_kernel(
|
||||
# In:
|
||||
packed: wp.array2d(dtype=wp.uint32),
|
||||
rgb_adr: wp.array(dtype=int),
|
||||
packed: wp.array2d[wp.uint32],
|
||||
rgb_adr: wp.array[int],
|
||||
camera_index: int,
|
||||
# Out:
|
||||
rgb_out: wp.array3d(dtype=wp.vec3),
|
||||
rgb_out: wp.array3d[wp.vec3],
|
||||
):
|
||||
"""Unpack ABGR uint32 packed pixel data into separate R, G, and B channels."""
|
||||
worldid, pixelid = wp.tid()
|
||||
@@ -157,12 +157,12 @@ def unpack_rgb_kernel(
|
||||
@wp.kernel
|
||||
def extract_depth_kernel(
|
||||
# In:
|
||||
depth_data: wp.array2d(dtype=float),
|
||||
depth_adr: wp.array(dtype=int),
|
||||
depth_data: wp.array2d[float],
|
||||
depth_adr: wp.array[int],
|
||||
camera_index: int,
|
||||
depth_scale: float,
|
||||
# Out:
|
||||
depth_out: wp.array3d(dtype=float),
|
||||
depth_out: wp.array3d[float],
|
||||
):
|
||||
"""Extract the depth data from the render context buffers for a given camera index."""
|
||||
worldid, pixelid = wp.tid()
|
||||
@@ -174,7 +174,7 @@ def extract_depth_kernel(
|
||||
depth_out[worldid, yid, xid] = wp.clamp(val / depth_scale, 0.0, 1.0)
|
||||
|
||||
|
||||
def get_rgb(rc: RenderContext, camera_index: int, rgb_out: wp.array3d(dtype=wp.vec3)):
|
||||
def get_rgb(rc: RenderContext, camera_index: int, rgb_out: wp.array3d[wp.vec3]):
|
||||
"""Get the RGB data output from the render context buffers for a given camera index.
|
||||
|
||||
Args:
|
||||
@@ -190,7 +190,7 @@ def get_rgb(rc: RenderContext, camera_index: int, rgb_out: wp.array3d(dtype=wp.v
|
||||
)
|
||||
|
||||
|
||||
def get_depth(rc: RenderContext, camera_index: int, depth_scale: float, depth_out: wp.array3d(dtype=float)):
|
||||
def get_depth(rc: RenderContext, camera_index: int, depth_scale: float, depth_out: wp.array3d[float]):
|
||||
"""Get the depth data output from the render context buffers for a given camera index.
|
||||
|
||||
Args:
|
||||
@@ -211,11 +211,11 @@ def get_depth(rc: RenderContext, camera_index: int, depth_scale: float, depth_ou
|
||||
@wp.kernel
|
||||
def _extract_seg_kernel(
|
||||
# In:
|
||||
seg_data: wp.array2d(dtype=int),
|
||||
seg_adr: wp.array(dtype=int),
|
||||
seg_data: wp.array2d[int],
|
||||
seg_adr: wp.array[int],
|
||||
camera_index: int,
|
||||
# Out:
|
||||
seg_out: wp.array3d(dtype=int),
|
||||
seg_out: wp.array3d[int],
|
||||
):
|
||||
"""Extract per-pixel geom IDs from the render context buffers for a given camera index."""
|
||||
worldid, pixelid = wp.tid()
|
||||
@@ -226,7 +226,7 @@ def _extract_seg_kernel(
|
||||
seg_out[worldid, yid, xid] = seg_data[worldid, seg_adr_offset + pixelid]
|
||||
|
||||
|
||||
def get_segmentation(rc: RenderContext, camera_index: int, seg_out: wp.array3d(dtype=int)):
|
||||
def get_segmentation(rc: RenderContext, camera_index: int, seg_out: wp.array3d[int]):
|
||||
"""Get the segmentation data from the render context buffers for a given camera index.
|
||||
|
||||
Each pixel contains the MuJoCo geom ID of the geometry hit by the ray, -1 for
|
||||
|
||||
+442
-442
File diff suppressed because it is too large
Load Diff
+471
-471
File diff suppressed because it is too large
Load Diff
+324
-324
File diff suppressed because it is too large
Load Diff
+96
-100
@@ -69,16 +69,16 @@ def mul_m_sparse(check_skip: bool):
|
||||
@wp.kernel(module="unique")
|
||||
def _mul_m_sparse(
|
||||
# Model:
|
||||
qM_mulm_rowadr: wp.array(dtype=int),
|
||||
qM_mulm_col: wp.array(dtype=int),
|
||||
qM_mulm_madr: wp.array(dtype=int),
|
||||
qM_mulm_rowadr: wp.array[int],
|
||||
qM_mulm_col: wp.array[int],
|
||||
qM_mulm_madr: wp.array[int],
|
||||
# Data in:
|
||||
qM_in: wp.array3d(dtype=float),
|
||||
qM_in: wp.array3d[float],
|
||||
# In:
|
||||
vec: wp.array2d(dtype=float),
|
||||
skip: wp.array(dtype=bool),
|
||||
vec: wp.array2d[float],
|
||||
skip: wp.array[bool],
|
||||
# Out:
|
||||
res: wp.array2d(dtype=float),
|
||||
res: wp.array2d[float],
|
||||
):
|
||||
"""Sparse matmul: one thread per DOF, gather-based (no atomics)."""
|
||||
worldid, dofid = wp.tid()
|
||||
@@ -108,12 +108,12 @@ def mul_m_dense(nv: int, check_skip: bool):
|
||||
@wp.kernel(module="unique")
|
||||
def _mul_m_dense(
|
||||
# Data in:
|
||||
qM_in: wp.array3d(dtype=float),
|
||||
qM_in: wp.array3d[float],
|
||||
# In:
|
||||
vec: wp.array2d(dtype=float),
|
||||
skip: wp.array(dtype=bool),
|
||||
vec: wp.array2d[float],
|
||||
skip: wp.array[bool],
|
||||
# Out:
|
||||
res: wp.array2d(dtype=float),
|
||||
res: wp.array2d[float],
|
||||
):
|
||||
worldid, i = wp.tid()
|
||||
|
||||
@@ -133,8 +133,8 @@ def mul_m_dense(nv: int, check_skip: bool):
|
||||
def mul_m(
|
||||
m: Model,
|
||||
d: Data,
|
||||
res: wp.array2d(dtype=float),
|
||||
vec: wp.array2d(dtype=float),
|
||||
res: wp.array2d[float],
|
||||
vec: wp.array2d[float],
|
||||
skip: Optional[wp.array] = None,
|
||||
M: Optional[wp.array] = None,
|
||||
):
|
||||
@@ -175,18 +175,18 @@ def mul_m(
|
||||
def _apply_ft(
|
||||
# Model:
|
||||
nbody: int,
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
dof_bodyid: wp.array[int],
|
||||
# Data in:
|
||||
xipos_in: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
xipos_in: wp.array2d[wp.vec3],
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
# In:
|
||||
ft_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
ft_in: wp.array2d[wp.spatial_vector],
|
||||
flg_add: bool,
|
||||
# Out:
|
||||
qfrc_out: wp.array2d(dtype=float),
|
||||
qfrc_out: wp.array2d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
cdof = cdof_in[worldid, dofid]
|
||||
@@ -216,7 +216,7 @@ def _apply_ft(
|
||||
qfrc_out[worldid, dofid] = accumul
|
||||
|
||||
|
||||
def apply_ft(m: Model, d: Data, ft: wp.array2d(dtype=wp.spatial_vector), qfrc: wp.array2d(dtype=float), flg_add: bool):
|
||||
def apply_ft(m: Model, d: Data, ft: wp.array2d[wp.spatial_vector], qfrc: wp.array2d[float], flg_add: bool):
|
||||
wp.launch(
|
||||
kernel=_apply_ft,
|
||||
dim=(d.nworld, m.nv),
|
||||
@@ -226,7 +226,7 @@ def apply_ft(m: Model, d: Data, ft: wp.array2d(dtype=wp.spatial_vector), qfrc: w
|
||||
|
||||
|
||||
@event_scope
|
||||
def xfrc_accumulate(m: Model, d: Data, qfrc: wp.array2d(dtype=float)):
|
||||
def xfrc_accumulate(m: Model, d: Data, qfrc: wp.array2d[float]):
|
||||
"""Map applied forces at each body via Jacobians to dof space and accumulate.
|
||||
|
||||
Args:
|
||||
@@ -238,9 +238,7 @@ def xfrc_accumulate(m: Model, d: Data, qfrc: wp.array2d(dtype=float)):
|
||||
|
||||
|
||||
@wp.func
|
||||
def _decode_pyramid(
|
||||
njmax_in: int, pyramid: wp.array(dtype=float), efc_address: int, mu: vec5, condim: int
|
||||
) -> wp.spatial_vector:
|
||||
def _decode_pyramid(njmax_in: int, pyramid: wp.array[float], efc_address: int, mu: vec5, condim: int) -> wp.spatial_vector:
|
||||
"""Converts pyramid representation to contact force."""
|
||||
force = wp.spatial_vector()
|
||||
|
||||
@@ -270,13 +268,13 @@ def contact_force_fn(
|
||||
# Model:
|
||||
opt_cone: int,
|
||||
# Data in:
|
||||
contact_frame_in: wp.array(dtype=wp.mat33),
|
||||
contact_friction_in: wp.array(dtype=vec5),
|
||||
contact_dim_in: wp.array(dtype=int),
|
||||
contact_efc_address_in: wp.array2d(dtype=int),
|
||||
efc_force_in: wp.array2d(dtype=float),
|
||||
contact_frame_in: wp.array[wp.mat33],
|
||||
contact_friction_in: wp.array[vec5],
|
||||
contact_dim_in: wp.array[int],
|
||||
contact_efc_address_in: wp.array2d[int],
|
||||
efc_force_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
nacon_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
# In:
|
||||
worldid: int,
|
||||
contact_id: int,
|
||||
@@ -315,19 +313,19 @@ def contact_force_kernel(
|
||||
# Model:
|
||||
opt_cone: int,
|
||||
# Data in:
|
||||
contact_frame_in: wp.array(dtype=wp.mat33),
|
||||
contact_friction_in: wp.array(dtype=vec5),
|
||||
contact_dim_in: wp.array(dtype=int),
|
||||
contact_efc_address_in: wp.array2d(dtype=int),
|
||||
contact_worldid_in: wp.array(dtype=int),
|
||||
efc_force_in: wp.array2d(dtype=float),
|
||||
contact_frame_in: wp.array[wp.mat33],
|
||||
contact_friction_in: wp.array[vec5],
|
||||
contact_dim_in: wp.array[int],
|
||||
contact_efc_address_in: wp.array2d[int],
|
||||
contact_worldid_in: wp.array[int],
|
||||
efc_force_in: wp.array2d[float],
|
||||
njmax_in: int,
|
||||
nacon_in: wp.array(dtype=int),
|
||||
nacon_in: wp.array[int],
|
||||
# In:
|
||||
contact_ids: wp.array(dtype=int),
|
||||
contact_ids: wp.array[int],
|
||||
to_world_frame: bool,
|
||||
# Out:
|
||||
out: wp.array(dtype=wp.spatial_vector),
|
||||
out: wp.array[wp.spatial_vector],
|
||||
):
|
||||
tid = wp.tid()
|
||||
|
||||
@@ -353,9 +351,7 @@ def contact_force_kernel(
|
||||
)
|
||||
|
||||
|
||||
def contact_force(
|
||||
m: Model, d: Data, contact_ids: wp.array(dtype=int), to_world_frame: bool, force: wp.array(dtype=wp.spatial_vector)
|
||||
):
|
||||
def contact_force(m: Model, d: Data, contact_ids: wp.array[int], to_world_frame: bool, force: wp.array[wp.spatial_vector]):
|
||||
"""Compute forces for contacts in Data.
|
||||
|
||||
Args:
|
||||
@@ -400,12 +396,12 @@ def transform_force(frc: wp.spatial_vector, offset: wp.vec3) -> wp.spatial_vecto
|
||||
@wp.func
|
||||
def jac_dof(
|
||||
# Model:
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
dof_bodyid: wp.array[int],
|
||||
# Data in:
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
# In:
|
||||
point: wp.vec3,
|
||||
bodyid: int,
|
||||
@@ -441,18 +437,18 @@ def _make_jac_kernel(has_jacp: bool, has_jacr: bool):
|
||||
@wp.kernel(module="unique", enable_backward=False)
|
||||
def _jac(
|
||||
# Model:
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
dof_bodyid: wp.array[int],
|
||||
# Data in:
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
# In:
|
||||
point_in: wp.array(dtype=wp.vec3),
|
||||
bodyid_in: wp.array(dtype=int),
|
||||
point_in: wp.array[wp.vec3],
|
||||
bodyid_in: wp.array[int],
|
||||
# Out:
|
||||
jacp_out: wp.array3d(dtype=float),
|
||||
jacr_out: wp.array3d(dtype=float),
|
||||
jacp_out: wp.array3d[float],
|
||||
jacr_out: wp.array3d[float],
|
||||
):
|
||||
worldid, dofid = wp.tid()
|
||||
|
||||
@@ -477,10 +473,10 @@ def _make_jac_kernel(has_jacp: bool, has_jacr: bool):
|
||||
def jac(
|
||||
m: Model,
|
||||
d: Data,
|
||||
jacp: wp.array | None, # wp.array3d(dtype=float)
|
||||
jacr: wp.array | None, # wp.array3d(dtype=float)
|
||||
point: wp.array(dtype=wp.vec3),
|
||||
body: wp.array(dtype=int),
|
||||
jacp: wp.array | None, # wp.array3d[float]
|
||||
jacr: wp.array | None, # wp.array3d[float]
|
||||
point: wp.array[wp.vec3],
|
||||
body: wp.array[int],
|
||||
):
|
||||
"""Compute translational and rotational Jacobian for point on body.
|
||||
|
||||
@@ -508,17 +504,17 @@ def jac(
|
||||
@wp.func
|
||||
def jac_dot_dof(
|
||||
# Model:
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
dof_bodyid: wp.array(dtype=int),
|
||||
dof_jntid: wp.array(dtype=int),
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
jnt_type: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
dof_bodyid: wp.array[int],
|
||||
dof_jntid: wp.array[int],
|
||||
# Data in:
|
||||
subtree_com_in: wp.array2d(dtype=wp.vec3),
|
||||
cdof_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
cvel_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
cdof_dot_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
subtree_com_in: wp.array2d[wp.vec3],
|
||||
cdof_in: wp.array2d[wp.spatial_vector],
|
||||
cvel_in: wp.array2d[wp.spatial_vector],
|
||||
cdof_dot_in: wp.array2d[wp.spatial_vector],
|
||||
# In:
|
||||
point: wp.vec3,
|
||||
bodyid: int,
|
||||
@@ -573,7 +569,7 @@ def jac_dot_dof(
|
||||
return jacp, jacr
|
||||
|
||||
|
||||
def get_state(m: Model, d: Data, state: wp.array2d(dtype=float), sig: int, active: Optional[wp.array] = None):
|
||||
def get_state(m: Model, d: Data, state: wp.array2d[float], sig: int, active: Optional[wp.array] = None):
|
||||
"""Copy concatenated state components specified by sig from Data into state.
|
||||
|
||||
The bits of the integer sig correspond to element fields of State.
|
||||
@@ -599,22 +595,22 @@ def get_state(m: Model, d: Data, state: wp.array2d(dtype=float), sig: int, activ
|
||||
neq: int,
|
||||
nmocap: int,
|
||||
# Data in:
|
||||
time_in: wp.array(dtype=float),
|
||||
qpos_in: wp.array2d(dtype=float),
|
||||
qvel_in: wp.array2d(dtype=float),
|
||||
act_in: wp.array2d(dtype=float),
|
||||
qacc_warmstart_in: wp.array2d(dtype=float),
|
||||
ctrl_in: wp.array2d(dtype=float),
|
||||
qfrc_applied_in: wp.array2d(dtype=float),
|
||||
xfrc_applied_in: wp.array2d(dtype=wp.spatial_vector),
|
||||
eq_active_in: wp.array2d(dtype=bool),
|
||||
mocap_pos_in: wp.array2d(dtype=wp.vec3),
|
||||
mocap_quat_in: wp.array2d(dtype=wp.quat),
|
||||
time_in: wp.array[float],
|
||||
qpos_in: wp.array2d[float],
|
||||
qvel_in: wp.array2d[float],
|
||||
act_in: wp.array2d[float],
|
||||
qacc_warmstart_in: wp.array2d[float],
|
||||
ctrl_in: wp.array2d[float],
|
||||
qfrc_applied_in: wp.array2d[float],
|
||||
xfrc_applied_in: wp.array2d[wp.spatial_vector],
|
||||
eq_active_in: wp.array2d[bool],
|
||||
mocap_pos_in: wp.array2d[wp.vec3],
|
||||
mocap_quat_in: wp.array2d[wp.quat],
|
||||
# In:
|
||||
sig_in: int,
|
||||
active_in: wp.array(dtype=bool),
|
||||
active_in: wp.array[bool],
|
||||
# Out:
|
||||
state_out: wp.array2d(dtype=float),
|
||||
state_out: wp.array2d[float],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
@@ -712,7 +708,7 @@ def get_state(m: Model, d: Data, state: wp.array2d(dtype=float), sig: int, activ
|
||||
)
|
||||
|
||||
|
||||
def set_state(m: Model, d: Data, state: wp.array2d(dtype=float), sig: int, active: Optional[wp.array] = None):
|
||||
def set_state(m: Model, d: Data, state: wp.array2d[float], sig: int, active: Optional[wp.array] = None):
|
||||
"""Copy concatenated state components specified by sig from state into Data.
|
||||
|
||||
The bits of the integer sig correspond to element fields of State.
|
||||
@@ -739,20 +735,20 @@ def set_state(m: Model, d: Data, state: wp.array2d(dtype=float), sig: int, activ
|
||||
nmocap: int,
|
||||
# In:
|
||||
sig_in: int,
|
||||
active_in: wp.array(dtype=bool),
|
||||
state_in: wp.array2d(dtype=float),
|
||||
active_in: wp.array[bool],
|
||||
state_in: wp.array2d[float],
|
||||
# Data out:
|
||||
time_out: wp.array(dtype=float),
|
||||
qpos_out: wp.array2d(dtype=float),
|
||||
qvel_out: wp.array2d(dtype=float),
|
||||
act_out: wp.array2d(dtype=float),
|
||||
qacc_warmstart_out: wp.array2d(dtype=float),
|
||||
ctrl_out: wp.array2d(dtype=float),
|
||||
qfrc_applied_out: wp.array2d(dtype=float),
|
||||
xfrc_applied_out: wp.array2d(dtype=wp.spatial_vector),
|
||||
eq_active_out: wp.array2d(dtype=bool),
|
||||
mocap_pos_out: wp.array2d(dtype=wp.vec3),
|
||||
mocap_quat_out: wp.array2d(dtype=wp.quat),
|
||||
time_out: wp.array[float],
|
||||
qpos_out: wp.array2d[float],
|
||||
qvel_out: wp.array2d[float],
|
||||
act_out: wp.array2d[float],
|
||||
qacc_warmstart_out: wp.array2d[float],
|
||||
ctrl_out: wp.array2d[float],
|
||||
qfrc_applied_out: wp.array2d[float],
|
||||
xfrc_applied_out: wp.array2d[wp.spatial_vector],
|
||||
eq_active_out: wp.array2d[bool],
|
||||
mocap_pos_out: wp.array2d[wp.vec3],
|
||||
mocap_quat_out: wp.array2d[wp.quat],
|
||||
):
|
||||
worldid = wp.tid()
|
||||
|
||||
|
||||
+66
-56
@@ -17,6 +17,7 @@ import enum
|
||||
from typing import Callable
|
||||
|
||||
import mujoco
|
||||
import numpy as np
|
||||
import warp as wp
|
||||
|
||||
MJ_MINVAL = mujoco.mjMINVAL
|
||||
@@ -793,9 +794,18 @@ class TileSet:
|
||||
size: size of all the tiles in this set
|
||||
"""
|
||||
|
||||
adr: wp.array(dtype=int)
|
||||
adr: wp.array[int]
|
||||
size: int
|
||||
|
||||
def __eq__(self, other) -> bool:
|
||||
if self.__class__ is not other.__class__:
|
||||
return NotImplemented
|
||||
return self.size == other.size and np.array_equal(np.asarray(self.adr.numpy()), np.asarray(other.adr.numpy()))
|
||||
|
||||
def __hash__(self) -> int:
|
||||
adr = np.asarray(self.adr.numpy())
|
||||
return hash((self.size, adr.dtype.str, adr.shape, adr.tobytes()))
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Callback:
|
||||
@@ -933,7 +943,7 @@ class Model:
|
||||
geom_conaffinity: geom contact affinity (ngeom,)
|
||||
geom_condim: contact dimensionality (1, 3, 4, 6) (ngeom,)
|
||||
geom_bodyid: id of geom's body (ngeom,)
|
||||
geom_dataid: id of geom's mesh/hfield; -1: none (ngeom,)
|
||||
geom_dataid: id of geom's mesh/hfield; -1: none (*, ngeom)
|
||||
geom_matid: material id for rendering (*, ngeom,)
|
||||
geom_group: geom group inclusion/exclusion mask (ngeom,)
|
||||
geom_priority: geom contact priority (ngeom,)
|
||||
@@ -1322,7 +1332,7 @@ class Model:
|
||||
geom_conaffinity: array("ngeom", int)
|
||||
geom_condim: array("ngeom", int)
|
||||
geom_bodyid: array("ngeom", int)
|
||||
geom_dataid: array("ngeom", int)
|
||||
geom_dataid: array("*", "ngeom", int)
|
||||
geom_matid: array("*", "ngeom", int)
|
||||
geom_group: array("ngeom", int)
|
||||
geom_priority: array("ngeom", int)
|
||||
@@ -1527,70 +1537,70 @@ class Model:
|
||||
has_fluid: bool
|
||||
has_sdf_geom: bool
|
||||
block_dim: BlockDim
|
||||
body_tree: tuple[wp.array(dtype=int), ...]
|
||||
body_branches: wp.array(dtype=int)
|
||||
body_branch_start: wp.array(dtype=int)
|
||||
body_tree: tuple[wp.array[int], ...]
|
||||
body_branches: wp.array[int]
|
||||
body_branch_start: wp.array[int]
|
||||
mocap_bodyid: array("nmocap", int)
|
||||
body_fluid_ellipsoid: array("nbody", bool)
|
||||
jnt_limited_slide_hinge_adr: wp.array(dtype=int)
|
||||
jnt_limited_ball_adr: wp.array(dtype=int)
|
||||
dof_tri_row: wp.array(dtype=int)
|
||||
dof_tri_col: wp.array(dtype=int)
|
||||
nxn_geom_pair: wp.array(dtype=wp.vec2i)
|
||||
nxn_geom_pair_filtered: wp.array(dtype=wp.vec2i)
|
||||
nxn_pairid: wp.array(dtype=wp.vec2i)
|
||||
nxn_pairid_filtered: wp.array(dtype=wp.vec2i)
|
||||
jnt_limited_slide_hinge_adr: wp.array[int]
|
||||
jnt_limited_ball_adr: wp.array[int]
|
||||
dof_tri_row: wp.array[int]
|
||||
dof_tri_col: wp.array[int]
|
||||
nxn_geom_pair: wp.array[wp.vec2i]
|
||||
nxn_geom_pair_filtered: wp.array[wp.vec2i]
|
||||
nxn_pairid: wp.array[wp.vec2i]
|
||||
nxn_pairid_filtered: wp.array[wp.vec2i]
|
||||
geom_pair_type_count: tuple[int, ...]
|
||||
geom_plugin_index: array("ngeom", int)
|
||||
eq_connect_adr: wp.array(dtype=int)
|
||||
eq_wld_adr: wp.array(dtype=int)
|
||||
eq_jnt_adr: wp.array(dtype=int)
|
||||
eq_ten_adr: wp.array(dtype=int)
|
||||
eq_flex_adr: wp.array(dtype=int)
|
||||
tendon_jnt_adr: wp.array(dtype=int)
|
||||
tendon_site_pair_adr: wp.array(dtype=int)
|
||||
tendon_geom_adr: wp.array(dtype=int)
|
||||
tendon_limited_adr: wp.array(dtype=int)
|
||||
eq_connect_adr: wp.array[int]
|
||||
eq_wld_adr: wp.array[int]
|
||||
eq_jnt_adr: wp.array[int]
|
||||
eq_ten_adr: wp.array[int]
|
||||
eq_flex_adr: wp.array[int]
|
||||
tendon_jnt_adr: wp.array[int]
|
||||
tendon_site_pair_adr: wp.array[int]
|
||||
tendon_geom_adr: wp.array[int]
|
||||
tendon_limited_adr: wp.array[int]
|
||||
max_ten_J_rownnz: int
|
||||
ten_wrapadr_site: wp.array(dtype=int)
|
||||
ten_wrapnum_site: wp.array(dtype=int)
|
||||
wrap_jnt_adr: wp.array(dtype=int)
|
||||
wrap_site_adr: wp.array(dtype=int)
|
||||
wrap_site_pair_adr: wp.array(dtype=int)
|
||||
wrap_geom_adr: wp.array(dtype=int)
|
||||
ten_wrapadr_site: wp.array[int]
|
||||
ten_wrapnum_site: wp.array[int]
|
||||
wrap_jnt_adr: wp.array[int]
|
||||
wrap_site_adr: wp.array[int]
|
||||
wrap_site_pair_adr: wp.array[int]
|
||||
wrap_geom_adr: wp.array[int]
|
||||
wrap_pulley_scale: array("nwrap", float)
|
||||
actuator_trntype_body_adr: wp.array(dtype=int)
|
||||
sensor_pos_adr: wp.array(dtype=int)
|
||||
sensor_limitpos_adr: wp.array(dtype=int)
|
||||
sensor_vel_adr: wp.array(dtype=int)
|
||||
sensor_limitvel_adr: wp.array(dtype=int)
|
||||
sensor_acc_adr: wp.array(dtype=int)
|
||||
sensor_rangefinder_adr: wp.array(dtype=int)
|
||||
rangefinder_sensor_adr: wp.array(dtype=int)
|
||||
sensor_collision_start_adr: wp.array(dtype=int)
|
||||
actuator_trntype_body_adr: wp.array[int]
|
||||
sensor_pos_adr: wp.array[int]
|
||||
sensor_limitpos_adr: wp.array[int]
|
||||
sensor_vel_adr: wp.array[int]
|
||||
sensor_limitvel_adr: wp.array[int]
|
||||
sensor_acc_adr: wp.array[int]
|
||||
sensor_rangefinder_adr: wp.array[int]
|
||||
rangefinder_sensor_adr: wp.array[int]
|
||||
sensor_collision_start_adr: wp.array[int]
|
||||
collision_sensor_adr: array("nsensor", int)
|
||||
sensor_touch_adr: wp.array(dtype=int)
|
||||
sensor_limitfrc_adr: wp.array(dtype=int)
|
||||
sensor_touch_adr: wp.array[int]
|
||||
sensor_limitfrc_adr: wp.array[int]
|
||||
sensor_e_potential: bool
|
||||
sensor_e_kinetic: bool
|
||||
sensor_tendonactfrc_adr: wp.array(dtype=int)
|
||||
sensor_tendonactfrc_adr: wp.array[int]
|
||||
sensor_subtree_vel: bool
|
||||
sensor_contact_adr: array("nsensorcontact", int)
|
||||
sensor_adr_to_contact_adr: array("nsensor", int)
|
||||
sensor_rne_postconstraint: bool
|
||||
sensor_rangefinder_bodyid: array("nrangefinder", int)
|
||||
taxel_vertadr: array("nsensortaxel", int)
|
||||
taxel_sensorid: wp.array(dtype=int)
|
||||
taxel_sensorid: wp.array[int]
|
||||
qM_tiles: tuple[TileSet, ...]
|
||||
qLD_updates: tuple[wp.array(dtype=wp.vec3i), ...]
|
||||
qLD_all_updates: wp.array(dtype=wp.vec3i)
|
||||
qLD_level_offsets: wp.array(dtype=int)
|
||||
qM_fullm_i: wp.array(dtype=int)
|
||||
qM_fullm_j: wp.array(dtype=int)
|
||||
qLD_updates: tuple[wp.array[wp.vec3i], ...]
|
||||
qLD_all_updates: wp.array[wp.vec3i]
|
||||
qLD_level_offsets: wp.array[int]
|
||||
qM_fullm_i: wp.array[int]
|
||||
qM_fullm_j: wp.array[int]
|
||||
# Gather-based sparse mul_m indices (thread per DOF, no atomics)
|
||||
qM_mulm_rowadr: wp.array(dtype=int) # start address for each row [nv+1]
|
||||
qM_mulm_col: wp.array(dtype=int) # column index to gather from
|
||||
qM_mulm_madr: wp.array(dtype=int) # matrix address to read
|
||||
qM_mulm_rowadr: wp.array[int] # start address for each row [nv+1]
|
||||
qM_mulm_col: wp.array[int] # column index to gather from
|
||||
qM_mulm_madr: wp.array[int] # matrix address to read
|
||||
|
||||
|
||||
class ContactType(enum.IntFlag):
|
||||
@@ -1674,10 +1684,10 @@ class Constraint:
|
||||
|
||||
type: array("nworld", "njmax", int)
|
||||
id: array("nworld", "njmax", int)
|
||||
J_rownnz: wp.array2d(dtype=int)
|
||||
J_rowadr: wp.array2d(dtype=int)
|
||||
J_colind: wp.array3d(dtype=int)
|
||||
J: wp.array3d(dtype=float)
|
||||
J_rownnz: wp.array2d[int]
|
||||
J_rowadr: wp.array2d[int]
|
||||
J_colind: wp.array3d[int]
|
||||
J: wp.array3d[float]
|
||||
pos: array("nworld", "njmax", float)
|
||||
margin: array("nworld", "njmax", float)
|
||||
D: array("nworld", "njmax_pad", float)
|
||||
@@ -1846,8 +1856,8 @@ class Data:
|
||||
moment_colind: array("nworld", "nJmom", int)
|
||||
actuator_moment: array("nworld", "nJmom", float)
|
||||
crb: array("nworld", "nbody", vec10)
|
||||
qM: wp.array3d(dtype=float)
|
||||
qLD: wp.array3d(dtype=float)
|
||||
qM: wp.array3d[float]
|
||||
qLD: wp.array3d[float]
|
||||
qLDiagInv: array("nworld", "nv", float)
|
||||
flexedge_velocity: array("nworld", "nflexedge", float)
|
||||
ten_velocity: array("nworld", "ntendon", float)
|
||||
|
||||
@@ -57,6 +57,7 @@ dev = [
|
||||
"lsprotocol>=2023.0.1,<2024.0.0",
|
||||
"mujoco>=3.6.0.dev0",
|
||||
"warp-lang>=1.11.0.dev0",
|
||||
"mjviser>=0.0.10",
|
||||
]
|
||||
# TODO(team): cpu and cuda JAX optional dependencies are temporary, remove after we land MJX:Warp
|
||||
cpu = [
|
||||
|
||||
+74
-40
@@ -1,4 +1,4 @@
|
||||
# Copyright 2025 The Newton Developers
|
||||
# Copyright 2026 The Newton Developers
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
@@ -62,6 +62,7 @@ _OVERRIDE = flags.DEFINE_multi_string("override", [], "Model overrides (notation
|
||||
_KEYFRAME = flags.DEFINE_integer("keyframe", 0, "keyframe to initialize simulation.")
|
||||
_DEVICE = flags.DEFINE_string("device", None, "override the default Warp device")
|
||||
_REPLAY = flags.DEFINE_string("replay", None, "keyframe sequence to replay, keyframe name must prefix match")
|
||||
_VIEWER = flags.DEFINE_enum("viewer", "mujoco", ["mujoco", "viser"], "Viewer backend (mujoco native or mjviser web)")
|
||||
|
||||
_VIEWER_GLOBAL_STATE = {"running": True, "step_once": False}
|
||||
|
||||
@@ -105,6 +106,70 @@ def _compile_step(m, d):
|
||||
return capture.graph
|
||||
|
||||
|
||||
def _make_warp_step_fn(mjm, m, d, graph, ctrls=None):
|
||||
ctrlid = 0
|
||||
opt = copy.copy(mjm.opt)
|
||||
|
||||
def step_fn(mjm, mjd):
|
||||
nonlocal ctrlid, opt, m, graph
|
||||
if ctrls is not None and ctrlid < len(ctrls):
|
||||
mjd.ctrl[:] = ctrls[ctrlid]
|
||||
ctrlid += 1
|
||||
if mjm.opt != opt:
|
||||
opt = copy.copy(mjm.opt)
|
||||
m = mjw.put_model(mjm)
|
||||
graph = _compile_step(m, d) if wp.get_device().is_cuda else None
|
||||
wp.copy(d.ctrl, wp.array([mjd.ctrl.astype(np.float32)]))
|
||||
wp.copy(d.act, wp.array([mjd.act.astype(np.float32)]))
|
||||
wp.copy(d.xfrc_applied, wp.array([mjd.xfrc_applied.astype(np.float32)]))
|
||||
wp.copy(d.qpos, wp.array([mjd.qpos.astype(np.float32)]))
|
||||
wp.copy(d.qvel, wp.array([mjd.qvel.astype(np.float32)]))
|
||||
wp.copy(d.time, wp.array([mjd.time], dtype=wp.float32))
|
||||
if graph is None:
|
||||
mjw.step(m, d)
|
||||
else:
|
||||
wp.capture_launch(graph)
|
||||
wp.synchronize()
|
||||
mjw.get_data_into(mjd, mjm, d)
|
||||
|
||||
return step_fn
|
||||
|
||||
|
||||
def _make_c_step_fn(ctrls=None):
|
||||
if ctrls is None:
|
||||
return mujoco.mj_step
|
||||
|
||||
ctrlid = 0
|
||||
|
||||
def step_fn(mjm, mjd):
|
||||
nonlocal ctrlid
|
||||
if ctrlid < len(ctrls):
|
||||
mjd.ctrl[:] = ctrls[ctrlid]
|
||||
ctrlid += 1
|
||||
mujoco.mj_step(mjm, mjd)
|
||||
|
||||
return step_fn
|
||||
|
||||
|
||||
def _run_viser_viewer(mjm, mjd, step_fn):
|
||||
from mjviser import Viewer as MjViserViewer
|
||||
|
||||
MjViserViewer(mjm, mjd, step_fn=step_fn).run()
|
||||
|
||||
|
||||
def _run_passive_viewer(mjm, mjd, step_fn):
|
||||
with mujoco.viewer.launch_passive(mjm, mjd, key_callback=key_callback) as viewer:
|
||||
while True:
|
||||
start = time.time()
|
||||
if _VIEWER_GLOBAL_STATE["running"] or _VIEWER_GLOBAL_STATE["step_once"]:
|
||||
_VIEWER_GLOBAL_STATE["step_once"] = False
|
||||
step_fn(mjm, mjd)
|
||||
viewer.sync()
|
||||
elapsed = time.time() - start
|
||||
if elapsed < mjm.opt.timestep:
|
||||
time.sleep(mjm.opt.timestep - elapsed)
|
||||
|
||||
|
||||
def _main(argv: Sequence[str]) -> None:
|
||||
"""Runs viewer app."""
|
||||
if len(argv) < 2:
|
||||
@@ -115,7 +180,6 @@ def _main(argv: Sequence[str]) -> None:
|
||||
mjm = _load_model(epath.Path(argv[1]))
|
||||
mjd = mujoco.MjData(mjm)
|
||||
ctrls = None
|
||||
ctrlid = 0
|
||||
if _REPLAY.value:
|
||||
keys = find_keys(mjm, _REPLAY.value)
|
||||
if not keys:
|
||||
@@ -169,45 +233,15 @@ def _main(argv: Sequence[str]) -> None:
|
||||
print(f"Data\n nworld: {d.nworld} nconmax: {int(d.naconmax / d.nworld)} njmax: {d.njmax}\n")
|
||||
print(f"MuJoCo Warp simulating with dt = {m.opt.timestep.numpy()[0]:.3f}...")
|
||||
|
||||
with mujoco.viewer.launch_passive(mjm, mjd, key_callback=key_callback) as viewer:
|
||||
opt = copy.copy(mjm.opt)
|
||||
if _ENGINE.value == EngineOptions.WARP:
|
||||
step_fn = _make_warp_step_fn(mjm, m, d, graph, ctrls)
|
||||
else:
|
||||
step_fn = _make_c_step_fn(ctrls)
|
||||
|
||||
while True:
|
||||
start = time.time()
|
||||
|
||||
if ctrls is not None and ctrlid < len(ctrls):
|
||||
mjd.ctrl[:] = ctrls[ctrlid]
|
||||
ctrlid += 1
|
||||
|
||||
if _ENGINE.value == EngineOptions.C:
|
||||
mujoco.mj_step(mjm, mjd)
|
||||
else: # mjwarp
|
||||
wp.copy(d.ctrl, wp.array([mjd.ctrl.astype(np.float32)]))
|
||||
wp.copy(d.act, wp.array([mjd.act.astype(np.float32)]))
|
||||
wp.copy(d.xfrc_applied, wp.array([mjd.xfrc_applied.astype(np.float32)]))
|
||||
wp.copy(d.qpos, wp.array([mjd.qpos.astype(np.float32)]))
|
||||
wp.copy(d.qvel, wp.array([mjd.qvel.astype(np.float32)]))
|
||||
wp.copy(d.time, wp.array([mjd.time], dtype=wp.float32))
|
||||
# if the user changed an option in the MuJoCo Simulate UI, go ahead and recompile the step
|
||||
# TODO: update memory tied to option max iterations
|
||||
if mjm.opt != opt:
|
||||
opt = copy.copy(mjm.opt)
|
||||
m = mjw.put_model(mjm)
|
||||
graph = _compile_step(m, d) if wp.get_device().is_cuda else None
|
||||
if _VIEWER_GLOBAL_STATE["running"] or _VIEWER_GLOBAL_STATE["step_once"]:
|
||||
_VIEWER_GLOBAL_STATE["step_once"] = False
|
||||
if graph is None:
|
||||
mjw.step(m, d)
|
||||
else:
|
||||
wp.capture_launch(graph)
|
||||
wp.synchronize()
|
||||
mjw.get_data_into(mjd, mjm, d)
|
||||
|
||||
viewer.sync()
|
||||
|
||||
elapsed = time.time() - start
|
||||
if elapsed < mjm.opt.timestep:
|
||||
time.sleep(mjm.opt.timestep - elapsed)
|
||||
if _VIEWER.value == "viser":
|
||||
_run_viser_viewer(mjm, mjd, step_fn)
|
||||
else:
|
||||
_run_passive_viewer(mjm, mjd, step_fn)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
+20
-19
@@ -48,34 +48,35 @@ _cb = mjwp_types.Callback(
|
||||
**{f.name: None for f in dataclasses.fields(mjwp_types.Callback) if f.init}
|
||||
)
|
||||
|
||||
|
||||
@ffi.format_args_for_warp
|
||||
def _refit_bvh_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_elemadr: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_shelldataadr: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_vertnum: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_type: wp.array(dtype=int),
|
||||
flex_dim: wp.array[int],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_elem: wp.array[int],
|
||||
flex_elemadr: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_radius: wp.array[float],
|
||||
flex_shell: wp.array[int],
|
||||
flex_shelldataadr: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_vertnum: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_type: wp.array[int],
|
||||
nflex: int,
|
||||
nflexelem: int,
|
||||
# Data
|
||||
flexvert_xpos: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos: wp.array2d[wp.vec3],
|
||||
geom_xmat: wp.array2d[wp.mat33],
|
||||
geom_xpos: wp.array2d[wp.vec3],
|
||||
# Registry
|
||||
rc_id: int,
|
||||
# Dummy output
|
||||
dummy: wp.array(dtype=int),
|
||||
dummy: wp.array[int],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
@@ -135,7 +136,7 @@ def _refit_bvh_jax_impl(
|
||||
m._impl.flex_shelldataadr,
|
||||
m.flex_vertadr,
|
||||
m.flex_vertnum,
|
||||
m.geom_dataid,
|
||||
jax.numpy.expand_dims(m.geom_dataid, 0),
|
||||
m.geom_size,
|
||||
m.geom_type,
|
||||
m.nflex,
|
||||
|
||||
@@ -46,67 +46,68 @@ _cb = mjwp_types.Callback(
|
||||
**{f.name: None for f in dataclasses.fields(mjwp_types.Callback) if f.init}
|
||||
)
|
||||
|
||||
|
||||
@ffi.format_args_for_warp
|
||||
def _collision_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
block_dim: mjwp_types.BlockDim,
|
||||
flex_conaffinity: wp.array(dtype=int),
|
||||
flex_condim: wp.array(dtype=int),
|
||||
flex_contype: wp.array(dtype=int),
|
||||
flex_dim: wp.array(dtype=int),
|
||||
flex_elem: wp.array(dtype=int),
|
||||
flex_elemadr: wp.array(dtype=int),
|
||||
flex_elemdataadr: wp.array(dtype=int),
|
||||
flex_elemnum: wp.array(dtype=int),
|
||||
flex_friction: wp.array(dtype=wp.vec3),
|
||||
flex_margin: wp.array(dtype=float),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_shell: wp.array(dtype=int),
|
||||
flex_shelldataadr: wp.array(dtype=int),
|
||||
flex_shellnum: wp.array(dtype=int),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
flex_vertflexid: wp.array(dtype=int),
|
||||
geom_aabb: wp.array3d(dtype=wp.vec3),
|
||||
geom_conaffinity: wp.array(dtype=int),
|
||||
geom_condim: wp.array(dtype=int),
|
||||
geom_contype: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_friction: wp.array2d(dtype=wp.vec3),
|
||||
geom_gap: wp.array2d(dtype=float),
|
||||
geom_margin: wp.array2d(dtype=float),
|
||||
flex_conaffinity: wp.array[int],
|
||||
flex_condim: wp.array[int],
|
||||
flex_contype: wp.array[int],
|
||||
flex_dim: wp.array[int],
|
||||
flex_elem: wp.array[int],
|
||||
flex_elemadr: wp.array[int],
|
||||
flex_elemdataadr: wp.array[int],
|
||||
flex_elemnum: wp.array[int],
|
||||
flex_friction: wp.array[wp.vec3],
|
||||
flex_margin: wp.array[float],
|
||||
flex_radius: wp.array[float],
|
||||
flex_shell: wp.array[int],
|
||||
flex_shelldataadr: wp.array[int],
|
||||
flex_shellnum: wp.array[int],
|
||||
flex_vertadr: wp.array[int],
|
||||
flex_vertflexid: wp.array[int],
|
||||
geom_aabb: wp.array3d[wp.vec3],
|
||||
geom_conaffinity: wp.array[int],
|
||||
geom_condim: wp.array[int],
|
||||
geom_contype: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_friction: wp.array2d[wp.vec3],
|
||||
geom_gap: wp.array2d[float],
|
||||
geom_margin: wp.array2d[float],
|
||||
geom_pair_type_count: tuple[int, ...],
|
||||
geom_plugin_index: wp.array(dtype=int),
|
||||
geom_priority: wp.array(dtype=int),
|
||||
geom_rbound: wp.array2d(dtype=float),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_solimp: wp.array2d(dtype=mjwp_types.vec5),
|
||||
geom_solmix: wp.array2d(dtype=float),
|
||||
geom_solref: wp.array2d(dtype=wp.vec2),
|
||||
geom_type: wp.array(dtype=int),
|
||||
geom_plugin_index: wp.array[int],
|
||||
geom_priority: wp.array[int],
|
||||
geom_rbound: wp.array2d[float],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_solimp: wp.array2d[mjwp_types.vec5],
|
||||
geom_solmix: wp.array2d[float],
|
||||
geom_solref: wp.array2d[wp.vec2],
|
||||
geom_type: wp.array[int],
|
||||
has_sdf_geom: bool,
|
||||
hfield_adr: wp.array(dtype=int),
|
||||
hfield_data: wp.array(dtype=float),
|
||||
hfield_ncol: wp.array(dtype=int),
|
||||
hfield_nrow: wp.array(dtype=int),
|
||||
hfield_size: wp.array(dtype=wp.vec4),
|
||||
mesh_face: wp.array(dtype=wp.vec3i),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
mesh_graph: wp.array(dtype=int),
|
||||
mesh_graphadr: wp.array(dtype=int),
|
||||
mesh_octadr: wp.array(dtype=int),
|
||||
mesh_polyadr: wp.array(dtype=int),
|
||||
mesh_polymap: wp.array(dtype=int),
|
||||
mesh_polymapadr: wp.array(dtype=int),
|
||||
mesh_polymapnum: wp.array(dtype=int),
|
||||
mesh_polynormal: wp.array(dtype=wp.vec3),
|
||||
mesh_polynum: wp.array(dtype=int),
|
||||
mesh_polyvert: wp.array(dtype=int),
|
||||
mesh_polyvertadr: wp.array(dtype=int),
|
||||
mesh_polyvertnum: wp.array(dtype=int),
|
||||
mesh_vert: wp.array(dtype=wp.vec3),
|
||||
mesh_vertadr: wp.array(dtype=int),
|
||||
mesh_vertnum: wp.array(dtype=int),
|
||||
hfield_adr: wp.array[int],
|
||||
hfield_data: wp.array[float],
|
||||
hfield_ncol: wp.array[int],
|
||||
hfield_nrow: wp.array[int],
|
||||
hfield_size: wp.array[wp.vec4],
|
||||
mesh_face: wp.array[wp.vec3i],
|
||||
mesh_faceadr: wp.array[int],
|
||||
mesh_graph: wp.array[int],
|
||||
mesh_graphadr: wp.array[int],
|
||||
mesh_octadr: wp.array[int],
|
||||
mesh_polyadr: wp.array[int],
|
||||
mesh_polymap: wp.array[int],
|
||||
mesh_polymapadr: wp.array[int],
|
||||
mesh_polymapnum: wp.array[int],
|
||||
mesh_polynormal: wp.array[wp.vec3],
|
||||
mesh_polynum: wp.array[int],
|
||||
mesh_polyvert: wp.array[int],
|
||||
mesh_polyvertadr: wp.array[int],
|
||||
mesh_polyvertnum: wp.array[int],
|
||||
mesh_vert: wp.array[wp.vec3],
|
||||
mesh_vertadr: wp.array[int],
|
||||
mesh_vertnum: wp.array[int],
|
||||
nflex: int,
|
||||
nflexelem: int,
|
||||
nflexshelldata: int,
|
||||
@@ -115,25 +116,25 @@ def _collision_shim(
|
||||
nmaxmeshdeg: int,
|
||||
nmaxpolygon: int,
|
||||
nmeshface: int,
|
||||
nxn_geom_pair_filtered: wp.array(dtype=wp.vec2i),
|
||||
nxn_pairid: wp.array(dtype=wp.vec2i),
|
||||
nxn_pairid_filtered: wp.array(dtype=wp.vec2i),
|
||||
oct_aabb: wp.array2d(dtype=wp.vec3),
|
||||
oct_child: wp.array(dtype=mjwp_types.vec8i),
|
||||
oct_coeff: wp.array(dtype=mjwp_types.vec8),
|
||||
pair_dim: wp.array(dtype=int),
|
||||
pair_friction: wp.array2d(dtype=mjwp_types.vec5),
|
||||
pair_gap: wp.array2d(dtype=float),
|
||||
pair_margin: wp.array2d(dtype=float),
|
||||
pair_solimp: wp.array2d(dtype=mjwp_types.vec5),
|
||||
pair_solref: wp.array2d(dtype=wp.vec2),
|
||||
pair_solreffriction: wp.array2d(dtype=wp.vec2),
|
||||
plugin: wp.array(dtype=int),
|
||||
plugin_attr: wp.array(dtype=mjwp_types.vec_pluginattr),
|
||||
nxn_geom_pair_filtered: wp.array[wp.vec2i],
|
||||
nxn_pairid: wp.array[wp.vec2i],
|
||||
nxn_pairid_filtered: wp.array[wp.vec2i],
|
||||
oct_aabb: wp.array2d[wp.vec3],
|
||||
oct_child: wp.array[mjwp_types.vec8i],
|
||||
oct_coeff: wp.array[mjwp_types.vec8],
|
||||
pair_dim: wp.array[int],
|
||||
pair_friction: wp.array2d[mjwp_types.vec5],
|
||||
pair_gap: wp.array2d[float],
|
||||
pair_margin: wp.array2d[float],
|
||||
pair_solimp: wp.array2d[mjwp_types.vec5],
|
||||
pair_solref: wp.array2d[wp.vec2],
|
||||
pair_solreffriction: wp.array2d[wp.vec2],
|
||||
plugin: wp.array[int],
|
||||
plugin_attr: wp.array[mjwp_types.vec_pluginattr],
|
||||
opt__broadphase: int,
|
||||
opt__broadphase_filter: int,
|
||||
opt__ccd_iterations: int,
|
||||
opt__ccd_tolerance: wp.array(dtype=float),
|
||||
opt__ccd_tolerance: wp.array[float],
|
||||
opt__disableflags: int,
|
||||
opt__enableflags: int,
|
||||
opt__sdf_initpoints: int,
|
||||
@@ -141,27 +142,27 @@ def _collision_shim(
|
||||
# Data
|
||||
naccdmax: int,
|
||||
naconmax: int,
|
||||
flexvert_xpos: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos: wp.array2d(dtype=wp.vec3),
|
||||
nacon: wp.array(dtype=int),
|
||||
ncollision: wp.array(dtype=int),
|
||||
contact__dim: wp.array(dtype=int),
|
||||
contact__dist: wp.array(dtype=float),
|
||||
contact__efc_address: wp.array2d(dtype=int),
|
||||
contact__flex: wp.array(dtype=wp.vec2i),
|
||||
contact__frame: wp.array(dtype=wp.mat33),
|
||||
contact__friction: wp.array(dtype=mjwp_types.vec5),
|
||||
contact__geom: wp.array(dtype=wp.vec2i),
|
||||
contact__geomcollisionid: wp.array(dtype=int),
|
||||
contact__includemargin: wp.array(dtype=float),
|
||||
contact__pos: wp.array(dtype=wp.vec3),
|
||||
contact__solimp: wp.array(dtype=mjwp_types.vec5),
|
||||
contact__solref: wp.array(dtype=wp.vec2),
|
||||
contact__solreffriction: wp.array(dtype=wp.vec2),
|
||||
contact__type: wp.array(dtype=int),
|
||||
contact__vert: wp.array(dtype=wp.vec2i),
|
||||
contact__worldid: wp.array(dtype=int),
|
||||
flexvert_xpos: wp.array2d[wp.vec3],
|
||||
geom_xmat: wp.array2d[wp.mat33],
|
||||
geom_xpos: wp.array2d[wp.vec3],
|
||||
nacon: wp.array[int],
|
||||
ncollision: wp.array[int],
|
||||
contact__dim: wp.array[int],
|
||||
contact__dist: wp.array[float],
|
||||
contact__efc_address: wp.array2d[int],
|
||||
contact__flex: wp.array[wp.vec2i],
|
||||
contact__frame: wp.array[wp.mat33],
|
||||
contact__friction: wp.array[mjwp_types.vec5],
|
||||
contact__geom: wp.array[wp.vec2i],
|
||||
contact__geomcollisionid: wp.array[int],
|
||||
contact__includemargin: wp.array[float],
|
||||
contact__pos: wp.array[wp.vec3],
|
||||
contact__solimp: wp.array[mjwp_types.vec5],
|
||||
contact__solref: wp.array[wp.vec2],
|
||||
contact__solreffriction: wp.array[wp.vec2],
|
||||
contact__type: wp.array[int],
|
||||
contact__vert: wp.array[wp.vec2i],
|
||||
contact__worldid: wp.array[int],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
@@ -376,7 +377,7 @@ def _collision_jax_impl(m: types.Model, d: types.Data):
|
||||
m.geom_conaffinity,
|
||||
m.geom_condim,
|
||||
m.geom_contype,
|
||||
m.geom_dataid,
|
||||
jax.numpy.expand_dims(m.geom_dataid, 0),
|
||||
m.geom_friction,
|
||||
m.geom_gap,
|
||||
m.geom_margin,
|
||||
|
||||
+809
-808
File diff suppressed because it is too large
Load Diff
@@ -48,42 +48,43 @@ _cb = mjwp_types.Callback(
|
||||
**{f.name: None for f in dataclasses.fields(mjwp_types.Callback) if f.init}
|
||||
)
|
||||
|
||||
|
||||
@ffi.format_args_for_warp
|
||||
def _render_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
cam_fovy: wp.array2d(dtype=float),
|
||||
cam_intrinsic: wp.array2d(dtype=wp.vec4),
|
||||
cam_projection: wp.array(dtype=int),
|
||||
cam_sensorsize: wp.array(dtype=wp.vec2),
|
||||
flex_edge: wp.array(dtype=wp.vec2i),
|
||||
flex_radius: wp.array(dtype=float),
|
||||
flex_vertadr: wp.array(dtype=int),
|
||||
geom_dataid: wp.array(dtype=int),
|
||||
geom_matid: wp.array2d(dtype=int),
|
||||
geom_rgba: wp.array2d(dtype=wp.vec4),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
geom_type: wp.array(dtype=int),
|
||||
light_active: wp.array2d(dtype=bool),
|
||||
light_castshadow: wp.array2d(dtype=bool),
|
||||
light_type: wp.array2d(dtype=int),
|
||||
mat_rgba: wp.array2d(dtype=wp.vec4),
|
||||
mat_texid: wp.array3d(dtype=int),
|
||||
mat_texrepeat: wp.array2d(dtype=wp.vec2),
|
||||
mesh_faceadr: wp.array(dtype=int),
|
||||
cam_fovy: wp.array2d[float],
|
||||
cam_intrinsic: wp.array2d[wp.vec4],
|
||||
cam_projection: wp.array[int],
|
||||
cam_sensorsize: wp.array[wp.vec2],
|
||||
flex_edge: wp.array[wp.vec2i],
|
||||
flex_radius: wp.array[float],
|
||||
flex_vertadr: wp.array[int],
|
||||
geom_dataid: wp.array2d[int],
|
||||
geom_matid: wp.array2d[int],
|
||||
geom_rgba: wp.array2d[wp.vec4],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
geom_type: wp.array[int],
|
||||
light_active: wp.array2d[bool],
|
||||
light_castshadow: wp.array2d[bool],
|
||||
light_type: wp.array2d[int],
|
||||
mat_rgba: wp.array2d[wp.vec4],
|
||||
mat_texid: wp.array3d[int],
|
||||
mat_texrepeat: wp.array2d[wp.vec2],
|
||||
mesh_faceadr: wp.array[int],
|
||||
nlight: int,
|
||||
# Data
|
||||
cam_xmat: wp.array2d(dtype=wp.mat33),
|
||||
cam_xpos: wp.array2d(dtype=wp.vec3),
|
||||
flexvert_xpos: wp.array2d(dtype=wp.vec3),
|
||||
geom_xmat: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos: wp.array2d(dtype=wp.vec3),
|
||||
light_xdir: wp.array2d(dtype=wp.vec3),
|
||||
light_xpos: wp.array2d(dtype=wp.vec3),
|
||||
cam_xmat: wp.array2d[wp.mat33],
|
||||
cam_xpos: wp.array2d[wp.vec3],
|
||||
flexvert_xpos: wp.array2d[wp.vec3],
|
||||
geom_xmat: wp.array2d[wp.mat33],
|
||||
geom_xpos: wp.array2d[wp.vec3],
|
||||
light_xdir: wp.array2d[wp.vec3],
|
||||
light_xpos: wp.array2d[wp.vec3],
|
||||
# Registry
|
||||
rc_id: int,
|
||||
rgb: wp.array2d(dtype=wp.uint32),
|
||||
depth: wp.array2d(dtype=wp.float32),
|
||||
rgb: wp.array2d[wp.uint32],
|
||||
depth: wp.array2d[wp.float32],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
@@ -164,7 +165,7 @@ def _render_jax_impl(m: types.Model, d: types.Data, ctx: RenderContextPytree):
|
||||
m._impl.flex_edge,
|
||||
m._impl.flex_radius,
|
||||
m.flex_vertadr,
|
||||
m.geom_dataid,
|
||||
jax.numpy.expand_dims(m.geom_dataid, 0),
|
||||
m.geom_matid,
|
||||
m.geom_rgba,
|
||||
m.geom_size,
|
||||
|
||||
@@ -46,52 +46,53 @@ _cb = mjwp_types.Callback(
|
||||
**{f.name: None for f in dataclasses.fields(mjwp_types.Callback) if f.init}
|
||||
)
|
||||
|
||||
|
||||
@ffi.format_args_for_warp
|
||||
def _kinematics_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
body_branch_start: wp.array(dtype=int),
|
||||
body_branches: wp.array(dtype=int),
|
||||
body_ipos: wp.array2d(dtype=wp.vec3),
|
||||
body_iquat: wp.array2d(dtype=wp.quat),
|
||||
body_jntadr: wp.array(dtype=int),
|
||||
body_jntnum: wp.array(dtype=int),
|
||||
body_mocapid: wp.array(dtype=int),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_pos: wp.array2d(dtype=wp.vec3),
|
||||
body_quat: wp.array2d(dtype=wp.quat),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_weldid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_pos: wp.array2d(dtype=wp.vec3),
|
||||
geom_quat: wp.array2d(dtype=wp.quat),
|
||||
jnt_axis: wp.array2d(dtype=wp.vec3),
|
||||
jnt_pos: wp.array2d(dtype=wp.vec3),
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
body_branch_start: wp.array[int],
|
||||
body_branches: wp.array[int],
|
||||
body_ipos: wp.array2d[wp.vec3],
|
||||
body_iquat: wp.array2d[wp.quat],
|
||||
body_jntadr: wp.array[int],
|
||||
body_jntnum: wp.array[int],
|
||||
body_mocapid: wp.array[int],
|
||||
body_parentid: wp.array[int],
|
||||
body_pos: wp.array2d[wp.vec3],
|
||||
body_quat: wp.array2d[wp.quat],
|
||||
body_rootid: wp.array[int],
|
||||
body_weldid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_pos: wp.array2d[wp.vec3],
|
||||
geom_quat: wp.array2d[wp.quat],
|
||||
jnt_axis: wp.array2d[wp.vec3],
|
||||
jnt_pos: wp.array2d[wp.vec3],
|
||||
jnt_qposadr: wp.array[int],
|
||||
jnt_type: wp.array[int],
|
||||
nbody: int,
|
||||
nbranch: int,
|
||||
ngeom: int,
|
||||
nsite: int,
|
||||
qpos0: wp.array2d(dtype=float),
|
||||
site_bodyid: wp.array(dtype=int),
|
||||
site_pos: wp.array2d(dtype=wp.vec3),
|
||||
site_quat: wp.array2d(dtype=wp.quat),
|
||||
qpos0: wp.array2d[float],
|
||||
site_bodyid: wp.array[int],
|
||||
site_pos: wp.array2d[wp.vec3],
|
||||
site_quat: wp.array2d[wp.quat],
|
||||
# Data
|
||||
geom_xmat: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos: wp.array2d(dtype=wp.vec3),
|
||||
mocap_pos: wp.array2d(dtype=wp.vec3),
|
||||
mocap_quat: wp.array2d(dtype=wp.quat),
|
||||
qpos: wp.array2d(dtype=float),
|
||||
site_xmat: wp.array2d(dtype=wp.mat33),
|
||||
site_xpos: wp.array2d(dtype=wp.vec3),
|
||||
xanchor: wp.array2d(dtype=wp.vec3),
|
||||
xaxis: wp.array2d(dtype=wp.vec3),
|
||||
ximat: wp.array2d(dtype=wp.mat33),
|
||||
xipos: wp.array2d(dtype=wp.vec3),
|
||||
xmat: wp.array2d(dtype=wp.mat33),
|
||||
xpos: wp.array2d(dtype=wp.vec3),
|
||||
xquat: wp.array2d(dtype=wp.quat),
|
||||
geom_xmat: wp.array2d[wp.mat33],
|
||||
geom_xpos: wp.array2d[wp.vec3],
|
||||
mocap_pos: wp.array2d[wp.vec3],
|
||||
mocap_quat: wp.array2d[wp.quat],
|
||||
qpos: wp.array2d[float],
|
||||
site_xmat: wp.array2d[wp.mat33],
|
||||
site_xpos: wp.array2d[wp.vec3],
|
||||
xanchor: wp.array2d[wp.vec3],
|
||||
xaxis: wp.array2d[wp.vec3],
|
||||
ximat: wp.array2d[wp.mat33],
|
||||
xipos: wp.array2d[wp.vec3],
|
||||
xmat: wp.array2d[wp.mat33],
|
||||
xpos: wp.array2d[wp.vec3],
|
||||
xquat: wp.array2d[wp.quat],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
@@ -297,45 +298,45 @@ def kinematics_vmap(
|
||||
def _tendon_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
body_dofadr: wp.array(dtype=int),
|
||||
body_dofnum: wp.array(dtype=int),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
geom_bodyid: wp.array(dtype=int),
|
||||
geom_size: wp.array2d(dtype=wp.vec3),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
jnt_qposadr: wp.array(dtype=int),
|
||||
body_dofadr: wp.array[int],
|
||||
body_dofnum: wp.array[int],
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
geom_bodyid: wp.array[int],
|
||||
geom_size: wp.array2d[wp.vec3],
|
||||
jnt_dofadr: wp.array[int],
|
||||
jnt_qposadr: wp.array[int],
|
||||
ntendon: int,
|
||||
nwrap: int,
|
||||
site_bodyid: wp.array(dtype=int),
|
||||
ten_J_colind: wp.array(dtype=int),
|
||||
ten_J_rowadr: wp.array(dtype=int),
|
||||
ten_J_rownnz: wp.array(dtype=int),
|
||||
tendon_adr: wp.array(dtype=int),
|
||||
tendon_geom_adr: wp.array(dtype=int),
|
||||
tendon_jnt_adr: wp.array(dtype=int),
|
||||
tendon_num: wp.array(dtype=int),
|
||||
tendon_site_pair_adr: wp.array(dtype=int),
|
||||
wrap_geom_adr: wp.array(dtype=int),
|
||||
wrap_jnt_adr: wp.array(dtype=int),
|
||||
wrap_objid: wp.array(dtype=int),
|
||||
wrap_prm: wp.array(dtype=float),
|
||||
wrap_pulley_scale: wp.array(dtype=float),
|
||||
wrap_site_pair_adr: wp.array(dtype=int),
|
||||
wrap_type: wp.array(dtype=int),
|
||||
site_bodyid: wp.array[int],
|
||||
ten_J_colind: wp.array[int],
|
||||
ten_J_rowadr: wp.array[int],
|
||||
ten_J_rownnz: wp.array[int],
|
||||
tendon_adr: wp.array[int],
|
||||
tendon_geom_adr: wp.array[int],
|
||||
tendon_jnt_adr: wp.array[int],
|
||||
tendon_num: wp.array[int],
|
||||
tendon_site_pair_adr: wp.array[int],
|
||||
wrap_geom_adr: wp.array[int],
|
||||
wrap_jnt_adr: wp.array[int],
|
||||
wrap_objid: wp.array[int],
|
||||
wrap_prm: wp.array[float],
|
||||
wrap_pulley_scale: wp.array[float],
|
||||
wrap_site_pair_adr: wp.array[int],
|
||||
wrap_type: wp.array[int],
|
||||
# Data
|
||||
cdof: wp.array2d(dtype=wp.spatial_vector),
|
||||
geom_xmat: wp.array2d(dtype=wp.mat33),
|
||||
geom_xpos: wp.array2d(dtype=wp.vec3),
|
||||
qpos: wp.array2d(dtype=float),
|
||||
site_xpos: wp.array2d(dtype=wp.vec3),
|
||||
subtree_com: wp.array2d(dtype=wp.vec3),
|
||||
ten_J: wp.array2d(dtype=float),
|
||||
ten_length: wp.array2d(dtype=float),
|
||||
ten_wrapadr: wp.array2d(dtype=int),
|
||||
ten_wrapnum: wp.array2d(dtype=int),
|
||||
wrap_obj: wp.array2d(dtype=wp.vec2i),
|
||||
wrap_xpos: wp.array2d(dtype=wp.spatial_vector),
|
||||
cdof: wp.array2d[wp.spatial_vector],
|
||||
geom_xmat: wp.array2d[wp.mat33],
|
||||
geom_xpos: wp.array2d[wp.vec3],
|
||||
qpos: wp.array2d[float],
|
||||
site_xpos: wp.array2d[wp.vec3],
|
||||
subtree_com: wp.array2d[wp.vec3],
|
||||
ten_J: wp.array2d[float],
|
||||
ten_length: wp.array2d[float],
|
||||
ten_wrapadr: wp.array2d[int],
|
||||
ten_wrapnum: wp.array2d[int],
|
||||
wrap_obj: wp.array2d[wp.vec2i],
|
||||
wrap_xpos: wp.array2d[wp.spatial_vector],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
@@ -489,26 +490,26 @@ def tendon_vmap(unused_axis_size, is_batched, m: types.Model, d: types.Data):
|
||||
def _com_pos_shim(
|
||||
# Model
|
||||
nworld: int,
|
||||
body_inertia: wp.array2d(dtype=wp.vec3),
|
||||
body_mass: wp.array2d(dtype=float),
|
||||
body_parentid: wp.array(dtype=int),
|
||||
body_rootid: wp.array(dtype=int),
|
||||
body_subtreemass: wp.array2d(dtype=float),
|
||||
body_tree: tuple[wp.array(dtype=int), ...],
|
||||
jnt_bodyid: wp.array(dtype=int),
|
||||
jnt_dofadr: wp.array(dtype=int),
|
||||
jnt_type: wp.array(dtype=int),
|
||||
body_inertia: wp.array2d[wp.vec3],
|
||||
body_mass: wp.array2d[float],
|
||||
body_parentid: wp.array[int],
|
||||
body_rootid: wp.array[int],
|
||||
body_subtreemass: wp.array2d[float],
|
||||
body_tree: tuple[wp.array[int], ...],
|
||||
jnt_bodyid: wp.array[int],
|
||||
jnt_dofadr: wp.array[int],
|
||||
jnt_type: wp.array[int],
|
||||
nbody: int,
|
||||
njnt: int,
|
||||
# Data
|
||||
cdof: wp.array2d(dtype=wp.spatial_vector),
|
||||
cinert: wp.array2d(dtype=mjwp_types.vec10),
|
||||
subtree_com: wp.array2d(dtype=wp.vec3),
|
||||
xanchor: wp.array2d(dtype=wp.vec3),
|
||||
xaxis: wp.array2d(dtype=wp.vec3),
|
||||
ximat: wp.array2d(dtype=wp.mat33),
|
||||
xipos: wp.array2d(dtype=wp.vec3),
|
||||
xmat: wp.array2d(dtype=wp.mat33),
|
||||
cdof: wp.array2d[wp.spatial_vector],
|
||||
cinert: wp.array2d[mjwp_types.vec10],
|
||||
subtree_com: wp.array2d[wp.vec3],
|
||||
xanchor: wp.array2d[wp.vec3],
|
||||
xaxis: wp.array2d[wp.vec3],
|
||||
ximat: wp.array2d[wp.mat33],
|
||||
xipos: wp.array2d[wp.vec3],
|
||||
xmat: wp.array2d[wp.mat33],
|
||||
):
|
||||
_m.stat = _s
|
||||
_m.opt = _o
|
||||
|
||||
@@ -672,7 +672,7 @@ _NDIM = {
|
||||
'geom_conaffinity': 1,
|
||||
'geom_condim': 1,
|
||||
'geom_contype': 1,
|
||||
'geom_dataid': 1,
|
||||
'geom_dataid': 2,
|
||||
'geom_fluid': 2,
|
||||
'geom_friction': 3,
|
||||
'geom_gap': 2,
|
||||
@@ -1238,7 +1238,7 @@ _BATCH_DIM = {
|
||||
'geom_conaffinity': False,
|
||||
'geom_condim': False,
|
||||
'geom_contype': False,
|
||||
'geom_dataid': False,
|
||||
'geom_dataid': True,
|
||||
'geom_fluid': False,
|
||||
'geom_friction': True,
|
||||
'geom_gap': True,
|
||||
|
||||
Reference in New Issue
Block a user