def onEndAnimationStep(self, dt):

        # wait for simulation to settle
        if self.node.getRoot().getTime() > 1:

            constraint_force = self.joint.force[0]
            constraint_ref = [0, 3, 0, 0, 0, 0]

            net_force = self.body.force[0]
            net_ref = [0, 1, 0, 0, 0, 0]

            constraint_check = (vec(constraint_force) -
                                vec(constraint_ref)).norm()
            net_check = (vec(net_force) - vec(net_ref)).norm()

            # up to the collision detection precision
            epsilon = 1e-10
            result = (constraint_check < epsilon) and (net_check < epsilon)

            if result:
                self.node.sendScriptEvent('success', 0)
            else:
                print 'constraint check:', constraint_check
                print 'net check:', net_check
                self.node.sendScriptEvent('failure', 0)
def createScene(node):
    scene = Tools.scene( node )

    ode = node.getObject('ode')

    ode.stabilization = "no stabilization"
    # ode.warm_start = False
    # ode.debug = True


    node.gravity = '0 0 0'
    node.dt = 1e-2
    
    num = node.createObject('MinresSolver',
                            name = 'num',
                            iterations = 10,
                            precision = 0)

    style = node.getObject('style')
    style.displayFlags = 'showCollisionModels showBehaviorModels'

    script = node.createObject('PythonScriptController',
                               filename = __file__,
                               classname = 'Controller')

    mass = 1
    
    p1 = insert_point(scene, 'p1', [-1, 1, 0], mass)
    p2 = insert_point(scene, 'p2', [3, 1, 0], mass)

    out = scene.createChild('out')
    out.createObject('MechanicalObject', 
                     name = 'dofs',
                     template = 'Vec1d', 
                     position = '0 0 0')

    alpha = 0.2
    shared.alpha = alpha

    matrix = vec([1 - alpha, 0, 0, alpha, 0, 0,
                  0, 1 - alpha, 0, 0, alpha, 0,
                  0, 0, 1 - alpha, 0, 0, alpha] )
    
    value = vec([0, 0,  0])
    
    out.createObject('AffineMultiMapping',
                     template = 'Vec3d,Vec1d',
                     input = '@../p1/dofs @../p2/dofs',
                     output = '@dofs',
                     matrix = str(matrix),
                     value = str(value))
    
    out.createObject('UniformCompliance',
                     template = 'Vec1d',
                     compliance = 1e-5)

    shared.p1 = p1.getObject('dofs')
    shared.p2 = p2.getObject('dofs')
    def onEndAnimationStep(self, dt):
        if self.node.getTime() > 0.5:

            p1 = vec( shared.p1.position[0] )
            p2 = vec( shared.p2.position[0] )
        
            value = (1 - shared.alpha) * p1 + shared.alpha * p2

            self.should( value.norm() == 0 )
    def onEndAnimationStep(self, dt):
        if self.node.getTime() > 0.5:

            p1 = vec(shared.p1.position[0])
            p2 = vec(shared.p2.position[0])

            value = (1 - shared.alpha) * p1 + shared.alpha * p2

            self.should(value.norm() == 0)
