Exemplo n.º 1
0
def createScene(rootNode):
    scene = Scene(rootNode, gravity=[0.0, -9810.0, 0.0])
    rootNode.dt = 0.025
    scene.VisualStyle.displayFlags = "showBehavior"

    scene.createObject("MeshSTLLoader", name="loader", filename="data/mesh/blueprint.stl")
    scene.createObject("OglModel", src="@loader")

    tripod = Tripod(rootNode)
    for arm in tripod.actuatedarms:
        arm.Constraint.BoxROI.drawBoxes = True
Exemplo n.º 2
0
def createScene(rootNode):

    import math

    def animation(target, factor):
        target.angleIn = math.cos(factor * 2 * math.pi)

    Scene(rootNode)

    rootNode.dt = 0.003
    rootNode.gravity = [0., -9810., 0.]
    rootNode.createObject("VisualStyle", displayFlags="showBehaviorModels")

    # Use these components on top of the scene to solve the constraint "StopperConstraint".
    rootNode.createObject("FreeMotionAnimationLoop")
    rootNode.createObject("GenericConstraintSolver",
                          maxIterations=1e3,
                          tolerance=1e-5)

    simulation = rootNode.createChild("Simulation")
    simulation.createObject("EulerImplicitSolver",
                            rayleighStiffness=0.1,
                            rayleighMass=0.1)
    simulation.createObject("CGLinearSolver", name="precond")

    ServoMotor(simulation, showWheel=True)
    animate(animation, {"target": simulation.ServoMotor},
            duration=5.,
            mode="loop")

    return rootNode
Exemplo n.º 3
0
def createScene(rootNode):
    from splib.animation import animate
    from stlib.scene import Scene
    import math

    scene = Scene(rootNode)
    scene.VisualStyle.displayFlags = "showBehavior"
    rootNode.dt = 0.003
    rootNode.gravity = [0., -9810., 0.]

    simulation = rootNode.createChild("Simulation")
    simulation.createObject("EulerImplicitSolver",
                            rayleighStiffness=0.1,
                            rayleighMass=0.1)
    simulation.createObject("CGLinearSolver", name="precond")

    arm = ActuatedArm(simulation,
                      name="ActuatedArm",
                      translation=[0.0, 0.0, 0.0])

    def myanimate(target, factor):
        target.angle = math.cos(factor * 2 * math.pi)
        target.setX(math.cos(factor * 2 * math.pi))

    animate(myanimate, {"target": arm.servomotor}, duration=5, mode="loop")
Exemplo n.º 4
0
def createScene(rootNode):
    scene = Scene(rootNode, gravity=[0.0, -9810, 0.0])
    rootNode.dt = 0.025
    scene.VisualStyle.displayFlags = "showBehavior"

    scene.createObject("MeshSTLLoader", name="loader", filename="../compoz/table_stand.stl")
    scene.createObject("OglModel", src="@loader")

    # Instanciating the prefab into the graph
    body = ElasticBody(rootNode)

    # Instanciating the FixingBox prefab into the graph, constraining the mechanical object of the ElasticBody.
    fix = FixingBox(rootNode,
                    body.ElasticMaterialObject,
                    translation=[0.0, 0.0, 0.0],
                    scale=[30., 30., 30.])

    # Changing the property of the Box ROI so that the constraint area appears on screen.
    fix.boxroi.drawBoxes = True
Exemplo n.º 5
0
def createScene(rootNode):
    from splib.animation import animate
    from splib.animation.easing import LinearRamp
    from splib.scenegraph import get

    from stlib.scene import MainHeader
    scene = Scene(rootNode)
    s = DefaultSolver(rootNode)

    # Test a assembly that also implements a KinematicMotorController
    # The angle of the KinematicMotorController is dynamically changed using a
    # animation function
    servomotor = ServoMotor(rootNode, translation=[2, 0, 0])
    def myAnimation(motorctrl, factor):
        motorctrl.angle = LinearRamp(-3.14/2, 3.14/2, factor)

    animate(myAnimation, {"motorctrl" : servomotor.node }, duration=1.0, mode="pingpong")
