Remove MjcActuatorAPI in favor of typed MjcTransmission.
PiperOrigin-RevId: 781498554 Change-Id: Ib6ce5038645f6ca08638a9d316b0347dc121bc62
This commit is contained in:
committed by
Copybara-Service
parent
2d69610abd
commit
fbea72d767
@@ -172,7 +172,6 @@ target_include_directories(${MJCF_PLUGIN_TARGET_NAME} PRIVATE
|
||||
|
||||
add_library(${MJC_PHYSICS_PLUGIN_TARGET_NAME} SHARED)
|
||||
target_sources(${MJC_PHYSICS_PLUGIN_TARGET_NAME} PRIVATE
|
||||
mjcPhysics/actuatorAPI.cpp
|
||||
mjcPhysics/collisionAPI.cpp
|
||||
mjcPhysics/jointAPI.cpp
|
||||
mjcPhysics/keyframe.cpp
|
||||
@@ -180,6 +179,7 @@ target_sources(${MJC_PHYSICS_PLUGIN_TARGET_NAME} PRIVATE
|
||||
mjcPhysics/sceneAPI.cpp
|
||||
mjcPhysics/siteAPI.cpp
|
||||
mjcPhysics/tokens.cpp
|
||||
mjcPhysics/transmission.cpp
|
||||
)
|
||||
set_target_properties(${MJC_PHYSICS_PLUGIN_TARGET_NAME} PROPERTIES
|
||||
OUTPUT_NAME ${MJC_PHYSICS_PLUGIN_TARGET_NAME}
|
||||
|
||||
@@ -251,8 +251,8 @@ class "MjcMeshCollisionAPI" (
|
||||
)
|
||||
}
|
||||
|
||||
class "MjcActuatorAPI" (
|
||||
doc = "API describing a Mujoco actuator."
|
||||
class MjcTransmission "MjcTransmission" (
|
||||
doc = "Known as actuator in MuJoCo, this prim represents force transmission to joints, bodies, or sites."
|
||||
)
|
||||
{
|
||||
uniform int mjc:actDim = -1 (
|
||||
@@ -333,6 +333,9 @@ class "MjcActuatorAPI" (
|
||||
rel mjc:sliderSite (
|
||||
doc = "Used only for the slider-crank transmission type. The target site is the pin joining the slider and the connecting rod. The slider moves along the z-axis of the slidersite frame. Therefore the site should be oriented as needed when it is defined in the kinematic tree; its orientation cannot be changed in the actuator definition."
|
||||
)
|
||||
rel mjc:target (
|
||||
doc = "Actuator transmission target."
|
||||
)
|
||||
}
|
||||
|
||||
class MjcKeyframe "MjcKeyframe" (
|
||||
|
||||
@@ -3,16 +3,6 @@
|
||||
{
|
||||
"Info": {
|
||||
"Types": {
|
||||
"MjcPhysicsActuatorAPI": {
|
||||
"alias": {
|
||||
"UsdSchemaBase": "MjcActuatorAPI"
|
||||
},
|
||||
"autoGenerated": true,
|
||||
"bases": [
|
||||
"UsdAPISchemaBase"
|
||||
],
|
||||
"schemaKind": "singleApplyAPI"
|
||||
},
|
||||
"MjcPhysicsCollisionAPI": {
|
||||
"alias": {
|
||||
"UsdSchemaBase": "MjcCollisionAPI"
|
||||
@@ -72,6 +62,16 @@
|
||||
"UsdAPISchemaBase"
|
||||
],
|
||||
"schemaKind": "singleApplyAPI"
|
||||
},
|
||||
"MjcPhysicsTransmission": {
|
||||
"alias": {
|
||||
"UsdSchemaBase": "MjcTransmission"
|
||||
},
|
||||
"autoGenerated": true,
|
||||
"bases": [
|
||||
"UsdTyped"
|
||||
],
|
||||
"schemaKind": "concreteTyped"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@@ -569,16 +569,20 @@ class "MjcMeshCollisionAPI"
|
||||
)
|
||||
}
|
||||
|
||||
class "MjcActuatorAPI"
|
||||
class MjcTransmission "MjcTransmission"
|
||||
(
|
||||
customData = {
|
||||
string className = "ActuatorAPI"
|
||||
string className = "Transmission"
|
||||
}
|
||||
doc = """API describing a Mujoco actuator."""
|
||||
doc = """Known as actuator in MuJoCo, this prim represents force transmission to joints, bodies, or sites."""
|
||||
|
||||
inherits = </APISchemaBase>
|
||||
inherits = </Typed>
|
||||
)
|
||||
{
|
||||
rel mjc:target (
|
||||
doc = "Actuator transmission target."
|
||||
)
|
||||
|
||||
# Control/Force/Activation Limits
|
||||
uniform token mjc:ctrlLimited = "auto" (
|
||||
doc = "If true, the control input to this actuator is automatically clamped to ctrlrange at runtime. If false, control input clamping is disabled. If 'auto' and autolimits is set in compiler, control clamping will automatically be set to true if ctrlrange is defined without explicitly setting this attribute to 'true'. Note that control input clamping can also be globally disabled with the clampctrl attribute of option/flag."
|
||||
|
||||
@@ -134,6 +134,7 @@ MjcPhysicsTokensType::MjcPhysicsTokensType()
|
||||
mjcSpringdamper("mjc:springdamper", TfToken::Immortal),
|
||||
mjcSpringref("mjc:springref", TfToken::Immortal),
|
||||
mjcStiffness("mjc:stiffness", TfToken::Immortal),
|
||||
mjcTarget("mjc:target", TfToken::Immortal),
|
||||
muscle("muscle", TfToken::Immortal),
|
||||
newton("newton", TfToken::Immortal),
|
||||
none("none", TfToken::Immortal),
|
||||
@@ -144,13 +145,13 @@ MjcPhysicsTokensType::MjcPhysicsTokensType()
|
||||
sparse("sparse", TfToken::Immortal),
|
||||
true_("true", TfToken::Immortal),
|
||||
user("user", TfToken::Immortal),
|
||||
MjcActuatorAPI("MjcActuatorAPI", TfToken::Immortal),
|
||||
MjcCollisionAPI("MjcCollisionAPI", TfToken::Immortal),
|
||||
MjcJointAPI("MjcJointAPI", TfToken::Immortal),
|
||||
MjcKeyframe("MjcKeyframe", TfToken::Immortal),
|
||||
MjcMeshCollisionAPI("MjcMeshCollisionAPI", TfToken::Immortal),
|
||||
MjcSceneAPI("MjcSceneAPI", TfToken::Immortal),
|
||||
MjcSiteAPI("MjcSiteAPI", TfToken::Immortal),
|
||||
MjcTransmission("MjcTransmission", TfToken::Immortal),
|
||||
allTokens({affine,
|
||||
auto_,
|
||||
cg,
|
||||
@@ -265,6 +266,7 @@ MjcPhysicsTokensType::MjcPhysicsTokensType()
|
||||
mjcSpringdamper,
|
||||
mjcSpringref,
|
||||
mjcStiffness,
|
||||
mjcTarget,
|
||||
muscle,
|
||||
newton,
|
||||
none,
|
||||
@@ -275,13 +277,13 @@ MjcPhysicsTokensType::MjcPhysicsTokensType()
|
||||
sparse,
|
||||
true_,
|
||||
user,
|
||||
MjcActuatorAPI,
|
||||
MjcCollisionAPI,
|
||||
MjcJointAPI,
|
||||
MjcKeyframe,
|
||||
MjcMeshCollisionAPI,
|
||||
MjcSceneAPI,
|
||||
MjcSiteAPI}) {}
|
||||
MjcSiteAPI,
|
||||
MjcTransmission}) {}
|
||||
|
||||
TfStaticData<MjcPhysicsTokensType> MjcPhysicsTokens;
|
||||
|
||||
|
||||
+113
-87
@@ -12,7 +12,7 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include <mujoco/experimental/usd/mjcPhysics/actuatorAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/transmission.h>
|
||||
|
||||
#include <pxr/usd/sdf/assetPath.h>
|
||||
#include <pxr/usd/sdf/types.h>
|
||||
@@ -23,313 +23,338 @@ PXR_NAMESPACE_OPEN_SCOPE
|
||||
|
||||
// Register the schema with the TfType system.
|
||||
TF_REGISTRY_FUNCTION(TfType) {
|
||||
TfType::Define<MjcPhysicsActuatorAPI, TfType::Bases<UsdAPISchemaBase> >();
|
||||
TfType::Define<MjcPhysicsTransmission, TfType::Bases<UsdTyped> >();
|
||||
|
||||
// Register the usd prim typename as an alias under UsdSchemaBase. This
|
||||
// enables one to call
|
||||
// TfType::Find<UsdSchemaBase>().FindDerivedByName("MjcTransmission")
|
||||
// to find TfType<MjcPhysicsTransmission>, which is how IsA queries are
|
||||
// answered.
|
||||
TfType::AddAlias<UsdSchemaBase, MjcPhysicsTransmission>("MjcTransmission");
|
||||
}
|
||||
|
||||
/* virtual */
|
||||
MjcPhysicsActuatorAPI::~MjcPhysicsActuatorAPI() {}
|
||||
MjcPhysicsTransmission::~MjcPhysicsTransmission() {}
|
||||
|
||||
/* static */
|
||||
MjcPhysicsActuatorAPI MjcPhysicsActuatorAPI::Get(const UsdStagePtr &stage,
|
||||
const SdfPath &path) {
|
||||
MjcPhysicsTransmission MjcPhysicsTransmission::Get(const UsdStagePtr &stage,
|
||||
const SdfPath &path) {
|
||||
if (!stage) {
|
||||
TF_CODING_ERROR("Invalid stage");
|
||||
return MjcPhysicsActuatorAPI();
|
||||
return MjcPhysicsTransmission();
|
||||
}
|
||||
return MjcPhysicsActuatorAPI(stage->GetPrimAtPath(path));
|
||||
return MjcPhysicsTransmission(stage->GetPrimAtPath(path));
|
||||
}
|
||||
|
||||
/* static */
|
||||
MjcPhysicsTransmission MjcPhysicsTransmission::Define(const UsdStagePtr &stage,
|
||||
const SdfPath &path) {
|
||||
static TfToken usdPrimTypeName("MjcTransmission");
|
||||
if (!stage) {
|
||||
TF_CODING_ERROR("Invalid stage");
|
||||
return MjcPhysicsTransmission();
|
||||
}
|
||||
return MjcPhysicsTransmission(stage->DefinePrim(path, usdPrimTypeName));
|
||||
}
|
||||
|
||||
/* virtual */
|
||||
UsdSchemaKind MjcPhysicsActuatorAPI::_GetSchemaKind() const {
|
||||
return MjcPhysicsActuatorAPI::schemaKind;
|
||||
UsdSchemaKind MjcPhysicsTransmission::_GetSchemaKind() const {
|
||||
return MjcPhysicsTransmission::schemaKind;
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool MjcPhysicsActuatorAPI::CanApply(const UsdPrim &prim, std::string *whyNot) {
|
||||
return prim.CanApplyAPI<MjcPhysicsActuatorAPI>(whyNot);
|
||||
}
|
||||
|
||||
/* static */
|
||||
MjcPhysicsActuatorAPI MjcPhysicsActuatorAPI::Apply(const UsdPrim &prim) {
|
||||
if (prim.ApplyAPI<MjcPhysicsActuatorAPI>()) {
|
||||
return MjcPhysicsActuatorAPI(prim);
|
||||
}
|
||||
return MjcPhysicsActuatorAPI();
|
||||
}
|
||||
|
||||
/* static */
|
||||
const TfType &MjcPhysicsActuatorAPI::_GetStaticTfType() {
|
||||
static TfType tfType = TfType::Find<MjcPhysicsActuatorAPI>();
|
||||
const TfType &MjcPhysicsTransmission::_GetStaticTfType() {
|
||||
static TfType tfType = TfType::Find<MjcPhysicsTransmission>();
|
||||
return tfType;
|
||||
}
|
||||
|
||||
/* static */
|
||||
bool MjcPhysicsActuatorAPI::_IsTypedSchema() {
|
||||
bool MjcPhysicsTransmission::_IsTypedSchema() {
|
||||
static bool isTyped = _GetStaticTfType().IsA<UsdTyped>();
|
||||
return isTyped;
|
||||
}
|
||||
|
||||
/* virtual */
|
||||
const TfType &MjcPhysicsActuatorAPI::_GetTfType() const {
|
||||
const TfType &MjcPhysicsTransmission::_GetTfType() const {
|
||||
return _GetStaticTfType();
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcCtrlLimitedAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetGroupAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcGroup);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsTransmission::CreateGroupAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcGroup, SdfValueTypeNames->Int,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcCtrlLimitedAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcCtrlLimited);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcCtrlLimitedAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcCtrlLimitedAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcCtrlLimited, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcForceLimitedAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcForceLimitedAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcForceLimited);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcForceLimitedAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcForceLimitedAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcForceLimited, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcActLimitedAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcActLimitedAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcActLimited);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcActLimitedAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcActLimitedAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcActLimited, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcCtrlRangeMinAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcCtrlRangeMinAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcCtrlRangeMin);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcCtrlRangeMinAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcCtrlRangeMinAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcCtrlRangeMin, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcCtrlRangeMaxAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcCtrlRangeMaxAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcCtrlRangeMax);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcCtrlRangeMaxAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcCtrlRangeMaxAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcCtrlRangeMax, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcForceRangeMinAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcForceRangeMinAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcForceRangeMin);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcForceRangeMinAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcForceRangeMinAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcForceRangeMin, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcForceRangeMaxAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcForceRangeMaxAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcForceRangeMax);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcForceRangeMaxAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcForceRangeMaxAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcForceRangeMax, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcActRangeMinAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcActRangeMinAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcActRangeMin);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcActRangeMinAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcActRangeMinAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcActRangeMin, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcActRangeMaxAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcActRangeMaxAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcActRangeMax);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcActRangeMaxAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcActRangeMaxAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcActRangeMax, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcLengthRangeMinAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcLengthRangeMinAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcLengthRangeMin);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcLengthRangeMinAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcLengthRangeMinAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcLengthRangeMin, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcLengthRangeMaxAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcLengthRangeMaxAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcLengthRangeMax);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcLengthRangeMaxAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcLengthRangeMaxAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcLengthRangeMax, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcGearAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcGearAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcGear);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcGearAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcGearAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcGear, SdfValueTypeNames->DoubleArray,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcCrankLengthAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcCrankLengthAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcCrankLength);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcCrankLengthAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcCrankLengthAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcCrankLength, SdfValueTypeNames->Double,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcJointInParentAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcJointInParentAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcJointInParent);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcJointInParentAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcJointInParentAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcJointInParent, SdfValueTypeNames->Bool,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcActDimAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcActDimAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcActDim);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcActDimAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcActDimAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcActDim, SdfValueTypeNames->Int,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcDynTypeAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcDynTypeAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcDynType);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcDynTypeAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcDynTypeAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcDynType, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcGainTypeAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcGainTypeAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcGainType);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcGainTypeAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcGainTypeAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcGainType, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcBiasTypeAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcBiasTypeAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcBiasType);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcBiasTypeAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcBiasTypeAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcBiasType, SdfValueTypeNames->Token,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcDynPrmAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcDynPrmAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcDynPrm);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcDynPrmAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcDynPrmAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcDynPrm, SdfValueTypeNames->DoubleArray,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcGainPrmAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcGainPrmAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcGainPrm);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcGainPrmAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcGainPrmAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcGainPrm, SdfValueTypeNames->DoubleArray,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcBiasPrmAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcBiasPrmAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcBiasPrm);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcBiasPrmAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcBiasPrmAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcBiasPrm, SdfValueTypeNames->DoubleArray,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::GetMjcActEarlyAttr() const {
|
||||
UsdAttribute MjcPhysicsTransmission::GetMjcActEarlyAttr() const {
|
||||
return GetPrim().GetAttribute(MjcPhysicsTokens->mjcActEarly);
|
||||
}
|
||||
|
||||
UsdAttribute MjcPhysicsActuatorAPI::CreateMjcActEarlyAttr(
|
||||
UsdAttribute MjcPhysicsTransmission::CreateMjcActEarlyAttr(
|
||||
VtValue const &defaultValue, bool writeSparsely) const {
|
||||
return UsdSchemaBase::_CreateAttr(
|
||||
MjcPhysicsTokens->mjcActEarly, SdfValueTypeNames->Bool,
|
||||
/* custom = */ false, SdfVariabilityUniform, defaultValue, writeSparsely);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsActuatorAPI::GetMjcRefSiteRel() const {
|
||||
UsdRelationship MjcPhysicsTransmission::GetMjcTargetRel() const {
|
||||
return GetPrim().GetRelationship(MjcPhysicsTokens->mjcTarget);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsTransmission::CreateMjcTargetRel() const {
|
||||
return GetPrim().CreateRelationship(MjcPhysicsTokens->mjcTarget,
|
||||
/* custom = */ false);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsTransmission::GetMjcRefSiteRel() const {
|
||||
return GetPrim().GetRelationship(MjcPhysicsTokens->mjcRefSite);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsActuatorAPI::CreateMjcRefSiteRel() const {
|
||||
UsdRelationship MjcPhysicsTransmission::CreateMjcRefSiteRel() const {
|
||||
return GetPrim().CreateRelationship(MjcPhysicsTokens->mjcRefSite,
|
||||
/* custom = */ false);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsActuatorAPI::GetMjcSliderSiteRel() const {
|
||||
UsdRelationship MjcPhysicsTransmission::GetMjcSliderSiteRel() const {
|
||||
return GetPrim().GetRelationship(MjcPhysicsTokens->mjcSliderSite);
|
||||
}
|
||||
|
||||
UsdRelationship MjcPhysicsActuatorAPI::CreateMjcSliderSiteRel() const {
|
||||
UsdRelationship MjcPhysicsTransmission::CreateMjcSliderSiteRel() const {
|
||||
return GetPrim().CreateRelationship(MjcPhysicsTokens->mjcSliderSite,
|
||||
/* custom = */ false);
|
||||
}
|
||||
@@ -346,23 +371,24 @@ static inline TfTokenVector _ConcatenateAttributeNames(
|
||||
} // namespace
|
||||
|
||||
/*static*/
|
||||
const TfTokenVector &MjcPhysicsActuatorAPI::GetSchemaAttributeNames(
|
||||
const TfTokenVector &MjcPhysicsTransmission::GetSchemaAttributeNames(
|
||||
bool includeInherited) {
|
||||
static TfTokenVector localNames = {
|
||||
MjcPhysicsTokens->mjcCtrlLimited, MjcPhysicsTokens->mjcForceLimited,
|
||||
MjcPhysicsTokens->mjcActLimited, MjcPhysicsTokens->mjcCtrlRangeMin,
|
||||
MjcPhysicsTokens->mjcCtrlRangeMax, MjcPhysicsTokens->mjcForceRangeMin,
|
||||
MjcPhysicsTokens->mjcForceRangeMax, MjcPhysicsTokens->mjcActRangeMin,
|
||||
MjcPhysicsTokens->mjcActRangeMax, MjcPhysicsTokens->mjcLengthRangeMin,
|
||||
MjcPhysicsTokens->mjcLengthRangeMax, MjcPhysicsTokens->mjcGear,
|
||||
MjcPhysicsTokens->mjcCrankLength, MjcPhysicsTokens->mjcJointInParent,
|
||||
MjcPhysicsTokens->mjcActDim, MjcPhysicsTokens->mjcDynType,
|
||||
MjcPhysicsTokens->mjcGainType, MjcPhysicsTokens->mjcBiasType,
|
||||
MjcPhysicsTokens->mjcDynPrm, MjcPhysicsTokens->mjcGainPrm,
|
||||
MjcPhysicsTokens->mjcBiasPrm, MjcPhysicsTokens->mjcActEarly,
|
||||
MjcPhysicsTokens->mjcGroup, MjcPhysicsTokens->mjcCtrlLimited,
|
||||
MjcPhysicsTokens->mjcForceLimited, MjcPhysicsTokens->mjcActLimited,
|
||||
MjcPhysicsTokens->mjcCtrlRangeMin, MjcPhysicsTokens->mjcCtrlRangeMax,
|
||||
MjcPhysicsTokens->mjcForceRangeMin, MjcPhysicsTokens->mjcForceRangeMax,
|
||||
MjcPhysicsTokens->mjcActRangeMin, MjcPhysicsTokens->mjcActRangeMax,
|
||||
MjcPhysicsTokens->mjcLengthRangeMin, MjcPhysicsTokens->mjcLengthRangeMax,
|
||||
MjcPhysicsTokens->mjcGear, MjcPhysicsTokens->mjcCrankLength,
|
||||
MjcPhysicsTokens->mjcJointInParent, MjcPhysicsTokens->mjcActDim,
|
||||
MjcPhysicsTokens->mjcDynType, MjcPhysicsTokens->mjcGainType,
|
||||
MjcPhysicsTokens->mjcBiasType, MjcPhysicsTokens->mjcDynPrm,
|
||||
MjcPhysicsTokens->mjcGainPrm, MjcPhysicsTokens->mjcBiasPrm,
|
||||
MjcPhysicsTokens->mjcActEarly,
|
||||
};
|
||||
static TfTokenVector allNames = _ConcatenateAttributeNames(
|
||||
UsdAPISchemaBase::GetSchemaAttributeNames(true), localNames);
|
||||
UsdTyped::GetSchemaAttributeNames(true), localNames);
|
||||
|
||||
if (includeInherited)
|
||||
return allNames;
|
||||
@@ -86,6 +86,7 @@ TF_DEFINE_PRIVATE_TOKENS(kTokens,
|
||||
((materialsScope, "Materials"))
|
||||
((previewSurface, "PreviewSurface"))
|
||||
((keyframesScope, "Keyframes"))
|
||||
((transmissionsScope, "Transmissions"))
|
||||
((keyframe, "Keyframe"))
|
||||
((surface, "PreviewSurface"))
|
||||
((world, "World"))
|
||||
@@ -210,7 +211,7 @@ class ModelWriter {
|
||||
WriteMaterials();
|
||||
WriteBodies();
|
||||
if (write_physics_) {
|
||||
WriteActuators();
|
||||
WriteTransmissions();
|
||||
}
|
||||
WriteKeyframes();
|
||||
}
|
||||
@@ -1050,27 +1051,39 @@ class ModelWriter {
|
||||
}
|
||||
}
|
||||
|
||||
void WriteActuator(mjsActuator *actuator) {
|
||||
pxr::SdfPath transmission_path;
|
||||
void WriteTransmission(mjsActuator *actuator,
|
||||
const pxr::SdfPath &parent_path) {
|
||||
pxr::TfToken valid_name = GetValidPrimName(*mjs_getName(actuator->element));
|
||||
pxr::SdfPath transmission_path = parent_path.AppendChild(valid_name);
|
||||
if (!data_->HasSpec(transmission_path)) {
|
||||
CreatePrimSpec(data_, parent_path, valid_name,
|
||||
pxr::MjcPhysicsTokens->MjcTransmission);
|
||||
}
|
||||
|
||||
pxr::SdfPath target_path;
|
||||
if (actuator->trntype == mjtTrn::mjTRN_BODY) {
|
||||
int body_id = mj_name2id(model_, mjOBJ_BODY, actuator->target->c_str());
|
||||
transmission_path = body_paths_[body_id];
|
||||
target_path = body_paths_[body_id];
|
||||
} else if (actuator->trntype == mjtTrn::mjTRN_SITE ||
|
||||
actuator->trntype == mjtTrn::mjTRN_SLIDERCRANK) {
|
||||
int site_id = mj_name2id(model_, mjOBJ_SITE, actuator->target->c_str());
|
||||
transmission_path = site_paths_[site_id];
|
||||
target_path = site_paths_[site_id];
|
||||
} else if (actuator->trntype == mjtTrn::mjTRN_JOINT) {
|
||||
int joint_id = mj_name2id(model_, mjOBJ_JOINT, actuator->target->c_str());
|
||||
transmission_path = joint_paths_[joint_id];
|
||||
target_path = joint_paths_[joint_id];
|
||||
} else {
|
||||
TF_WARN(UnsupportedActuatorTypeError,
|
||||
"Unsupported actuator type for actuator %d",
|
||||
"Unsupported transmission type for actuator %d",
|
||||
mjs_getId(actuator->element));
|
||||
return;
|
||||
}
|
||||
|
||||
ApplyApiSchema(data_, transmission_path,
|
||||
MjcPhysicsTokens->MjcActuatorAPI);
|
||||
CreateRelationshipSpec(data_, transmission_path,
|
||||
MjcPhysicsTokens->mjcTarget, target_path,
|
||||
pxr::SdfVariabilityUniform);
|
||||
|
||||
WriteUniformAttribute(transmission_path, pxr::SdfValueTypeNames->Int,
|
||||
MjcPhysicsTokens->mjcGroup, actuator->group);
|
||||
|
||||
if (!actuator->refsite->empty()) {
|
||||
int refsite_id =
|
||||
@@ -1190,11 +1203,14 @@ class ModelWriter {
|
||||
pxr::VtDoubleArray(actuator->biasprm, actuator->biasprm + 10));
|
||||
}
|
||||
|
||||
void WriteActuators() {
|
||||
void WriteTransmissions() {
|
||||
pxr::SdfPath scope_path =
|
||||
CreatePrimSpec(data_, body_paths_[kWorldIndex],
|
||||
kTokens->transmissionsScope, pxr::UsdGeomTokens->Scope);
|
||||
mjsActuator *actuator =
|
||||
mjs_asActuator(mjs_firstElement(spec_, mjOBJ_ACTUATOR));
|
||||
while (actuator) {
|
||||
WriteActuator(actuator);
|
||||
WriteTransmission(actuator, scope_path);
|
||||
actuator = mjs_asActuator(mjs_nextElement(spec_, actuator->element));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,7 +21,6 @@
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
#include <mujoco/experimental/usd/mjcPhysics/actuatorAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/collisionAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/jointAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/keyframe.h>
|
||||
@@ -29,6 +28,7 @@
|
||||
#include <mujoco/experimental/usd/mjcPhysics/sceneAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/siteAPI.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/tokens.h>
|
||||
#include <mujoco/experimental/usd/mjcPhysics/transmission.h>
|
||||
#include <mujoco/experimental/usd/usd.h>
|
||||
#include <mujoco/experimental/usd/utils.h>
|
||||
#include <mujoco/mujoco.h>
|
||||
@@ -553,19 +553,46 @@ void ParseMjcPhysicsMeshCollisionAPI(
|
||||
}
|
||||
}
|
||||
|
||||
void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
const pxr::MjcPhysicsActuatorAPI& act,
|
||||
mjtTrn tran_type,
|
||||
const std::string* name) {
|
||||
pxr::UsdPrim prim = act.GetPrim();
|
||||
void ParseMjcPhysicsTransmission(mjSpec* spec,
|
||||
const pxr::MjcPhysicsTransmission& tran) {
|
||||
pxr::UsdPrim prim = tran.GetPrim();
|
||||
mjsActuator* mj_act = mjs_addActuator(spec, nullptr);
|
||||
mjs_setName(mj_act->element, prim.GetPath().GetAsString().c_str());
|
||||
mjs_setString(mj_act->target, name->c_str());
|
||||
mj_act->trntype = tran_type;
|
||||
|
||||
if (tran_type == mjtTrn::mjTRN_SLIDERCRANK) {
|
||||
auto group_attr = tran.GetGroupAttr();
|
||||
if (group_attr.HasAuthoredValue()) {
|
||||
group_attr.Get(&mj_act->group);
|
||||
}
|
||||
|
||||
pxr::SdfPathVector targets;
|
||||
tran.GetMjcTargetRel().GetTargets(&targets);
|
||||
if (targets.empty()) {
|
||||
mju_warning("Transmission %s has no target, skipping.",
|
||||
prim.GetPath().GetAsString().c_str());
|
||||
return;
|
||||
}
|
||||
if (targets.size() > 1) {
|
||||
mju_warning("Transmission has more than one target, using the first.");
|
||||
}
|
||||
mjs_setString(mj_act->target, targets[0].GetAsString().c_str());
|
||||
|
||||
auto target_prim = prim.GetStage()->GetPrimAtPath(targets[0]);
|
||||
bool slider_crank = tran.GetMjcSliderSiteRel().HasAuthoredTargets();
|
||||
if (target_prim.IsA<pxr::UsdPhysicsJoint>()) {
|
||||
mj_act->trntype = mjTRN_JOINT;
|
||||
} else if (target_prim.HasAPI<pxr::UsdPhysicsRigidBodyAPI>()) {
|
||||
mj_act->trntype = mjTRN_BODY;
|
||||
} else if (target_prim.HasAPI<pxr::MjcPhysicsSiteAPI>()) {
|
||||
mj_act->trntype = slider_crank ? mjTRN_SLIDERCRANK : mjTRN_SITE;
|
||||
} else {
|
||||
mju_warning("Transmission %s has an invalid target type, skipping.",
|
||||
prim.GetPath().GetAsString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if (slider_crank) {
|
||||
pxr::SdfPathVector slider_sites;
|
||||
act.GetMjcSliderSiteRel().GetTargets(&slider_sites);
|
||||
tran.GetMjcSliderSiteRel().GetTargets(&slider_sites);
|
||||
if (slider_sites.size() > 1) {
|
||||
mju_warning(
|
||||
"Slider crank slider site relationship has more than one target, "
|
||||
@@ -590,9 +617,9 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
};
|
||||
|
||||
setLimitedField(mj_act, act.GetMjcCtrlLimitedAttr(), &mj_act->ctrllimited);
|
||||
setLimitedField(mj_act, act.GetMjcForceLimitedAttr(), &mj_act->forcelimited);
|
||||
setLimitedField(mj_act, act.GetMjcActLimitedAttr(), &mj_act->actlimited);
|
||||
setLimitedField(mj_act, tran.GetMjcCtrlLimitedAttr(), &mj_act->ctrllimited);
|
||||
setLimitedField(mj_act, tran.GetMjcForceLimitedAttr(), &mj_act->forcelimited);
|
||||
setLimitedField(mj_act, tran.GetMjcActLimitedAttr(), &mj_act->actlimited);
|
||||
|
||||
auto setRangeField =
|
||||
[](mjsActuator* mj_act, const pxr::UsdAttribute& usd_min_attribute,
|
||||
@@ -609,16 +636,16 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
};
|
||||
|
||||
setRangeField(mj_act, act.GetMjcCtrlRangeMinAttr(),
|
||||
act.GetMjcCtrlRangeMaxAttr(), mj_act->ctrlrange);
|
||||
setRangeField(mj_act, act.GetMjcForceRangeMinAttr(),
|
||||
act.GetMjcForceRangeMaxAttr(), mj_act->forcerange);
|
||||
setRangeField(mj_act, act.GetMjcActRangeMinAttr(),
|
||||
act.GetMjcActRangeMaxAttr(), mj_act->actrange);
|
||||
setRangeField(mj_act, act.GetMjcLengthRangeMinAttr(),
|
||||
act.GetMjcLengthRangeMaxAttr(), mj_act->lengthrange);
|
||||
setRangeField(mj_act, tran.GetMjcCtrlRangeMinAttr(),
|
||||
tran.GetMjcCtrlRangeMaxAttr(), mj_act->ctrlrange);
|
||||
setRangeField(mj_act, tran.GetMjcForceRangeMinAttr(),
|
||||
tran.GetMjcForceRangeMaxAttr(), mj_act->forcerange);
|
||||
setRangeField(mj_act, tran.GetMjcActRangeMinAttr(),
|
||||
tran.GetMjcActRangeMaxAttr(), mj_act->actrange);
|
||||
setRangeField(mj_act, tran.GetMjcLengthRangeMinAttr(),
|
||||
tran.GetMjcLengthRangeMaxAttr(), mj_act->lengthrange);
|
||||
|
||||
auto gear_attr = act.GetMjcGearAttr();
|
||||
auto gear_attr = tran.GetMjcGearAttr();
|
||||
if (gear_attr.HasAuthoredValue()) {
|
||||
pxr::VtDoubleArray gear;
|
||||
gear_attr.Get(&gear);
|
||||
@@ -627,14 +654,14 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
}
|
||||
|
||||
auto crank_length_attr = act.GetMjcCrankLengthAttr();
|
||||
auto crank_length_attr = tran.GetMjcCrankLengthAttr();
|
||||
if (crank_length_attr.HasAuthoredValue()) {
|
||||
double crank_length;
|
||||
crank_length_attr.Get(&crank_length);
|
||||
mj_act->cranklength = crank_length;
|
||||
}
|
||||
|
||||
auto dyn_type_attr = act.GetMjcDynTypeAttr();
|
||||
auto dyn_type_attr = tran.GetMjcDynTypeAttr();
|
||||
if (dyn_type_attr.HasAuthoredValue()) {
|
||||
pxr::TfToken dyn_type;
|
||||
dyn_type_attr.Get(&dyn_type);
|
||||
@@ -653,7 +680,7 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
}
|
||||
|
||||
auto gain_type_attr = act.GetMjcGainTypeAttr();
|
||||
auto gain_type_attr = tran.GetMjcGainTypeAttr();
|
||||
if (gain_type_attr.HasAuthoredValue()) {
|
||||
pxr::TfToken gain_type;
|
||||
gain_type_attr.Get(&gain_type);
|
||||
@@ -668,7 +695,7 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
}
|
||||
|
||||
auto biastype_attr = act.GetMjcBiasTypeAttr();
|
||||
auto biastype_attr = tran.GetMjcBiasTypeAttr();
|
||||
if (biastype_attr.HasAuthoredValue()) {
|
||||
pxr::TfToken biastype;
|
||||
biastype_attr.Get(&biastype);
|
||||
@@ -695,25 +722,25 @@ void ParseMjcPhysicsGeneralActuatorAPI(mjSpec* spec,
|
||||
}
|
||||
};
|
||||
|
||||
setPrmField(mj_act, act.GetMjcDynPrmAttr(), mj_act->dynprm);
|
||||
setPrmField(mj_act, act.GetMjcBiasPrmAttr(), mj_act->biasprm);
|
||||
setPrmField(mj_act, act.GetMjcGainPrmAttr(), mj_act->gainprm);
|
||||
setPrmField(mj_act, tran.GetMjcDynPrmAttr(), mj_act->dynprm);
|
||||
setPrmField(mj_act, tran.GetMjcBiasPrmAttr(), mj_act->biasprm);
|
||||
setPrmField(mj_act, tran.GetMjcGainPrmAttr(), mj_act->gainprm);
|
||||
|
||||
auto act_dim_attr = act.GetMjcActDimAttr();
|
||||
auto act_dim_attr = tran.GetMjcActDimAttr();
|
||||
if (act_dim_attr.HasAuthoredValue()) {
|
||||
int act_dim;
|
||||
act_dim_attr.Get(&act_dim);
|
||||
mj_act->actdim = act_dim;
|
||||
}
|
||||
|
||||
auto act_early_attr = act.GetMjcActEarlyAttr();
|
||||
auto act_early_attr = tran.GetMjcActEarlyAttr();
|
||||
if (act_early_attr.HasAuthoredValue()) {
|
||||
bool act_early;
|
||||
act_early_attr.Get(&act_early);
|
||||
mj_act->actearly = (int)act_early;
|
||||
}
|
||||
|
||||
auto ref_site_rel = act.GetMjcRefSiteRel();
|
||||
auto ref_site_rel = tran.GetMjcRefSiteRel();
|
||||
if (ref_site_rel.HasAuthoredTargets()) {
|
||||
pxr::SdfPathVector targets;
|
||||
ref_site_rel.GetTargets(&targets);
|
||||
@@ -1126,12 +1153,6 @@ void ParseUsdPhysicsJoint(mjSpec* spec, const pxr::UsdPrim& prim, mjsBody* body,
|
||||
SetDoubleArrFromGfVec3d(mj_joint->axis, rotated_axis);
|
||||
}
|
||||
|
||||
if (prim.HasAPI<pxr::MjcPhysicsActuatorAPI>()) {
|
||||
ParseMjcPhysicsGeneralActuatorAPI(spec, pxr::MjcPhysicsActuatorAPI(prim),
|
||||
mjtTrn::mjTRN_JOINT,
|
||||
mjs_getName(mj_joint->element));
|
||||
}
|
||||
|
||||
if (prim.HasAPI<pxr::MjcPhysicsJointAPI>()) {
|
||||
ParseMjcPhysicsJointAPI(mj_joint, pxr::MjcPhysicsJointAPI(prim));
|
||||
}
|
||||
@@ -1152,15 +1173,6 @@ void ParseMjcPhysicsSite(mjSpec* spec, const pxr::MjcPhysicsSiteAPI& site_api,
|
||||
prim.GetTypeName().GetString().c_str());
|
||||
return;
|
||||
}
|
||||
|
||||
if (prim.HasAPI<pxr::MjcPhysicsActuatorAPI>()) {
|
||||
auto act_api = pxr::MjcPhysicsActuatorAPI(prim);
|
||||
bool slider_crank = act_api.GetMjcSliderSiteRel().HasAuthoredTargets();
|
||||
ParseMjcPhysicsGeneralActuatorAPI(
|
||||
spec, pxr::MjcPhysicsActuatorAPI(prim),
|
||||
slider_crank ? mjtTrn::mjTRN_SLIDERCRANK : mjtTrn::mjTRN_SITE,
|
||||
mjs_getName(site->element));
|
||||
}
|
||||
}
|
||||
|
||||
void ParseMjcPhysicsKeyframe(mjSpec* spec,
|
||||
@@ -1236,12 +1248,6 @@ mjsBody* ParseUsdPhysicsRigidbody(
|
||||
ParseUsdPhysicsMassAPIForBody(body, pxr::UsdPhysicsMassAPI(prim));
|
||||
}
|
||||
|
||||
if (prim.HasAPI<pxr::MjcPhysicsActuatorAPI>()) {
|
||||
ParseMjcPhysicsGeneralActuatorAPI(spec, pxr::MjcPhysicsActuatorAPI(prim),
|
||||
mjtTrn::mjTRN_BODY,
|
||||
mjs_getName(body->element));
|
||||
}
|
||||
|
||||
mujoco::usd::SetUsdPrimPathUserValue(body->element, prim.GetPath());
|
||||
|
||||
return body;
|
||||
@@ -1423,6 +1429,10 @@ mjSpec* mj_parseUSDStage(const pxr::UsdStageRefPtr stage) {
|
||||
} else if (prim.IsA<pxr::MjcPhysicsKeyframe>()) {
|
||||
ParseMjcPhysicsKeyframe(spec, pxr::MjcPhysicsKeyframe(prim));
|
||||
|
||||
it.PruneChildren();
|
||||
} else if (prim.IsA<pxr::MjcPhysicsTransmission>()) {
|
||||
ParseMjcPhysicsTransmission(spec, pxr::MjcPhysicsTransmission(prim));
|
||||
|
||||
it.PruneChildren();
|
||||
}
|
||||
}
|
||||
@@ -1443,11 +1453,3 @@ mjSpec* mj_parseUSDStage(const pxr::UsdStageRefPtr stage) {
|
||||
return spec;
|
||||
}
|
||||
|
||||
mjSpec* mj_parseUSDStage(const char* usd_path) {
|
||||
pxr::UsdStageRefPtr stage = pxr::UsdStage::Open(usd_path);
|
||||
if (!stage) {
|
||||
mju_error("Could not open USD stage: %s", usd_path);
|
||||
return nullptr;
|
||||
}
|
||||
return mj_parseUSDStage(stage);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user