Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
116 commits
Select commit Hold shift + click to select a range
25485ae
no more xmat
adenzler-nvidia Dec 5, 2025
b43507f
fix tests
adenzler-nvidia Dec 5, 2025
577367d
slow transition
adenzler-nvidia Dec 8, 2025
bc47238
set xiquat
adenzler-nvidia Dec 8, 2025
fada45b
first conversions
adenzler-nvidia Dec 8, 2025
ccb951e
remove prints
adenzler-nvidia Dec 8, 2025
1f4d7b0
conversions in sensor
adenzler-nvidia Dec 8, 2025
31e52f8
sensor_vel
adenzler-nvidia Dec 8, 2025
8e1e825
cinert
adenzler-nvidia Dec 8, 2025
37d9587
subtree_vel_forward
adenzler-nvidia Dec 8, 2025
10ac877
no more ximat
adenzler-nvidia Dec 8, 2025
2c14b6d
properly test xiquat
adenzler-nvidia Dec 8, 2025
1db0e22
proper put_data conversion
adenzler-nvidia Dec 8, 2025
b1e359b
better conversions
adenzler-nvidia Dec 8, 2025
bb8eaf1
initial infra
adenzler-nvidia Dec 8, 2025
b3768ef
kernel call needs it as well
adenzler-nvidia Dec 8, 2025
243b8bf
spatial_tendon_geom
adenzler-nvidia Dec 8, 2025
7ab5218
better put_data
adenzler-nvidia Dec 8, 2025
de23411
better smooth_test
adenzler-nvidia Dec 8, 2025
6f7df83
sensor_tactile
adenzler-nvidia Dec 8, 2025
1c50e3f
sensor_vel
adenzler-nvidia Dec 8, 2025
11076fd
sensor_pos
adenzler-nvidia Dec 8, 2025
3f47579
crashing tests
adenzler-nvidia Dec 8, 2025
0835117
no more geom_xmat in mjwarp
adenzler-nvidia Dec 8, 2025
62068e1
maybe this helps
adenzler-nvidia Dec 8, 2025
358f442
more quats instead of matrices
adenzler-nvidia Dec 8, 2025
7ea3e42
remove unnecessary line
adenzler-nvidia Dec 8, 2025
3a2469f
fix the GJK test
adenzler-nvidia Dec 8, 2025
f35c485
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Dec 9, 2025
4a89cbb
fix
adenzler-nvidia Dec 9, 2025
6c2d5e2
add site_xquat
adenzler-nvidia Dec 9, 2025
f7692a5
io.py
adenzler-nvidia Dec 9, 2025
27984f9
add initialization
adenzler-nvidia Dec 9, 2025
fb417cf
change the forward test
adenzler-nvidia Dec 9, 2025
7517cac
fix get_data_into test
adenzler-nvidia Dec 9, 2025
1c03048
fix in io.py
adenzler-nvidia Dec 9, 2025
86fffa7
transmission
adenzler-nvidia Dec 9, 2025
330d760
sensor_pos
adenzler-nvidia Dec 9, 2025
7a055b7
sensor_vel
adenzler-nvidia Dec 9, 2025
d38aff1
sensor_acc
adenzler-nvidia Dec 9, 2025
b584a05
fix all the tests
adenzler-nvidia Dec 9, 2025
1031c18
oobb_filter
adenzler-nvidia Dec 9, 2025
e13c269
aabb_filter
adenzler-nvidia Dec 9, 2025
dcebea9
plane_filter
adenzler-nvidia Dec 9, 2025
4217698
mesh_normals
adenzler-nvidia Dec 9, 2025
80a8c56
box_normals
adenzler-nvidia Dec 9, 2025
74fb184
box_normals follow up
adenzler-nvidia Dec 9, 2025
baf6e18
mesh_edge_normals
adenzler-nvidia Dec 9, 2025
4c8ea65
box_edge_normals
adenzler-nvidia Dec 9, 2025
91e334a
box_face
adenzler-nvidia Dec 9, 2025
e112f6b
rotmat
adenzler-nvidia Dec 9, 2025
2e762d7
wrap
adenzler-nvidia Dec 9, 2025
913ec1e
gradient descent
adenzler-nvidia Dec 9, 2025
3023f7d
transform aabb
adenzler-nvidia Dec 9, 2025
3aaf2e8
rel_mat
adenzler-nvidia Dec 9, 2025
f15d020
hfield_filter
adenzler-nvidia Dec 9, 2025
3c3ba06
convex collision
adenzler-nvidia Dec 9, 2025
9ebb129
collision_gjk
adenzler-nvidia Dec 9, 2025
13c9d30
plane normals
adenzler-nvidia Dec 9, 2025
db06ef1
more collision_primitive
adenzler-nvidia Dec 9, 2025
e059e90
plane_convex
adenzler-nvidia Dec 9, 2025
364fc1f
capsule axis
adenzler-nvidia Dec 9, 2025
a51dc11
cap-cap
adenzler-nvidia Dec 9, 2025
4581eb0
more axis calcs
adenzler-nvidia Dec 9, 2025
2de1879
cylinder axis
adenzler-nvidia Dec 9, 2025
2803099
one more axis
adenzler-nvidia Dec 9, 2025
60bd420
more normals
adenzler-nvidia Dec 9, 2025
36ee7a7
sdf collisions
adenzler-nvidia Dec 9, 2025
83d5a07
fluid
adenzler-nvidia Dec 9, 2025
a26d169
ray
adenzler-nvidia Dec 9, 2025
ccda19b
smooth some more
adenzler-nvidia Dec 9, 2025
e20c64d
one more conversion
adenzler-nvidia Dec 9, 2025
4c65b43
some sensor stuff
adenzler-nvidia Dec 9, 2025
b81c630
some quaternion math in sensors
adenzler-nvidia Dec 10, 2025
e8e5d35
velocimeter
adenzler-nvidia Dec 10, 2025
caea5b7
frame_linvel
adenzler-nvidia Dec 10, 2025
b5f2e96
frame_angvel
adenzler-nvidia Dec 10, 2025
8665b7a
accelerometer
adenzler-nvidia Dec 10, 2025
9577555
force/torque
adenzler-nvidia Dec 10, 2025
4f9d15f
final touches
adenzler-nvidia Dec 10, 2025
edf055b
formatting
adenzler-nvidia Dec 10, 2025
877ee54
ruff
adenzler-nvidia Dec 10, 2025
84aa371
cleanup in io.py
adenzler-nvidia Dec 10, 2025
2eb0c0f
fix missing xquat
adenzler-nvidia Dec 10, 2025
89490bd
starting to make kernel analyzer happy
adenzler-nvidia Dec 10, 2025
2cbd4ab
make analyzer more happy
adenzler-nvidia Dec 10, 2025
981d380
more fixes
adenzler-nvidia Dec 10, 2025
6e018ab
gyro fix
adenzler-nvidia Dec 10, 2025
6044716
more fixes
adenzler-nvidia Dec 10, 2025
8337e70
formatting
adenzler-nvidia Dec 10, 2025
6602d3c
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Dec 10, 2025
6b6a357
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Dec 11, 2025
5d68c79
small fix
adenzler-nvidia Dec 11, 2025
aa1300a
another small fix
adenzler-nvidia Dec 11, 2025
16ff87e
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Dec 11, 2025
2fcdb00
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Dec 17, 2025
b45b28c
remove init
adenzler-nvidia Dec 17, 2025
6b79191
remove explicit zeroing, not needed
adenzler-nvidia Dec 17, 2025
e21eaa3
fixes
adenzler-nvidia Dec 17, 2025
8f898e5
more fixes
adenzler-nvidia Dec 17, 2025
c946f2b
final fix
adenzler-nvidia Dec 17, 2025
ee488f8
more test fix
adenzler-nvidia Dec 17, 2025
57ebf9f
nworld
adenzler-nvidia Dec 17, 2025
ff97ba2
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Jan 5, 2026
5fef4e9
updates
adenzler-nvidia Jan 5, 2026
4f7fb9d
missing upadte
adenzler-nvidia Jan 5, 2026
b41b334
another missing change.
adenzler-nvidia Jan 5, 2026
c35e2d4
missing updates
adenzler-nvidia Jan 5, 2026
75235a7
whitespace fix
adenzler-nvidia Jan 7, 2026
739eca0
missing mat->quat conversions
adenzler-nvidia Jan 7, 2026
1484174
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Jan 7, 2026
62ea9ac
import cleanup
adenzler-nvidia Jan 7, 2026
a9dd5cf
change epsilon in half-space calc
adenzler-nvidia Jan 8, 2026
9800214
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Jan 8, 2026
7c782e3
Merge branch 'main' into dev/adenzler/matrices
adenzler-nvidia Jan 12, 2026
c674bf7
heightfield merge conflicts
adenzler-nvidia Jan 12, 2026
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
10 changes: 6 additions & 4 deletions mujoco_warp/_src/broadphase_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

