R2D2GraspExample.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. #include "R2D2GraspExample.h"
  2. #include "../CommonInterfaces/CommonGraphicsAppInterface.h"
  3. #include "Bullet3Common/b3Quaternion.h"
  4. #include "Bullet3Common/b3AlignedObjectArray.h"
  5. #include "../CommonInterfaces/CommonRenderInterface.h"
  6. #include "../CommonInterfaces/CommonExampleInterface.h"
  7. #include "../CommonInterfaces/CommonGUIHelperInterface.h"
  8. #include "../SharedMemory/PhysicsServerSharedMemory.h"
  9. #include "../SharedMemory/PhysicsClientC_API.h"
  10. #include <string>
  11. #include "b3RobotSimAPI.h"
  12. #include "../Utils/b3Clock.h"
  13. ///quick demo showing the right-handed coordinate system and positive rotations around each axis
  14. class R2D2GraspExample : public CommonExampleInterface
  15. {
  16. CommonGraphicsApp* m_app;
  17. GUIHelperInterface* m_guiHelper;
  18. b3RobotSimAPI m_robotSim;
  19. int m_options;
  20. int m_r2d2Index;
  21. float m_x;
  22. float m_y;
  23. float m_z;
  24. b3AlignedObjectArray<int> m_movingInstances;
  25. enum
  26. {
  27. numCubesX = 20,
  28. numCubesY = 20
  29. };
  30. public:
  31. R2D2GraspExample(GUIHelperInterface* helper, int options)
  32. :m_app(helper->getAppInterface()),
  33. m_guiHelper(helper),
  34. m_options(options),
  35. m_r2d2Index(-1),
  36. m_x(0),
  37. m_y(0),
  38. m_z(0)
  39. {
  40. m_app->setUpAxis(2);
  41. }
  42. virtual ~R2D2GraspExample()
  43. {
  44. m_app->m_renderer->enableBlend(false);
  45. }
  46. virtual void physicsDebugDraw(int debugDrawMode)
  47. {
  48. }
  49. virtual void initPhysics()
  50. {
  51. bool connected = m_robotSim.connect(m_guiHelper);
  52. b3Printf("robotSim connected = %d",connected);
  53. if ((m_options & eROBOTIC_LEARN_GRASP)!=0)
  54. {
  55. {
  56. b3RobotSimLoadFileArgs args("");
  57. args.m_fileName = "r2d2.urdf";
  58. args.m_startPosition.setValue(0,0,.5);
  59. b3RobotSimLoadFileResults results;
  60. if (m_robotSim.loadFile(args, results) && results.m_uniqueObjectIds.size()==1)
  61. {
  62. int m_r2d2Index = results.m_uniqueObjectIds[0];
  63. int numJoints = m_robotSim.getNumJoints(m_r2d2Index);
  64. b3Printf("numJoints = %d",numJoints);
  65. for (int i=0;i<numJoints;i++)
  66. {
  67. b3JointInfo jointInfo;
  68. m_robotSim.getJointInfo(m_r2d2Index,i,&jointInfo);
  69. b3Printf("joint[%d].m_jointName=%s",i,jointInfo.m_jointName);
  70. }
  71. int wheelJointIndices[4]={2,3,6,7};
  72. int wheelTargetVelocities[4]={-10,-10,-10,-10};
  73. for (int i=0;i<4;i++)
  74. {
  75. b3JointMotorArgs controlArgs(CONTROL_MODE_VELOCITY);
  76. controlArgs.m_targetVelocity = wheelTargetVelocities[i];
  77. controlArgs.m_maxTorqueValue = 1e30;
  78. m_robotSim.setJointMotorControl(m_r2d2Index,wheelJointIndices[i],controlArgs);
  79. }
  80. }
  81. }
  82. {
  83. b3RobotSimLoadFileArgs args("");
  84. args.m_fileName = "kiva_shelf/model.sdf";
  85. args.m_forceOverrideFixedBase = true;
  86. args.m_fileType = B3_SDF_FILE;
  87. args.m_startOrientation = b3Quaternion(0,0,0,1);
  88. b3RobotSimLoadFileResults results;
  89. m_robotSim.loadFile(args,results);
  90. }
  91. {
  92. b3RobotSimLoadFileArgs args("");
  93. args.m_fileName = "plane.urdf";
  94. args.m_startPosition.setValue(0,0,0);
  95. args.m_forceOverrideFixedBase = true;
  96. b3RobotSimLoadFileResults results;
  97. m_robotSim.loadFile(args,results);
  98. m_robotSim.setGravity(b3MakeVector3(0,0,-10));
  99. }
  100. }
  101. if ((m_options & eROBOTIC_LEARN_COMPLIANT_CONTACT)!=0)
  102. {
  103. b3RobotSimLoadFileArgs args("");
  104. b3RobotSimLoadFileResults results;
  105. {
  106. args.m_fileName = "cube_soft.urdf";
  107. args.m_startPosition.setValue(0,0,2.5);
  108. args.m_startOrientation.setEulerZYX(0,0.2,0);
  109. m_robotSim.loadFile(args,results);
  110. }
  111. {
  112. args.m_fileName = "cube_no_friction.urdf";
  113. args.m_startPosition.setValue(0,2,2.5);
  114. args.m_startOrientation.setEulerZYX(0,0.2,0);
  115. m_robotSim.loadFile(args,results);
  116. }
  117. {
  118. b3RobotSimLoadFileArgs args("");
  119. args.m_fileName = "plane.urdf";
  120. args.m_startPosition.setValue(0,0,0);
  121. args.m_startOrientation.setEulerZYX(0,0.2,0);
  122. args.m_forceOverrideFixedBase = true;
  123. b3RobotSimLoadFileResults results;
  124. m_robotSim.loadFile(args,results);
  125. m_robotSim.setGravity(b3MakeVector3(0,0,-10));
  126. }
  127. }
  128. if ((m_options & eROBOTIC_LEARN_ROLLING_FRICTION)!=0)
  129. {
  130. b3RobotSimLoadFileArgs args("");
  131. b3RobotSimLoadFileResults results;
  132. {
  133. args.m_fileName = "sphere2_rolling_friction.urdf";
  134. args.m_startPosition.setValue(0,0,2.5);
  135. args.m_startOrientation.setEulerZYX(0,0,0);
  136. args.m_useMultiBody = true;
  137. m_robotSim.loadFile(args,results);
  138. }
  139. {
  140. args.m_fileName = "sphere2.urdf";
  141. args.m_startPosition.setValue(0,2,2.5);
  142. args.m_startOrientation.setEulerZYX(0,0,0);
  143. args.m_useMultiBody = true;
  144. m_robotSim.loadFile(args,results);
  145. }
  146. {
  147. b3RobotSimLoadFileArgs args("");
  148. args.m_fileName = "plane.urdf";
  149. args.m_startPosition.setValue(0,0,0);
  150. args.m_startOrientation.setEulerZYX(0,0.2,0);
  151. args.m_useMultiBody = true;
  152. args.m_forceOverrideFixedBase = true;
  153. b3RobotSimLoadFileResults results;
  154. m_robotSim.loadFile(args,results);
  155. m_robotSim.setGravity(b3MakeVector3(0,0,-10));
  156. }
  157. }
  158. }
  159. virtual void exitPhysics()
  160. {
  161. m_robotSim.disconnect();
  162. }
  163. virtual void stepSimulation(float deltaTime)
  164. {
  165. m_robotSim.stepSimulation();
  166. }
  167. virtual void renderScene()
  168. {
  169. m_robotSim.renderScene();
  170. //m_app->m_renderer->renderScene();
  171. }
  172. virtual void physicsDebugDraw()
  173. {
  174. }
  175. virtual bool mouseMoveCallback(float x,float y)
  176. {
  177. return false;
  178. }
  179. virtual bool mouseButtonCallback(int button, int state, float x, float y)
  180. {
  181. return false;
  182. }
  183. virtual bool keyboardCallback(int key, int state)
  184. {
  185. return false;
  186. }
  187. virtual void resetCamera()
  188. {
  189. float dist = 3;
  190. float pitch = -75;
  191. float yaw = 30;
  192. float targetPos[3]={-0.2,0.8,0.3};
  193. if (m_app->m_renderer && m_app->m_renderer->getActiveCamera())
  194. {
  195. m_app->m_renderer->getActiveCamera()->setCameraDistance(dist);
  196. m_app->m_renderer->getActiveCamera()->setCameraPitch(pitch);
  197. m_app->m_renderer->getActiveCamera()->setCameraYaw(yaw);
  198. m_app->m_renderer->getActiveCamera()->setCameraTargetPosition(targetPos[0],targetPos[1],targetPos[2]);
  199. }
  200. }
  201. };
  202. class CommonExampleInterface* R2D2GraspExampleCreateFunc(struct CommonExampleOptions& options)
  203. {
  204. return new R2D2GraspExample(options.m_guiHelper, options.m_option);
  205. }