Choreonoid  1.5
BodyRTCItem.h
Go to the documentation of this file.
1 
6 #ifndef CNOID_OPENRTM_PLUGIN_BODY_RTC_ITEM_H
7 #define CNOID_OPENRTM_PLUGIN_BODY_RTC_ITEM_H
8 
9 #include "VirtualRobotRTC.h"
10 #include "RTCItem.h"
11 #include <cnoid/ControllerItem>
12 #include <cnoid/BasicSensorSimulationHelper>
13 #include <cnoid/Body>
14 #include <boost/filesystem.hpp>
15 #ifdef ENABLE_SIMULATION_PROFILING
16 #include <cnoid/TimeMeasure>
17 #endif
18 #include "exportdecl.h"
19 
20 namespace cnoid {
21 
22 class MessageView;
23 
25 {
26 public:
27  static void initialize(ExtensionManager* ext);
28 
29  BodyRTCItem();
30  BodyRTCItem(const BodyRTCItem& org);
31  virtual ~BodyRTCItem();
32 
33  virtual bool start(ControllerItemIO* io);
34  virtual double timeStep() const;
35  virtual void input();
36  virtual bool control();
37  virtual void output();
38  virtual void stop();
39 
40  const BodyPtr& body() const { return simulationBody; };
41  const DeviceList<ForceSensor>& forceSensors() const { return forceSensors_; }
42  const DeviceList<RateGyroSensor>& rateGyroSensors() const { return gyroSensors_; }
43  const DeviceList<AccelerationSensor>& accelerationSensors() const { return accelSensors_; }
44 
45  double controlTime() const { return controlTime_; }
46 
47  enum ConfigMode {
48  CONF_FILE_MODE = 0,
50  N_CONFIG_MODES
51  };
52  enum PathBase {
53  RTC_DIRECTORY = 0,
55  N_PATH_BASE
56  };
57 
58  void setControllerModule(const std::string& name);
59  void setConfigFile(const std::string& filename);
60  void setConfigMode(int mode);
61  void setPeriodicRate(double freq);
62  void setAutoConnectionMode(bool on);
63  void setPathBase(int pathBase);
64 
65 #ifdef ENABLE_SIMULATION_PROFILING
66  virtual void getProfilingNames(std::vector<std::string>& profilingNames);
67  virtual void getProfilingTimes(std::vector<double>& profilingTimes);
68 #endif
69 
70 protected:
71  virtual void onPositionChanged();
72  virtual void onDisconnectedFromRoot();
73  virtual Item* doDuplicate() const;
74  virtual void doPutProperties(PutPropertyFunction& putProperty);
75  virtual bool store(Archive& archive);
76  virtual bool restore(const Archive& archive);
77 
78 private:
79  BodyPtr simulationBody;
80  DeviceList<ForceSensor> forceSensors_;
81  DeviceList<RateGyroSensor> gyroSensors_;
82  DeviceList<AccelerationSensor> accelSensors_;
83  double timeStep_;
84 
85  // The world time step is used if the following values are 0
86  double executionCycleProperty;
87  double executionCycle;
88  double executionCycleCounter;
89 
90  const ControllerItemIO* io;
91  double controlTime_;
92  std::ostream& os;
93 
94  std::string bodyName;
95  RTC::CorbaNaming* naming;
96  BridgeConf* bridgeConf;
97  VirtualRobotRTC* virtualRobotRTC;
98  OpenRTM::ExtTrigExecutionContextService_var virtualRobotEC;
99 
100  Selection configMode;
101  bool autoConnect;
102  RTComponent* rtcomp;
103  Selection pathBase;
104 
105  typedef std::map<std::string, RTC::PortService_var> PortMap;
106 
107  struct RtcInfo
108  {
109  RTC::RTObject_var rtcRef;
110  PortMap portMap;
111  OpenRTM::ExtTrigExecutionContextService_var execContext;
112  double timeRate;
113  double timeRateCounter;
114  };
115  typedef boost::shared_ptr<RtcInfo> RtcInfoPtr;
116 
117  typedef std::map<std::string, RtcInfoPtr> RtcInfoMap;
118  RtcInfoMap rtcInfoMap;
119  typedef std::vector<RtcInfoPtr> RtcInfoVector;
120  RtcInfoVector rtcInfoVector;
121 
122  std::string moduleName;
123  std::string moduleFileName;
124  std::string confFileName;
125  std::string instanceName;
126  int oldMode;
127  int oldPathBase;
128  MessageView* mv;
129 
130  void createRTC(BodyPtr body);
131  void setdefaultPort(BodyPtr body);
132  void activateComponents();
133  void deactivateComponents();
134  void detectRtcs();
135  void setupRtcConnections();
136  RtcInfoPtr addRtcVectorWithConnection(RTC::RTObject_var new_rtcRef);
137  void makePortMap(RtcInfoPtr& rtcInfo);
138  int connectPorts(RTC::PortService_var outPort, RTC::PortService_var inPort);
139 
140  void setInstanceName(const std::string& name);
141  void deleteModule(bool waitToBeDeleted);
142 
143 #ifdef ENABLE_SIMULATION_PROFILING
144  double bodyRTCTime;
145  double controllerTime;
146  TimeMeasure timer;
147 #endif
148 
149 };
150 
152 
153 }
154 
155 #endif
ref_ptr< BodyRTCItem > BodyRTCItemPtr
Definition: BodyRTCItem.h:151
Definition: Archive.h:21
Definition: ExtensionManager.h:26
Definition: VirtualRobotRTC.h:21
double controlTime() const
Definition: BodyRTCItem.h:45
ConfigMode
Definition: BodyRTCItem.h:47
Definition: PutPropertyFunction.h:35
Definition: Selection.h:14
const BodyPtr & body() const
Definition: BodyRTCItem.h:40
Definition: BodyRTCItem.h:49
Definition: TimeMeasure.h:16
Definition: MessageView.h:19
Definition: BodyRTCItem.h:24
Definition: Item.h:38
Defines the minimum processing for performing pasing file for STL.
Definition: AbstractSceneLoader.h:9
Definition: BridgeConf.h:92
const DeviceList< ForceSensor > & forceSensors() const
Definition: BodyRTCItem.h:41
PathBase
Definition: BodyRTCItem.h:52
Definition: BodyRTCItem.h:54
Definition: ControllerItem.h:28
const DeviceList< AccelerationSensor > & accelerationSensors() const
Definition: BodyRTCItem.h:43
#define CNOID_EXPORT
Definition: Util/exportdecl.h:37
const DeviceList< RateGyroSensor > & rateGyroSensors() const
Definition: BodyRTCItem.h:42
Definition: DeviceList.h:16
Definition: ControllerItem.h:16
Definition: RTCItem.h:22