ed
plugin_container.h
Go to the documentation of this file.
1 #ifndef ED_PLUGIN_CONTAINER_H_
2 #define ED_PLUGIN_CONTAINER_H_
3 
4 #include "ed/loop_usage_status.h"
5 #include "ed/types.h"
6 #include "ed/update_request.h"
7 
9 
10 #include <boost/thread.hpp>
11 
12 #include <queue>
13 #include <vector>
14 
15 namespace pluginlib {
16  template<class T>
17  class ClassLoader;
18 }
19 
20 namespace ed
21 {
22 
23 struct InitData;
24 
26 {
27 
28 public:
29 
31 
32  virtual ~PluginContainer();
33 
34  PluginPtr loadPlugin(const std::string& plugin_name, const std::string& plugin_type, InitData& init);
35 
36  PluginPtr plugin() const { return plugin_; }
37 
38  void configure(InitData& init, bool reconfigure);
39 
40  void runThreaded();
41 
42  void requestStop();
43 
44  const std::string& name() const { return name_; }
45 
47  {
48  boost::lock_guard<boost::mutex> lg(mutex_update_request_);
49  return update_request_;
50  }
51 
53  {
54  boost::lock_guard<boost::mutex> lg(mutex_update_request_);
55  update_request_.reset();
56  }
57 
58  void setWorld(const WorldModelConstPtr& world)
59  {
60  boost::lock_guard<boost::mutex> lg(mutex_world_);
61  world_new_ = world;
62  }
63 
64  void setLoopFrequency(double freq) { loop_frequency_ = freq; loop_frequency_max_ = 1.05*freq; loop_frequency_min_= 0.9*freq; } // Magic numbers; Higher bound is stricter as it shouldn't be possible to exceed the desired frequency.
65 
66  double loopFrequency() const { return loop_frequency_; }
67 
68  void addDelta(const UpdateRequestConstPtr& delta)
69  {
70  boost::lock_guard<boost::mutex> lg(mutex_world_);
71  world_deltas_.push_back(delta);
72  }
73 
74  bool isRunning() const { return is_running_; }
75 
77 
78 protected:
79 
81 
83 
85 
87 
89 
90  // 1.0 / cycle frequency
92 
94 
97 
98  mutable boost::mutex mutex_update_request_;
99 
101 
102  ed::shared_ptr<boost::thread> thread_;
103 
105 
107 
108  mutable boost::mutex mutex_world_;
109 
111 
113 
115 
117 
118  bool step();
119 
120  void run();
121 
122 
123  // buffer of delta's since last process call
125 
126 };
127 
128 }
129 
130 #endif
ed::PluginContainer::plugin
PluginPtr plugin() const
Definition: plugin_container.h:36
ed::PluginContainer::requestStop
void requestStop()
Definition: plugin_container.cpp:205
std::string
ed::TFBufferConstPtr
shared_ptr< const tf2_ros::Buffer > TFBufferConstPtr
Definition: types.h:84
types.h
ed::PluginContainer::loop_usage_status_
std::unique_ptr< ed::LoopUsageStatus > loop_usage_status_
Definition: plugin_container.h:116
ed::UpdateRequestConstPtr
shared_ptr< const UpdateRequest > UpdateRequestConstPtr
Definition: types.h:49
ed::PluginContainer::name_
std::string name_
Definition: plugin_container.h:84
ed::PluginContainer::name
const std::string & name() const
Definition: plugin_container.h:44
vector
ed::PluginContainer::mutex_update_request_
boost::mutex mutex_update_request_
Definition: plugin_container.h:98
loop_usage_status.h
ed::PluginContainer::setWorld
void setWorld(const WorldModelConstPtr &world)
Definition: plugin_container.h:58
ed::PluginContainer::world_new_
WorldModelConstPtr world_new_
Definition: plugin_container.h:110
ed::InitData
Definition: init_data.h:12
ed::PluginContainer::isRunning
bool isRunning() const
Definition: plugin_container.h:74
ed::PluginContainer::step
bool step()
Definition: plugin_container.cpp:153
ed::PluginContainer::addDelta
void addDelta(const UpdateRequestConstPtr &delta)
Definition: plugin_container.h:68
queue
ed::PluginContainer::cycle_duration_
double cycle_duration_
Definition: plugin_container.h:91
ed::PluginContainer::configure
void configure(InitData &init, bool reconfigure)
Definition: plugin_container.cpp:76
ed::PluginContainer::step_finished_
bool step_finished_
Definition: plugin_container.h:104
ed::PluginContainer::loop_frequency_max_
double loop_frequency_max_
Definition: plugin_container.h:95
std::vector::push_back
T push_back(T... args)
ed::PluginContainer::loadPlugin
PluginPtr loadPlugin(const std::string &plugin_name, const std::string &plugin_type, InitData &init)
Definition: plugin_container.cpp:39
ed::PluginContainer::tf_buffer_
TFBufferConstPtr tf_buffer_
Definition: plugin_container.h:114
update_request.h
ed::PluginContainer::request_stop_
bool request_stop_
Definition: plugin_container.h:86
ed::PluginContainer::t_last_update_
double t_last_update_
Definition: plugin_container.h:106
ed::PluginContainer::loop_frequency_min_
double loop_frequency_min_
Definition: plugin_container.h:96
ed::WorldModelConstPtr
shared_ptr< const WorldModel > WorldModelConstPtr
Definition: types.h:45
pluginlib
Definition: plugin_container.h:15
pluginlib::ClassLoader
Definition: plugin_container.h:17
ed::PluginContainer::plugin_
PluginPtr plugin_
Definition: plugin_container.h:82
ed::PluginContainer::class_loader_
pluginlib::ClassLoader< ed::Plugin > * class_loader_
Definition: plugin_container.h:80
ed::UpdateRequestPtr
shared_ptr< UpdateRequest > UpdateRequestPtr
Definition: types.h:47
ed::PluginContainer
Definition: plugin_container.h:25
ed::PluginContainer::loopFrequency
double loopFrequency() const
Definition: plugin_container.h:66
ed::PluginContainer::updateRequest
UpdateRequestConstPtr updateRequest() const
Definition: plugin_container.h:46
ed::PluginContainer::world_current_
WorldModelConstPtr world_current_
Definition: plugin_container.h:112
ed::PluginContainer::loop_frequency_
double loop_frequency_
Definition: plugin_container.h:93
configuration.h
ed::PluginContainer::thread_
ed::shared_ptr< boost::thread > thread_
Definition: plugin_container.h:102
ed::PluginContainer::~PluginContainer
virtual ~PluginContainer()
Definition: plugin_container.cpp:25
ed::LoopUsageStatus
A diagnostic task that monitors the frequency of an event.
Definition: loop_usage_status.h:27
ed::PluginContainer::clearUpdateRequest
void clearUpdateRequest()
Definition: plugin_container.h:52
ed::PluginContainer::mutex_world_
boost::mutex mutex_world_
Definition: plugin_container.h:108
ed::PluginContainer::PluginContainer
PluginContainer(const ed::TFBufferConstPtr &tf_buffer_)
Definition: plugin_container.cpp:16
ed::PluginContainer::is_running_
bool is_running_
Definition: plugin_container.h:88
ed::PluginContainer::getLoopUsageStatus
ed::LoopUsageStatus & getLoopUsageStatus()
Definition: plugin_container.h:76
ed
Definition: convex_hull.h:8
ed::PluginContainer::setLoopFrequency
void setLoopFrequency(double freq)
Definition: plugin_container.h:64
ed::PluginContainer::update_request_
UpdateRequestPtr update_request_
Definition: plugin_container.h:100
ed::PluginContainer::runThreaded
void runThreaded()
Definition: plugin_container.cpp:121
ed::PluginPtr
shared_ptr< Plugin > PluginPtr
Definition: types.h:39
ed::PluginContainer::world_deltas_
std::vector< UpdateRequestConstPtr > world_deltas_
Definition: plugin_container.h:124
ed::PluginContainer::run
void run()
Definition: plugin_container.cpp:129
std::unique_ptr< ed::LoopUsageStatus >