Skip to content

Model Batching V4 #231

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 69 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
02f3485
io.py changes. just a proposal.
adenzler-nvidia May 8, 2025
569995d
docs in types.py
adenzler-nvidia May 8, 2025
47930b9
qpos0
adenzler-nvidia May 8, 2025
1c3930d
qpos_spring
adenzler-nvidia May 8, 2025
f6bea97
body_pos
adenzler-nvidia May 8, 2025
f8c62d0
body_quat
adenzler-nvidia May 8, 2025
a7111d5
ipos
adenzler-nvidia May 8, 2025
018083b
body_mass
adenzler-nvidia May 8, 2025
4d18f8f
subtreemass
adenzler-nvidia May 8, 2025
f2056ec
inertia
adenzler-nvidia May 8, 2025
a824ec3
invweight0
adenzler-nvidia May 8, 2025
d8fa542
jnt_solref
adenzler-nvidia May 8, 2025
0f07b2e
jnt_solimp
adenzler-nvidia May 8, 2025
738ee42
jnt_pos
adenzler-nvidia May 8, 2025
2645791
jnt_stiffness
adenzler-nvidia May 8, 2025
0e277b2
jnt_range
adenzler-nvidia May 8, 2025
f8a88f3
actfrcrange
adenzler-nvidia May 8, 2025
ba1dca4
jnt_margin
adenzler-nvidia May 8, 2025
99ebf0b
dof_armature
adenzler-nvidia May 8, 2025
4e2a405
dof_damping
adenzler-nvidia May 8, 2025
d9800a5
dof_invweight'
adenzler-nvidia May 8, 2025
ae0c11d
dof_frictionloss
adenzler-nvidia May 8, 2025
8ac6b91
dof_solimp
adenzler-nvidia May 8, 2025
ad3436b
dof_solref
adenzler-nvidia May 8, 2025
c685f03
geom_priority
adenzler-nvidia May 8, 2025
f814ff9
geom_solmix
adenzler-nvidia May 8, 2025
1a3a8be
geom_solref
adenzler-nvidia May 8, 2025
d8762ad
geom_solimp
adenzler-nvidia May 8, 2025
57e550c
geom_size
adenzler-nvidia May 8, 2025
83ac91a
geom_rbound
adenzler-nvidia May 8, 2025
69dcf51
geom_pos
adenzler-nvidia May 8, 2025
f1b85f9
geom_quat
adenzler-nvidia May 8, 2025
8f4fa7c
geom_friction
adenzler-nvidia May 8, 2025
6de0c31
geom_margin
adenzler-nvidia May 8, 2025
fe4ae67
geom_gap
adenzler-nvidia May 8, 2025
8ed2187
site_pos
adenzler-nvidia May 8, 2025
cab4a48
site_quat
adenzler-nvidia May 8, 2025
8a0d69e
cam_pos
adenzler-nvidia May 8, 2025
b777101
cam_quat
adenzler-nvidia May 8, 2025
bc662a7
cam_pos0 and poscom0
adenzler-nvidia May 8, 2025
a624543
light_pos
adenzler-nvidia May 8, 2025
3d0a9e3
light_dir
adenzler-nvidia May 8, 2025
12bb345
light_poscom0
adenzler-nvidia May 8, 2025
fb4b0cf
light_pos0
adenzler-nvidia May 8, 2025
912f902
eq_solref
adenzler-nvidia May 8, 2025
45c9338
eq_solimp
adenzler-nvidia May 8, 2025
fe3842d
actuator_dynprm
adenzler-nvidia May 8, 2025
467c1b6
gainprm
adenzler-nvidia May 8, 2025
3eda7dd
biasprm
adenzler-nvidia May 8, 2025
fd0f33f
actuator_ctrlrange
adenzler-nvidia May 8, 2025
65b3476
actuator_forcerange
adenzler-nvidia May 8, 2025
4822742
actrange and gear
adenzler-nvidia May 8, 2025
48c1e77
pair_solref
adenzler-nvidia May 8, 2025
d12e94d
pair_solreffriction
adenzler-nvidia May 8, 2025
584f263
pair_solimp
adenzler-nvidia May 8, 2025
0546318
pair_margin
adenzler-nvidia May 8, 2025
77f6921
pair_gap
adenzler-nvidia May 8, 2025
5c03632
pair_friction
adenzler-nvidia May 8, 2025
95d1fe9
tendon
adenzler-nvidia May 8, 2025
d6f8ef9
wrap prm
adenzler-nvidia May 8, 2025
2f2bc49
sensor_cutoff
adenzler-nvidia May 8, 2025
a63d4e1
fixes
adenzler-nvidia May 8, 2025
77a962c
make kernel analyzer happy
adenzler-nvidia May 8, 2025
e04ed26
making kernel analyzer even more happy
adenzler-nvidia May 8, 2025
14fba1b
more fixes
adenzler-nvidia May 8, 2025
b38a879
Merge branch 'main' into dev/adenzler/model-batching-v4
adenzler-nvidia May 9, 2025
24b91ad
small fix
adenzler-nvidia May 9, 2025
beacb46
fix formatting
adenzler-nvidia May 9, 2025
dd57b09
fixes for sensor_test
adenzler-nvidia May 9, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions contrib/kernel_analyzer/kernel_analyzer/ast_analyzer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ def test_all_issues(
@kernel
def test_no_issues(
# Model:
qpos0: wp.array(dtype=float),
geom_pos: wp.array(dtype=wp.vec3),
qpos0: wp.array2d(dtype=float),
geom_pos: wp.array2d(dtype=wp.vec3),
# Data in:
qpos_in: wp.array2d(dtype=float),
qvel_in: wp.array2d(dtype=float),
Expand Down
35 changes: 18 additions & 17 deletions mujoco_warp/_src/collision_box.py
Original file line number Diff line number Diff line change
Expand Up @@ -191,21 +191,21 @@ def _box_box(
# Model:
geom_type: wp.array(dtype=int),
geom_condim: wp.array(dtype=int),
geom_priority: wp.array(dtype=int),
geom_solmix: wp.array(dtype=float),
geom_solref: wp.array(dtype=wp.vec2),
geom_solimp: wp.array(dtype=vec5),
geom_size: wp.array(dtype=wp.vec3),
geom_friction: wp.array(dtype=wp.vec3),
geom_margin: wp.array(dtype=float),
geom_gap: wp.array(dtype=float),
geom_priority: wp.array2d(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),
pair_dim: wp.array(dtype=int),
pair_solref: wp.array(dtype=wp.vec2),
pair_solreffriction: wp.array(dtype=wp.vec2),
pair_solimp: wp.array(dtype=vec5),
pair_margin: wp.array(dtype=float),
pair_gap: wp.array(dtype=float),
pair_friction: wp.array(dtype=vec5),
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),
# Data in:
nconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
Expand Down Expand Up @@ -262,6 +262,7 @@ def _box_box(
collision_pair_in,
collision_pairid_in,
tid,
worldid,
)

# transformations
Expand All @@ -271,8 +272,8 @@ def _box_box(
trans_atob = b_mat_inv @ (a_pos - b_pos)
rot_atob = b_mat_inv @ a_mat

a_size = geom_size[ga]
b_size = geom_size[gb]
a_size = geom_size[worldid, ga]
b_size = geom_size[worldid, gb]
a = box(rot_atob, trans_atob, a_size)
b = box(wp.identity(3, wp.float32), wp.vec3(0.0), b_size)

Expand Down Expand Up @@ -363,7 +364,7 @@ def _box_box(
for i in range(4):
pos[i] = pos[idx]

margin = wp.max(geom_margin[ga], geom_margin[gb])
margin = wp.max(geom_margin[worldid, ga], geom_margin[worldid, gb])
for i in range(4):
pos_glob = b_mat @ pos[i] + b_pos
n_glob = b_mat @ sep_axis
Expand Down
35 changes: 18 additions & 17 deletions mujoco_warp/_src/collision_convex.py
Original file line number Diff line number Diff line change
Expand Up @@ -708,24 +708,24 @@ def gjk_epa_sparse(
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.array(dtype=float),
geom_solref: wp.array(dtype=wp.vec2),
geom_solimp: wp.array(dtype=vec5),
geom_size: wp.array(dtype=wp.vec3),
geom_friction: wp.array(dtype=wp.vec3),
geom_margin: wp.array(dtype=float),
geom_gap: wp.array(dtype=float),
geom_priority: wp.array2d(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_vert: wp.array(dtype=wp.vec3),
pair_dim: wp.array(dtype=int),
pair_solref: wp.array(dtype=wp.vec2),
pair_solreffriction: wp.array(dtype=wp.vec2),
pair_solimp: wp.array(dtype=vec5),
pair_margin: wp.array(dtype=float),
pair_gap: wp.array(dtype=float),
pair_friction: wp.array(dtype=vec5),
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),
# Data in:
nconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
Expand Down Expand Up @@ -772,6 +772,7 @@ def gjk_epa_sparse(
collision_pair_in,
collision_pairid_in,
tid,
worldid,
)

g1 = geoms[0]
Expand All @@ -782,7 +783,7 @@ def gjk_epa_sparse(

geom1 = _geom(
geom_dataid,
geom_size,
geom_size[worldid],
mesh_vertadr,
mesh_vertnum,
geom_xpos_in,
Expand All @@ -793,7 +794,7 @@ def gjk_epa_sparse(

geom2 = _geom(
geom_dataid,
geom_size,
geom_size[worldid],
mesh_vertadr,
mesh_vertnum,
geom_xpos_in,
Expand All @@ -802,7 +803,7 @@ def gjk_epa_sparse(
g2,
)

margin = wp.max(geom_margin[g1], geom_margin[g2])
margin = wp.max(geom_margin[worldid, g1], geom_margin[worldid, g2])

simplex, normal = _gjk(mesh_vert, geom1, geom2)

Expand Down
28 changes: 14 additions & 14 deletions mujoco_warp/_src/collision_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
@wp.func
def _sphere_filter(
# Model:
geom_rbound: wp.array(dtype=float),
geom_margin: wp.array(dtype=float),
geom_rbound: wp.array2d(dtype=float),
geom_margin: wp.array2d(dtype=float),
# Data in:
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
Expand All @@ -42,12 +42,12 @@ def _sphere_filter(
geom2: int,
worldid: int,
) -> bool:
margin1 = geom_margin[geom1]
margin2 = geom_margin[geom2]
margin1 = geom_margin[worldid, geom1]
margin2 = geom_margin[worldid, geom2]
pos1 = geom_xpos_in[worldid, geom1]
pos2 = geom_xpos_in[worldid, geom2]
size1 = geom_rbound[geom1]
size2 = geom_rbound[geom2]
size1 = geom_rbound[worldid, geom1]
size2 = geom_rbound[worldid, geom2]

bound = size1 + size2 + wp.max(margin1, margin2)
dif = pos2 - pos1
Expand Down Expand Up @@ -124,8 +124,8 @@ def _upper_tri_index(n: int, i: int, j: int) -> int:
@wp.kernel
def _sap_project(
# Model:
geom_rbound: wp.array(dtype=float),
geom_margin: wp.array(dtype=float),
geom_rbound: wp.array2d(dtype=float),
geom_margin: wp.array2d(dtype=float),
# Data in:
geom_xpos_in: wp.array2d(dtype=wp.vec3),
# In:
Expand All @@ -138,13 +138,13 @@ def _sap_project(
worldid, geomid = wp.tid()

xpos = geom_xpos_in[worldid, geomid]
rbound = geom_rbound[geomid]
rbound = geom_rbound[worldid, geomid]

if rbound == 0.0:
# geom is a plane
rbound = MJ_MAXVAL

radius = rbound + geom_margin[geomid]
radius = rbound + geom_margin[worldid, geomid]
center = wp.dot(direction_in, xpos)

sap_projection_lower_out[worldid, geomid] = center - radius
Expand Down Expand Up @@ -182,8 +182,8 @@ def _sap_broadphase(
# Model:
ngeom: int,
geom_type: wp.array(dtype=int),
geom_rbound: wp.array(dtype=float),
geom_margin: wp.array(dtype=float),
geom_rbound: wp.array2d(dtype=float),
geom_margin: wp.array2d(dtype=float),
nxn_pairid: wp.array(dtype=int),
# Data in:
nworld_in: int,
Expand Down Expand Up @@ -343,8 +343,8 @@ def sap_broadphase(m: Model, d: Data):
def _nxn_broadphase(
# Model:
geom_type: wp.array(dtype=int),
geom_rbound: wp.array(dtype=float),
geom_margin: wp.array(dtype=float),
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=int),
# Data in:
Expand Down
Loading
Loading