Description
Class for defining a 'freewheel' (a 1D model of a ratchet wheel or a sprag-clutch) between two one-degree-of-freedom parts; i.e., shafts that can be used to build 1D models of powertrains.
This is more efficient than simulating power trains modeled with full 3D ChBody objects.
#include <ChShaftsFreewheel.h>


| Public Member Functions | |
| ChShaftsFreewheel () | |
| By default this is a ratcheting clutch with 24 teeth: use SetRatchetingModeTeeth() or SetRatchetingModeStep() or SetJammingMode() to change this. | |
| ChShaftsFreewheel (const ChShaftsFreewheel &other) | |
| virtual ChShaftsFreewheel * | Clone () const override | 
| "Virtual" copy constructor (covariant return type). | |
| virtual int | GetDOC_c () override | 
| Number of scalar constraints. | |
| virtual void | IntStateGatherReactions (const unsigned int off_L, ChVectorDynamic<> &L) override | 
| From item's reaction forces to global reaction vector.  More... | |
| virtual void | IntStateScatterReactions (const unsigned int off_L, const ChVectorDynamic<> &L) override | 
| From global reaction vector to item's reaction forces.  More... | |
| virtual void | IntLoadResidual_CqL (const unsigned int off_L, ChVectorDynamic<> &R, const ChVectorDynamic<> &L, const double c) override | 
| Takes the term Cq'*L, scale and adds to R at given offset: R += c*Cq'*L.  More... | |
| virtual void | IntLoadConstraint_C (const unsigned int off, ChVectorDynamic<> &Qc, const double c, bool do_clamp, double recovery_clamp) override | 
| Takes the term C, scale and adds to Qc at given offset: Qc += c*C.  More... | |
| virtual void | IntToDescriptor (const unsigned int off_v, const ChStateDelta &v, const ChVectorDynamic<> &R, const unsigned int off_L, const ChVectorDynamic<> &L, const ChVectorDynamic<> &Qc) override | 
| Prepare variables and constraints to accommodate a solution:  More... | |
| virtual void | IntFromDescriptor (const unsigned int off_v, ChStateDelta &v, const unsigned int off_L, ChVectorDynamic<> &L) override | 
| After a solver solution, fetch values from variables and constraints into vectors:  More... | |
| virtual void | InjectConstraints (ChSystemDescriptor &mdescriptor) override | 
| Tell to a system descriptor that there are constraints of type ChConstraint in this object (for further passing it to a solver) Basically does nothing, but maybe that inherited classes may specialize this. | |
| virtual void | ConstraintsBiReset () override | 
| Sets to zero the known term (b_i) of encapsulated ChConstraints. | |
| virtual void | ConstraintsBiLoad_C (double factor=1, double recovery_clamp=0.1, bool do_clamp=false) override | 
| Adds the current C (constraint violation) to the known term (b_i) of encapsulated ChConstraints. | |
| virtual void | ConstraintsLoadJacobians () override | 
| Adds the current jacobians in encapsulated ChConstraints. | |
| virtual void | ConstraintsFetch_react (double factor=1) override | 
| Fetches the reactions from the lagrangian multiplier (l_i) of encapsulated ChConstraints.  More... | |
| bool | Initialize (std::shared_ptr< ChShaft > mshaft1, std::shared_ptr< ChShaft > mshaft2) override | 
| Use this function after gear creation, to initialize it, given two shafts to join.  More... | |
| void | SetRatchetingModeStep (double mt) | 
| Set if you want the clutch to work in "ratcheting mode", here defined via an angular step in [rad].  More... | |
| void | SetRatchetingModeTeeth (int n_teeth) | 
| Set if you want the clutch to work in "ratcheting mode", here defined via a number of teeth.  More... | |
| void | SetJammingMode () | 
| Set if you want the clutch to work in "jamming mode" like a sprag clutch, based on friction with pawls and jamming.  More... | |
| double | GetRatchetingStep () const | 
| Get the angular step [rad], if a "ratcheting mode" freewheel (it is zero if in "jamming mode"). | |
| bool | IsModeJamming () | 
| True if the clutch is working in "jamming mode" like a sprag clutch, hence a perfect unidirectional clutch without backward backlash. | |
| bool | IsModeRatcheting () | 
| True if the clutch is working in "ratcheting mode", hence with some periodic backward backlash. | |
| void | SetFreeForward () | 
| Shaft 1 free to rotate forward respect to shaft 2.  More... | |
| void | SetFreeBackward () | 
| Shaft 1 free to rotate backward respect to shaft 2.  More... | |
| bool | IsFreeForward () | 
| If true, shaft 1 is free to rotate forward respect to shaft 2 (default).  More... | |
| void | SetPhase (double mp) | 
| If in "ratcheting mode", this is the phase of the first tooth respect to zero rotation of shaft 1. Default 0. | |
| double | GetPhase () | 
| If in "ratcheting mode", this is the phase of the first tooth respect to zero rotation of shaft 1. | |
| double | GetTorqueReactionOn1 () const override | 
| Get the reaction torque exchanged between the two shafts, considered as applied to the 1st axis. | |
| double | GetTorqueReactionOn2 () const override | 
| Get the reaction torque exchanged between the two shafts, considered as applied to the 2nd axis. | |
| double | GetConstraintViolation () const | 
| Return current constraint violation. | |
| double | GetMaxReachedRelativeRotation () const | 
| Return current max relative rotation. | |
| double | GetCurrentTeethVane () const | 
| Return the current teeth vane in ratcheting freewheel (returns zero if in jamming mode). | |
| virtual void | Update (double mytime, bool update_assets=true) override | 
| Update all auxiliary data of the gear transmission at given time. | |
| virtual void | ArchiveOUT (ChArchiveOut &marchive) override | 
| Method to allow serialization of transient data to archives. | |
| virtual void | ArchiveIN (ChArchiveIn &marchive) override | 
| Method to allow deserialization of transient data from archives.  More... | |
|  Public Member Functions inherited from chrono::ChShaftsCouple | |
| ChShaftsCouple (const ChShaftsCouple &other) | |
| virtual int | GetNumCoords () | 
| Get the number of scalar variables affected by constraints in this link. | |
| ChShaft * | GetShaft1 () | 
| Get the first (input) shaft. | |
| ChShaft * | GetShaft2 () | 
| Get the second (output) shaft. | |
| double | GetRelativeRotation () const | 
| Get the actual relative angle in terms of phase of shaft 1 respect to 2. | |
| double | GetRelativeRotation_dt () const | 
| Get the actual relative speed in terms of speed of shaft 1 respect to 2. | |
| double | GetRelativeRotation_dtdt () const | 
| Get the actual relative acceleration in terms of speed of shaft 1 respect to 2. | |
|  Public Member Functions inherited from chrono::ChPhysicsItem | |
| ChPhysicsItem (const ChPhysicsItem &other) | |
| ChSystem * | GetSystem () const | 
| Get the pointer to the parent ChSystem(). | |
| virtual void | SetSystem (ChSystem *m_system) | 
| Set the pointer to the parent ChSystem().  More... | |
| void | AddVisualModel (std::shared_ptr< ChVisualModel > model) | 
| Add an (optional) visualization model.  More... | |
| std::shared_ptr< ChVisualModel > | GetVisualModel () const | 
| Access the visualization model (if any).  More... | |
| void | AddVisualShape (std::shared_ptr< ChVisualShape > shape, const ChFrame<> &frame=ChFrame<>()) | 
| Add the specified visual shape to the visualization model.  More... | |
| std::shared_ptr< ChVisualShape > | GetVisualShape (unsigned int i) const | 
| Access the specified visualization shape in the visualization model (if any).  More... | |
| void | AddVisualShapeFEA (std::shared_ptr< ChVisualShapeFEA > shapeFEA) | 
| Add the specified FEA visualization object to the visualization model.  More... | |
| std::shared_ptr< ChVisualShapeFEA > | GetVisualShapeFEA (unsigned int i) const | 
| Access the specified FEA visualization object in the visualization model (if any).  More... | |
| virtual ChFrame | GetVisualModelFrame (unsigned int nclone=0) | 
| Get the reference frame (expressed in and relative to the absolute frame) of the visual model.  More... | |
| virtual unsigned int | GetNumVisualModelClones () const | 
| Return the number of clones of the visual model associated with this physics item.  More... | |
| void | AddCamera (std::shared_ptr< ChCamera > camera) | 
| Attach a ChCamera to this physical item.  More... | |
| std::vector< std::shared_ptr< ChCamera > > | GetCameras () const | 
| Get the set of cameras attached to this physics item. | |
| virtual bool | IsActive () const | 
| Return true if the object is active and included in dynamics. | |
| virtual bool | GetCollide () const | 
| Tell if the object is subject to collision.  More... | |
| virtual void | SyncCollisionModels () | 
| If this physical item contains one or more collision models, synchronize their coordinates and bounding boxes to the state of the item. | |
| virtual void | AddCollisionModelsToSystem () | 
| If this physical item contains one or more collision models, add them to the system's collision engine. | |
| virtual void | RemoveCollisionModelsFromSystem () | 
| If this physical item contains one or more collision models, remove them from the system's collision engine. | |
| virtual void | GetTotalAABB (ChVector<> &bbmin, ChVector<> &bbmax) | 
| Get the entire AABB axis-aligned bounding box of the object.  More... | |
| virtual void | GetCenter (ChVector<> &mcenter) | 
| Get a symbolic 'center' of the object.  More... | |
| virtual void | StreamINstate (ChStreamInBinary &mstream) | 
| Method to deserialize only the state (position, speed) Must be implemented by child classes. | |
| virtual void | StreamOUTstate (ChStreamOutBinary &mstream) | 
| Method to serialize only the state (position, speed) Must be implemented by child classes. | |
| virtual void | Setup () | 
| This might recompute the number of coordinates, DOFs, constraints, in case this might change (ex in ChAssembly), as well as state offsets of contained items (ex in ChMesh) | |
| virtual void | Update (bool update_assets=true) | 
| As above, but does not require updating of time-dependent data.  More... | |
| virtual void | SetNoSpeedNoAcceleration () | 
| Set zero speed (and zero accelerations) in state, without changing the position.  More... | |
| virtual int | GetDOF () | 
| Get the number of scalar coordinates (variables), if any, in this item.  More... | |
| virtual int | GetDOF_w () | 
| Get the number of scalar coordinates of variables derivatives (usually = DOF, but might be different than DOF, ex.  More... | |
| virtual int | GetDOC () | 
| Get the number of scalar constraints, if any, in this item. | |
| virtual int | GetDOC_d () | 
| Get the number of scalar constraints, if any, in this item (only unilateral constr.) Children classes might override this. | |
| unsigned int | GetOffset_x () | 
| Get offset in the state vector (position part) | |
| unsigned int | GetOffset_w () | 
| Get offset in the state vector (speed part) | |
| unsigned int | GetOffset_L () | 
| Get offset in the lagrangian multipliers. | |
| void | SetOffset_x (const unsigned int moff) | 
| Set offset in the state vector (position part) Note: only the ChSystem::Setup function should use this. | |
| void | SetOffset_w (const unsigned int moff) | 
| Set offset in the state vector (speed part) Note: only the ChSystem::Setup function should use this. | |
| void | SetOffset_L (const unsigned int moff) | 
| Set offset in the lagrangian multipliers Note: only the ChSystem::Setup function should use this. | |
| virtual void | IntStateGather (const unsigned int off_x, ChState &x, const unsigned int off_v, ChStateDelta &v, double &T) | 
| From item's state to global state vectors y={x,v} pasting the states at the specified offsets.  More... | |
| virtual void | IntStateScatter (const unsigned int off_x, const ChState &x, const unsigned int off_v, const ChStateDelta &v, const double T, bool full_update) | 
| From global state vectors y={x,v} to item's state (and update) fetching the states at the specified offsets.  More... | |
| virtual void | IntStateGatherAcceleration (const unsigned int off_a, ChStateDelta &a) | 
| From item's state acceleration to global acceleration vector.  More... | |
| virtual void | IntStateScatterAcceleration (const unsigned int off_a, const ChStateDelta &a) | 
| From global acceleration vector to item's state acceleration.  More... | |
| virtual void | IntStateIncrement (const unsigned int off_x, ChState &x_new, const ChState &x, const unsigned int off_v, const ChStateDelta &Dv) | 
| Computes x_new = x + Dt , using vectors at specified offsets.  More... | |
| virtual void | IntStateGetIncrement (const unsigned int off_x, const ChState &x_new, const ChState &x, const unsigned int off_v, ChStateDelta &Dv) | 
| Computes Dt = x_new - x, using vectors at specified offsets.  More... | |
| virtual void | IntLoadResidual_F (const unsigned int off, ChVectorDynamic<> &R, const double c) | 
| Takes the F force term, scale and adds to R at given offset: R += c*F.  More... | |
| virtual void | IntLoadResidual_Mv (const unsigned int off, ChVectorDynamic<> &R, const ChVectorDynamic<> &w, const double c) | 
| Takes the M*v term, multiplying mass by a vector, scale and adds to R at given offset: R += c*M*w.  More... | |
| virtual void | IntLoadConstraint_Ct (const unsigned int off, ChVectorDynamic<> &Qc, const double c) | 
| Takes the term Ct, scale and adds to Qc at given offset: Qc += c*Ct.  More... | |
| virtual void | VariablesFbReset () | 
| Sets the 'fb' part (the known term) of the encapsulated ChVariables to zero. | |
| virtual void | VariablesFbLoadForces (double factor=1) | 
| Adds the current forces (applied to item) into the encapsulated ChVariables, in the 'fb' part: qf+=forces*factor. | |
| virtual void | VariablesQbLoadSpeed () | 
| Initialize the 'qb' part of the ChVariables with the current value of speeds.  More... | |
| virtual void | VariablesFbIncrementMq () | 
| Adds M*q (masses multiplied current 'qb') to Fb, ex.  More... | |
| virtual void | VariablesQbSetSpeed (double step=0) | 
| Fetches the item speed (ex.  More... | |
| virtual void | VariablesQbIncrementPosition (double step) | 
| Increment item positions by the 'qb' part of the ChVariables, multiplied by a 'step' factor.  More... | |
| virtual void | InjectVariables (ChSystemDescriptor &mdescriptor) | 
| Tell to a system descriptor that there are variables of type ChVariables in this object (for further passing it to a solver) Basically does nothing, but maybe that inherited classes may specialize this. | |
| virtual void | ConstraintsBiLoad_Ct (double factor=1) | 
| Adds the current Ct (partial t-derivative, as in C_dt=0-> [Cq]*q_dt=-Ct) to the known term (b_i) of encapsulated ChConstraints. | |
| virtual void | ConstraintsBiLoad_Qc (double factor=1) | 
| Adds the current Qc (the vector of C_dtdt=0 -> [Cq]*q_dtdt=Qc ) to the known term (b_i) of encapsulated ChConstraints. | |
| virtual void | ConstraintsFbLoadForces (double factor=1) | 
| Adds the current link-forces, if any, (caused by springs, etc.) to the 'fb' vectors of the ChVariables referenced by encapsulated ChConstraints. | |
| virtual void | InjectKRMmatrices (ChSystemDescriptor &mdescriptor) | 
| Tell to a system descriptor that there are items of type ChKblock in this object (for further passing it to a solver) Basically does nothing, but maybe that inherited classes may specialize this. | |
| virtual void | KRMmatricesLoad (double Kfactor, double Rfactor, double Mfactor) | 
| Adds the current stiffness K and damping R and mass M matrices in encapsulated ChKblock item(s), if any.  More... | |
|  Public Member Functions inherited from chrono::ChObj | |
| ChObj (const ChObj &other) | |
| int | GetIdentifier () const | 
| Gets the numerical identifier of the object. | |
| void | SetIdentifier (int id) | 
| Sets the numerical identifier of the object. | |
| double | GetChTime () const | 
| Gets the simulation time of this object. | |
| void | SetChTime (double m_time) | 
| Sets the simulation time of this object. | |
| const char * | GetName () const | 
| Gets the name of the object as C Ascii null-terminated string -for reading only! | |
| void | SetName (const char myname[]) | 
| Sets the name of this object, as ascii string. | |
| std::string | GetNameString () const | 
| Gets the name of the object as C Ascii null-terminated string. | |
| void | SetNameString (const std::string &myname) | 
| Sets the name of this object, as std::string. | |
| void | MFlagsSetAllOFF (int &mflag) | 
| void | MFlagsSetAllON (int &mflag) | 
| void | MFlagSetON (int &mflag, int mask) | 
| void | MFlagSetOFF (int &mflag, int mask) | 
| int | MFlagGet (int &mflag, int mask) | 
| virtual std::string & | ArchiveContainerName () | 
| Additional Inherited Members | |
|  Protected Attributes inherited from chrono::ChShaftsCouple | |
| ChShaft * | shaft1 | 
| first shaft | |
| ChShaft * | shaft2 | 
| second shaft | |
|  Protected Attributes inherited from chrono::ChPhysicsItem | |
| ChSystem * | system | 
| parent system | |
| std::shared_ptr< ChVisualModelInstance > | vis_model_instance | 
| instantiated visualization model | |
| std::vector< std::shared_ptr< ChCamera > > | cameras | 
| set of cameras | |
| unsigned int | offset_x | 
| offset in vector of state (position part) | |
| unsigned int | offset_w | 
| offset in vector of state (speed part) | |
| unsigned int | offset_L | 
| offset in vector of lagrangian multipliers | |
|  Protected Attributes inherited from chrono::ChObj | |
| double | ChTime | 
| the time of simulation for the object | |
Member Function Documentation
◆ ArchiveIN()
| 
 | overridevirtual | 
Method to allow deserialization of transient data from archives.
Method to allow de serialization of transient data from archives.
Reimplemented from chrono::ChShaftsCouple.
◆ ConstraintsFetch_react()
| 
 | overridevirtual | 
Fetches the reactions from the lagrangian multiplier (l_i) of encapsulated ChConstraints.
Mostly used after the solver provided the solution in ChConstraints. Also, should convert the reactions obtained from dynamical simulation, from link space to intuitive react_force and react_torque.
Reimplemented from chrono::ChPhysicsItem.
◆ Initialize()
| 
 | overridevirtual | 
Use this function after gear creation, to initialize it, given two shafts to join.
Each shaft must belong to the same ChSystem. By default this is a ratcheting clutch with 24 teeth: use SetRatchetingModeTeeth() or SetRatchetingModeStep() or SetJammingMode() to change this.
- Parameters
- 
  mshaft1 first shaft to join mshaft2 second shaft to join 
Reimplemented from chrono::ChShaftsCouple.
◆ IntFromDescriptor()
| 
 | overridevirtual | 
After a solver solution, fetch values from variables and constraints into vectors:
- Parameters
- 
  off_v offset for v v vector to where the q 'unknowns' term of the variables will be copied off_L offset for L L vector to where L 'lagrangian ' term of the constraints will be copied 
Reimplemented from chrono::ChPhysicsItem.
◆ IntLoadConstraint_C()
| 
 | overridevirtual | 
Takes the term C, scale and adds to Qc at given offset: Qc += c*C.
- Parameters
- 
  off offset in Qc residual Qc result: the Qc residual, Qc += c*C c a scaling factor do_clamp apply clamping to c*C? recovery_clamp value for min/max clamping of c*C 
Reimplemented from chrono::ChPhysicsItem.
◆ IntLoadResidual_CqL()
| 
 | overridevirtual | 
Takes the term Cq'*L, scale and adds to R at given offset: R += c*Cq'*L.
- Parameters
- 
  off_L offset in L multipliers R result: the R residual, R += c*Cq'*L L the L vector c a scaling factor 
Reimplemented from chrono::ChPhysicsItem.
◆ IntStateGatherReactions()
| 
 | overridevirtual | 
From item's reaction forces to global reaction vector.
- Parameters
- 
  off_L offset in L vector L L vector of reaction forces 
Reimplemented from chrono::ChPhysicsItem.
◆ IntStateScatterReactions()
| 
 | overridevirtual | 
From global reaction vector to item's reaction forces.
- Parameters
- 
  off_L offset in L vector L L vector of reaction forces 
Reimplemented from chrono::ChPhysicsItem.
◆ IntToDescriptor()
| 
 | overridevirtual | 
Prepare variables and constraints to accommodate a solution:
- Parameters
- 
  off_v offset for v and R v vector copied into the q 'unknowns' term of the variables R vector copied into the F 'force' term of the variables off_L offset for L and Qc L vector copied into the L 'lagrangian ' term of the constraints Qc vector copied into the Qb 'constraint' term of the constraints 
Reimplemented from chrono::ChPhysicsItem.
◆ IsFreeForward()
| 
 | inline | 
If true, shaft 1 is free to rotate forward respect to shaft 2 (default).
Viceversa, if false. Use SetFreeForward() or SetFreeBackward() to change this mode.
◆ SetFreeBackward()
| 
 | inline | 
Shaft 1 free to rotate backward respect to shaft 2.
Viceversa, forward rotation of 1 respect to 2 is prevented and will generate a torque.
◆ SetFreeForward()
| 
 | inline | 
Shaft 1 free to rotate forward respect to shaft 2.
Viceversa, backward rotation of 1 respect to 2 is prevented and will generate a torque.
◆ SetJammingMode()
| 
 | inline | 
Set if you want the clutch to work in "jamming mode" like a sprag clutch, based on friction with pawls and jamming.
This is like a ratcheting clutch with infinite teeth, hence a perfect unidirectional clutch without backward backlash, but instead of using SetRatchetingModeStep(0), that can't work well because of bad conditioning, just use this.
◆ SetRatchetingModeStep()
| 
 | inline | 
Set if you want the clutch to work in "ratcheting mode", here defined via an angular step in [rad].
When in ratcheting mode, there is a periodic "backward backlash", like in bicycle freewheels.
◆ SetRatchetingModeTeeth()
| 
 | inline | 
Set if you want the clutch to work in "ratcheting mode", here defined via a number of teeth.
When in ratcheting mode, there is a periodic "backward backlash", like in bicycle freewheels.
The documentation for this class was generated from the following files:
- /builds/uwsbel/chrono/src/chrono/physics/ChShaftsFreewheel.h
- /builds/uwsbel/chrono/src/chrono/physics/ChShaftsFreewheel.cpp
