6 #ifndef __pinocchio_multibody_model_hpp__
7 #define __pinocchio_multibody_model_hpp__
9 #include "pinocchio/spatial/fwd.hpp"
10 #include "pinocchio/spatial/se3.hpp"
11 #include "pinocchio/spatial/force.hpp"
12 #include "pinocchio/spatial/motion.hpp"
13 #include "pinocchio/spatial/inertia.hpp"
15 #include "pinocchio/multibody/fwd.hpp"
16 #include "pinocchio/multibody/frame.hpp"
17 #include "pinocchio/multibody/joint/joint-generic.hpp"
19 #include "pinocchio/container/aligned-vector.hpp"
21 #include "pinocchio/serialization/serializable.hpp"
32 template<
typename,
int>
class JointCollectionTpl>
38 template<
typename _Scalar,
int _Options,
template<
typename,
int>
class JointCollectionTpl>
41 typedef _Scalar Scalar;
44 template<
typename _Scalar,
int _Options,
template<
typename,
int>
class JointCollectionTpl>
47 ,
NumericalBase<ModelTpl<_Scalar, _Options, JointCollectionTpl>>
49 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
51 typedef _Scalar Scalar;
57 typedef JointCollectionTpl<Scalar, Options> JointCollection;
66 typedef pinocchio::Index Index;
67 typedef pinocchio::JointIndex JointIndex;
68 typedef pinocchio::GeomIndex GeomIndex;
69 typedef pinocchio::FrameIndex FrameIndex;
70 typedef std::vector<Index> IndexVector;
75 typedef PINOCCHIO_ALIGNED_STD_VECTOR(
JointModel) JointModelVector;
76 typedef PINOCCHIO_ALIGNED_STD_VECTOR(
JointData) JointDataVector;
78 typedef PINOCCHIO_ALIGNED_STD_VECTOR(
Frame) FrameVector;
80 typedef Eigen::Matrix<Scalar, Eigen::Dynamic, 1, Options> VectorXs;
81 typedef Eigen::Matrix<Scalar, 3, 1, Options> Vector3;
83 typedef PINOCCHIO_ALIGNED_STD_VECTOR(
Inertia) InertiaVector;
84 typedef PINOCCHIO_ALIGNED_STD_VECTOR(
SE3) SE3Vector;
220 names[0] =
"universe";
232 template<
typename S2,
int O2>
235 *
this = other.template cast<Scalar>();
239 template<
typename NewScalar>
254 return !(*
this == other);
277 const JointIndex parent,
279 const SE3 & joint_placement,
280 const std::string & joint_name);
292 const JointIndex parent,
294 const SE3 & joint_placement,
295 const std::string & joint_name,
296 const VectorXs & max_effort,
297 const VectorXs & max_velocity,
298 const VectorXs & min_config,
299 const VectorXs & max_config);
309 const JointIndex parent,
311 const SE3 & joint_placement,
312 const std::string & joint_name,
313 const VectorXs & max_effort,
314 const VectorXs & max_velocity,
315 const VectorXs & min_config,
316 const VectorXs & max_config,
329 FrameIndex
addJointFrame(
const JointIndex & joint_index,
int previous_frame_index = -1);
342 const JointIndex joint_index,
344 const SE3 & body_placement = SE3::Identity());
359 const std::string & body_name,
360 const JointIndex & parentJoint,
361 const SE3 & body_placement = SE3::Identity(),
362 int parentFrame = -1);
421 const std::string &
name,
433 const std::string &
name,
463 return checker.checkModel(*
this);
506 #include "pinocchio/multibody/model.hxx"
508 #if PINOCCHIO_ENABLE_TEMPLATE_INSTANTIATION
509 #include "pinocchio/multibody/model.txx"
Main pinocchio namespace.
FrameType
Enum on the possible types of frames.
@ BODY
body frame: attached to the collision, inertial or visual properties of a link
@ SENSOR
sensor frame: defined in a sensor element
@ OP_FRAME
operational frame: user-defined frames that are defined at runtime
@ JOINT
joint frame: attached to the child body of a joint (a.k.a. child frame)
@ FIXED_JOINT
fixed joint frame: joint frame but for a fixed joint
CRTP class describing the API of the checkers.
Type of the cast of a class C templated by Scalar and Options, to a new NewScalar type....
A Plucker coordinate frame attached to a parent joint inside a kinematic tree.
JointIndex addJoint(const JointIndex parent, const JointModel &joint_model, const SE3 &joint_placement, const std::string &joint_name, const VectorXs &max_effort, const VectorXs &max_velocity, const VectorXs &min_config, const VectorXs &max_config, const VectorXs &friction, const VectorXs &damping)
TangentVectorType velocityLimit
Vector of maximal joint velocities.
TangentVectorType friction
Vector of joint friction parameters.
std::vector< int > idx_vs
Starting index of the *i*th joint in the tangent configuration space.
FrameIndex addJointFrame(const JointIndex &joint_index, int previous_frame_index=-1)
Add a joint to the frame tree.
std::vector< IndexVector > subtrees
Vector of joint subtrees. subtree[j] corresponds to the subtree supported by the joint j....
std::vector< IndexVector > supports
Vector of joint supports. supports[j] corresponds to the vector of indices of the joints located on t...
std::vector< bool > hasConfigurationLimit()
Check if joints have configuration limits.
Motion gravity
Spatial gravity of the model.
FrameIndex getBodyId(const std::string &name) const
Return the index of a body given by its name.
bool operator==(const ModelTpl &other) const
Equality comparison operator.
ConfigVectorType upperPositionLimit
Upper joint configuration limit.
TangentVectorType rotorGearRatio
Vector of rotor gear ratio parameters.
ModelTpl()
Default constructor. Builds an empty model with no joints.
bool operator!=(const ModelTpl &other) const
InertiaVector inertias
Vector of spatial inertias supported by each joint.
FrameIndex addBodyFrame(const std::string &body_name, const JointIndex &parentJoint, const SE3 &body_placement=SE3::Identity(), int parentFrame=-1)
Add a body to the frame tree.
std::vector< int > idx_qs
Vector of starting index of the *i*th joint in the configuration space.
SE3Vector jointPlacements
Vector of joint placements: placement of a joint i wrt its parent joint frame.
int nframes
Number of operational frames.
VectorXs TangentVectorType
Dense vectorized version of a joint tangent vector (e.g. velocity, acceleration, etc)....
JointModelVector joints
Vector of joint models.
JointIndex addJoint(const JointIndex parent, const JointModel &joint_model, const SE3 &joint_placement, const std::string &joint_name)
Add a joint to the kinematic tree with infinite bounds.
bool check() const
Run check(fusion::list) with DEFAULT_CHECKERS as argument.
std::vector< int > nqs
Vector of dimension of the joint configuration subspace.
std::vector< IndexVector > children
Vector of children index. Chidren of the i*th joint, denoted *mu(i) corresponds to the set (i==parent...
ModelTpl(const ModelTpl< S2, O2 > &other)
Copy constructor by casting.
TangentVectorType rotorInertia
Vector of rotor inertia parameters.
TangentVectorType effortLimit
Vector of maximal joint torques.
int nq
Dimension of the configuration vector representation.
std::vector< JointIndex > parents
Vector of parent joint indexes. The parent of joint i, denoted li, corresponds to li==parents[i].
int nbodies
Number of bodies.
CastType< NewScalar, ModelTpl >::type cast() const
std::string name
Model name.
std::vector< std::string > names
Name of the joints.
JointIndex getJointId(const std::string &name) const
Return the index of a joint given by its name.
int nv
Dimension of the velocity vector space.
void appendBodyToJoint(const JointIndex joint_index, const Inertia &Y, const SE3 &body_placement=SE3::Identity())
Append a body to a given joint of the kinematic tree.
bool check(const Data &data) const
Run checkData on data and current model.
ConfigVectorMap referenceConfigurations
Map of reference configurations, indexed by user given names.
FrameVector frames
Vector of operational frames registered on the model.
void addJointIndexToParentSubtrees(const JointIndex joint_id)
Add the joint_id to its parent subtrees.
bool existBodyName(const std::string &name) const
Check if a body given by its name exists.
FrameIndex getFrameId(const std::string &name, const FrameType &type=(FrameType)(JOINT|FIXED_JOINT|BODY|OP_FRAME|SENSOR)) const
Returns the index of a frame given by its name.
std::vector< int > nvs
Dimension of the *i*th joint tangent subspace.
VectorXs armature
Vector of armature values expressed at the joint level This vector may contain the contribution of ro...
bool check(const AlgorithmCheckerBase< D > &checker=AlgorithmCheckerBase< D >()) const
Check the validity of the attributes of Model with respect to the specification of some algorithms.
static const Vector3 gravity981
Default 3D gravity vector (=(0,0,-9.81)).
JointIndex addJoint(const JointIndex parent, const JointModel &joint_model, const SE3 &joint_placement, const std::string &joint_name, const VectorXs &max_effort, const VectorXs &max_velocity, const VectorXs &min_config, const VectorXs &max_config)
int njoints
Number of joints.
VectorXs ConfigVectorType
Dense vectorized version of a joint configuration vector.
std::map< std::string, ConfigVectorType > ConfigVectorMap
Map between a string (key) and a configuration vector.
bool existFrame(const std::string &name, const FrameType &type=(FrameType)(JOINT|FIXED_JOINT|BODY|OP_FRAME|SENSOR)) const
Checks if a frame given by its name exists.
bool existJointName(const std::string &name) const
Check if a joint given by its name exists.
TangentVectorType damping
Vector of joint damping parameters.
ConfigVectorType lowerPositionLimit
Lower joint configuration limit.
FrameIndex addFrame(const Frame &frame, const bool append_inertia=true)
Adds a frame to the kinematic tree. The inertia stored within the frame will be happened to the inert...
std::vector< bool > hasConfigurationLimitInTangent()
Check if joints have configuration limits.
Common traits structure to fully define base classes for CRTP.