Choreonoid  1.5
SimulatorItem.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_BODY_PLUGIN_SIMULATOR_ITEM_H
7 #define CNOID_BODY_PLUGIN_SIMULATOR_ITEM_H
8 
9 #include "CollisionSeq.h"
10 #include <cnoid/Item>
11 #include "exportdecl.h"
12 
13 namespace cnoid {
14 
15 #ifdef ENABLE_SIMULATION_PROFILING
16 const bool SIMULATION_PROFILING = true;
17 #else
18 const bool SIMULATION_PROFILING = false;
19 #endif
20 
21 class Body;
22 class Device;
23 class CollisionDetector;
24 typedef boost::shared_ptr<CollisionDetector> CollisionDetectorPtr;
25 class BodyItem;
26 class ControllerItem;
27 class SimulationBodyImpl;
28 class SimulatorItemImpl;
29 class SimulatedMotionEngineManager;
30 class SgCloneMap;
31 
33 {
34 public:
35  SimulationBody(Body* body);
36  virtual ~SimulationBody();
37 
38  BodyItem* bodyItem() const;
39  Body* body() const;
40 
41  int numControllers() const;
42  ControllerItem* controller(int index = 0) const;
43 
47  void cloneShapesOnce();
48 
52  bool isActive() const;
53  void setActive(bool on);
54 
59  void notifyUnrecordedDeviceStateChange(Device* device);
60 
61  const std::string& resultItemPrefix() const;
62 
63  virtual void initializeResultBuffers();
64  virtual void initializeResultItems();
65 
69  virtual void bufferResults();
70  virtual void flushResults();
71 
72 private:
73  SimulationBodyImpl* impl;
74  friend class SimulatorItemImpl;
75 };
76 
78 
79 
81 {
82 public:
83  static void initializeClass(ExtensionManager* ext);
84 
85  static SimulatorItem* findActiveSimulatorItemFor(Item* item);
86 
87  SimulatorItem();
88  virtual ~SimulatorItem();
89 
90  virtual double worldTimeStep();
91 
92  virtual bool startSimulation(bool doReset = true);
93  virtual void stopSimulation();
94  virtual void pauseSimulation();
95  virtual void restartSimulation();
96  bool isRunning() const;
97  bool isPausing() const;
98  bool isActive() const;
99 
101  int currentFrame() const;
102 
104  double currentTime() const;
105 
107  int simulationFrame() const;
108 
110  double simulationTime() const;
111 
112  SignalProxy<void()> sigSimulationStarted();
113  SignalProxy<void()> sigSimulationFinished();
114 
115  enum RecordingMode { REC_FULL, REC_TAIL, REC_NONE, N_RECORDING_MODES };
116  enum TimeRangeMode { TR_UNLIMITED, TR_ACTIVE_CONTROL, TR_SPECIFIED, TR_TIMEBAR, N_TIME_RANGE_MODES };
117 
118  void setRecordingMode(int selection);
119  Selection recordingMode() const;
120  void setTimeRangeMode(int selection);
121  void setRealtimeSyncMode(bool on);
122  void setDeviceStateOutputEnabled(bool on);
123 
124  bool isRecordingEnabled() const;
125  bool isDeviceStateOutputEnabled() const;
126 
127  bool isAllLinkPositionOutputMode();
128  virtual void setAllLinkPositionOutputMode(bool on);
129 
133  const std::vector<SimulationBody*>& simulationBodies();
134 
135  SimulationBody* findSimulationBody(BodyItem* bodyItem);
136  SimulationBody* findSimulationBody(const std::string& name);
137 
141  int addPreDynamicsFunction(boost::function<void()> func);
142  int addMidDynamicsFunction(boost::function<void()> func);
143  int addPostDynamicsFunction(boost::function<void()> func);
144 
145  void removePreDynamicsFunction(int id);
146  void removeMidDynamicsFunction(int id);
147  void removePostDynamicsFunction(int id);
148 
149  //void addRecordFunction(boost::function<void()> func);
150 
151  SgCloneMap& sgCloneMap();
152 
157  sigSimulationBodyListUpdated();
158 
159  /*
160  virtual void setExternalForce(BodyItem* bodyItem, Link* link, const Vector6& f);
161  */
162 
167  virtual void setExternalForce(BodyItem* bodyItem, Link* link, const Vector3& point, const Vector3& f, double time = 0.0);
168  virtual void clearExternalForces();
169 
174  virtual void setVirtualElasticString(
175  BodyItem* bodyItem, Link* link, const Vector3& attachmentPoint, const Vector3& endPoint);
176  virtual void clearVirtualElasticStrings();
177 
178  virtual void setForcedPosition(BodyItem* bodyItem, const Position& T);
179  virtual bool isForcedPositionActiveFor(BodyItem* bodyItem) const;
180  virtual void clearForcedPositions();
181 
182 protected:
183  SimulatorItem(const SimulatorItem& org);
184 
185  virtual void onDisconnectedFromRoot();
186 
191  virtual SimulationBody* createSimulationBody(Body* orgBody) = 0;
192 
193  CollisionDetectorPtr collisionDetector();
194 
199  virtual bool initializeSimulation(const std::vector<SimulationBody*>& simBodies) = 0;
200 
201  virtual void initializeSimulationThread();
202 
203  virtual void finalizeSimulationThread();
204 
209  virtual bool stepSimulation(const std::vector<SimulationBody*>& activeSimBodies) = 0;
210 
214  virtual void finalizeSimulation();
215 
217  {
218  return boost::make_shared<CollisionLinkPairList>();
219  }
220 
221  void doPutProperties(PutPropertyFunction& putProperty);
222  bool store(Archive& archive);
223  bool restore(const Archive& archive);
224 
225 #ifdef ENABLE_SIMULATION_PROFILING
226  virtual void getProfilingNames(std::vector<std::string>& profilingNames);
227  virtual void getProfilingTimes(std::vector<double>& profilingTimes);
228 #endif
229 
230 private:
231 
232  SimulatorItemImpl* impl;
233  friend class SimulatorItemImpl;
234  friend class SimulatedMotionEngineManager;
235 };
236 
238 }
239 
240 #endif
Definition: SimulatorItem.h:80
Definition: Body.h:28
Definition: Archive.h:21
const bool SIMULATION_PROFILING
Definition: SimulatorItem.h:18
boost::shared_ptr< CollisionDetector > CollisionDetectorPtr
Definition: CollisionDetector.h:23
Definition: ExtensionManager.h:26
RecordingMode
Definition: SimulatorItem.h:115
Definition: SimulatorItem.h:32
TimeRangeMode
Definition: SimulatorItem.h:116
virtual CollisionLinkPairListPtr getCollisions()
Definition: SimulatorItem.h:216
Definition: Referenced.h:67
ref_ptr< SimulatorItem > SimulatorItemPtr
Definition: SimulatorItem.h:237
Definition: PutPropertyFunction.h:35
Definition: Referenced.h:128
Definition: SceneGraph.h:56
Definition: Selection.h:14
Definition: CollisionDetector.h:26
Eigen::Transform< double, 3, Eigen::AffineCompact > Position
Definition: EigenTypes.h:73
Definition: Item.h:38
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
ref_ptr< SimulationBody > SimulationBodyPtr
Definition: SimulatorItem.h:77
Eigen::Vector3d Vector3
Definition: EigenTypes.h:58
Definition: ControllerItem.h:28
boost::shared_ptr< CollisionLinkPairList > CollisionLinkPairListPtr
Definition: CollisionSeq.h:22
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
Definition: BodyItem.h:31
Definition: Signal.h:380
Definition: Device.h:52
Definition: SimulatorItem.h:116