d816b38f4c
Since relationships in USD can only contain a single instance of a path, it was previously impossible to have a tendon path that visits the same wrap target more than once. This is a fairly common occurence when dealing with tendons that have pulleys. With this change, if mjc:path:indices is not defined then the behaviour is as it was and the mjc:path is considered to be ordered. If it is authored then the parser will use the indices into mjc:path as the order. This mirrors other similar concepts in USD such as face vertex indices. PiperOrigin-RevId: 856339887 Change-Id: I6b9503973de377acdb0689be168c16e4aa19b70b
383 lines
17 KiB
C++
383 lines
17 KiB
C++
// Copyright 2025 DeepMind Technologies Limited
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include <mujoco/experimental/usd/mjcPhysics/tokens.h>
|
|
|
|
PXR_NAMESPACE_OPEN_SCOPE
|
|
|
|
MjcPhysicsTokensType::MjcPhysicsTokensType()
|
|
: affine("affine", TfToken::Immortal),
|
|
auto_("auto", TfToken::Immortal),
|
|
cg("cg", TfToken::Immortal),
|
|
convex("convex", TfToken::Immortal),
|
|
degree("degree", TfToken::Immortal),
|
|
dense("dense", TfToken::Immortal),
|
|
elliptic("elliptic", TfToken::Immortal),
|
|
euler("euler", TfToken::Immortal),
|
|
exact("exact", TfToken::Immortal),
|
|
false_("false", TfToken::Immortal),
|
|
filter("filter", TfToken::Immortal),
|
|
filterexact("filterexact", TfToken::Immortal),
|
|
fixed("fixed", TfToken::Immortal),
|
|
implicit("implicit", TfToken::Immortal),
|
|
implicitfast("implicitfast", TfToken::Immortal),
|
|
integrator("integrator", TfToken::Immortal),
|
|
legacy("legacy", TfToken::Immortal),
|
|
mjcAct("mjc:act", TfToken::Immortal),
|
|
mjcActDim("mjc:actDim", TfToken::Immortal),
|
|
mjcActEarly("mjc:actEarly", TfToken::Immortal),
|
|
mjcActLimited("mjc:actLimited", TfToken::Immortal),
|
|
mjcActRangeMax("mjc:actRange:max", TfToken::Immortal),
|
|
mjcActRangeMin("mjc:actRange:min", TfToken::Immortal),
|
|
mjcActuatorfrclimited("mjc:actuatorfrclimited", TfToken::Immortal),
|
|
mjcActuatorfrcrangeMax("mjc:actuatorfrcrange:max", TfToken::Immortal),
|
|
mjcActuatorfrcrangeMin("mjc:actuatorfrcrange:min", TfToken::Immortal),
|
|
mjcActuatorgravcomp("mjc:actuatorgravcomp", TfToken::Immortal),
|
|
mjcArmature("mjc:armature", TfToken::Immortal),
|
|
mjcBiasPrm("mjc:biasPrm", TfToken::Immortal),
|
|
mjcBiasType("mjc:biasType", TfToken::Immortal),
|
|
mjcCompilerAlignFree("mjc:compiler:alignFree", TfToken::Immortal),
|
|
mjcCompilerAngle("mjc:compiler:angle", TfToken::Immortal),
|
|
mjcCompilerAutoLimits("mjc:compiler:autoLimits", TfToken::Immortal),
|
|
mjcCompilerBalanceInertia("mjc:compiler:balanceInertia",
|
|
TfToken::Immortal),
|
|
mjcCompilerBoundInertia("mjc:compiler:boundInertia", TfToken::Immortal),
|
|
mjcCompilerBoundMass("mjc:compiler:boundMass", TfToken::Immortal),
|
|
mjcCompilerFitAABB("mjc:compiler:fitAABB", TfToken::Immortal),
|
|
mjcCompilerFuseStatic("mjc:compiler:fuseStatic", TfToken::Immortal),
|
|
mjcCompilerInertiaFromGeom("mjc:compiler:inertiaFromGeom",
|
|
TfToken::Immortal),
|
|
mjcCompilerInertiaGroupRangeMax("mjc:compiler:inertiaGroupRange:max",
|
|
TfToken::Immortal),
|
|
mjcCompilerInertiaGroupRangeMin("mjc:compiler:inertiaGroupRange:min",
|
|
TfToken::Immortal),
|
|
mjcCompilerSaveInertial("mjc:compiler:saveInertial", TfToken::Immortal),
|
|
mjcCompilerSetTotalMass("mjc:compiler:setTotalMass", TfToken::Immortal),
|
|
mjcCompilerUseThread("mjc:compiler:useThread", TfToken::Immortal),
|
|
mjcCondim("mjc:condim", TfToken::Immortal),
|
|
mjcCrankLength("mjc:crankLength", TfToken::Immortal),
|
|
mjcCtrl("mjc:ctrl", TfToken::Immortal),
|
|
mjcCtrlLimited("mjc:ctrlLimited", TfToken::Immortal),
|
|
mjcCtrlRangeMax("mjc:ctrlRange:max", TfToken::Immortal),
|
|
mjcCtrlRangeMin("mjc:ctrlRange:min", TfToken::Immortal),
|
|
mjcDamping("mjc:damping", TfToken::Immortal),
|
|
mjcDynPrm("mjc:dynPrm", TfToken::Immortal),
|
|
mjcDynType("mjc:dynType", TfToken::Immortal),
|
|
mjcFlagActuation("mjc:flag:actuation", TfToken::Immortal),
|
|
mjcFlagAutoreset("mjc:flag:autoreset", TfToken::Immortal),
|
|
mjcFlagClampctrl("mjc:flag:clampctrl", TfToken::Immortal),
|
|
mjcFlagConstraint("mjc:flag:constraint", TfToken::Immortal),
|
|
mjcFlagContact("mjc:flag:contact", TfToken::Immortal),
|
|
mjcFlagDamper("mjc:flag:damper", TfToken::Immortal),
|
|
mjcFlagEnergy("mjc:flag:energy", TfToken::Immortal),
|
|
mjcFlagEquality("mjc:flag:equality", TfToken::Immortal),
|
|
mjcFlagEulerdamp("mjc:flag:eulerdamp", TfToken::Immortal),
|
|
mjcFlagFilterparent("mjc:flag:filterparent", TfToken::Immortal),
|
|
mjcFlagFrictionloss("mjc:flag:frictionloss", TfToken::Immortal),
|
|
mjcFlagFwdinv("mjc:flag:fwdinv", TfToken::Immortal),
|
|
mjcFlagGravity("mjc:flag:gravity", TfToken::Immortal),
|
|
mjcFlagInvdiscrete("mjc:flag:invdiscrete", TfToken::Immortal),
|
|
mjcFlagIsland("mjc:flag:island", TfToken::Immortal),
|
|
mjcFlagLimit("mjc:flag:limit", TfToken::Immortal),
|
|
mjcFlagMidphase("mjc:flag:midphase", TfToken::Immortal),
|
|
mjcFlagMulticcd("mjc:flag:multiccd", TfToken::Immortal),
|
|
mjcFlagNativeccd("mjc:flag:nativeccd", TfToken::Immortal),
|
|
mjcFlagOverride("mjc:flag:override", TfToken::Immortal),
|
|
mjcFlagRefsafe("mjc:flag:refsafe", TfToken::Immortal),
|
|
mjcFlagSensor("mjc:flag:sensor", TfToken::Immortal),
|
|
mjcFlagSpring("mjc:flag:spring", TfToken::Immortal),
|
|
mjcFlagWarmstart("mjc:flag:warmstart", TfToken::Immortal),
|
|
mjcForceLimited("mjc:forceLimited", TfToken::Immortal),
|
|
mjcForceRangeMax("mjc:forceRange:max", TfToken::Immortal),
|
|
mjcForceRangeMin("mjc:forceRange:min", TfToken::Immortal),
|
|
mjcFrictionloss("mjc:frictionloss", TfToken::Immortal),
|
|
mjcGainPrm("mjc:gainPrm", TfToken::Immortal),
|
|
mjcGainType("mjc:gainType", TfToken::Immortal),
|
|
mjcGap("mjc:gap", TfToken::Immortal),
|
|
mjcGear("mjc:gear", TfToken::Immortal),
|
|
mjcGroup("mjc:group", TfToken::Immortal),
|
|
mjcInertia("mjc:inertia", TfToken::Immortal),
|
|
mjcInheritRange("mjc:inheritRange", TfToken::Immortal),
|
|
mjcJointInParent("mjc:jointInParent", TfToken::Immortal),
|
|
mjcLengthRangeMax("mjc:lengthRange:max", TfToken::Immortal),
|
|
mjcLengthRangeMin("mjc:lengthRange:min", TfToken::Immortal),
|
|
mjcLimited("mjc:limited", TfToken::Immortal),
|
|
mjcMargin("mjc:margin", TfToken::Immortal),
|
|
mjcMaxhullvert("mjc:maxhullvert", TfToken::Immortal),
|
|
mjcMpos("mjc:mpos", TfToken::Immortal),
|
|
mjcMquat("mjc:mquat", TfToken::Immortal),
|
|
mjcOptionActuatorgroupdisable("mjc:option:actuatorgroupdisable",
|
|
TfToken::Immortal),
|
|
mjcOptionCcd_iterations("mjc:option:ccd_iterations", TfToken::Immortal),
|
|
mjcOptionCcd_tolerance("mjc:option:ccd_tolerance", TfToken::Immortal),
|
|
mjcOptionCone("mjc:option:cone", TfToken::Immortal),
|
|
mjcOptionDensity("mjc:option:density", TfToken::Immortal),
|
|
mjcOptionImpratio("mjc:option:impratio", TfToken::Immortal),
|
|
mjcOptionIntegrator("mjc:option:integrator", TfToken::Immortal),
|
|
mjcOptionIterations("mjc:option:iterations", TfToken::Immortal),
|
|
mjcOptionJacobian("mjc:option:jacobian", TfToken::Immortal),
|
|
mjcOptionLs_iterations("mjc:option:ls_iterations", TfToken::Immortal),
|
|
mjcOptionLs_tolerance("mjc:option:ls_tolerance", TfToken::Immortal),
|
|
mjcOptionMagnetic("mjc:option:magnetic", TfToken::Immortal),
|
|
mjcOptionNoslip_iterations("mjc:option:noslip_iterations",
|
|
TfToken::Immortal),
|
|
mjcOptionNoslip_tolerance("mjc:option:noslip_tolerance",
|
|
TfToken::Immortal),
|
|
mjcOptionO_friction("mjc:option:o_friction", TfToken::Immortal),
|
|
mjcOptionO_margin("mjc:option:o_margin", TfToken::Immortal),
|
|
mjcOptionO_solimp("mjc:option:o_solimp", TfToken::Immortal),
|
|
mjcOptionO_solref("mjc:option:o_solref", TfToken::Immortal),
|
|
mjcOptionSdf_initpoints("mjc:option:sdf_initpoints", TfToken::Immortal),
|
|
mjcOptionSdf_iterations("mjc:option:sdf_iterations", TfToken::Immortal),
|
|
mjcOptionSolver("mjc:option:solver", TfToken::Immortal),
|
|
mjcOptionTimestep("mjc:option:timestep", TfToken::Immortal),
|
|
mjcOptionTolerance("mjc:option:tolerance", TfToken::Immortal),
|
|
mjcOptionViscosity("mjc:option:viscosity", TfToken::Immortal),
|
|
mjcOptionWind("mjc:option:wind", TfToken::Immortal),
|
|
mjcPath("mjc:path", TfToken::Immortal),
|
|
mjcPathCoef("mjc:path:coef", TfToken::Immortal),
|
|
mjcPathDivisors("mjc:path:divisors", TfToken::Immortal),
|
|
mjcPathIndices("mjc:path:indices", TfToken::Immortal),
|
|
mjcPathSegments("mjc:path:segments", TfToken::Immortal),
|
|
mjcPriority("mjc:priority", TfToken::Immortal),
|
|
mjcQpos("mjc:qpos", TfToken::Immortal),
|
|
mjcQvel("mjc:qvel", TfToken::Immortal),
|
|
mjcRangeMax("mjc:range:max", TfToken::Immortal),
|
|
mjcRangeMin("mjc:range:min", TfToken::Immortal),
|
|
mjcRef("mjc:ref", TfToken::Immortal),
|
|
mjcRefSite("mjc:refSite", TfToken::Immortal),
|
|
mjcRgba("mjc:rgba", TfToken::Immortal),
|
|
mjcRollingfriction("mjc:rollingfriction", TfToken::Immortal),
|
|
mjcShellinertia("mjc:shellinertia", TfToken::Immortal),
|
|
mjcSideSites("mjc:sideSites", TfToken::Immortal),
|
|
mjcSideSitesIndices("mjc:sideSites:indices", TfToken::Immortal),
|
|
mjcSliderSite("mjc:sliderSite", TfToken::Immortal),
|
|
mjcSolimp("mjc:solimp", TfToken::Immortal),
|
|
mjcSolimpfriction("mjc:solimpfriction", TfToken::Immortal),
|
|
mjcSolimplimit("mjc:solimplimit", TfToken::Immortal),
|
|
mjcSolmix("mjc:solmix", TfToken::Immortal),
|
|
mjcSolref("mjc:solref", TfToken::Immortal),
|
|
mjcSolreffriction("mjc:solreffriction", TfToken::Immortal),
|
|
mjcSolreflimit("mjc:solreflimit", TfToken::Immortal),
|
|
mjcSpringdamper("mjc:springdamper", TfToken::Immortal),
|
|
mjcSpringlength("mjc:springlength", TfToken::Immortal),
|
|
mjcSpringref("mjc:springref", TfToken::Immortal),
|
|
mjcStiffness("mjc:stiffness", TfToken::Immortal),
|
|
mjcTarget("mjc:target", TfToken::Immortal),
|
|
mjcTorsionalfriction("mjc:torsionalfriction", TfToken::Immortal),
|
|
mjcType("mjc:type", TfToken::Immortal),
|
|
mjcWidth("mjc:width", TfToken::Immortal),
|
|
muscle("muscle", TfToken::Immortal),
|
|
newton("newton", TfToken::Immortal),
|
|
none("none", TfToken::Immortal),
|
|
pgs("pgs", TfToken::Immortal),
|
|
pyramidal("pyramidal", TfToken::Immortal),
|
|
radian("radian", TfToken::Immortal),
|
|
rk4("rk4", TfToken::Immortal),
|
|
shell("shell", TfToken::Immortal),
|
|
sparse("sparse", TfToken::Immortal),
|
|
spatial("spatial", TfToken::Immortal),
|
|
true_("true", TfToken::Immortal),
|
|
user("user", TfToken::Immortal),
|
|
MjcActuator("MjcActuator", TfToken::Immortal),
|
|
MjcCollisionAPI("MjcCollisionAPI", TfToken::Immortal),
|
|
MjcImageableAPI("MjcImageableAPI", TfToken::Immortal),
|
|
MjcJointAPI("MjcJointAPI", TfToken::Immortal),
|
|
MjcKeyframe("MjcKeyframe", TfToken::Immortal),
|
|
MjcMaterialAPI("MjcMaterialAPI", TfToken::Immortal),
|
|
MjcMeshCollisionAPI("MjcMeshCollisionAPI", TfToken::Immortal),
|
|
MjcSceneAPI("MjcSceneAPI", TfToken::Immortal),
|
|
MjcSiteAPI("MjcSiteAPI", TfToken::Immortal),
|
|
MjcTendon("MjcTendon", TfToken::Immortal),
|
|
allTokens({affine,
|
|
auto_,
|
|
cg,
|
|
convex,
|
|
degree,
|
|
dense,
|
|
elliptic,
|
|
euler,
|
|
exact,
|
|
false_,
|
|
filter,
|
|
filterexact,
|
|
fixed,
|
|
implicit,
|
|
implicitfast,
|
|
integrator,
|
|
legacy,
|
|
mjcAct,
|
|
mjcActDim,
|
|
mjcActEarly,
|
|
mjcActLimited,
|
|
mjcActRangeMax,
|
|
mjcActRangeMin,
|
|
mjcActuatorfrclimited,
|
|
mjcActuatorfrcrangeMax,
|
|
mjcActuatorfrcrangeMin,
|
|
mjcActuatorgravcomp,
|
|
mjcArmature,
|
|
mjcBiasPrm,
|
|
mjcBiasType,
|
|
mjcCompilerAlignFree,
|
|
mjcCompilerAngle,
|
|
mjcCompilerAutoLimits,
|
|
mjcCompilerBalanceInertia,
|
|
mjcCompilerBoundInertia,
|
|
mjcCompilerBoundMass,
|
|
mjcCompilerFitAABB,
|
|
mjcCompilerFuseStatic,
|
|
mjcCompilerInertiaFromGeom,
|
|
mjcCompilerInertiaGroupRangeMax,
|
|
mjcCompilerInertiaGroupRangeMin,
|
|
mjcCompilerSaveInertial,
|
|
mjcCompilerSetTotalMass,
|
|
mjcCompilerUseThread,
|
|
mjcCondim,
|
|
mjcCrankLength,
|
|
mjcCtrl,
|
|
mjcCtrlLimited,
|
|
mjcCtrlRangeMax,
|
|
mjcCtrlRangeMin,
|
|
mjcDamping,
|
|
mjcDynPrm,
|
|
mjcDynType,
|
|
mjcFlagActuation,
|
|
mjcFlagAutoreset,
|
|
mjcFlagClampctrl,
|
|
mjcFlagConstraint,
|
|
mjcFlagContact,
|
|
mjcFlagDamper,
|
|
mjcFlagEnergy,
|
|
mjcFlagEquality,
|
|
mjcFlagEulerdamp,
|
|
mjcFlagFilterparent,
|
|
mjcFlagFrictionloss,
|
|
mjcFlagFwdinv,
|
|
mjcFlagGravity,
|
|
mjcFlagInvdiscrete,
|
|
mjcFlagIsland,
|
|
mjcFlagLimit,
|
|
mjcFlagMidphase,
|
|
mjcFlagMulticcd,
|
|
mjcFlagNativeccd,
|
|
mjcFlagOverride,
|
|
mjcFlagRefsafe,
|
|
mjcFlagSensor,
|
|
mjcFlagSpring,
|
|
mjcFlagWarmstart,
|
|
mjcForceLimited,
|
|
mjcForceRangeMax,
|
|
mjcForceRangeMin,
|
|
mjcFrictionloss,
|
|
mjcGainPrm,
|
|
mjcGainType,
|
|
mjcGap,
|
|
mjcGear,
|
|
mjcGroup,
|
|
mjcInertia,
|
|
mjcInheritRange,
|
|
mjcJointInParent,
|
|
mjcLengthRangeMax,
|
|
mjcLengthRangeMin,
|
|
mjcLimited,
|
|
mjcMargin,
|
|
mjcMaxhullvert,
|
|
mjcMpos,
|
|
mjcMquat,
|
|
mjcOptionActuatorgroupdisable,
|
|
mjcOptionCcd_iterations,
|
|
mjcOptionCcd_tolerance,
|
|
mjcOptionCone,
|
|
mjcOptionDensity,
|
|
mjcOptionImpratio,
|
|
mjcOptionIntegrator,
|
|
mjcOptionIterations,
|
|
mjcOptionJacobian,
|
|
mjcOptionLs_iterations,
|
|
mjcOptionLs_tolerance,
|
|
mjcOptionMagnetic,
|
|
mjcOptionNoslip_iterations,
|
|
mjcOptionNoslip_tolerance,
|
|
mjcOptionO_friction,
|
|
mjcOptionO_margin,
|
|
mjcOptionO_solimp,
|
|
mjcOptionO_solref,
|
|
mjcOptionSdf_initpoints,
|
|
mjcOptionSdf_iterations,
|
|
mjcOptionSolver,
|
|
mjcOptionTimestep,
|
|
mjcOptionTolerance,
|
|
mjcOptionViscosity,
|
|
mjcOptionWind,
|
|
mjcPath,
|
|
mjcPathCoef,
|
|
mjcPathDivisors,
|
|
mjcPathIndices,
|
|
mjcPathSegments,
|
|
mjcPriority,
|
|
mjcQpos,
|
|
mjcQvel,
|
|
mjcRangeMax,
|
|
mjcRangeMin,
|
|
mjcRef,
|
|
mjcRefSite,
|
|
mjcRgba,
|
|
mjcRollingfriction,
|
|
mjcShellinertia,
|
|
mjcSideSites,
|
|
mjcSideSitesIndices,
|
|
mjcSliderSite,
|
|
mjcSolimp,
|
|
mjcSolimpfriction,
|
|
mjcSolimplimit,
|
|
mjcSolmix,
|
|
mjcSolref,
|
|
mjcSolreffriction,
|
|
mjcSolreflimit,
|
|
mjcSpringdamper,
|
|
mjcSpringlength,
|
|
mjcSpringref,
|
|
mjcStiffness,
|
|
mjcTarget,
|
|
mjcTorsionalfriction,
|
|
mjcType,
|
|
mjcWidth,
|
|
muscle,
|
|
newton,
|
|
none,
|
|
pgs,
|
|
pyramidal,
|
|
radian,
|
|
rk4,
|
|
shell,
|
|
sparse,
|
|
spatial,
|
|
true_,
|
|
user,
|
|
MjcActuator,
|
|
MjcCollisionAPI,
|
|
MjcImageableAPI,
|
|
MjcJointAPI,
|
|
MjcKeyframe,
|
|
MjcMaterialAPI,
|
|
MjcMeshCollisionAPI,
|
|
MjcSceneAPI,
|
|
MjcSiteAPI,
|
|
MjcTendon}) {}
|
|
|
|
TfStaticData<MjcPhysicsTokensType> MjcPhysicsTokens;
|
|
|
|
PXR_NAMESPACE_CLOSE_SCOPE
|