Privacy
An open-source, flexible 3D physical simulation framework
smurf.h
Go to the documentation of this file.
1 /*
2  * Copyright 2011, 2012, 2014, DFKI GmbH Robotics Innovation Center
3  *
4  * This file is part of the MARS simulation framework.
5  *
6  * MARS is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License
8  * as published by the Free Software Foundation, either version 3
9  * of the License, or (at your option) any later version.
10  *
11  * MARS is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with MARS. If not, see <http://www.gnu.org/licenses/>.
18  *
19  */
20 
21 #ifndef SMURF_H
22 #define SMURF_H
23 
24 #ifdef _PRINT_HEADER_
25 #warning "smurf.h"
26 #endif
27 
28 #include <map>
29 
30 #include <yaml-cpp/yaml.h>
31 
32 #include <configmaps/ConfigData.h>
33 #include <mars/interfaces/sensor_bases.h>
34 #include <mars/interfaces/MaterialData.h>
35 
36 #include <mars/interfaces/sim/MarsPluginTemplate.h>
37 #include <mars/entity_generation/entity_factory/EntityFactoryInterface.h>
38 
39 #include <urdf_parser/urdf_parser.h>
40 //#include <boost/function.hpp>
41 #include <urdf_model/model.h>
42 #include <urdf_model/link.h>
43 #include <urdf_model/joint.h>
44 #include <urdf_model/pose.h>
45 
46 namespace mars {
47 
48  namespace smurf {
49 
52 
53  public:
54  SMURF(lib_manager::LibManager *theManager);
55  ~SMURF();
56 
57  // LibInterface methods
58  int getLibVersion() const {return 1;}
59  const std::string getLibName() const {return std::string("SMURF");}
61 
65  void createModel(bool fixed);
66  unsigned int parseURDF(std::string filename);
67  unsigned int load();
68  void addConfigMap(configmaps::ConfigMap &config);
69  std::string getRobotname();
70 
71  // EntityFactoryInterface
72  virtual sim::SimEntity* createEntity(const configmaps::ConfigMap& config);
73 
74  // MarsPlugin methods
75  void init();
76  void reset();
77  void update(mars::interfaces::sReal time_ms);
78 
79  std::vector<configmaps::ConfigMap> materialList;
80  std::vector<configmaps::ConfigMap> nodeList;
81  std::vector<configmaps::ConfigMap> jointList;
82  std::vector<configmaps::ConfigMap> motorList;
83  std::vector<configmaps::ConfigMap> sensorList;
84  std::vector<configmaps::ConfigMap> controllerList;
85  std::vector<configmaps::ConfigMap> graphicList;
86  std::vector<configmaps::ConfigMap> lightList;
87 
88  private:
89  int groupID;
90  unsigned int mapIndex; // index to map nodes of a single entity
91  unsigned long nextNodeID;
92  unsigned long nextGroupID;
93  unsigned long currentNodeID;
94  unsigned long nextJointID;
95  unsigned long nextMaterialID;
96  unsigned long nextMotorID;
97  unsigned long nextSensorID;
98  unsigned long nextControllerID;
99  std::map<std::string, unsigned long> linkIDMap;
100  std::map<std::string, unsigned long> nodeIDMap;
101  std::map<std::string, unsigned long> jointIDMap;
102  std::map<std::string, unsigned long> sensorIDMap;
103  std::map<std::string, unsigned long> motorIDMap;
104  std::map<std::string, interfaces::MaterialData> materialMap;
105  std::map<std::string, std::string> visualNameMap, collisionNameMap;
106  std::string tmpPath;
107  //std::map<std::string, std::string> smurffiles;
110  std::string robotname;
111  urdf::ModelInterfaceSharedPtr model;
113 
114  void handleURI(configmaps::ConfigMap *map, std::string uri);
117 
118  // creating URDF objects
119  void translateLink(urdf::LinkSharedPtr link, bool fixed); // handleKinematics
120  void translateJoint(urdf::LinkSharedPtr childlink); // handleKinematics
121  void createMaterial(const urdf::MaterialSharedPtr material); // handleMaterial
122  void createOrigin(const urdf::LinkSharedPtr &link, bool fixed);
123  void createInertial(const urdf::LinkSharedPtr &link);
124  void createVisual(const urdf::VisualSharedPtr &visual, bool fixed);
125  void createCollision(const urdf::CollisionSharedPtr &collision, bool fixed);
126  void addEmptyVisualToNode(configmaps::ConfigMap *map); // createFakeVisual
127  void addEmptyCollisionToNode(configmaps::ConfigMap *map); // createFakeCollision
129  void createOriginMaterial();
130 
131  // geometry calculations
132  urdf::Pose getGlobalPose(const urdf::LinkSharedPtr &link);
133  void calculatePose(configmaps::ConfigMap *map, const urdf::LinkSharedPtr &link);
134  void convertPose(const urdf::Pose &pose, const urdf::Pose &toPose, utils::Vector *v,
135  utils::Quaternion *q);
136  void poseToVectorAndQuaternion(const urdf::Pose &pose, utils::Vector *v, utils::Quaternion *q);
137  bool isEqualPos(const urdf::Pose &p1, const urdf::Pose p2);
138  bool isNullPos(const urdf::Pose &p);
139 
140  // load functions
141  unsigned int loadMaterial(configmaps::ConfigMap config);
142  unsigned int loadNode(configmaps::ConfigMap config);
143  unsigned int loadJoint(configmaps::ConfigMap config);
144  unsigned int loadMotor(configmaps::ConfigMap config);
146  unsigned int loadController(configmaps::ConfigMap config);
147  unsigned int loadGraphic(configmaps::ConfigMap config);
148  unsigned int loadLight(configmaps::ConfigMap config);
149 
150 
151  };
152 
153  } // end of namespace smurf
154 } // end of namespace mars
155 
156 #endif // SMURF_H
157 
std::map< std::string, std::string > collisionNameMap
Definition: smurf.h:105
std::map< std::string, unsigned long > jointIDMap
Definition: smurf.h:101
unsigned long nextGroupID
Definition: smurf.h:92
void createVisual(const urdf::VisualSharedPtr &visual, bool fixed)
Definition: smurf.cpp:727
configmaps::ConfigMap debugMap
Definition: smurf.h:108
bool isNullPos(const urdf::Pose &p)
Definition: smurf.cpp:484
unsigned int loadMaterial(configmaps::ConfigMap config)
Definition: smurf.cpp:1082
std::vector< configmaps::ConfigMap > motorList
Definition: smurf.h:82
void getSensorIDList(configmaps::ConfigMap *map)
Definition: smurf.cpp:151
sim::SimEntity * entity
Definition: smurf.h:112
void createInertial(const urdf::LinkSharedPtr &link)
Definition: smurf.cpp:600
unsigned int loadController(configmaps::ConfigMap config)
Definition: smurf.cpp:1173
std::vector< configmaps::ConfigMap > graphicList
Definition: smurf.h:85
unsigned int loadMotor(configmaps::ConfigMap config)
Definition: smurf.cpp:1112
std::map< std::string, unsigned long > motorIDMap
Definition: smurf.h:103
unsigned int loadNode(configmaps::ConfigMap config)
Definition: smurf.cpp:1007
SMURF(lib_manager::LibManager *theManager)
Definition: smurf.cpp:65
void createOriginMaterial()
Definition: smurf.cpp:522
std::map< std::string, interfaces::MaterialData > materialMap
Definition: smurf.h:104
void poseToVectorAndQuaternion(const urdf::Pose &pose, utils::Vector *v, utils::Quaternion *q)
Definition: smurf.cpp:457
std::map< std::string, unsigned long > nodeIDMap
Definition: smurf.h:100
interfaces::BaseSensor * loadSensor(configmaps::ConfigMap config)
Definition: smurf.cpp:1135
std::vector< configmaps::ConfigMap > jointList
Definition: smurf.h:81
void handleURIs(configmaps::ConfigMap *map)
Definition: smurf.cpp:131
The interface for plugins creating dynamic simulation objects.
void translateJoint(urdf::LinkSharedPtr childlink)
Definition: smurf.cpp:844
double sReal
Definition: MARSDefs.h:49
void createModel(bool fixed)
Definition: smurf.cpp:939
const std::string getLibName() const
Definition: smurf.h:59
unsigned int loadGraphic(configmaps::ConfigMap config)
Definition: smurf.cpp:1146
unsigned int mapIndex
Definition: smurf.h:90
void calculatePose(configmaps::ConfigMap *map, const urdf::LinkSharedPtr &link)
std::vector< configmaps::ConfigMap > lightList
Definition: smurf.h:86
std::vector< configmaps::ConfigMap > sensorList
Definition: smurf.h:83
unsigned long nextMaterialID
Definition: smurf.h:95
void createCollision(const urdf::CollisionSharedPtr &collision, bool fixed)
Definition: smurf.cpp:654
std::vector< configmaps::ConfigMap > controllerList
Definition: smurf.h:84
void createOrigin(const urdf::LinkSharedPtr &link, bool fixed)
Definition: smurf.cpp:554
Copyright 2012, DFKI GmbH Robotics Innovation Center.
void addEmptyVisualToNode(configmaps::ConfigMap *map)
Definition: smurf.cpp:541
void translateLink(urdf::LinkSharedPtr link, bool fixed)
Definition: smurf.cpp:804
Eigen::Matrix< double, 3, 1, Eigen::DontAlign > Vector
Definition: Vector.h:43
int getLibVersion() const
Definition: smurf.h:58
std::string robotname
Definition: smurf.h:110
Eigen::Quaternion< double, Eigen::DontAlign > Quaternion
Definition: Quaternion.h:56
unsigned long nextMotorID
Definition: smurf.h:96
std::map< std::string, std::string > visualNameMap
Definition: smurf.h:105
void createEmptyVisualMaterial()
Definition: smurf.cpp:504
unsigned long nextControllerID
Definition: smurf.h:98
void handleURI(configmaps::ConfigMap *map, std::string uri)
Definition: smurf.cpp:125
unsigned long nextSensorID
Definition: smurf.h:97
unsigned long nextNodeID
Definition: smurf.h:91
std::string getRobotname()
Definition: smurf.cpp:1194
unsigned int loadLight(configmaps::ConfigMap config)
Definition: smurf.cpp:1161
std::vector< configmaps::ConfigMap > nodeList
Definition: smurf.h:80
unsigned int load()
Definition: smurf.cpp:955
void addConfigMap(configmaps::ConfigMap &config)
Definition: smurf.cpp:244
bool isEqualPos(const urdf::Pose &p1, const urdf::Pose p2)
Definition: smurf.cpp:464
virtual sim::SimEntity * createEntity(const configmaps::ConfigMap &config)
Definition: smurf.cpp:184
urdf::Pose getGlobalPose(const urdf::LinkSharedPtr &link)
Definition: smurf.cpp:892
unsigned int loadJoint(configmaps::ConfigMap config)
Definition: smurf.cpp:1090
void update(mars::interfaces::sReal time_ms)
Definition: smurf.cpp:122
std::map< std::string, unsigned long > linkIDMap
Definition: smurf.h:99
std::string tmpPath
Definition: smurf.h:106
void addEmptyCollisionToNode(configmaps::ConfigMap *map)
Definition: smurf.cpp:547
configmaps::ConfigMap entityconfig
Definition: smurf.h:109
unsigned long nextJointID
Definition: smurf.h:94
unsigned int parseURDF(std::string filename)
Definition: smurf.cpp:926
void convertPose(const urdf::Pose &pose, const urdf::Pose &toPose, utils::Vector *v, utils::Quaternion *q)
Definition: smurf.cpp:439
unsigned long currentNodeID
Definition: smurf.h:93
urdf::ModelInterfaceSharedPtr model
Definition: smurf.h:111
std::map< std::string, unsigned long > sensorIDMap
Definition: smurf.h:102
void createMaterial(const urdf::MaterialSharedPtr material)
Definition: smurf.cpp:907
std::vector< configmaps::ConfigMap > materialList
Definition: smurf.h:79