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
def onBeginAnimationStep(self, dt): self.v = vec(shared.dofs.velocity[0]) self.q = vec(shared.dofs.position[0])