Cable Actuator

General description

The “CableActuator” component simulates a force exerted by a cable to solve an effector constraint.

How to use the component

To learn how to create a SOFA scene, please refer to the tutorial provided by the SOFA Modeler or this documentation.

This component has multiple input and output datas described in the following section. The two mains input datas are the pull point position, i.e the fixed position from which the cable is pulled. And the indices of the mechanical model points through which the cable will pass (from pull point to extremity). As the volumic mesh may not follows the cable path, one can create an other “MechanicalObject” to describe it and map the path to the target model using a “BarycentricMapping” component:

actuator = bunny.createChild('actuator')
actuator.createObject('MechanicalObject', position="3 -12 -20   3 -12 -10   10 -12 10   10 -12 30   10 -12 45 ")
actuator.createObject('CableActuator', indices='0 1 2 3 4', pullPoint="3 -12 -100", maxPositiveDisp='30', minForce="0")
actuator.createObject('BarycentricMapping', mapForces="false", mapMasses="false")

Using this method requires to create a new node. This node must be a child of the target model node.

As an actuator is used to solve an effector constraint, you will need to put an effector constraint in your scene. To solve the inverse problem, you must use an inverse problem solver (for instance QPInverseProblemSolver) and put it on the top of the scene graph.

Examples are provided in the “examples” directory of the plugin.

Methods description

Requirement :Real Time Inverse Simulation Method

Method :

Here, the constraint matrix J will contain the direction of the force exerted by the cable in the rows corresponding to the pull point of the model, and λ will represent the intensity of the applied force.

Special issues

This component exists in two versions, with and without the suffix “GS”. Using the “CableActuatorGS” means that you will use the Gauss-Seidel resolution. Thus, the inverse problem solver of your scene must be the “GenericConstraintSolver”. Make sure that the effector used also has the suffix “GS”. In this particular case, the effector component must be set before the actuator in the scene.

Data field

Input data

indices :List of points connected by the cable, from extremity to actuator.

maxForce /minForce: Correspond to the constrainst λmin ≤ λ ≤ λmax where λ represents the force. If no values are set by the user, no constraint on λ will be considered. Note that the force is constrained to be positive.

maxPositiveDisp/maxNegativeDisp : Correspond to the constraints δmin δ = Waaλ + δfree ≤ δmax where δ represents the displacement of the cable. If no values are set by the user, no limit will be considered.

maxDispVariation : Maximum variation of the displacement allowed. If not set, no max variation will be concidered.

maxPositiveDisp/maxNegativeDisp (GS case): Correspond to the constraints δmin ≤ δ = Waaλ + δfree δmax where δ represents the displacement of the cable. If no values are set by the user, default values (1.0e99,1.0e99) will be considered.

pullPoint : Fixed point from which the cable is pulled.

Output data

initialCableLength : Length of the cable at the initial state.

cableLength : Length of the cable at the end of the time step.

displacement : Displacement achieved at the end of the time step compared to initial state. δ = Waaλ + δfree

force : The force λ applied at the end of the time step.

sendValues (GS case) : Computed values to be sent to the real actuator. For now, this output is specific to the control of the Diamond robot.

Leave a Reply