Exemplo n.º 6
0
def createScene(root):
        from stlib.scene import Scene

        Scene(root)
        root.VisualStyle.displayFlags="showForceFields"

        filename = tetmeshFromBrepAndSaveToFile(filepath='data/meshes/CapNoCavities.brep', 
                                      outputdir='data/meshes/autogen/',
                                      Mesh_CharacteristicLengthFactor=0.4, 
                                      Mesh_CharacteristicLengthMax=3, 
                                      Mesh_CharacteristicLengthMin=0.1, 
                                      View_GeneralizedRaiseZ='v0')
                                      
        root.createObject("MeshVTKLoader", name="loader", filename=filename)
        root.createObject("TetrahedronSetTopologyContainer", name="container", src="@loader")

        root.createObject("MechanicalObject", name="dofs", position="@loader.position")
        root.createObject("TetrahedronFEMForceField", name="forcefield")                              
Exemplo n.º 7
0
def createScene(rootNode):
    scene = Scene(rootNode, gravity=[0.0, -9810.0, 0.0])
    rootNode.dt = 0.025
    scene.VisualStyle.displayFlags = "showBehavior"

    scene.createObject("MeshSTLLoader",
                       name="loader",
                       filename="../data/mesh/blueprint.stl")
    scene.createObject("OglModel", src="@loader")

    tripod = Tripod(rootNode)
    for arm in tripod.actuatedarms:
        arm.Constraint.BoxROI.drawBoxes = True
Exemplo n.º 8
0
def createScene(rootNode):
    scene = Scene(rootNode, gravity=[0.0, -9810, 0.0])
    scene.VisualStyle.displayFlags = "showBehavior"

    scene.createObject("MeshSTLLoader", name="loader", filename="data/mesh/blueprint.stl")
    scene.createObject("OglModel", src="@loader")

    model = scene.createChild("Model")
    tripod = Tripod(model)

    MyController(rootNode, tripod.actuatedarms)

    Interaction(rootNode, targets=[tripod.ActuatedArm0,
                                   tripod.ActuatedArm1,
                                   tripod.ActuatedArm2])
Exemplo n.º 9
0
def createScene(rootNode):
    from splib.animation import animate
    from stlib.scene import Scene
    scene = Scene(rootNode)
    scene.createObject("EulerImplicitSolver")
    scene.createObject("SparseLDLSolver")
    scene.VisualStyle.displayFlags = "showBehavior"

    arm1 = ActuatedArm(scene, name="arm1", translation=[-2.0, 0.0, 0.0])
    arm1.createObject("FixedConstraint")

    def myanimate(target, factor):
        target.angle = factor

    animate(myanimate, {"target": arm1.ServoMotor},
            duration=0.5,
            mode="pingpong")
Exemplo n.º 10
0
def createSceneReal(rootNode):

    #print sys.argv
    #sys.exit()
    length_scale = sys.argv[1]
    #length_scale = ""
    disk_msh = 'disk_' + length_scale + '.msh'
    disk_inside_msh = 'disk_inside' + length_scale + '.msh'

    # find point closest to zero (with positive z valu)
    vector, mid_ind = nth_smallest_point(disk_msh, 0)
    i = 0
    while vector[-1] < 0:
        i += 1
        vector, mid_ind = nth_smallest_point(disk_msh, i)

    print(vector, mid_ind)
    sys.exit()
    rootNode = Scene(rootNode, gravity=[0.0, -0.0, 0.0], dt=0.001)
    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )

    rootNode.createObject('FreeMotionAnimationLoop')
    rootNode.createObject('GenericConstraintSolver',
                          maxIterations='100',
                          tolerance='0.0000001')

    # bunny
    bunny = rootNode.createChild('bunny')
    bunny.createObject('EulerImplicit', name='odesolver')
    bunny.createObject('ShewchukPCGLinearSolver',
                       iterations='15',
                       name='linearsolver',
                       tolerance='1e-5',
                       preconditioners='preconditioner',
                       use_precond='true',
                       update_step='1')

    bunny.createObject('MeshGmshLoader',
                       name='loader',
                       rotation="90 0 0",
                       filename=path + disk_msh)
    bunny.createObject('TetrahedronSetTopologyContainer',
                       src='@loader',
                       name='container')
    bunny.createObject('TetrahedronSetTopologyModifier')
    bunny.createObject('TetrahedronSetTopologyAlgorithms', template='Vec3d')
    bunny.createObject('TetrahedronSetGeometryAlgorithms', template='Vec3d')

    bunny.createObject('MechanicalObject',
                       name='tetras',
                       template='Vec3d',
                       showIndices='false',
                       showIndicesScale='4e-5',
                       rx='0',
                       dz='0')
    bunny.createObject('UniformMass', totalMass='0.5')
    bunny.createObject('TetrahedronFEMForceField',
                       template='Vec3d',
                       name='FEM',
                       method='large',
                       poissonRatio='0.3',
                       youngModulus='180')

    #bunny.createObject('BoxROI', name='boxROI', box='-3 -3 -3  3 3 3', drawBoxes='true',
    #                   position="@tetras.rest_position", tetrahedra="@container.tetrahedra")
    #bunny.createObject('RestShapeSpringsForceField', points='@boxROI.indices', stiffness='1e12')

    bunny.createObject('SparseLDLSolver', name='preconditioner')
    bunny.createObject('LinearSolverConstraintCorrection',
                       solverName='preconditioner')
    # bunny.createObject('UncoupledConstraintCorrection')

    # bunny/cavity
    cavity = bunny.createChild('cavity')
    cavity.createObject('MeshGmshLoader',
                        name='loader',
                        rotation="90 0 0",
                        filename=path + disk_inside_msh)
    cavity.createObject('Mesh', src='@loader', name='topo')
    cavity.createObject('MechanicalObject', name='cavity')
    cavity.createObject('SurfacePressureConstraint',
                        triangles='@topo.triangles',
                        value='4000',
                        valueType="1")
    cavity.createObject('BarycentricMapping',
                        name='mapping',
                        mapForces='false',
                        mapMasses='false')

    # bunny/bunnyVisu
    bunnyVisu = bunny.createChild('visu')
    bunnyVisu.createObject('TriangleSetTopologyContainer', name='container')
    bunnyVisu.createObject('TriangleSetTopologyModifier')
    bunnyVisu.createObject('TriangleSetTopologyAlgorithms', template='Vec3d')
    bunnyVisu.createObject('TriangleSetGeometryAlgorithms', template='Vec3d')
    bunnyVisu.createObject('Tetra2TriangleTopologicalMapping',
                           name='Mapping',
                           input="@../container",
                           output="@container")

    bunnyVisu.createObject('OglModel',
                           template='ExtVec3f',
                           color='0.3 0.2 0.2 0.8')
    bunnyVisu.createObject('IdentityMapping')

    #FixedBox(bunny, doVisualization=True, atPositions=BoxROICoordinates)
    #bunny.FixedBox.BoxROI.show = True
    return rootNode
Exemplo n.º 11
0
def createSceneReal(rootNode, dt):
    length_scale = "0.500"
    disk_msh = 'disk_' + length_scale + '.msh'
    disk_inside_stl = 'disk_inside' + length_scale + '.stl'

    rootNode = Scene(rootNode, gravity=[0.0, -0.0, 9.8], dt=dt)
    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )

    rootNode.createObject('FreeMotionAnimationLoop')
    rootNode.createObject('GenericConstraintSolver',
                          name='gencs',
                          maxIterations='500',
                          printLog='0',
                          tolerance='0.0000001')
    rootNode.createObject('BackgroundSetting', color='0 0.168627 0.211765')
    YoungModulus = 1800
    InitialValue = 1000.0
    Translation = "0 0 0"
    Bunny = ElasticMaterialObject(name="disk",
                                  attachedTo=rootNode,
                                  volumeMeshFileName=meshpath + disk_msh,
                                  surfaceMeshFileName=meshpath +
                                  disk_inside_stl,
                                  youngModulus=YoungModulus,
                                  withConstrain=True,
                                  totalMass=1.0,
                                  translation="0 0 0")

    fixed_const_str = ""
    fixed_const_lst = [274, 309, 344, 345, 770, 783, 807]
    for i in fixed_const_lst:
        fixed_const_str = fixed_const_str + " " + str(i)

    print "Fixed stuff", fixed_const_lst, fixed_const_str

    Bunny.createObject("FixedConstraint", indices=fixed_const_str)
    '''
    cavity = PneumaticCavity(name='cavity', attachedAsAChildOf=Bunny,
                             surfaceMeshFileName=meshpath + disk_inside_stl, valueType='pressure',
                             initialValue=0.0, translation=Translation)
    '''
    cavity = Bunny.createChild('cavity')
    cavity.createObject('MeshSTLLoader',
                        name='loader',
                        filename=meshpath + disk_inside_stl,
                        translation="0 0 0")
    cavity.createObject('Mesh', src='@loader', name='topo')
    cavity.createObject('MechanicalObject', name='cavity')
    cavity.createObject('SurfacePressureConstraint',
                        name="SurfacePressureConstraint",
                        template='Vec3d',
                        value="0.0001",
                        triangles='@topo.triangles',
                        visualization='0',
                        showVisuScale='0.0002',
                        valueType="pressure")
    cavity.createObject('BarycentricMapping',
                        name='mapping',
                        mapForces='false',
                        mapMasses='false')

    BunnyVisu = Bunny.createChild('visu')
    BunnyVisu.createObject('TriangleSetTopologyContainer', name='container')
    BunnyVisu.createObject('TriangleSetTopologyModifier')
    BunnyVisu.createObject('TriangleSetTopologyAlgorithms', template='Vec3d')
    BunnyVisu.createObject('TriangleSetGeometryAlgorithms', template='Vec3d')
    BunnyVisu.createObject('Tetra2TriangleTopologicalMapping',
                           name='Mapping',
                           input="@../container",
                           output="@container")
    BunnyVisu.createObject('OglModel',
                           template='ExtVec3f',
                           color='0.3 0.2 0.2 0.6',
                           translation=Translation)
    BunnyVisu.createObject('IdentityMapping')

    return Bunny
Exemplo n.º 12
0
def createSceneReal(rootNode, dt, fixed_const_lst, moving_const_lst):
    length_scale = sys.argv[1]
    block_msh = 'block_' + length_scale + '.msh'

    rootNode = Scene(rootNode, gravity=[0.0, -0.0, 1000.0], dt=dt)
    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )

    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )
    rootNode.dt = dt

    rootNode.createObject('FreeMotionAnimationLoop')
    rootNode.createObject('GenericConstraintSolver',
                          name='gencs',
                          maxIterations='500',
                          printLog='0',
                          tolerance='0.0000001')

    rootNode.createObject('BackgroundSetting', color='0 0.168627 0.211765')
    YoungModulus = 1800
    InitialValue = 0.01
    Translation = None
    Block = ElasticMaterialObject(name="block",
                                  attachedTo=rootNode,
                                  volumeMeshFileName=meshpath + block_msh,
                                  surfaceMeshFileName=None,
                                  youngModulus=YoungModulus,
                                  withConstrain=True,
                                  totalMass=1.0,
                                  translation=None)

    fixed_const_str = ""
    for i in fixed_const_lst:
        fixed_const_str = fixed_const_str + " " + str(i)

    moving_const_str = ""
    for i in moving_const_lst:
        moving_const_str = moving_const_str + " " + str(i)

    print 'moving', moving_const_str
    print 'fixed ', fixed_const_str

    Block.createObject("FixedConstraint", indices=fixed_const_str)

    inds = "7 63 62 60 5 254 240 206 236 47 68 69 253"

    Block.createObject('PartialLinearMovementConstraint',
                       indices=moving_const_str,
                       keyTimes='0 ' + str(dt) + " 10",
                       template='Vec3d',
                       movements='0. 0. 0. 0. -1 0. 0. -1 0.')
    #cavity = PneumaticCavity(name='Cavity', attachedAsAChildOf=Block,
    #                         surfaceMeshFileName=meshpath + block_inside_stl, valueType='pressureGrowth',
    #                         initialValue=InitialValue, translation=Translation)

    BlockVisu = Block.createChild('visu')
    BlockVisu.createObject('TriangleSetTopologyContainer', name='container')
    BlockVisu.createObject('TriangleSetTopologyModifier')
    BlockVisu.createObject('TriangleSetTopologyAlgorithms', template='Vec3d')
    BlockVisu.createObject('TriangleSetGeometryAlgorithms', template='Vec3d')
    BlockVisu.createObject('Tetra2TriangleTopologicalMapping',
                           name='Mapping',
                           input="@../container",
                           output="@container")
    BlockVisu.createObject('OglModel',
                           template='ExtVec3f',
                           color='0.3 0.2 0.2 0.6',
                           translation=Translation)
    BlockVisu.createObject('IdentityMapping')

    return Block
