JSim 2026.06.01-p(1)
Loading...
Searching...
No Matches
frcsim::JointBase Class Referenceabstract

Base class for bilateral kinematic constraints between two rigid bodies. More...

#include <joint_base.hpp>

Inheritance diagram for frcsim::JointBase:
frcsim::FixedJoint frcsim::PrismaticJoint frcsim::RevoluteJoint

Public Member Functions

virtual ~JointBase ()=default
JointType type () const
RigidBodybodyA ()
RigidBodybodyB ()
const RigidBodybodyA () const
const RigidBodybodyB () const
const Vector3anchorA () const
const Vector3anchorB () const
void setAnchorA (const Vector3 &anchor)
void setAnchorB (const Vector3 &anchor)
bool isEnabled () const
void setEnabled (bool enabled)
double breakForceThreshold () const
void setBreakForceThreshold (double force_n)
bool isBroken () const
void resetBroken ()
virtual void solveConstraint (double dt_s, int iterations)=0
virtual void warmStart ()
virtual double constraintError () const =0

Protected Member Functions

 JointBase (JointType type, RigidBody *body_a, RigidBody *body_b)

Protected Attributes

JointType type_
RigidBodybody_a_ {nullptr}
RigidBodybody_b_ {nullptr}
Vector3 anchor_a_ {}
Vector3 anchor_b_ {}
bool is_enabled_ {true}
bool is_broken_ {false}
double break_force_threshold_ {1e6}

Detailed Description

Base class for bilateral kinematic constraints between two rigid bodies.

Joints are enforced as constraint equations solved each step by an iterative impulse method (sequential impulse / projected Gauss-Seidel style). Each derived joint defines which relative degrees of freedom are permitted and which are constrained.

References: https://box2d.org/files/ErinCatto_SequentialImpulses_GDC2006.pdf https://en.wikipedia.org/wiki/Constraint_(classical_mechanics)

Constructor & Destructor Documentation

◆ ~JointBase()

virtual frcsim::JointBase::~JointBase ( )
virtualdefault

◆ JointBase()

frcsim::JointBase::JointBase ( JointType type,
RigidBody * body_a,
RigidBody * body_b )
inlineexplicitprotected

Member Function Documentation

◆ anchorA()

const Vector3 & frcsim::JointBase::anchorA ( ) const
inline

◆ anchorB()

const Vector3 & frcsim::JointBase::anchorB ( ) const
inline

◆ bodyA() [1/2]

RigidBody * frcsim::JointBase::bodyA ( )
inline

◆ bodyA() [2/2]

const RigidBody * frcsim::JointBase::bodyA ( ) const
inline

◆ bodyB() [1/2]

RigidBody * frcsim::JointBase::bodyB ( )
inline

◆ bodyB() [2/2]

const RigidBody * frcsim::JointBase::bodyB ( ) const
inline

◆ breakForceThreshold()

double frcsim::JointBase::breakForceThreshold ( ) const
inline

◆ constraintError()

virtual double frcsim::JointBase::constraintError ( ) const
pure virtual

◆ isBroken()

bool frcsim::JointBase::isBroken ( ) const
inline

◆ isEnabled()

bool frcsim::JointBase::isEnabled ( ) const
inline

◆ resetBroken()

void frcsim::JointBase::resetBroken ( )
inline

◆ setAnchorA()

void frcsim::JointBase::setAnchorA ( const Vector3 & anchor)
inline

◆ setAnchorB()

void frcsim::JointBase::setAnchorB ( const Vector3 & anchor)
inline

◆ setBreakForceThreshold()

void frcsim::JointBase::setBreakForceThreshold ( double force_n)
inline

◆ setEnabled()

void frcsim::JointBase::setEnabled ( bool enabled)
inline

◆ solveConstraint()

virtual void frcsim::JointBase::solveConstraint ( double dt_s,
int iterations )
pure virtual

◆ type()

JointType frcsim::JointBase::type ( ) const
inline

◆ warmStart()

virtual void frcsim::JointBase::warmStart ( )
inlinevirtual

Member Data Documentation

◆ anchor_a_

Vector3 frcsim::JointBase::anchor_a_ {}
protected

◆ anchor_b_

Vector3 frcsim::JointBase::anchor_b_ {}
protected

◆ body_a_

RigidBody* frcsim::JointBase::body_a_ {nullptr}
protected

◆ body_b_

RigidBody* frcsim::JointBase::body_b_ {nullptr}
protected

◆ break_force_threshold_

double frcsim::JointBase::break_force_threshold_ {1e6}
protected

◆ is_broken_

bool frcsim::JointBase::is_broken_ {false}
protected

◆ is_enabled_

bool frcsim::JointBase::is_enabled_ {true}
protected

◆ type_

JointType frcsim::JointBase::type_
protected

The documentation for this class was generated from the following file: