39 CPhysXMultiBodyObjectModel(c_engine, c_entity, 3),
40 m_fCurrentWheelVelocity(c_entity.GetWheeledEntity().GetWheelVelocities()),
43 EPUCK_INTERWHEEL_DISTANCE,
45 EPUCK_WHEEL_THICKNESS,
47 physx::PxVec3(EPUCK_CHASSIS_LENGTH,
49 EPUCK_CHASSIS_HEIGHT),
50 EPUCK_CHASSIS_ELEVATION,
53 physx::PxTransform cBodyTrans;
54 CVector3ToPxVec3(GetEmbodiedEntity().GetOriginAnchor().Position, cBodyTrans.p);
55 CQuaternionToPxQuat(GetEmbodiedEntity().GetOriginAnchor().Orientation, cBodyTrans.q);
60 physx::PxConvexMeshGeometry* pcBoardGeometry =
61 CreateCylinderGeometry(c_engine,
65 physx::PxShape* pcBoardShape =
66 m_cDiffDrive.GetMainBodyActor().createShape(*pcBoardGeometry,
67 GetPhysXEngine().GetDefaultMaterial());
68 pcBoardShape->userData =
this;
70 pcBoardShape->setLocalPose(
71 physx::PxTransform(0.0f,
73 EPUCK_CHASSIS_ELEVATION +
74 EPUCK_CHASSIS_HEIGHT +
75 EPUCK_BOARD_HEIGHT * 0.5f));
77 m_cDiffDrive.SetGlobalPose(cBodyTrans);
79 CalculateBoundingBox();
81 delete pcBoardGeometry;
83 RegisterAnchorMethod(GetEmbodiedEntity().GetOriginAnchor(),
119 physx::PxTransform cBodyTrans =
120 m_cDiffDrive.GetMainBodyActor().getGlobalPose() *
121 m_cDiffDrive.GetMainBodyOffset().getInverse();
123 PxVec3ToCVector3(cBodyTrans.p, s_anchor.
Position);
125 PxQuatToCQuaternion(cBodyTrans.q, s_anchor.
Orientation);
126 physx::PxReal fLeftAngle;
127 physx::PxReal fRightAngle;
128 m_cDiffDrive.GetCurrentWheelAngles(fLeftAngle, fRightAngle);
129 DEBUG(
"Current wheel rotation: %f, %f\n", fLeftAngle, fRightAngle);
130 physx::PxReal fLeftVelocity;
131 physx::PxReal fRightVelocity;
132 m_cDiffDrive.GetCurrentWheelLinearVelocity(fLeftVelocity, fRightVelocity);
133 DEBUG(
"Current wheel speed: %f, %f\n", fLeftVelocity, fRightVelocity);
134 physx::PxReal fLeftTargetVelocity;
135 physx::PxReal fRightTargetVelocity;
136 m_cDiffDrive.GetTargetWheelLinearVelocity(fLeftTargetVelocity, fRightTargetVelocity);
137 DEBUG(
"Target wheel speed: %f, %f\n\n", fLeftTargetVelocity, fRightTargetVelocity);