Skip to content

Commit 382eb65

Browse files
authored
Update flex_bending dimensions (#628)
* update flex_bending dimensions * add missing flatten * make format uglier thanks to ruff * add curved shell support
1 parent 33830bd commit 382eb65

File tree

3 files changed

+18
-6
lines changed

3 files changed

+18
-6
lines changed

mujoco_warp/_src/io.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -610,7 +610,7 @@ def create_nmodel_batched_array(mjm_array, dtype, expand_dim=True):
610610
flex_elemedge=wp.array(mjm.flex_elemedge, dtype=int),
611611
flexedge_length0=wp.array(mjm.flexedge_length0, dtype=float),
612612
flex_stiffness=wp.array(mjm.flex_stiffness.flatten(), dtype=float),
613-
flex_bending=wp.array(mjm.flex_bending, dtype=wp.mat44f),
613+
flex_bending=wp.array(mjm.flex_bending.flatten(), dtype=float),
614614
flex_damping=wp.array(mjm.flex_damping, dtype=float),
615615
mesh_vertadr=wp.array(mjm.mesh_vertadr, dtype=int),
616616
mesh_vertnum=wp.array(mjm.mesh_vertnum, dtype=int),

mujoco_warp/_src/passive.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,7 @@ def _flex_bending(
454454
flex_vertbodyid: wp.array(dtype=int),
455455
flex_edge: wp.array(dtype=wp.vec2i),
456456
flex_edgeflap: wp.array(dtype=wp.vec2i),
457-
flex_bending: wp.array(dtype=wp.mat44f),
457+
flex_bending: wp.array(dtype=float),
458458
# Data in:
459459
flexvert_xpos_in: wp.array2d(dtype=wp.vec3),
460460
# Data out:
@@ -477,11 +477,23 @@ def _flex_bending(
477477
if v[3] == -1:
478478
return
479479

480+
frc = wp.mat(0.0, shape=(4, 3))
481+
if flex_bending[17 * edgeid + 16]:
482+
v0 = flexvert_xpos_in[worldid, v[0]]
483+
v1 = flexvert_xpos_in[worldid, v[1]]
484+
v2 = flexvert_xpos_in[worldid, v[2]]
485+
v3 = flexvert_xpos_in[worldid, v[3]]
486+
frc[1, :] = wp.cross(v2 - v0, v3 - v0)
487+
frc[2, :] = wp.cross(v3 - v0, v1 - v0)
488+
frc[3, :] = wp.cross(v1 - v0, v2 - v0)
489+
frc[0, :] = -(frc[1, :] + frc[2, :] + frc[3, :])
490+
480491
force = wp.mat(0.0, shape=(nvert, 3))
481492
for i in range(nvert):
482-
for j in range(nvert):
483-
for x in range(3):
484-
force[i, x] -= flex_bending[edgeid][i, j] * flexvert_xpos_in[worldid, v[j]][x]
493+
for x in range(3):
494+
for j in range(nvert):
495+
force[i, x] -= flex_bending[17 * edgeid + 4 * i + j] * flexvert_xpos_in[worldid, v[j]][x]
496+
force[i, x] -= flex_bending[17 * edgeid + 16] * frc[i, x]
485497

486498
for i in range(nvert):
487499
bodyid = flex_vertbodyid[flex_vertadr[f] + v[i]]

mujoco_warp/_src/types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1201,7 +1201,7 @@ class Model:
12011201
flex_elemedge: wp.array(dtype=int)
12021202
flexedge_length0: wp.array(dtype=float)
12031203
flex_stiffness: wp.array(dtype=float)
1204-
flex_bending: wp.array(dtype=wp.mat44f)
1204+
flex_bending: wp.array(dtype=float)
12051205
flex_damping: wp.array(dtype=float)
12061206
mesh_vertadr: wp.array(dtype=int)
12071207
mesh_vertnum: wp.array(dtype=int)

0 commit comments

Comments
 (0)