54 #ifndef _GAMS_CONTROLLERS_MULTICONTROLLER_H_
55 #define _GAMS_CONTROLLERS_MULTICONTROLLER_H_
69 #include "madara/transport/SharedMemoryPush.h"
71 #include "madara/knowledge/containers/String.h"
72 #include "madara/knowledge/containers/Vector.h"
74 #ifdef _GAMS_SCRIMMAGE_
75 #include <scrimmage/simcontrol/SimControl.h>
114 const std::vector <std::string> & aliases,
126 const std::vector <std::string> & aliases,
144 const madara::transport::QoSTransportSettings & source_settings);
157 const madara::knowledge::EvalSettings & settings =
158 madara::knowledge::EvalSettings::DELAY);
166 void evaluate(
size_t controller_index,
const std::string & logic,
167 const madara::knowledge::EvalSettings & settings =
168 madara::knowledge::EvalSettings::DELAY);
176 const std::string & algorithm,
177 const madara::knowledge::KnowledgeMap & args = madara::knowledge::KnowledgeMap());
186 const std::string & algorithm,
187 const madara::knowledge::KnowledgeMap & args = madara::knowledge::KnowledgeMap());
195 const std::string & algorithm,
196 const madara::knowledge::KnowledgeMap & args = madara::knowledge::KnowledgeMap());
205 const std::string & algorithm,
206 const madara::knowledge::KnowledgeMap & args = madara::knowledge::KnowledgeMap());
224 const std::string & platform,
225 const madara::knowledge::KnowledgeMap & args =
226 madara::knowledge::KnowledgeMap());
235 const std::string & platform,
236 const madara::knowledge::KnowledgeMap & args =
237 madara::knowledge::KnowledgeMap());
255 void init_algorithm(
size_t controller_index, jobject algorithm);
262 void init_platform(
size_t controller_index, jobject platform);
270 void init_vars(
const madara::knowledge::KnowledgeRecord::Integer &
id = 0,
271 const madara::knowledge::KnowledgeRecord::Integer & processes = -1);
326 madara::knowledge::KnowledgeBase
get_kb(
size_t controller_index);
340 void resize(
size_t num_controllers,
bool init_non_self_vars =
false);
367 int run(
double loop_period,
368 double max_runtime = -1,
369 double send_period = -1.0);
382 double max_runtime = -1,
383 double send_hz = -1.0)
385 double loop_rate, send_rate;
392 loop_rate = 1.0 / loop_hz;
396 send_rate = loop_rate;
399 send_rate = 1.0 / send_hz;
401 return run(loop_rate, max_runtime, send_rate);
410 std::vector <madara::knowledge::KnowledgeBase>
kbs_;
Copyright(c) 2014-2018 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Copyright(c) 2014 Carnegie Mellon University.
Base class for algorithm factories that classes derived from.
The base class that algorithms in GAMS use.
Settings used for initializing GAMS controllers.
A controller that has the capability of managing multiple controllers.
void evaluate(size_t controller_index, const std::string &logic, const madara::knowledge::EvalSettings &settings=madara::knowledge::EvalSettings::DELAY)
Evaluates a karl logic across all controllers and knowledge bases.
void refresh_vars(bool init_non_self_vars=false)
Calls init_vars for each controller.
void init_algorithm(size_t controller_index, const std::string &algorithm, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Initializes a specific controller with an algorithm.
algorithms::BaseAlgorithm * get_algorithm(size_t controller_index=0)
Gets the current algorithm at the controller index.
size_t get_num_controllers(void)
Returns the number of controllers being managed.
void init_vars(size_t controller_index, algorithms::BaseAlgorithm &algorithm)
Initializes containers and knowledge base in an algorithm.
void init_algorithm(size_t controller_index, algorithms::BaseAlgorithm *algorithm)
Initializes the controller with a user-provided algorithm.
void clear_accents(size_t controller_index=0)
Clears all accent algorithms.
void add_platform_factory(const std::vector< std::string > &aliases, platforms::PlatformFactory *factory)
Adds an aliased platform factory.
int run(double loop_period, double max_runtime=-1, double send_period=-1.0)
Runs iterations of the MAPE loop with specified periods.
void init_accent(size_t controller_index, const std::string &algorithm, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Adds an accent algorithm.
std::vector< BaseController * > controllers_
Controllers that need to be instrumented.
void init_vars(const madara::knowledge::KnowledgeRecord::Integer &id=0, const madara::knowledge::KnowledgeRecord::Integer &processes=-1)
Initializes global variable containers.
platforms::BasePlatform * get_platform(size_t controller_index=0)
Gets the current platform at the controller index.
void init_platform(size_t controller_index, platforms::BasePlatform *platform)
Initializes the controller with a user-provided platform.
void clear_knowledge(void)
Clears all controller knowledge bases.
int run_hz(double loop_hz=0.0, double max_runtime=-1, double send_hz=-1.0)
Runs iterations of the MAPE loop with specified hertz.
void init_vars(size_t controller_index, platforms::BasePlatform &platform)
Initializes containers and knowledge base in a platform This is usually the first thing a developer s...
void init_algorithm(const std::string &algorithm, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Initializes all managed controllers with an algorithm.
void evaluate(const std::string &logic, const madara::knowledge::EvalSettings &settings=madara::knowledge::EvalSettings::DELAY)
Evaluates a karl logic across all controllers and knowledge bases.
Multicontroller(size_t num_controllers=1, const ControllerSettings &settings=ControllerSettings())
Constructor.
void init_platform(size_t controller_index, const std::string &platform, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Initializes the platform.
std::vector< madara::knowledge::KnowledgeBase > kbs_
Knowledge base.
void add_algorithm_factory(const std::vector< std::string > &aliases, algorithms::AlgorithmFactory *factory)
Adds an aliased algorithm factory.
void add_transports(const madara::transport::QoSTransportSettings &source_settings)
Add transports to the knowledge bases that are being used by each controller.
std::vector< madara::transport::SharedMemoryPush * > transports_
transports meant for fast memory transport within the controller
int run(void)
Runs iterations of the MAPE loop with configured settings.
int run_once(void)
Runs a single iteration of the MAPE loop Always sends updates after the iteration.
void init_accent(const std::string &algorithm, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Initializes all managed controllers with an accent algorithm.
void resize(size_t num_controllers, bool init_non_self_vars=false)
Resizes the number of controllers and knowledge bases.
madara::knowledge::KnowledgeBase get_kb(size_t controller_index)
Returns the kb that is being used by the internal controller.
virtual ~Multicontroller()
Destructor.
ControllerSettings settings_
Settings for controller management and qos.
void init_platform(const std::string &platform, const madara::knowledge::KnowledgeMap &args=madara::knowledge::KnowledgeMap())
Initializes all managed controllers with the platform.
Contains all GAMS-related tools, classes and code.