Refactor flex stiffness storage to support variable sizes.

This change introduces `nflexstiffness` and `flex_stiffnessadr` to allow flex stiffness matrices to have sizes other than the fixed 21 per element. Higher-order flexes can now store larger stiffness matrices based on their number of nodes. The `flex_stiffnessadr` array provides the starting index for each flex's stiffness data within the `flex_stiffness` array.

PiperOrigin-RevId: 899632263
Change-Id: Ie49182c46c3777acf0c6b492345edfcf62fb5e44
This commit is contained in:
Alessio Quaglino
2026-04-14 09:38:17 -07:00
committed by Copybara-Service
parent 08bb6e66f1
commit 5724158593
14 changed files with 100 additions and 48 deletions
+12 -1
View File
@@ -3737,6 +3737,12 @@ struct MjModel {
void set_nflexelemdata(int value) {
ptr_->nflexelemdata = static_cast<mjtSize>(value);
}
int nflexstiffness() const {
return static_cast<int>(ptr_->nflexstiffness);
}
void set_nflexstiffness(int value) {
ptr_->nflexstiffness = static_cast<mjtSize>(value);
}
int nflexelemedge() const {
return static_cast<int>(ptr_->nflexelemedge);
}
@@ -4661,6 +4667,9 @@ struct MjModel {
emscripten::val flex_elemdataadr() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemdataadr));
}
emscripten::val flex_stiffnessadr() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_stiffnessadr));
}
emscripten::val flex_elemedgeadr() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflex, ptr_->flex_elemedgeadr));
}
@@ -4746,7 +4755,7 @@ struct MjModel {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflex * 3, ptr_->flex_size));
}
emscripten::val flex_stiffness() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflexelem * 21, ptr_->flex_stiffness));
return emscripten::val(emscripten::typed_memory_view(ptr_->nflexstiffness, ptr_->flex_stiffness));
}
emscripten::val flex_bending() const {
return emscripten::val(emscripten::typed_memory_view(ptr_->nflexedge * 17, ptr_->flex_bending));
@@ -11848,6 +11857,7 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) {
.property("flex_solmix", &MjModel::flex_solmix)
.property("flex_solref", &MjModel::flex_solref)
.property("flex_stiffness", &MjModel::flex_stiffness)
.property("flex_stiffnessadr", &MjModel::flex_stiffnessadr)
.property("flex_texcoord", &MjModel::flex_texcoord)
.property("flex_texcoordadr", &MjModel::flex_texcoordadr)
.property("flex_vert", &MjModel::flex_vert)
@@ -12045,6 +12055,7 @@ EMSCRIPTEN_BINDINGS(mujoco_bindings) {
.property("nflexevpair", &MjModel::nflexevpair, &MjModel::set_nflexevpair, reference())
.property("nflexnode", &MjModel::nflexnode, &MjModel::set_nflexnode, reference())
.property("nflexshelldata", &MjModel::nflexshelldata, &MjModel::set_nflexshelldata, reference())
.property("nflexstiffness", &MjModel::nflexstiffness, &MjModel::set_nflexstiffness, reference())
.property("nflextexcoord", &MjModel::nflextexcoord, &MjModel::set_nflextexcoord, reference())
.property("nflexvert", &MjModel::nflexvert, &MjModel::set_nflexvert, reference())
.property("ngeom", &MjModel::ngeom, &MjModel::set_ngeom, reference())