spatial-dyn
rigid_body.h
1 
10 #ifndef SPATIAL_DYN_STRUCTS_RIGID_BODY_H_
11 #define SPATIAL_DYN_STRUCTS_RIGID_BODY_H_
12 
13 #include <ostream> // std::ostream
14 #include <string> // std::string
15 #include <vector> // std::vector
16 
17 #include "spatial_dyn/eigen/spatial_math.h"
18 #include "spatial_dyn/structs/graphics.h"
19 #include "spatial_dyn/structs/joint.h"
20 
21 namespace spatial_dyn {
22 
23 class ArticulatedBody;
24 
34 class RigidBody {
35 
36  public:
38  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
40 
44  RigidBody() = default;
45  virtual ~RigidBody() = default;
46 
53  RigidBody(const std::string& name) : name(name) {}
54 
60  mutable std::string name;
61 
67  mutable std::vector<Graphics> graphics;
68 
73  int id() const { return id_; }
74  void set_id(int id) { id_ = id; }
75 
80  int id_parent() const { return id_parent_; }
81  void set_id_parent(int id_parent) { id_parent_ = id_parent; }
82 
88  const Eigen::Isometry3d& T_to_parent() const { return T_to_parent_; }
89 
97  template<typename Derived>
98  void set_T_to_parent(const Eigen::RotationBase<Derived,3>& ori_in_parent,
99  const Eigen::Vector3d& pos_in_parent) {
100  T_to_parent_ = Eigen::Translation3d(pos_in_parent) * ori_in_parent;
101  }
102 
109  void set_T_to_parent(const Eigen::Isometry3d& T_to_parent) { T_to_parent_ = T_to_parent; }
110 
116  const SpatialInertiad& inertia() const { return inertia_; }
117 
126  void set_inertia(double mass, const Eigen::Vector3d& com, const Eigen::Vector6d& I_com_flat);
127 
133  void set_inertia(const SpatialInertiad& inertia);
134 
139  const Joint& joint() const { return joint_; }
140 
146  void set_joint(const Joint& joint) { joint_ = joint; }
147 
148  protected:
149 
151  int id_ = -1;
152  int id_parent_ = -1;
153  Eigen::Isometry3d T_to_parent_ = Eigen::Isometry3d::Identity();
154  SpatialInertiad inertia_ = SpatialInertiad(1, Eigen::Vector3d::Zero(), Eigen::Vector6d::Zero());
155  Joint joint_;
156 
157  friend class ArticulatedBody;
159 
160 };
161 
167 std::ostream& operator<<(std::ostream& os, const RigidBody& rb);
168 
169 } // namespace spatial_dyn
170 
171 #endif // SPATIAL_DYN_STRUCTS_RIGID_BODY_H_
Definition: articulated_body.h:33
Definition: joint.h:28
Definition: rigid_body.h:34
void set_joint(const Joint &joint)
Definition: rigid_body.h:146
void set_T_to_parent(const Eigen::RotationBase< Derived, 3 > &ori_in_parent, const Eigen::Vector3d &pos_in_parent)
Definition: rigid_body.h:98
RigidBody(const std::string &name)
Definition: rigid_body.h:53
std::string name
Definition: rigid_body.h:60
int id_parent() const
Definition: rigid_body.h:80
const Joint & joint() const
Definition: rigid_body.h:139
int id() const
Definition: rigid_body.h:73
std::vector< Graphics > graphics
Definition: rigid_body.h:67
const SpatialInertiad & inertia() const
Definition: rigid_body.h:116
void set_T_to_parent(const Eigen::Isometry3d &T_to_parent)
Definition: rigid_body.h:109
const Eigen::Isometry3d & T_to_parent() const
Definition: rigid_body.h:88
void set_inertia(double mass, const Eigen::Vector3d &com, const Eigen::Vector6d &I_com_flat)
Definition: rigid_body.cc:16
Definition: spatial_inertia.h:21
std::ostream & operator<<(std::ostream &os, const ArticulatedBody &ab)
Definition: articulated_body.cc:346
Definition: discrete_dynamics.cc:21