newton.TendonGuide#

class newton.TendonGuide(*, body, guide_type=TendonGuideType.ANCHOR, radius=0.0, orientation=1, mu=0.0, dynamic=False, offset=(0.0, 0.0, 0.0), axis=(0.0, 0.0, 1.0), compliance=0.0, damping=0.0, rest_length=-1.0, custom_attributes=None, segment_custom_attributes=None)[source]#

Bases: object

Describe one point or circular guide in an experimental massless tendon route.

Pass a complete sequence to newton.ModelBuilder.add_tendon(). Geometry is body-local; the builder copies it and normalizes the axis. Material parameters describe the incoming straight span. The first guide has no incoming span and must keep the material defaults.

Experimental

Experimental feature. API, behavior, defaults, and supported use cases may change without prior notice.

__init__(*, body, guide_type=TendonGuideType.ANCHOR, radius=0.0, orientation=1, mu=0.0, dynamic=False, offset=(0.0, 0.0, 0.0), axis=(0.0, 0.0, 1.0), compliance=0.0, damping=0.0, rest_length=-1.0, custom_attributes=None, segment_custom_attributes=None)#
axis: list[float] | tuple[float, float, float] | vec3f = (0.0, 0.0, 1.0)#

Nonzero cable-plane normal in the body’s local frame [dimensionless].

body: int#

Index of the attached rigid body; world-body index -1 is not supported.

compliance: float = 0.0#

Incoming span compliance [m/N], equal to 1 / stiffness for positive stiffness [N/m].

Zero requests an inextensible span in XPBD; VBD approximates it with a small positive compliance. Keep the default on the first guide.

custom_attributes: dict[str, Any] | None = None#

Values of declared TENDON_GUIDE-frequency custom attributes.

damping: float = 0.0#

Incoming span damping coefficient [N·s/m].

dynamic: bool = False#

Whether an internal roller can engage and disengage.

guide_type: TendonGuideType = 1#

Anchor, pinhole, or circular roller.

mu: float = 0.0#

Nonnegative capstan friction coefficient [dimensionless].

offset: list[float] | tuple[float, float, float] | vec3f = (0.0, 0.0, 0.0)#

Anchor point or roller center in the body’s local frame [m].

orientation: int = 1#

Winding side, either 1 or -1.

radius: float = 0.0#

Contact radius [m]; must be positive for rollers.

rest_length: float = -1.0#

Incoming span rest length [m]; negative measures it from initial body poses.

segment_custom_attributes: dict[str, Any] | None = None#

Values of declared TENDON_SEGMENT-frequency attributes for the incoming span; empty on the first guide.