protected void setPinTransform3D(RigidBodyTransform t1, Vector3d u_i, double rotAng) { t1.setIdentity(); axisAngle.set(u_i, rotAng); t1.setRotation(axisAngle); // t1.setRotation(); }
@ContinuousIntegrationTest(estimatedDuration = 0.0) @Test(timeout = 30000) public void testSingleRigidBodyRotation() { Random random = new Random(1766L); RigidBody elevator = new RigidBody("elevator", world); Vector3d jointAxis = RandomTools.generateRandomVector(random); jointAxis.normalize(); RigidBodyTransform transformToParent = new RigidBodyTransform(); transformToParent.setIdentity(); RevoluteJoint joint = ScrewTools.addRevoluteJoint("joint", elevator, transformToParent, jointAxis); RigidBody body = ScrewTools.addRigidBody( "body", joint, RandomTools.generateRandomDiagonalMatrix3d(random), random.nextDouble(), new Vector3d()); joint.setQ(random.nextDouble()); joint.setQd(random.nextDouble()); Momentum momentum = computeMomentum(elevator, world); momentum.changeFrame(world); FrameVector linearMomentum = new FrameVector(momentum.getExpressedInFrame(), momentum.getLinearPartCopy()); FrameVector angularMomentum = new FrameVector(momentum.getExpressedInFrame(), momentum.getAngularPartCopy()); FrameVector linearMomentumCheck = new FrameVector(world); Matrix3d inertia = body.getInertia().getMassMomentOfInertiaPartCopy(); Vector3d angularMomentumCheckVector = new Vector3d(jointAxis); angularMomentumCheckVector.scale(joint.getQd()); inertia.transform(angularMomentumCheckVector); FrameVector angularMomentumCheck = new FrameVector(body.getInertia().getExpressedInFrame(), angularMomentumCheckVector); angularMomentumCheck.changeFrame(world); double epsilon = 1e-9; JUnitTools.assertTuple3dEquals( linearMomentumCheck.getVector(), linearMomentum.getVector(), epsilon); JUnitTools.assertTuple3dEquals( angularMomentumCheck.getVector(), angularMomentum.getVector(), epsilon); assertTrue(angularMomentum.length() > epsilon); }