btMultiBodyTreeCreator.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #ifndef BTMULTIBODYTREECREATOR_HPP_
  2. #define BTMULTIBODYTREECREATOR_HPP_
  3. #include <vector>
  4. #include "BulletInverseDynamics/IDConfig.hpp"
  5. #include "MultiBodyTreeCreator.hpp"
  6. #include "BulletDynamics/Featherstone/btMultiBody.h"
  7. namespace btInverseDynamics
  8. {
  9. /// MultiBodyTreeCreator implementation for converting
  10. /// a btMultiBody forward dynamics model into a MultiBodyTree inverse dynamics model
  11. class btMultiBodyTreeCreator : public MultiBodyTreeCreator
  12. {
  13. public:
  14. /// ctor
  15. btMultiBodyTreeCreator();
  16. /// dtor
  17. ~btMultiBodyTreeCreator() {}
  18. /// extract model data from a btMultiBody
  19. /// @param btmb pointer to btMultiBody to convert
  20. /// @param verbose if true, some information is printed
  21. /// @return -1 on error, 0 on success
  22. int createFromBtMultiBody(const btMultiBody *btmb, const bool verbose = false);
  23. /// \copydoc MultiBodyTreeCreator::getNumBodies
  24. int getNumBodies(int *num_bodies) const;
  25. ///\copydoc MultiBodyTreeCreator::getBody
  26. int getBody(const int body_index, int *parent_index, JointType *joint_type,
  27. vec3 *parent_r_parent_body_ref, mat33 *body_T_parent_ref,
  28. vec3 *body_axis_of_motion, idScalar *mass, vec3 *body_r_body_com,
  29. mat33 *body_I_body, int *user_int, void **user_ptr) const;
  30. private:
  31. // internal struct holding data extracted from btMultiBody
  32. struct LinkData
  33. {
  34. int parent_index;
  35. JointType joint_type;
  36. vec3 parent_r_parent_body_ref;
  37. mat33 body_T_parent_ref;
  38. vec3 body_axis_of_motion;
  39. idScalar mass;
  40. vec3 body_r_body_com;
  41. mat33 body_I_body;
  42. };
  43. idArray<LinkData>::type m_data;
  44. bool m_initialized;
  45. };
  46. } // namespace btInverseDynamics
  47. #endif // BTMULTIBODYTREECREATOR_HPP_