"""Tests for broadphase functions."""

import mujoco
import numpy as np
import warp as wp
from absl.testing import absltest
Expand Down Expand Up @@ -145,10 +146,11 @@ def test_broadphase(self, broadphase, filter):
np.vstack([np.expand_dims(mjd1.geom_xpos, axis=0), np.expand_dims(mjd2.geom_xpos, axis=0)]),
dtype=wp.vec3,
)
d3.geom_xmat = wp.array(
np.vstack([np.expand_dims(mjd1.geom_xmat, axis=0), np.expand_dims(mjd2.geom_xmat, axis=0)]),
dtype=wp.mat33,
)
geom_xquat = np.zeros((2, mjm.ngeom, 4))
for j, mjd in enumerate([mjd1, mjd2]):
for i in range(mjm.ngeom):
mujoco.mju_mat2Quat(geom_xquat[j, i], mjd.geom_xmat[i])
d3.geom_xquat = wp.array(geom_xquat, dtype=wp.quat)
broadphase_caller(m, d3)

ncollision = d3.ncollision.numpy()[0]
Expand Down
47 changes: 25 additions & 22 deletions mujoco_warp/_src/collision_convex.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@
from .collision_primitive import geom_collision_pair
from .collision_primitive import write_contact
from .math import make_frame
from .math import mul_quat
from .math import quat_inv
from .math import rot_vec_quat
from .math import upper_trid_index
from .types import MJ_MAX_EPAFACES
from .types import MJ_MAX_EPAHORIZON
Expand Down Expand Up @@ -93,7 +96,7 @@ def _hfield_filter(
hfield_size: wp.array(dtype=wp.vec4),
# Data in:
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
# In:
worldid: int,
g1: int,
Expand All @@ -113,10 +116,10 @@ def _hfield_filter(
size_id = worldid % geom_size.shape[0]

pos1 = geom_xpos_in[worldid, g1]
mat1 = geom_xmat_in[worldid, g1]
mat1T = wp.transpose(mat1)
pos2 = geom_xpos_in[worldid, g2]
pos = mat1T @ (pos2 - pos1)
quat1 = geom_xquat_in[worldid, g1]
rot1_inv = quat_inv(quat1)
pos = rot_vec_quat(pos2 - pos1, rot1_inv)
r2 = geom_rbound[rbound_id, g2]

# TODO(team): margin?
Expand All @@ -134,13 +137,13 @@ def _hfield_filter(
if -size1[3] > pos[2] + r2 + margin: # down
return True, wp.inf, wp.inf, wp.inf, wp.inf, wp.inf, wp.inf

mat2 = geom_xmat_in[worldid, g2]
mat = mat1T @ mat2
quat2 = geom_xquat_in[worldid, g2]
rot = mul_quat(quat1, quat2)

# create geom in height field frame for support function queries
geom2 = Geom()
geom2.pos = pos
geom2.rot = mat
geom2.rot = rot
geom2.size = geom_size[size_id, g2]
geom2.margin = 0.0 # margin handled separately
geom2.index = -1
Expand Down Expand Up @@ -224,7 +227,7 @@ def ccd_hfield_kernel(
# Data in:
naconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
collision_pair_in: wp.array(dtype=wp.vec2i),
collision_pairid_in: wp.array(dtype=wp.vec2i),
collision_worldid_in: wp.array(dtype=int),
Expand Down Expand Up @@ -270,7 +273,7 @@ def ccd_hfield_kernel(

# height field filter
no_hf_collision, xmin, xmax, ymin, ymax, zmin, zmax = _hfield_filter(
geom_type, geom_dataid, geom_size, geom_rbound, geom_margin, hfield_size, geom_xpos_in, geom_xmat_in, worldid, g1, g2
geom_type, geom_dataid, geom_size, geom_rbound, geom_margin, hfield_size, geom_xpos_in, geom_xquat_in, worldid, g1, g2
)
if no_hf_collision:
return
Expand Down Expand Up @@ -316,22 +319,22 @@ def ccd_hfield_kernel(
mesh_polymapnum,
mesh_polymap,
geom_xpos_in,
geom_xmat_in,
geom_xquat_in,
geoms,
worldid,
)

# transform geom2 into heightfield frame
hf_pos = geom_xpos_in[worldid, g1]
hf_mat = geom_xmat_in[worldid, g1]
hf_matT = wp.transpose(hf_mat)
hf_quat = geom_xquat_in[worldid, g1]
hf_quat_inv = quat_inv(hf_quat)

geom2.pos = hf_matT @ (geom2.pos - hf_pos)
geom2.rot = hf_matT @ geom2.rot
geom2.pos = rot_vec_quat(geom2.pos - hf_pos, hf_quat_inv)
geom2.rot = mul_quat(hf_quat_inv, geom2.rot)

# geom1 has identity pose
geom1.pos = wp.vec3(0.0, 0.0, 0.0)
geom1.rot = wp.identity(n=3, dtype=float)
geom1.rot = wp.quat(1.0, 0.0, 0.0, 0.0)

# see MuJoCo mjc_ConvexHField
geom1_dataid = geom_dataid[g1]
Expand Down Expand Up @@ -444,7 +447,7 @@ def ccd_hfield_kernel(
x1_ = wp.vec3(0.0, 0.0, 0.0)
for i in range(6):
x1_ += prism[i]
x1 += geom1.rot @ (x1_ / 6.0)
x1 += rot_vec_quat(x1_ / 6.0, geom1.rot)

dist, ncontact, w1, w2, idx = ccd(
opt_ccd_tolerance[worldid % opt_ccd_tolerance.shape[0]],
Expand Down Expand Up @@ -476,14 +479,14 @@ def ccd_hfield_kernel(

# transform contact to global frame
pos_local = 0.5 * (w1 + w2)
pos = hf_mat @ pos_local + hf_pos
pos = rot_vec_quat(pos_local, hf_quat) + hf_pos
hfield_contact_pos[count, 0] = pos[0]
hfield_contact_pos[count, 1] = pos[1]
hfield_contact_pos[count, 2] = pos[2]

frame_local = make_frame(w1 - w2)
normal_local = wp.vec3(frame_local[0, 0], frame_local[0, 1], frame_local[0, 2])
normal = hf_mat @ normal_local
normal = rot_vec_quat(normal_local, hf_quat)
hfield_contact_normal[count, 0] = normal[0]
hfield_contact_normal[count, 1] = normal[1]
hfield_contact_normal[count, 2] = normal[2]
Expand Down Expand Up @@ -926,7 +929,7 @@ def ccd_kernel(
# Data in:
naconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
collision_pair_in: wp.array(dtype=wp.vec2i),
collision_pairid_in: wp.array(dtype=wp.vec2i),
collision_worldid_in: wp.array(dtype=int),
Expand Down Expand Up @@ -1022,7 +1025,7 @@ def ccd_kernel(
mesh_polymapnum,
mesh_polymap,
geom_xpos_in,
geom_xmat_in,
geom_xquat_in,
geoms,
worldid,
)
Expand Down Expand Up @@ -1233,7 +1236,7 @@ def _pair_count(p1: int, p2: int) -> int:
m.pair_friction,
d.naconmax,
d.geom_xpos,
d.geom_xmat,
d.geom_xquat,
d.collision_pair,
d.collision_pairid,
d.collision_worldid,
Expand Down Expand Up @@ -1319,7 +1322,7 @@ def _pair_count(p1: int, p2: int) -> int:
m.pair_friction,
d.naconmax,
d.geom_xpos,
d.geom_xmat,
d.geom_xquat,
d.collision_pair,
d.collision_pairid,
d.collision_worldid,
Expand Down
55 changes: 31 additions & 24 deletions mujoco_warp/_src/collision_driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
from .collision_convex import convex_narrowphase
from .collision_primitive import primitive_narrowphase
from .collision_sdf import sdf_narrowphase
from .math import quat_to_mat
from .math import rot_vec_quat
from .math import upper_tri_index
from .types import MJ_MAXVAL
from .types import BroadphaseFilter
Expand Down Expand Up @@ -48,15 +50,17 @@ def _zero_nacon_ncollision(

@wp.func
def _plane_filter(
size1: float, size2: float, margin1: float, margin2: float, xpos1: wp.vec3, xpos2: wp.vec3, xmat1: wp.mat33, xmat2: wp.mat33
size1: float, size2: float, margin1: float, margin2: float, xpos1: wp.vec3, xpos2: wp.vec3, xquat1: wp.quat, xquat2: wp.quat
) -> bool:
if size1 == 0.0:
# geom1 is a plane
dist = wp.dot(xpos2 - xpos1, wp.vec3(xmat1[0, 2], xmat1[1, 2], xmat1[2, 2]))
normal = rot_vec_quat(wp.vec3(0.0, 0.0, 1.0), xquat1)
dist = wp.dot(xpos2 - xpos1, normal)
return dist <= size2 + wp.max(margin1, margin2)
elif size2 == 0.0:
# geom2 is a plane
dist = wp.dot(xpos1 - xpos2, wp.vec3(xmat2[0, 2], xmat2[1, 2], xmat2[2, 2]))
normal = rot_vec_quat(wp.vec3(0.0, 0.0, 1.0), xquat2)
dist = wp.dot(xpos1 - xpos2, normal)
return dist <= size1 + wp.max(margin1, margin2)

return True
Expand All @@ -82,16 +86,16 @@ def _aabb_filter(
margin2: float,
xpos1: wp.vec3,
xpos2: wp.vec3,
xmat1: wp.mat33,
xmat2: wp.mat33,
xquat1: wp.quat,
xquat2: wp.quat,
) -> bool:
"""Axis aligned boxes collision.

references: see Ericson, Real-time Collision Detection section 4.2.
filterBox: filter contact based on global AABBs.
"""
center1 = xmat1 @ center1 + xpos1
center2 = xmat2 @ center2 + xpos2
center1 = rot_vec_quat(center1, xquat1) + xpos1
center2 = rot_vec_quat(center2, xquat2) + xpos2

margin = wp.max(margin1, margin2)

Expand All @@ -115,10 +119,10 @@ def _aabb_filter(
for j in range(2):
for k in range(2):
corner1 = wp.vec3(sign[i] * size1[0], sign[j] * size1[1], sign[k] * size1[2])
pos1 = xmat1 @ corner1
pos1 = rot_vec_quat(corner1, xquat1)

corner2 = wp.vec3(sign[i] * size2[0], sign[j] * size2[1], sign[k] * size2[2])
pos2 = xmat2 @ corner2
pos2 = rot_vec_quat(corner2, xquat2)

if pos1[0] > max_x1:
max_x1 = pos1[0]
Expand Down Expand Up @@ -184,8 +188,8 @@ def _obb_filter(
margin2: float,
xpos1: wp.vec3,
xpos2: wp.vec3,
xmat1: wp.mat33,
xmat2: wp.mat33,
xquat1: wp.quat,
xquat2: wp.quat,
) -> bool:
"""Oriented bounding boxes collision (see Gottschalk et al.), see mj_collideOBB."""
margin = wp.max(margin1, margin2)
Expand All @@ -196,8 +200,11 @@ def _obb_filter(
radius = wp.vec2()

# compute centers in local coordinates
xcenter[0] = xmat1 @ center1 + xpos1
xcenter[1] = xmat2 @ center2 + xpos2
xcenter[0] = rot_vec_quat(center1, xquat1) + xpos1
xcenter[1] = rot_vec_quat(center2, xquat2) + xpos2

xmat1 = quat_to_mat(xquat1)
xmat2 = quat_to_mat(xquat2)

# compute normals in global coordinates
normal[0] = wp.vec3(xmat1[0, 0], xmat1[1, 0], xmat1[2, 0])
Expand Down Expand Up @@ -239,7 +246,7 @@ def func(
geom_margin: wp.array2d(dtype=float),
# Data in:
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
# In:
geom1: int,
geom2: int,
Expand All @@ -259,20 +266,20 @@ def func(
margin_id = worldid % ngeom_margin if wp.static(ngeom_margin > 1) else 0
margin1, margin2 = geom_margin[margin_id, geom1], geom_margin[margin_id, geom2]
xpos1, xpos2 = geom_xpos_in[worldid, geom1], geom_xpos_in[worldid, geom2]
xmat1, xmat2 = geom_xmat_in[worldid, geom1], geom_xmat_in[worldid, geom2]
xquat1, xquat2 = geom_xquat_in[worldid, geom1], geom_xquat_in[worldid, geom2]

if rbound1 == 0.0 or rbound2 == 0.0:
if wp.static(opt_broadphase_filter & BroadphaseFilter.PLANE):
return _plane_filter(rbound1, rbound2, margin1, margin2, xpos1, xpos2, xmat1, xmat2)
return _plane_filter(rbound1, rbound2, margin1, margin2, xpos1, xpos2, xquat1, xquat2)
else:
if wp.static(opt_broadphase_filter & BroadphaseFilter.SPHERE):
if not _sphere_filter(rbound1, rbound2, margin1, margin2, xpos1, xpos2):
return False
if wp.static(opt_broadphase_filter & BroadphaseFilter.AABB):
if not _aabb_filter(center1, center2, size1, size2, margin1, margin2, xpos1, xpos2, xmat1, xmat2):
if not _aabb_filter(center1, center2, size1, size2, margin1, margin2, xpos1, xpos2, xquat1, xquat2):
return False
if wp.static(opt_broadphase_filter & BroadphaseFilter.OBB):
if not _obb_filter(center1, center2, size1, size2, margin1, margin2, xpos1, xpos2, xmat1, xmat2):
if not _obb_filter(center1, center2, size1, size2, margin1, margin2, xpos1, xpos2, xquat1, xquat2):
return False

return True
Expand Down Expand Up @@ -415,7 +422,7 @@ def kernel(
nworld_in: int,
naconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
# In:
sort_index_in: wp.array2d(dtype=int),
cumulative_sum_in: wp.array(dtype=int),
Expand Down Expand Up @@ -460,7 +467,7 @@ def kernel(

if (
wp.static(_broadphase_filter(opt_broadphase_filter, ngeom_aabb, ngeom_rbound, ngeom_margin))(
geom_aabb, geom_rbound, geom_margin, geom_xpos_in, geom_xmat_in, geom1, geom2, worldid
geom_aabb, geom_rbound, geom_margin, geom_xpos_in, geom_xquat_in, geom1, geom2, worldid
)
or pairid[1] >= 0
):
Expand Down Expand Up @@ -591,7 +598,7 @@ def sap_broadphase(m: Model, d: Data):
d.nworld,
d.naconmax,
d.geom_xpos,
d.geom_xmat,
d.geom_xquat,
sort_index.reshape((-1, m.ngeom)),
cumulative_sum.reshape(-1),
nsweep,
Expand All @@ -614,7 +621,7 @@ def kernel(
# Data in:
naconmax_in: int,
geom_xpos_in: wp.array2d(dtype=wp.vec3),
geom_xmat_in: wp.array2d(dtype=wp.mat33),
geom_xquat_in: wp.array2d(dtype=wp.quat),
# Data out:
collision_pair_out: wp.array(dtype=wp.vec2i),
collision_pairid_out: wp.array(dtype=wp.vec2i),
Expand All @@ -629,7 +636,7 @@ def kernel(

if (
wp.static(_broadphase_filter(opt_broadphase_filter, ngeom_aabb, ngeom_rbound, ngeom_margin))(
geom_aabb, geom_rbound, geom_margin, geom_xpos_in, geom_xmat_in, geom1, geom2, worldid
geom_aabb, geom_rbound, geom_margin, geom_xpos_in, geom_xquat_in, geom1, geom2, worldid
)
or nxn_pairid[elementid][1] >= 0
):
Expand Down Expand Up @@ -676,7 +683,7 @@ def nxn_broadphase(m: Model, d: Data):
m.nxn_pairid_filtered,
d.naconmax,
d.geom_xpos,
d.geom_xmat,
d.geom_xquat,
],
outputs=[
d.collision_pair,
Expand Down
2 changes: 1 addition & 1 deletion mujoco_warp/_src/collision_driver_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ def test_plane_meshtet(self):
# tetrahedron, separated in z by 0.1
convex = Geom()
convex.pos = wp.vec3(0.0)
convex.rot = wp.mat33(np.eye(3))
convex.rot = wp.quat(1.0, 0.0, 0.0, 0.0)
convex.graphadr = -1
convex.vertnum = 4
convex.vertadr = 0
Expand Down
Loading
Loading