#include "ImportSDFSetup.h" #include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h" #include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h" #include "Bullet3Common/b3FileUtils.h" #include "BulletDynamics/Featherstone/btMultiBodyJointMotor.h" #include "BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h" #include "../CommonInterfaces/CommonParameterInterface.h" #include "../../Utils/b3ResourcePath.h" #include "../ImportURDFDemo/BulletUrdfImporter.h" #include "../ImportURDFDemo/URDF2Bullet.h" //#include "urdf_samples.h" #include "../CommonInterfaces/CommonMultiBodyBase.h" #include "../ImportURDFDemo/MyMultiBodyCreator.h" class ImportSDFSetup : public CommonMultiBodyBase { char m_fileName[1024]; struct ImportSDFInternalData* m_data; bool m_useMultiBody; //todo(erwincoumans) we need a name memory for each model btAlignedObjectArray m_nameMemory; public: ImportSDFSetup(struct GUIHelperInterface* helper, int option, const char* fileName); virtual ~ImportSDFSetup(); virtual void initPhysics(); virtual void stepSimulation(float deltaTime); void setFileName(const char* urdfFileName); virtual void resetCamera() { float dist = 3.5; float pitch = -136; float yaw = 28; float targetPos[3]={0.47,0,-0.64}; m_guiHelper->resetCamera(dist,pitch,yaw,targetPos[0],targetPos[1],targetPos[2]); } }; static btAlignedObjectArray gFileNameArray; #define MAX_NUM_MOTORS 1024 struct ImportSDFInternalData { ImportSDFInternalData() :m_numMotors(0) { for (int i=0;i=numFileNames) { count=0; } sprintf(m_fileName,"%s",gFileNameArray[count++].c_str()); } } ImportSDFSetup::~ImportSDFSetup() { for (int i=0;isetUpAxis(upAxis); this->createEmptyDynamicsWorld(); //m_dynamicsWorld->getSolverInfo().m_numIterations = 100; m_guiHelper->createPhysicsDebugDrawer(m_dynamicsWorld); m_dynamicsWorld->getDebugDrawer()->setDebugMode( btIDebugDraw::DBG_DrawConstraints +btIDebugDraw::DBG_DrawContactPoints +btIDebugDraw::DBG_DrawAabb );//+btIDebugDraw::DBG_DrawConstraintLimits); btVector3 gravity(0,0,0); gravity[upAxis]=-9.8; m_dynamicsWorld->setGravity(gravity); BulletURDFImporter u2b(m_guiHelper, 0); bool loadOk = u2b.loadSDF(m_fileName); if (loadOk) { //printTree(u2b,u2b.getRootLinkIndex()); //u2b.printTree(); btTransform rootTrans; rootTrans.setIdentity(); for (int m =0; m