@@ -100,6 +100,199 @@ Rotational velocity and acceleration thresholds reflect the velocity and acceler
100100For a given angular velocity, the rotational velocity of an assembly is proportional to the assembly bounding sphere radius. This means that larger assemblies can rotate at a lower angular velocity without falling asleep.
101101</Alert >
102102
103+ ## Actuated joints
104+
105+ Sometimes developers want to move parts very slowly using an ** actuated joint** , a constraint that applies force or motion to drive connected parts, such as a ` Class.HingeConstraint ` using a ` Enum.ActuatorType.Motor|Motor ` . To support these scenarios, assemblies connected to actuated joints use a stricter sleep velocity threshold. This delays when those assemblies fall asleep, allowing slow, controlled motion without the physics system prematurely putting them to sleep.
106+
107+ The following are considered actuated joints:
108+
109+ <table >
110+ <thead>
111+ <tr>
112+ <th>Constraint</th>
113+ <th>Configuration</th>
114+ <th>Required nonzero properties</th>
115+ </tr>
116+ </thead>
117+ <tbody>
118+ <tr>
119+ <td>`Class.AlignOrientation|AlignOrientation`</td>
120+ <td>`Class.AlignOrientation.RigidityEnabled|RigidityEnabled` = `false`</td>
121+ <td>
122+ <ul>
123+ <li>`Class.AlignOrientation.MaxAngularVelocity|MaxAngularVelocity`</li>
124+ <li>`Class.AlignOrientation.MaxTorque|MaxTorque`</li>
125+ <li>`Class.AlignOrientation.Responsiveness|Responsiveness`</li>
126+ </ul>
127+ </td>
128+ </tr>
129+ <tr>
130+ <td>`Class.AlignPosition|AlignPosition`</td>
131+ <td>`Class.AlignPosition.RigidityEnabled|RigidityEnabled` = `false`</td>
132+ <td>
133+ <ul>
134+ <li>`Class.AlignPosition.MaxVelocity|MaxVelocity`</li>
135+ <li>`Class.AlignPosition.Responsiveness|Responsiveness`</li>
136+ </ul>
137+ </td>
138+ </tr>
139+ <tr>
140+ <td>`Class.AngularVelocity|AngularVelocity`</td>
141+ <td>—</td>
142+ <td>
143+ <ul>
144+ <li>`Class.AngularVelocity.AngularVelocity|AngularVelocity`</li>
145+ <li>`Class.AngularVelocity.MaxTorque|MaxTorque`</li>
146+ </ul>
147+ </td>
148+ </tr>
149+ <tr>
150+ <td>`Class.AnimationConstraint|AnimationConstraint`</td>
151+ <td>`Class.AnimationConstraint.IsKinematic|IsKinematic` = `false`</td>
152+ <td>
153+ <ul>
154+ <li>`Class.AnimationConstraint.MaxForce|MaxForce`</li>
155+ <li>`Class.AnimationConstraint.MaxTorque|MaxTorque`</li>
156+ </ul>
157+ </td>
158+ </tr>
159+ <tr>
160+ <td rowspan="2">`Class.CylindricalConstraint|CylindricalConstraint`</td>
161+ <td>`Class.CylindricalConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
162+ <td>
163+ <ul>
164+ <li>`Class.CylindricalConstraint.Velocity|Velocity`</li>
165+ <li>`Class.CylindricalConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
166+ <li>`Class.CylindricalConstraint.MotorMaxForce|MotorMaxForce`</li>
167+ </ul>
168+ </td>
169+ </tr>
170+ <tr>
171+ <td>`Class.CylindricalConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
172+ <td>
173+ <ul>
174+ <li>`Class.CylindricalConstraint.Speed|Speed`</li>
175+ <li>`Class.CylindricalConstraint.ServoMaxForce|ServoMaxForce`</li>
176+ <li>`Class.CylindricalConstraint.Responsiveness|Responsiveness`</li>
177+ </ul>
178+ </td>
179+ </tr>
180+ <tr>
181+ <td rowspan="2">`Class.CylindricalConstraint|CylindricalConstraint`</td>
182+ <td>`Class.CylindricalConstraint.AngularActuatorType|AngularActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
183+ <td>
184+ <ul>
185+ <li>`Class.CylindricalConstraint.AngularVelocity|AngularVelocity`</li>
186+ <li>`Class.CylindricalConstraint.MotorMaxAngularAcceleration|MotorMaxAngularAcceleration`</li>
187+ <li>`Class.CylindricalConstraint.MotorMaxTorque|MotorMaxTorque`</li>
188+ </ul>
189+ </td>
190+ </tr>
191+ <tr>
192+ <td>`Class.CylindricalConstraint.AngularActuatorType|AngularActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
193+ <td>
194+ <ul>
195+ <li>`Class.CylindricalConstraint.AngularSpeed|AngularSpeed`</li>
196+ <li>`Class.CylindricalConstraint.ServoMaxTorque|ServoMaxTorque`</li>
197+ <li>`Class.CylindricalConstraint.Responsiveness|Responsiveness`</li>
198+ </ul>
199+ </td>
200+ </tr>
201+ <tr>
202+ <td rowspan="2">`Class.HingeConstraint|HingeConstraint`</td>
203+ <td>`Class.HingeConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
204+ <td>
205+ <ul>
206+ <li>`Class.HingeConstraint.AngularVelocity|AngularVelocity`</li>
207+ <li>`Class.HingeConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
208+ <li>`Class.HingeConstraint.MotorMaxTorque|MotorMaxTorque`</li>
209+ </ul>
210+ </td>
211+ </tr>
212+ <tr>
213+ <td>`Class.HingeConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
214+ <td>
215+ <ul>
216+ <li>`Class.HingeConstraint.AngularSpeed|AngularSpeed`</li>
217+ <li>`Class.HingeConstraint.ServoMaxTorque|ServoMaxTorque`</li>
218+ <li>`Class.HingeConstraint.Responsiveness|Responsiveness`</li>
219+ </ul>
220+ </td>
221+ </tr>
222+ <tr>
223+ <td rowspan="3">`Class.LinearVelocity|LinearVelocity`</td>
224+ <td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Line|Line`</td>
225+ <td>
226+ <ul>
227+ <li>`Class.LinearVelocity.LineVelocity|LineVelocity`</li>
228+ <li>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`, also `Class.LinearVelocity.MaxForce|MaxForce`</li>
229+ </ul>
230+ </td>
231+ </tr>
232+ <tr>
233+ <td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Plane|Plane`</td>
234+ <td>
235+ <ul>
236+ <li>`Class.LinearVelocity.PlaneVelocity|PlaneVelocity`</li>
237+ <li>
238+ <span>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`:</span>
239+ <ul>
240+ <li>`Enum.ForceLimitMode.Magnitude|Magnitude`: `Class.LinearVelocity.MaxForce|MaxForce`</li>
241+ <li>`Enum.ForceLimitMode.PerAxis|PerAxis`: `Class.LinearVelocity.MaxPlanarAxesForce|MaxPlanarAxesForce`</li>
242+ </ul>
243+ </li>
244+ </ul>
245+ </td>
246+ </tr>
247+ <tr>
248+ <td>`Class.LinearVelocity.VelocityConstraintMode|VelocityConstraintMode` = `Enum.VelocityConstraintMode.Vector|Vector`</td>
249+ <td>
250+ <ul>
251+ <li>`Class.LinearVelocity.VectorVelocity|VectorVelocity`</li>
252+ <li>
253+ <span>If `Class.LinearVelocity.ForceLimitsEnabled|ForceLimitsEnabled`:</span>
254+ <ul>
255+ <li>`Enum.ForceLimitMode.Magnitude|Magnitude`: `Class.LinearVelocity.MaxForce|MaxForce`</li>
256+ <li>`Enum.ForceLimitMode.PerAxis|PerAxis`: `Class.LinearVelocity.MaxAxesForce|MaxAxesForce`</li>
257+ </ul>
258+ </li>
259+ </ul>
260+ </td>
261+ </tr>
262+ <tr>
263+ <td rowspan="2">`Class.PrismaticConstraint|PrismaticConstraint`</td>
264+ <td>`Class.PrismaticConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Motor|Motor`</td>
265+ <td>
266+ <ul>
267+ <li>`Class.PrismaticConstraint.Velocity|Velocity`</li>
268+ <li>`Class.PrismaticConstraint.MotorMaxAcceleration|MotorMaxAcceleration`</li>
269+ <li>`Class.PrismaticConstraint.MotorMaxForce|MotorMaxForce`</li>
270+ </ul>
271+ </td>
272+ </tr>
273+ <tr>
274+ <td>`Class.PrismaticConstraint.ActuatorType|ActuatorType` = `Enum.ActuatorType.Servo|Servo`</td>
275+ <td>
276+ <ul>
277+ <li>`Class.PrismaticConstraint.Speed|Speed`</li>
278+ <li>`Class.PrismaticConstraint.ServoMaxForce|ServoMaxForce`</li>
279+ <li>`Class.PrismaticConstraint.Responsiveness|Responsiveness`</li>
280+ </ul>
281+ </td>
282+ </tr>
283+ <tr>
284+ <td>`Class.RopeConstraint|RopeConstraint`</td>
285+ <td>`Class.RopeConstraint.WinchEnabled|WinchEnabled` = `true`</td>
286+ <td>
287+ <ul>
288+ <li>`Class.RopeConstraint.WinchForce|WinchForce`</li>
289+ <li>`Class.RopeConstraint.WinchSpeed|WinchSpeed`</li>
290+ </ul>
291+ </td>
292+ </tr>
293+ </tbody>
294+ </table >
295+
103296## Additional wake situations
104297
105298In addition to situations outlined in [ sleep‑checking] ( #sleep-checking ) and [ sleeping] ( #sleeping ) , an assembly enters the [ awake] ( #awake ) state when:
0 commit comments