load a urdf in the lua script test

This commit is contained in:
erwin
2015-05-13 21:54:00 -07:00
parent 91252db59a
commit e196ed1edb
2 changed files with 85 additions and 3 deletions

20
data/init_urdf.lua Normal file
View File

@@ -0,0 +1,20 @@
-- Very basic Lua script to create some Bullet objects.
-- See also Demos3/AllBullet2Demos using Demos3/bullet2/LuaDemo
--right now we cannot interleave adding instances of different shapes, they have to be added in-order
--hence the two loops. this will be fixed soon
world = createDefaultDynamicsWorld()
cubeshape = createCubeShape(world, 30,30,1)
pos={0,0,-3.0}
orn = {0,0,0,1}
mass = 0
body = createRigidBody(world,cubeshape,mass,pos,orn)
pos={0,10,0}
orn = {0,0,0,1}
mb = loadUrdf(world,"r2d2.urdf", pos, orn);
pos={2,2,0}
orn = {0,0,0,1}
mb = loadUrdf(world,"r2d2.urdf", pos, orn);

View File

@@ -2,7 +2,9 @@
#include "../CommonInterfaces/CommonMultiBodyBase.h" #include "../CommonInterfaces/CommonMultiBodyBase.h"
#include "../Importers/ImportURDFDemo/MyURDFImporter.h"
#include "../Importers/ImportURDFDemo/MyMultiBodyCreator.h"
#include "../Importers/ImportURDFDemo/URDF2Bullet.h"
struct LuaPhysicsSetup : public CommonMultiBodyBase struct LuaPhysicsSetup : public CommonMultiBodyBase
{ {
@@ -37,7 +39,7 @@ extern "C" {
} }
const char* sLuaFileName = "init_physics.lua"; const char* sLuaFileName = "init_urdf.lua";//init_physics.lua";
static const float scaling=0.35f; static const float scaling=0.35f;
static LuaPhysicsSetup* sLuaDemo = 0; static LuaPhysicsSetup* sLuaDemo = 0;
@@ -67,6 +69,8 @@ LuaPhysicsSetup::~LuaPhysicsSetup()
static int gCreateDefaultDynamicsWorld(lua_State *L) static int gCreateDefaultDynamicsWorld(lua_State *L)
{ {
sLuaDemo->createEmptyDynamicsWorld(); sLuaDemo->createEmptyDynamicsWorld();
sLuaDemo->m_dynamicsWorld->setGravity(btVector3(0,0,-10));
sLuaDemo->m_guiHelper->createPhysicsDebugDrawer(sLuaDemo->m_dynamicsWorld);
lua_pushlightuserdata (L, sLuaDemo->m_dynamicsWorld); lua_pushlightuserdata (L, sLuaDemo->m_dynamicsWorld);
return 1; return 1;
} }
@@ -181,8 +185,65 @@ btQuaternion getLuaQuaternionArg(lua_State* L, int index)
return orn; return orn;
} }
static int gLoadMultiBodyFromUrdf(lua_State *L)
{
int argc = lua_gettop(L);
if (argc==4)
{
if (!lua_isuserdata(L,1))
{
std::cerr << "error: first argument to b3CreateRigidbody should be world";
return 0;
}
luaL_checktype(L,3, LUA_TTABLE);
btVector3 pos = getLuaVectorArg(L,3);
btQuaternion orn = getLuaQuaternionArg(L,4);
btDiscreteDynamicsWorld* world = (btDiscreteDynamicsWorld*) lua_touserdata(L,1);
if (world != sLuaDemo->m_dynamicsWorld)
{
std::cerr << "error: first argument expected to be a world";
return 0;
}
const char* fileName = lua_tostring(L,2);
MyURDFImporter u2b(sLuaDemo->m_guiHelper);
bool loadOk = u2b.loadURDF(fileName);
if (loadOk)
{
b3Printf("loaded %s OK!", fileName);
btTransform tr;
tr.setIdentity();
tr.setOrigin(pos);
tr.setRotation(orn);
int rootLinkIndex = u2b.getRootLinkIndex();
// printf("urdf root link index = %d\n",rootLinkIndex);
MyMultiBodyCreator creation(sLuaDemo->m_guiHelper);
bool m_useMultiBody = true;
ConvertURDF2Bullet(u2b,creation, tr,sLuaDemo->m_dynamicsWorld,m_useMultiBody,u2b.getPathPrefix());
btMultiBody* mb = creation.getBulletMultiBody();
if (mb)
{
lua_pushlightuserdata (L, mb);
return 1;
}
} else
{
b3Printf("can't find %s",fileName);
}
}
return 0;
}
static int gCreateRigidBody (lua_State *L) static int gCreateRigidBody (lua_State *L)
{ {
@@ -317,6 +378,7 @@ static void report_errors(lua_State *L, int status)
void LuaPhysicsSetup::initPhysics() void LuaPhysicsSetup::initPhysics()
{ {
m_guiHelper->setUpAxis(2);
const char* prefix[]={"./","./data/","../data/","../../data/","../../../data/","../../../../data/"}; const char* prefix[]={"./","./data/","../data/","../../data/","../../../data/","../../../../data/"};
int numPrefixes = sizeof(prefix)/sizeof(const char*); int numPrefixes = sizeof(prefix)/sizeof(const char*);
char relativeFileName[1024]; char relativeFileName[1024];
@@ -347,7 +409,7 @@ void LuaPhysicsSetup::initPhysics()
lua_register(L, "deleteDynamicsWorld", gDeleteDynamicsWorld); lua_register(L, "deleteDynamicsWorld", gDeleteDynamicsWorld);
lua_register(L, "createCubeShape", gCreateCubeShape); lua_register(L, "createCubeShape", gCreateCubeShape);
lua_register(L, "createSphereShape", gCreateSphereShape); lua_register(L, "createSphereShape", gCreateSphereShape);
lua_register(L, "loadUrdf",gLoadMultiBodyFromUrdf);
lua_register(L, "createRigidBody", gCreateRigidBody); lua_register(L, "createRigidBody", gCreateRigidBody);
lua_register(L, "setBodyPosition", gSetBodyPosition); lua_register(L, "setBodyPosition", gSetBodyPosition);
lua_register(L, "setBodyOrientation", gSetBodyOrientation); lua_register(L, "setBodyOrientation", gSetBodyOrientation);