btMultiBodyTreeCreator.hpp 1.7 KB

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