USD decoder improvements: Support actuators targeting tendons and improve side site index handling.
Adds support for mjTRN_TENDON actuators in the USD decoder. Modifies the tendon path parsing to correctly handle side site indices, allowing -1 to signify no side site for a given path element. PiperOrigin-RevId: 862755621 Change-Id: I18b13b160e3d1c27945d0972a69012d6307131e9
This commit is contained in:
committed by
Copybara-Service
parent
d2efc0e154
commit
f434578d30
@@ -1067,7 +1067,7 @@ void ParseMjcPhysicsTendon(mjSpec* spec, const pxr::MjcPhysicsTendon& tendon) {
|
|||||||
std::string side_site_name = "";
|
std::string side_site_name = "";
|
||||||
if (!side_site_indices.empty()) {
|
if (!side_site_indices.empty()) {
|
||||||
int side_site_index = side_site_indices[i];
|
int side_site_index = side_site_indices[i];
|
||||||
if (side_site_index >= side_site_paths.size()) {
|
if (side_site_index > 0 && side_site_index >= side_site_paths.size()) {
|
||||||
mju_warning(
|
mju_warning(
|
||||||
"Tendon %s has side site index %d but only %lu side sites, "
|
"Tendon %s has side site index %d but only %lu side sites, "
|
||||||
"skipping.",
|
"skipping.",
|
||||||
@@ -1075,7 +1075,9 @@ void ParseMjcPhysicsTendon(mjSpec* spec, const pxr::MjcPhysicsTendon& tendon) {
|
|||||||
side_site_paths.size());
|
side_site_paths.size());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
side_site_name = side_site_paths[side_site_index].GetAsString();
|
if (side_site_index >= 0) {
|
||||||
|
side_site_name = side_site_paths[side_site_index].GetAsString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
wrap = mjs_wrapGeom(mj_tendon, wrap_target.GetAsString().c_str(),
|
wrap = mjs_wrapGeom(mj_tendon, wrap_target.GetAsString().c_str(),
|
||||||
side_site_name.c_str());
|
side_site_name.c_str());
|
||||||
@@ -1294,6 +1296,8 @@ void ParseMjcPhysicsActuator(mjSpec* spec,
|
|||||||
mj_act->trntype = mjTRN_BODY;
|
mj_act->trntype = mjTRN_BODY;
|
||||||
} else if (target_prim.HasAPI<pxr::MjcPhysicsSiteAPI>()) {
|
} else if (target_prim.HasAPI<pxr::MjcPhysicsSiteAPI>()) {
|
||||||
mj_act->trntype = slider_crank ? mjTRN_SLIDERCRANK : mjTRN_SITE;
|
mj_act->trntype = slider_crank ? mjTRN_SLIDERCRANK : mjTRN_SITE;
|
||||||
|
} else if (target_prim.IsA<pxr::MjcPhysicsTendon>()) {
|
||||||
|
mj_act->trntype = mjTRN_TENDON;
|
||||||
} else {
|
} else {
|
||||||
mju_warning("Actuator %s has an invalid target type, skipping.",
|
mju_warning("Actuator %s has an invalid target type, skipping.",
|
||||||
prim.GetPath().GetAsString().c_str());
|
prim.GetPath().GetAsString().c_str());
|
||||||
|
|||||||
Reference in New Issue
Block a user