def createScene(node):
    scene = Tools.scene(node)

    ode = node.getObject('ode')

    ode.stabilization = "no stabilization"
    # ode.warm_start = False
    # ode.debug = True

    node.gravity = '0 0 0'
    node.dt = 1e-2

    num = node.createObject('MinresSolver',
                            name='num',
                            iterations=10,
                            precision=0)

    style = node.getObject('style')
    style.displayFlags = 'showCollisionModels showBehaviorModels'

    script = node.createObject('PythonScriptController',
                               filename=__file__,
                               classname='Controller')

    mass = 1

    p1 = insert_point(scene, 'p1', [-1, 1, 0], mass)
    p2 = insert_point(scene, 'p2', [3, 1, 0], mass)

    out = scene.createChild('out')
    out.createObject('MechanicalObject',
                     name='dofs',
                     template='Vec1d',
                     position='0 0 0')

    alpha = 0.2
    shared.alpha = alpha

    matrix = vec([
        1 - alpha, 0, 0, alpha, 0, 0, 0, 1 - alpha, 0, 0, alpha, 0, 0, 0,
        1 - alpha, 0, 0, alpha
    ])

    value = vec([0, 0, 0])

    out.createObject('AffineMultiMapping',
                     template='Vec3d,Vec1d',
                     input='@../p1/dofs @../p2/dofs',
                     output='@dofs',
                     matrix=str(matrix),
                     value=str(value))

    out.createObject('UniformCompliance', template='Vec1d', compliance=1e-5)

    shared.p1 = p1.getObject('dofs')
    shared.p2 = p2.getObject('dofs')
    def onEndAnimationStep(self, dt):

        # wait 1 sec before testing
        if self.root.getTime() < 1:
            return

        # parameters
        m = shared.mass
        k = shared.stiff
        b = shared.damping

        f = -k * self.q
        h = m + (dt * b) + (dt * dt) * k

        rhs = m * self.v + dt * f

        # reference solution
        sol = rhs / h

        # precision threshold
        epsilon = 1e-14

        # velocity at time step end computed by solver
        v = vec(shared.dofs.velocity[0])

        # print v, sol
        error = (v - sol).norm()

        self.should(error < epsilon, 'velocity not what it should be')
    def onEndAnimationStep(self, dt):

        # wait 1 sec before testing
        if self.root.getTime() < 1:
            return 
        
        # parameters
        m = shared.mass
        k = shared.stiff
        b = shared.damping

        f = -k * self.q
        h = m + (dt * b) + (dt * dt) * k

        rhs = m * self.v + dt * f
        
        # reference solution
        sol = rhs / h

        # precision threshold
        epsilon = 1e-14

        # velocity at time step end computed by solver
        v = vec( shared.dofs.velocity[0] )
        
        self.should( (v - sol).norm() < epsilon )
def insert_point(node, name, position, mass=1.0):
    res = node.createChild(name)

    res.createObject('MechanicalObject',
                     name='dofs',
                     template='Vec3d',
                     position=vec(position))

    res.createObject('UniformMass', mass=mass)

    res.createObject('SphereModel', radius=0.1)

    return res
def insert_point(node, name, position, mass = 1.0):
    res = node.createChild(name)
    
    res.createObject('MechanicalObject', 
                     name = 'dofs',
                     template = 'Vec3d',
                     position = vec(position))

    res.createObject('UniformMass',
                     mass = mass)

    res.createObject('SphereModel', radius = 0.01)
    
    return res
Example #10
0
    def onEndAnimationStep(self, dt):

        # wait for simulation to settle
        if self.node.getRoot().getTime() > 1: 
            
            constraint_force = self.joint.force[0]
            constraint_ref = [0, 3, 0, 0, 0, 0]
        
            net_force  = self.body.force[0]
            net_ref = [0, 1, 0, 0, 0, 0]
        
            constraint_check = (vec(constraint_force) - vec(constraint_ref)).norm()
            net_check = (vec(net_force) - vec(net_ref)).norm()
    
            # up to the collision detection precision
            epsilon = 1e-10
            result = (constraint_check < epsilon) and (net_check < epsilon)
            
            if result:
                self.node.sendScriptEvent('success', 0)
            else:
                print 'constraint check:', constraint_check
                print 'net check:', net_check
                self.node.sendScriptEvent('failure', 0)
 def onBeginAnimationStep(self, dt):
     self.v = vec(shared.dofs.velocity[0])
     self.q = vec(shared.dofs.position[0])
 def onBeginAnimationStep(self, dt):
     self.v = vec(shared.dofs.velocity[0])
     self.q = vec(shared.dofs.position[0])