Merge pull request #3432 from VihaanAgarwal:fix/convex-inertia-unreferenced-mesh
PiperOrigin-RevId: 965896711 Change-Id: I3254a621ef7689544130fd0ce43b86c0261f52b1
This commit is contained in:
@@ -5317,12 +5317,19 @@ void mjCModel::TryCompile(mjModel*& m, mjData*& d, const mjVFS* vfs) {
|
|||||||
if (geoms_[i]->mesh &&
|
if (geoms_[i]->mesh &&
|
||||||
(geoms_[i]->spec.type == mjGEOM_MESH ||
|
(geoms_[i]->spec.type == mjGEOM_MESH ||
|
||||||
geoms_[i]->spec.type == mjGEOM_SDF) &&
|
geoms_[i]->spec.type == mjGEOM_SDF) &&
|
||||||
(geoms_[i]->spec.contype || geoms_[i]->spec.conaffinity || is_in_pair ||
|
(geoms_[i]->spec.contype || geoms_[i]->spec.conaffinity || is_in_pair)) {
|
||||||
geoms_[i]->mesh->spec.inertia == mjMESH_INERTIA_CONVEX)) {
|
|
||||||
geoms_[i]->mesh->SetNeedHull(true);
|
geoms_[i]->mesh->SetNeedHull(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// convex inertia is computed from the hull, so it is needed whether or not
|
||||||
|
// any geom references the mesh
|
||||||
|
for (mjCMesh* mesh : meshes_) {
|
||||||
|
if (mesh->spec.inertia == mjMESH_INERTIA_CONVEX) {
|
||||||
|
mesh->SetNeedHull(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// automatically set nuser fields
|
// automatically set nuser fields
|
||||||
SetNuser();
|
SetNuser();
|
||||||
|
|
||||||
|
|||||||
@@ -975,6 +975,22 @@ TEST_F(MjCMeshTest, ExactConvexInertia) {
|
|||||||
mj_deleteModel(model);
|
mj_deleteModel(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(MjCMeshTest, UnreferencedConvexInertiaMesh) {
|
||||||
|
static constexpr char xml[] = R"(
|
||||||
|
<mujoco>
|
||||||
|
<asset>
|
||||||
|
<mesh name="orphan" inertia="convex"
|
||||||
|
vertex="0 0 1 1 0 0 0 1 0 -1 0 0 0 -1 0"
|
||||||
|
face="0 1 2 0 2 3 0 3 4 0 4 1 1 4 3 1 3 2"/>
|
||||||
|
</asset>
|
||||||
|
<worldbody/>
|
||||||
|
</mujoco>
|
||||||
|
)";
|
||||||
|
std::array<char, 1024> error;
|
||||||
|
MjModelPtr model = LoadModelFromString(xml, error.data(), error.size());
|
||||||
|
EXPECT_THAT(model.get(), NotNull()) << error.data();
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(MjCMeshTest, ExactShellInertia) {
|
TEST_F(MjCMeshTest, ExactShellInertia) {
|
||||||
const std::string xml_path = GetTestDataFilePath(kShellInertiaPath);
|
const std::string xml_path = GetTestDataFilePath(kShellInertiaPath);
|
||||||
std::array<char, 1024> error;
|
std::array<char, 1024> error;
|
||||||
|
|||||||
Reference in New Issue
Block a user