PhysicsDriveAPI#
Force- or acceleration-mode PD drive on one joint axis, applied as PhysicsDriveAPI:
Applies to:
PhysicsJointMulti-apply: applied as
PhysicsDriveAPI:<instance>;<inst>in a column name is the instance. Instances:transX,transY,transZ,rotX,rotY,rotZ,distance,angular,linear.Read only when listed in
usd-schemas.
What USD population writes#
All six declared attributes of every applied instance are published at their resolved values (type force, targets and gains 0, maxForce inf when unauthored). No rewrite.
Columns#
Raw fallback is the USD schema value. Producer writes is what ovstage population puts in the column for a USD stage. Parser default applies on the consumer when the column is absent, in stage units. diverges means writing the raw fallback literally parses differently from omitting the column (the parser default): USD population may well publish that very value for an unauthored attribute, so the marker is about the column being present, not about its value.
Column |
Type |
Units |
Raw fallback |
Producer writes |
Parser default |
If absent |
|---|---|---|---|---|---|---|
|
uint64, TOKEN_ID |
none |
force |
resolved USD value (authored, else raw fallback) |
force |
Force-mode drive. Only a token equal to the interned acceleration selects acceleration mode; any other token, including a malformed one, is force. |
|
float32 |
rot: deg; trans: length (deg_to_rad) |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
Target at zero. |
|
float32 |
rot: deg/s; trans: length/s (deg_to_rad) |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
Zero velocity target. |
|
float32 |
rot: torque/deg; trans: force/length |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
No positional spring. |
|
float32 |
rot: torques/deg; trans: forces/length |
0.0 |
resolved USD value (authored, else raw fallback) |
0.0 |
No velocity damping. |
|
float32 |
rot: torque; trans: force |
|
resolved USD value (authored, else raw fallback) |
|
Unlimited drive force. The walker seeds FLT_MAX and the parser maps any non-finite value to FLT_MAX, so the USD fallback inf is safe to write literally. |
Interactions#
PhysicsJoint: The drive is enabled by the mere presence of PhysicsDriveAPI:in usd-schemas; there is no enable attribute. The D6 gate is per instance for transX..rotZ and distance; revolute reads angular and prismatic reads linear directly. PhysxDrivePerformanceEnvelopeAPI: PhysxDrivePerformanceEnvelopeAPI:extends this drive with an actuator envelope; it is read only when the drive exists and only takes effect on articulation joints.
Notes#
Per-joint-type instance matrix: Fixed none; Revolute angular; Prismatic linear; Spherical none; Distance none; D6 (PhysicsJoint) transX transY transZ rotX rotY rotZ distance; Gear, Rack, Custom none.
Standalone mapping: transX/Y/Z and linear -> PxD6Drive::eX/eY/eZ (linear -> eX); rotX and angular -> eTWIST; rotY -> eSWING1; rotZ -> eSWING2 (the standalone D6 uses PxD6AngularDriveConfig::eSWING_TWIST). The distance instance is parsed into the descriptor but the runtime creates no drive for it.
Articulation mapping: angular/rotX -> PxArticulationAxis::eTWIST, rotY -> eSWING1, rotZ -> eSWING2, linear -> eX; translational D6 instances are ignored. Position and velocity targets are negated when body0 is not the parent link, and a position target beyond +-2pi on an unlimited revolute is wrapped with a warning.
Rotational instances (rotX, rotY, rotZ, angular) are stored in degrees; the parser converts targets degrees to radians and multiplies stiffness and damping by 57.29577951308232. Linear and translational instances are stored unconverted.