From c2820941aa5ae2b83ca4e9103425d7fed3d1b250 Mon Sep 17 00:00:00 2001 From: Sam Haves Date: Fri, 18 Jul 2025 07:17:25 -0700 Subject: [PATCH] Convert UsdPhysicsRevoluteJoint from degres to radians if compiler option is set. PiperOrigin-RevId: 784574716 Change-Id: I58f65816edb782fcb41bbc721f7bed5a27741639 --- src/experimental/usd/usd_to_mjspec.cc | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/experimental/usd/usd_to_mjspec.cc b/src/experimental/usd/usd_to_mjspec.cc index 4ba2c529..8cf47da9 100644 --- a/src/experimental/usd/usd_to_mjspec.cc +++ b/src/experimental/usd/usd_to_mjspec.cc @@ -1380,10 +1380,13 @@ void ParseUsdPhysicsJoint(mjSpec* spec, const pxr::UsdPrim& prim, mjsBody* body, if (revolute.GetLowerLimitAttr().Get(&lower) && revolute.GetUpperLimitAttr().Get(&upper)) { mj_joint->limited = mjLIMITED_TRUE; - // As per the XML Reference, the default unit for mjSpec is degrees, so we - // don't need to convert from USD (which is degrees). - mj_joint->range[0] = lower; - mj_joint->range[1] = upper; + if (spec->compiler.degree) { + mj_joint->range[0] = lower; + mj_joint->range[1] = upper; + } else { + mj_joint->range[0] = lower * M_PI / 180.0; + mj_joint->range[1] = upper * M_PI / 180.0; + } } } else if (prim.IsA()) { pxr::UsdPhysicsPrismaticJoint prismatic(prim);