# Physics Simulation Forum

 All times are UTC

 Page 1 of 1 [ 1 post ]
 Print view Previous topic | Next topic
Author Message
 Post subject: Simple pivot jointPosted: Sat Jun 23, 2012 2:59 am

Joined: Sat Jun 23, 2012 2:33 am
Posts: 1
Ok, I've read the pdf manual, looked at the forklift and vehicle demos (both use raycast and doesn't seem right fit for me here), and tried every type of hinge I can come up with to get this working. None of my attempts work.

I'm trying to simulate a tank. I've got a basic box, then 6 cylinders as wheels, three for each side. I only want the wheels to rotate around the Z axis and but be fixed to the center box. To turn the object, all the wheels on one side will rotate +Z and the other side will use -Z.

Problem 1) Some versions appear to lock the center box from any rotation, others the center box works but the wheels don't follow center box rotation
Problem 2) For some reason I can only turn the wheels manually calling setAngularVelocity(), insead of applyTorque().

Here is an example of the shape I'm trying.

And here is the code I've got, please tell me where I'm going wrong. Either my entire object doesn't rotate on Y axis, or the center box does but the wheels stay locked to Y axis.

Bullet version 2.80-rev2531

Code:
btCollisionShape *pShape = 0;
btMotionState* pState = 0;
btRigidBody*   pBody = 0;
btScalar mass = 200;

pShape = new btBoxShape(btVector3(50,10,32));

btTransform localTrans;
localTrans.setIdentity();
localTrans.setOrigin( cvt(getPosition()) );

pState = new btDefaultMotionState(localTrans);

btVector3 inertia (0,0,0);
// Important, do not remove this or object won't rotate!
pShape->calculateLocalInertia(mass, inertia);

//Create the rigid body
pBody = new btRigidBody(mass, pState, pShape, inertia);

// Don't deativate when movement done
pBody->forceActivationState(DISABLE_DEACTIVATION);

// add the body to the physics world
mpBodies[TANK_HULL] = pBody;

//////// Wheels /////////////
btScalar mass = 50;
btVector3 interia(0,0,0);
btVector3 startPos = cvt(getPosition() + Vector3(0,10,0));
btVector3 endPos (0,0,0);
btRigidBody* pBody = 0;

int x,z;
int xOffset = 36;  // spacing between wheels

// create 6 wheels
for (int i = 0; i < 6; i++)
{
if (i < 3)
z = -38;
else
z = 38;

if (i < 3)
x = i * xOffset;
else
x = (i - 3) * xOffset;
endPos = startPos + btVector3(x - xOffset, -20, z);
localTrans.setIdentity();
localTrans.setOrigin(endPos);
btCollisionShape* pShape = new btCylinderShapeZ(btVector3(12, 5, 5));
mpShapes[TANK_WHEEL_1 + i] = pShape;

pShape->calculateLocalInertia(mass, interia);
btDefaultMotionState* state = new btDefaultMotionState(localTrans);

pBody = new btRigidBody(mass, state, pShape);
mpBodies[TANK_WHEEL_1 + i] = pBody;

pBody->forceActivationState(DISABLE_DEACTIVATION);

/*
/////////// another attempt /////////////////////
btGeneric6DofSpringConstraint* pJoint = 0;

// this joint causes an explosion
pJoint = new btGeneric6DofSpringConstraint(*mpBodies[TANK_HULL],
*pBody,
hullTrans,
localTrans,
false);

////////////// another attempt ///////////////////
btHingeConstraint* pJoint = 0;

btVector3 axis1 (0,1,0); // Y
btVector3 axis2;

if (i < 3)
axis2 = btVector3(0,0,1); // Z
else
axis2 = btVector3(0,0,-1); // Z

pJoint = new btHingeConstraint(*mpBodies[TANK_HULL],
*pBody,
endPos,          // pivotInA
endPos + axis2,  // pivotInB
axis1,           // axisInA
axis2,           // axisInB
true);
*/ //////////// best match so far /////////////////////
btHinge2Constraint* pJoint = 0;

btVector3 axis1 (0,1,0); // Y
btVector3 axis2;

if (i < 3)
axis2 = btVector3(0,0,1); // Z
else
axis2 = btVector3(0,0,-1); // Z

pJoint = new btHinge2Constraint(*mpBodies[TANK_HULL],
*pBody,
endPos,
axis1,
axis2);

pJoint->setAngularLowerLimit(btVector3(1,-1, 1));
pJoint->setAngularUpperLimit(btVector3(0, 1, 0));
pJoint->setDbgDrawSize(btScalar(25.0f));

mpJoints[TANK_WHEEL_1 + i] = pJoint;

}

Days of trying different things is getting me nowhere. Hopefully someone can help.

Top

 Display posts from previous: All posts1 day7 days2 weeks1 month3 months6 months1 year Sort by AuthorPost timeSubject AscendingDescending
 Page 1 of 1 [ 1 post ]

 All times are UTC

#### Who is online

Users browsing this forum: Bing [Bot] and 5 guests

 You cannot post new topics in this forumYou cannot reply to topics in this forumYou cannot edit your posts in this forumYou cannot delete your posts in this forumYou cannot post attachments in this forum

Search for:
 Jump to:  Select a forum ------------------ BULLET PHYSICS LIBRARY USERS    General Bullet Physics Support and Feedback    Release Announcements    Applications, Games, Demos or Movies using Bullet PHYSICS AUTHORING TOOLS, SERIALIZATION AND STANDARDS    Physics authoring tools, serialization, standards and related topics RESEARCH AND DEVELOPMENT IN COLLISION DETECTION & PHYSICS. Don't post Bullet support questions here!    Research and development discussion about Collision Detection and Physics Simulation    Links, Papers, Libraries, Demos, Movies, Comparisons       Non-technical forum and license/patent discussion    Career Opportunities