10 #ifndef SPATIAL_DYN_STRUCTS_ARTICULATED_BODY_H_
11 #define SPATIAL_DYN_STRUCTS_ARTICULATED_BODY_H_
21 #include "spatial_dyn/eigen/spatial_math.h"
22 #include "spatial_dyn/structs/rigid_body.h"
37 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
96 size_t dof()
const {
return dof_; };
117 const std::vector<RigidBody>&
rigid_bodies()
const {
return rigid_bodies_; };
128 const Eigen::VectorXd&
q()
const {
return q_; };
133 double q(
int i)
const;
138 virtual void set_q(Eigen::Ref<const Eigen::VectorXd>
q);
144 const Eigen::VectorXd&
dq()
const {
return dq_; };
149 double dq(
int i)
const;
154 virtual void set_dq(Eigen::Ref<const Eigen::VectorXd>
dq);
166 void set_g(
const Eigen::Vector3d&
g);
196 virtual void ClearLoad(
int idx_link = -1);
203 const std::map<size_t, SpatialInertiad>&
inertia_load()
const {
return inertia_load_; }
232 template<
typename Derived>
234 const Eigen::Vector3d& pos_in_world) {
235 T_base_to_world_ = Eigen::Translation3d(pos_in_world) * ori_in_world;
260 void set_inertia_base(
double mass,
const Eigen::Vector3d& com,
const Eigen::Vector6d& I_com_flat);
356 const Eigen::Isometry3d&
T_to_world(
int i)
const;
368 Eigen::Isometry3d
T_to_world(
int i, Eigen::Ref<const Eigen::VectorXd>
q)
const;
390 Eigen::Isometry3d
T_from_world(
int i, Eigen::Ref<const Eigen::VectorXd>
q)
const {
403 const std::vector<int>&
ancestors(
int i)
const;
414 const std::vector<int>&
subtree(
int i)
const;
423 Eigen::VectorXd
Map(
const std::function<
double(
const RigidBody& rb)>& rb_function)
const;
427 std::unique_ptr<Cache> cache_;
433 void ExpandDof(
int id,
int id_parent);
436 std::vector<RigidBody> rigid_bodies_;
442 std::map<size_t, SpatialInertiad> inertia_load_;
444 Eigen::Isometry3d T_base_to_world_ = Eigen::Isometry3d::Identity();
447 std::vector<std::vector<int>> ancestors_;
448 std::vector<std::vector<int>> subtrees_;
458 std::ostream&
operator<<(std::ostream& os,
const ArticulatedBody& ab);
Definition: articulated_body.h:33
const std::vector< int > & subtree(int i) const
Definition: articulated_body.cc:228
virtual void ReplaceLoad(const SpatialInertiad &inertia, int idx_link=-1)
Definition: articulated_body.cc:147
void set_g(const Eigen::Vector3d &g)
Definition: articulated_body.cc:130
const Eigen::VectorXd & dq() const
Definition: articulated_body.h:144
Eigen::Isometry3d T_from_parent(int i, double q) const
Definition: articulated_body.h:329
const std::vector< int > & ancestors(int i) const
Definition: articulated_body.cc:224
int AddRigidBody(const RigidBody &rb, int id_parent=-1)
Definition: articulated_body.cc:241
virtual ~ArticulatedBody()
Definition: articulated_body.cc:50
const Eigen::Isometry3d & T_base_to_world() const
Definition: articulated_body.h:224
Eigen::Isometry3d T_from_world(int i) const
Definition: articulated_body.h:378
const std::map< size_t, SpatialInertiad > & inertia_load() const
Definition: articulated_body.h:203
virtual void set_dq(Eigen::Ref< const Eigen::VectorXd > dq)
Definition: articulated_body.cc:114
size_t dof() const
Definition: articulated_body.h:96
ArticulatedBody & operator=(const ArticulatedBody &ab)
Definition: articulated_body.cc:52
ArticulatedBody()
Definition: articulated_body.cc:18
void set_T_base_to_world(const Eigen::RotationBase< Derived, 3 > &ori_in_world, const Eigen::Vector3d &pos_in_world)
Definition: articulated_body.h:233
const Eigen::Isometry3d & T_to_world(int i) const
Definition: articulated_body.cc:196
const SpatialInertiad & inertia_base() const
Definition: articulated_body.h:250
const Eigen::Isometry3d & T_to_parent(int i) const
Definition: articulated_body.cc:178
std::string name
Definition: articulated_body.h:83
void set_inertia_base(double mass, const Eigen::Vector3d &com, const Eigen::Vector6d &I_com_flat)
Definition: articulated_body.cc:163
Eigen::VectorXd Map(const std::function< double(const RigidBody &rb)> &rb_function) const
Definition: articulated_body.cc:233
const SpatialMotiond & g() const
Definition: articulated_body.h:161
virtual void set_q(Eigen::Ref< const Eigen::VectorXd > q)
Definition: articulated_body.cc:92
virtual void ClearLoad(int idx_link=-1)
Definition: articulated_body.cc:153
virtual void AddLoad(const SpatialInertiad &inertia, int idx_link=-1)
Definition: articulated_body.cc:137
std::vector< Graphics > graphics
Definition: articulated_body.h:90
Eigen::Isometry3d T_from_world(int i, Eigen::Ref< const Eigen::VectorXd > q) const
Definition: articulated_body.h:390
const std::vector< RigidBody > & rigid_bodies() const
Definition: articulated_body.h:117
const Eigen::VectorXd & q() const
Definition: articulated_body.h:128
Eigen::Isometry3d T_from_parent(int i) const
Definition: articulated_body.h:317
Definition: rigid_body.h:34
Definition: spatial_inertia.h:21
Definition: spatial_motion.h:18
std::ostream & operator<<(std::ostream &os, const ArticulatedBody &ab)
Definition: articulated_body.cc:346
Definition: discrete_dynamics.cc:21