Platform held by eight cables.
The simulations are done using the simulation framework SOFA. Binaries of SOFA with the required and optional plugins are available here. If you compile SOFA, checkout the following source code:
- SOFA on branch master
- SofaPython3 plugin for SOFA on branch master
- Cosserat plugin on branch master
- BeamAdapter plugin on branch master
- SoftRobots plugin on branch master
- STLIB plugin on branch master
In the CMake GUI also enable the following plugins:
- ArticulatedSystemPlugin
- SoftRobots.Inverse plugin for SOFA to solve the inverse kinematics of the robot
- tkinter, GUI to pilot the cables. This package is distributed by default with python on MacOS and Windows.
Run the simulation. In a terminal:
~$ cd TIRREX.XXL
~/TIRREX.XXL$ runSofa scene.py
~/TIRREX.XXL$ runSofa sceneInverseKinematics.py # for inverse resolution
The geometric and mechanical parameters can be changed from the file params.py
(for global changes),
or directly in the scene file (for local changes):
def createScene(rootnode):
from scripts.utils.header import addHeader, addSolvers
params = Parameters()
params.structure.height = 9.5
params.structure.width = 1
params.structure.length = 27.78
params.structure.thickness = 0
params.cable.nbSections *= 3
params.cable.length *= 3
# Orientation of each pulley in radian
params.structure.pulleysorientations = [0, 0, 0, 0,
0, 0, 0, 0]
# Position of the pulley on the structure ('up' or 'down')
params.structure.pulleysUD = ["up", "down", "up", "down",
"up", "down", "up", "down"]
# For each pulley, connect the cable to the corresponding corner of the platform
# (see the README.md for the corresponding numbering)
params.structure.cornersOrder = [2, 3, 1, 0, 6, 7, 5, 4]
settings, modelling, simulation = addHeader(rootnode)
addSolvers(simulation, firstOrder=False, rayleighStiffness=0.2)
rootnode.VisualStyle.displayFlags = "showInteractionForceFields showCollisionModels"
system = System(modelling, simulation, cableModel='beam')
for i, cable in enumerate(system.cables.children):
cable.RigidBase.addObject('RestShapeSpringsForceField', points=[0], stiffness=1e12)
Numbering of the pulleys, and corners of the platform follows the image bellow :
- Merge Karim's work on pulleys
Eulalie Coevoet & Karim Moussa