6 #ifndef CNOID_BODY_BODY_H_INCLUDED
7 #define CNOID_BODY_BODY_H_INCLUDED
11 #include <cnoid/YamlNodes>
12 #include <cnoid/Referenced>
13 #include <cnoid/EigenTypes>
14 #include <boost/shared_ptr.hpp>
23 typedef boost::intrusive_ptr<Body>
BodyPtr;
49 static void addCustomizerDirectory(
const std::string& path);
56 virtual BodyPtr duplicate()
const;
58 inline const std::string&
name() {
61 inline void setName(
const std::string& name) {
71 void setRootLink(
Link* link);
76 void updateLinkTree();
87 return jointIdToLinkArray.size();
97 return jointIdToLinkArray[id];
103 inline const std::vector<Link*>&
joints()
const {
104 return jointIdToLinkArray;
112 return linkTraverse_.numLinks();
121 return linkTraverse_.link(index);
125 return linkTraverse_;
132 return linkTraverse_;
138 Link* link(
const std::string& name)
const;
148 Sensor* createSensor(
Link* link,
int sensorType,
int id,
const std::string& name);
150 void addSensor(
Sensor* sensor,
int sensorType,
int id );
153 return allSensors[sensorType][sensorId];
157 return allSensors[sensorType].size();
161 return allSensors.size();
164 void clearSensorValues();
166 template <
class TSensor>
inline TSensor*
sensor(
int id)
const {
167 return static_cast<TSensor*
>(allSensors[TSensor::TYPE][id]);
170 template <
class TSensor>
inline TSensor*
sensor(
const std::string& name)
const {
172 NameToSensorMap::const_iterator p = nameToSensorMap.find(name);
173 if(p != nameToSensorMap.end()){
174 sensor =
dynamic_cast<TSensor*
>(p->second);
183 return isStaticModel_;
186 double calcTotalMass();
198 void initializeConfiguration();
199 void calcForwardKinematics(
bool calcVelocity =
false,
bool calcAcceleration =
false);
200 void clearExternalForces();
202 void setVirtualJointForces();
211 void updateLinkColdetModelPositions();
213 void putInformation(std::ostream &out);
215 bool installCustomizer();
245 std::string modelName_;
247 typedef std::vector<Link*> LinkArray;
248 LinkArray jointIdToLinkArray;
252 typedef std::map<std::string, Link*> NameToLinkMap;
253 NameToLinkMap nameToLinkMap;
256 typedef std::vector<Sensor*> SensorArray;
257 std::vector<SensorArray> allSensors;
259 typedef std::map<std::string, Sensor*> NameToSensorMap;
260 NameToSensorMap nameToSensorMap;
278 Link* createEmptyJoint(
int jointId);
279 void setVirtualJointForcesSub();
281 friend class CustomizedJointPath;
Link * rootLink() const
Definition: Body.h:143
The header file of the LinkTraverse class.
const std::vector< Link * > & joints() const
Definition: Body.h:103
boost::intrusive_ptr< Body > BodyPtr
Definition: Body.h:22
boost::shared_ptr< JointPath > JointPathPtr
Definition: Body.h:25
boost::shared_ptr< InverseKinematics > InverseKinematicsPtr
Definition: Body.h:28
Definition: LinkGroup.h:23
YamlMapping * info()
Definition: Body.h:228
Definition: InverseKinematics.h:13
int numSensorTypes() const
Definition: Body.h:160
Link * link(int index) const
Definition: Body.h:120
const LinkTraverse & linkTraverse() const
Definition: Body.h:131
LinkGroup * linkGroup()
Definition: Body.h:231
bool isStaticModel()
Definition: Body.h:182
int numJoints() const
Definition: Body.h:86
Definition: Referenced.h:21
const LinkTraverse & links() const
Definition: Body.h:124
Body * body
Definition: Body.h:37
int numLinks() const
Definition: Body.h:111
boost::intrusive_ptr< LinkGroup > LinkGroupPtr
Definition: LinkGroup.h:20
int numSensors(int sensorType) const
Definition: Body.h:156
TSensor * sensor(int id) const
Definition: Body.h:166
void * BodyCustomizerHandle
Definition: Body.h:43
Definition: JointPath.h:18
void setName(const std::string &name)
Definition: Body.h:61
const Vector3 & lastCM()
Definition: Body.h:193
Definition: BodyCustomizerInterface.h:53
LinkConnectionArray linkConnections
Definition: Body.h:226
int numConstraintAxes
Definition: Body.h:221
Definition: LinkTraverse.h:18
YamlNode & get(const std::string &key) const
Definition: YamlNodes.cpp:398
Sensor * sensor(int sensorType, int sensorId) const
Definition: Body.h:152
Link * joint(int id) const
Definition: Body.h:96
void * BodyHandle
Definition: Body.h:41
Definition: YamlNodes.h:212
Definition: BodyCustomizerInterface.h:26
boost::intrusive_ptr< YamlMapping > YamlMappingPtr
Definition: YamlNodes.h:380
Eigen::Vector3d Vector3
Definition: EigenTypes.h:26
#define CNOID_EXPORT
Definition: Util/exportdecl.h:13
std::vector< LinkConnection > LinkConnectionArray
Definition: Body.h:224
const std::string & name()
Definition: Body.h:58
const std::string & modelName()
Definition: Body.h:64
double totalMass() const
Definition: Body.h:188
void setModelName(const std::string &name)
Definition: Body.h:67
TSensor * sensor(const std::string &name) const
Definition: Body.h:170
CNOID_EXPORT std::ostream & operator<<(std::ostream &out, cnoid::Body &body)
Definition: Body.cpp:579
Eigen::Matrix3d Matrix3
Definition: EigenTypes.h:25