Exemplo n.º 13
0
def createSceneReal(rootNode, dt, L):
    length_scale = L
    disk_msh = 'disk_' + length_scale + '.msh'
    disk_inside_stl = 'disk_inside' + length_scale + '.stl'
    '''
    # find point closest to zero (with positive z valu) 
    vector, mid_ind = point_finder.nth_smallest_point(disk_msh, 0)
    i = 0
    while vector[-1] < 1.0:
        i += 1
        vector, mid_ind = point_finder.nth_smallest_point(disk_msh, i)

    print(vector, mid_ind)'''

    rootNode = Scene(rootNode, gravity=[0.0, -0.0, 9.8], dt=dt)
    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )

    rootNode.createObject('RequiredPlugin', pluginName='SoftRobots')
    rootNode.createObject(
        'VisualStyle',
        displayFlags=
        'showVisualModels hideBehaviorModels showCollisionModels hideBoundingCollisionModels hideForceFields showInteractionForceFields hideWireframe'
    )
    rootNode.dt = 0.001

    rootNode.createObject('FreeMotionAnimationLoop')
    rootNode.createObject('GenericConstraintSolver',
                          name='gencs',
                          maxIterations='500',
                          printLog='0',
                          tolerance='0.0000001')
    #disksolver = rootNode.add('SparseLDLSolver', name="solver")
    rootNode.createObject('BackgroundSetting', color='0 0.168627 0.211765')
    YoungModulus = 1800
    InitialValue = 0.01
    Translation = None
    Bunny = ElasticMaterialObject(name="disk",
                                  attachedTo=rootNode,
                                  volumeMeshFileName=meshpath + disk_msh,
                                  surfaceMeshFileName=meshpath +
                                  disk_inside_stl,
                                  youngModulus=YoungModulus,
                                  withConstrain=True,
                                  totalMass=1.0,
                                  translation=None)

    fixed_const_str = ""
    fixed_const_lst = point_finder.all_nodes_within_and_below_zero(
        disk_msh, 2.0)
    for i in fixed_const_lst:
        fixed_const_str = fixed_const_str + " " + str(i)

    print "hell", fixed_const_lst, fixed_const_str

    Bunny.createObject("FixedConstraint", indices=fixed_const_str)

    cavity = PneumaticCavity(name='Cavity',
                             attachedAsAChildOf=Bunny,
                             surfaceMeshFileName=meshpath + disk_inside_stl,
                             valueType='pressureGrowth',
                             initialValue=InitialValue,
                             translation=Translation)

    BunnyVisu = Bunny.createChild('visu')
    BunnyVisu.createObject('TriangleSetTopologyContainer', name='container')
    BunnyVisu.createObject('TriangleSetTopologyModifier')
    BunnyVisu.createObject('TriangleSetTopologyAlgorithms', template='Vec3d')
    BunnyVisu.createObject('TriangleSetGeometryAlgorithms', template='Vec3d')
    BunnyVisu.createObject('Tetra2TriangleTopologicalMapping',
                           name='Mapping',
                           input="@../container",
                           output="@container")
    BunnyVisu.createObject('OglModel',
                           template='ExtVec3f',
                           color='0.3 0.2 0.2 0.6',
                           translation=Translation)
    BunnyVisu.createObject('IdentityMapping')

    return Bunny