kinematics_plugin_factory.h
Go to the documentation of this file.
1 
26 #ifndef TESSERACT_KINEMATICS_KINEMATICS_PLUGIN_FACTORY_H
27 #define TESSERACT_KINEMATICS_KINEMATICS_PLUGIN_FACTORY_H
28 
31 #include <string>
32 #include <memory>
33 #include <map>
34 #include <yaml-cpp/yaml.h>
36 
39 #include <tesseract_common/fwd.h>
41 #include <boost_plugin_loader/plugin_loader.hpp>
42 #include <boost_plugin_loader/macros.h>
43 #include <filesystem>
44 
45 // clang-format off
46 #define TESSERACT_ADD_FWD_KIN_PLUGIN(DERIVED_CLASS, ALIAS) \
47  EXPORT_CLASS_SECTIONED(DERIVED_CLASS, ALIAS, FwdKin)
48 
49 #define TESSERACT_ADD_INV_KIN_PLUGIN(DERIVED_CLASS, ALIAS) \
50  EXPORT_CLASS_SECTIONED(DERIVED_CLASS, ALIAS, InvKin)
51 // clang-format on
52 
53 namespace tesseract_kinematics
54 {
56 class KinematicsPluginFactory;
57 class InverseKinematics;
58 class ForwardKinematics;
59 
62 {
63 public:
64  using Ptr = std::shared_ptr<InvKinFactory>;
65  using ConstPtr = std::shared_ptr<const InvKinFactory>;
66 
67  virtual ~InvKinFactory() = default;
68 
77  virtual std::unique_ptr<InverseKinematics> create(const std::string& solver_name,
78  const tesseract_scene_graph::SceneGraph& scene_graph,
79  const tesseract_scene_graph::SceneState& scene_state,
80  const KinematicsPluginFactory& plugin_factory,
81  const YAML::Node& config) const = 0;
82 
83 protected:
84  static std::string getSection();
86 };
87 
90 {
91 public:
92  using Ptr = std::shared_ptr<FwdKinFactory>;
93  using ConstPtr = std::shared_ptr<const FwdKinFactory>;
94 
95  virtual ~FwdKinFactory() = default;
96 
105  virtual std::unique_ptr<ForwardKinematics> create(const std::string& solver_name,
106  const tesseract_scene_graph::SceneGraph& scene_graph,
107  const tesseract_scene_graph::SceneState& scene_state,
108  const KinematicsPluginFactory& plugin_factory,
109  const YAML::Node& config) const = 0;
110 
111 protected:
112  static std::string getSection();
114 };
115 
117 {
118 public:
125 
130  KinematicsPluginFactory(YAML::Node config, const tesseract_common::ResourceLocator& locator);
131 
136  KinematicsPluginFactory(const std::filesystem::path& config, const tesseract_common::ResourceLocator& locator);
137 
142  KinematicsPluginFactory(const std::string& config, const tesseract_common::ResourceLocator& locator);
143 
148  void addSearchPath(const std::string& path);
149 
154  std::set<std::string> getSearchPaths() const;
155 
160  void addSearchLibrary(const std::string& library_name);
161 
166  std::set<std::string> getSearchLibraries() const;
167 
174  void addFwdKinPlugin(const std::string& group_name,
175  const std::string& solver_name,
176  tesseract_common::PluginInfo plugin_info);
177 
182  std::map<std::string, tesseract_common::PluginInfoContainer> getFwdKinPlugins() const;
183 
189  void removeFwdKinPlugin(const std::string& group_name, const std::string& solver_name);
190 
197  void setDefaultFwdKinPlugin(const std::string& group_name, const std::string& solver_name);
198 
204  std::string getDefaultFwdKinPlugin(const std::string& group_name) const;
205 
212  void addInvKinPlugin(const std::string& group_name,
213  const std::string& solver_name,
214  tesseract_common::PluginInfo plugin_info);
215 
220  std::map<std::string, tesseract_common::PluginInfoContainer> getInvKinPlugins() const;
221 
227  void removeInvKinPlugin(const std::string& group_name, const std::string& solver_name);
228 
235  void setDefaultInvKinPlugin(const std::string& group_name, const std::string& solver_name);
236 
242  std::string getDefaultInvKinPlugin(const std::string& group_name) const;
243 
252  std::unique_ptr<ForwardKinematics> createFwdKin(const std::string& group_name,
253  const std::string& solver_name,
254  const tesseract_scene_graph::SceneGraph& scene_graph,
255  const tesseract_scene_graph::SceneState& scene_state) const;
256 
265  std::unique_ptr<InverseKinematics> createInvKin(const std::string& group_name,
266  const std::string& solver_name,
267  const tesseract_scene_graph::SceneGraph& scene_graph,
268  const tesseract_scene_graph::SceneState& scene_state) const;
269 
276  std::unique_ptr<ForwardKinematics> createFwdKin(const std::string& solver_name,
277  const tesseract_common::PluginInfo& plugin_info,
278  const tesseract_scene_graph::SceneGraph& scene_graph,
279  const tesseract_scene_graph::SceneState& scene_state) const;
280 
287  std::unique_ptr<InverseKinematics> createInvKin(const std::string& solver_name,
288  const tesseract_common::PluginInfo& plugin_info,
289  const tesseract_scene_graph::SceneGraph& scene_graph,
290  const tesseract_scene_graph::SceneState& scene_state) const;
291 
296  void saveConfig(const std::filesystem::path& file_path) const;
297 
302  YAML::Node getConfig() const;
303 
304 private:
305  mutable std::map<std::string, FwdKinFactory::Ptr> fwd_kin_factories_;
306  mutable std::map<std::string, InvKinFactory::Ptr> inv_kin_factories_;
307  std::map<std::string, tesseract_common::PluginInfoContainer> fwd_plugin_info_;
308  std::map<std::string, tesseract_common::PluginInfoContainer> inv_plugin_info_;
309  boost_plugin_loader::PluginLoader plugin_loader_;
310 
311  void loadConfig(const YAML::Node& config);
312 };
313 
314 } // namespace tesseract_kinematics
315 #endif // TESSERACT_KINEMATICS_KINEMATICS_PLUGIN_FACTORY_H
tesseract_kinematics::KinematicsPluginFactory::saveConfig
void saveConfig(const std::filesystem::path &file_path) const
Save the plugin information to a yaml config file.
Definition: kinematics_plugin_factory.cpp:346
tesseract_kinematics::InvKinFactory::PluginLoader
friend class boost_plugin_loader::PluginLoader
Definition: kinematics_plugin_factory.h:85
tesseract_kinematics::KinematicsPluginFactory::inv_kin_factories_
std::map< std::string, InvKinFactory::Ptr > inv_kin_factories_
Definition: kinematics_plugin_factory.h:306
tesseract_kinematics::InvKinFactory
Define a inverse kinematics plugin which the factory can create an instance.
Definition: kinematics_plugin_factory.h:61
tesseract_kinematics::KinematicsPluginFactory::fwd_kin_factories_
std::map< std::string, FwdKinFactory::Ptr > fwd_kin_factories_
Definition: kinematics_plugin_factory.h:305
tesseract_kinematics::KinematicsPluginFactory::operator=
KinematicsPluginFactory & operator=(const KinematicsPluginFactory &)=default
tesseract_kinematics::KinematicsPluginFactory::getDefaultFwdKinPlugin
std::string getDefaultFwdKinPlugin(const std::string &group_name) const
Get the default forward kinematics solver for a group.
Definition: kinematics_plugin_factory.cpp:159
tesseract_kinematics::KinematicsPluginFactory::getInvKinPlugins
std::map< std::string, tesseract_common::PluginInfoContainer > getInvKinPlugins() const
Get the map of inverse kinematic plugins.
Definition: kinematics_plugin_factory.cpp:179
tesseract_kinematics::KinematicsPluginFactory::addInvKinPlugin
void addInvKinPlugin(const std::string &group_name, const std::string &solver_name, tesseract_common::PluginInfo plugin_info)
Add a inverse kinematics plugin to the manager.
Definition: kinematics_plugin_factory.cpp:172
tesseract_kinematics::FwdKinFactory::create
virtual std::unique_ptr< ForwardKinematics > create(const std::string &solver_name, const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_scene_graph::SceneState &scene_state, const KinematicsPluginFactory &plugin_factory, const YAML::Node &config) const =0
Create Inverse Kinematics Object.
tesseract_kinematics::KinematicsPluginFactory::getFwdKinPlugins
std::map< std::string, tesseract_common::PluginInfoContainer > getFwdKinPlugins() const
Get the map of forward kinematic plugins.
Definition: kinematics_plugin_factory.cpp:119
TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
#define TESSERACT_COMMON_IGNORE_WARNINGS_PUSH
tesseract_kinematics::KinematicsPluginFactory::inv_plugin_info_
std::map< std::string, tesseract_common::PluginInfoContainer > inv_plugin_info_
Definition: kinematics_plugin_factory.h:308
tesseract_scene_graph::SceneGraph
tesseract_kinematics::FwdKinFactory
Define a forward kinematics plugin which the factory can create an instance.
Definition: kinematics_plugin_factory.h:89
tesseract_kinematics::KinematicsPluginFactory::~KinematicsPluginFactory
~KinematicsPluginFactory()
tesseract_kinematics::KinematicsPluginFactory::getSearchPaths
std::set< std::string > getSearchPaths() const
Get the plugin search paths.
Definition: kinematics_plugin_factory.cpp:103
tesseract_kinematics::InvKinFactory::create
virtual std::unique_ptr< InverseKinematics > create(const std::string &solver_name, const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_scene_graph::SceneState &scene_state, const KinematicsPluginFactory &plugin_factory, const YAML::Node &config) const =0
Create Inverse Kinematics Object.
tesseract_scene_graph::SceneState
tesseract_kinematics::KinematicsPluginFactory::getDefaultInvKinPlugin
std::string getDefaultInvKinPlugin(const std::string &group_name) const
Get the default forward inverse solver for a group.
Definition: kinematics_plugin_factory.cpp:219
tesseract_kinematics::FwdKinFactory::PluginLoader
friend class boost_plugin_loader::PluginLoader
Definition: kinematics_plugin_factory.h:113
tesseract_kinematics::FwdKinFactory::ConstPtr
std::shared_ptr< const FwdKinFactory > ConstPtr
Definition: kinematics_plugin_factory.h:93
tesseract_kinematics::InvKinFactory::getSection
static std::string getSection()
Definition: kinematics_plugin_factory.cpp:50
tesseract_kinematics::FwdKinFactory::Ptr
std::shared_ptr< FwdKinFactory > Ptr
Definition: kinematics_plugin_factory.h:92
tesseract_common::PluginInfo
tesseract_kinematics::KinematicsPluginFactory::createInvKin
std::unique_ptr< InverseKinematics > createInvKin(const std::string &group_name, const std::string &solver_name, const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_scene_graph::SceneState &scene_state) const
Get inverse kinematics object given group name and solver name.
Definition: kinematics_plugin_factory.cpp:290
tesseract_kinematics::FwdKinFactory::getSection
static std::string getSection()
Definition: kinematics_plugin_factory.cpp:52
tesseract_kinematics::KinematicsPluginFactory::removeInvKinPlugin
void removeInvKinPlugin(const std::string &group_name, const std::string &solver_name)
remove inverse kinematics plugin from the manager
Definition: kinematics_plugin_factory.cpp:184
tesseract_common::ResourceLocator
tesseract_kinematics::KinematicsPluginFactory::addSearchLibrary
void addSearchLibrary(const std::string &library_name)
Add a library to search for plugin name.
Definition: kinematics_plugin_factory.cpp:105
tesseract_kinematics::KinematicsPluginFactory::addSearchPath
void addSearchPath(const std::string &path)
Add location for the plugin loader to search.
Definition: kinematics_plugin_factory.cpp:101
tesseract_kinematics::KinematicsPluginFactory::fwd_plugin_info_
std::map< std::string, tesseract_common::PluginInfoContainer > fwd_plugin_info_
Definition: kinematics_plugin_factory.h:307
tesseract_kinematics::InvKinFactory::Ptr
std::shared_ptr< InvKinFactory > Ptr
Definition: kinematics_plugin_factory.h:64
tesseract_kinematics::KinematicsPluginFactory::removeFwdKinPlugin
void removeFwdKinPlugin(const std::string &group_name, const std::string &solver_name)
remove forward kinematics plugin from the manager
Definition: kinematics_plugin_factory.cpp:124
fwd.h
tesseract_kinematics::KinematicsPluginFactory::createFwdKin
std::unique_ptr< ForwardKinematics > createFwdKin(const std::string &group_name, const std::string &solver_name, const tesseract_scene_graph::SceneGraph &scene_graph, const tesseract_scene_graph::SceneState &scene_state) const
Get forward kinematics object given group name and solver name.
Definition: kinematics_plugin_factory.cpp:233
tesseract_kinematics::KinematicsPluginFactory::plugin_loader_
boost_plugin_loader::PluginLoader plugin_loader_
Definition: kinematics_plugin_factory.h:309
TESSERACT_COMMON_IGNORE_WARNINGS_POP
#define TESSERACT_COMMON_IGNORE_WARNINGS_POP
tesseract_kinematics::KinematicsPluginFactory::setDefaultInvKinPlugin
void setDefaultInvKinPlugin(const std::string &group_name, const std::string &solver_name)
Set a groups default inverse kinematics solver.
Definition: kinematics_plugin_factory.cpp:204
tesseract_kinematics::KinematicsPluginFactory::loadConfig
void loadConfig(const YAML::Node &config)
Definition: kinematics_plugin_factory.cpp:63
tesseract_kinematics
Definition: forward_kinematics.h:40
tesseract_kinematics::KinematicsPluginFactory::getConfig
YAML::Node getConfig() const
Get the plugin information config as a yaml node.
Definition: kinematics_plugin_factory.cpp:353
tesseract_kinematics::KinematicsPluginFactory::getSearchLibraries
std::set< std::string > getSearchLibraries() const
Get the plugin search libraries.
Definition: kinematics_plugin_factory.cpp:110
tesseract_kinematics::FwdKinFactory::~FwdKinFactory
virtual ~FwdKinFactory()=default
tesseract_kinematics::KinematicsPluginFactory::KinematicsPluginFactory
KinematicsPluginFactory()
Definition: kinematics_plugin_factory.cpp:54
macros.h
tesseract_kinematics::InvKinFactory::~InvKinFactory
virtual ~InvKinFactory()=default
tesseract_kinematics::KinematicsPluginFactory
Definition: kinematics_plugin_factory.h:116
tesseract_kinematics::KinematicsPluginFactory::addFwdKinPlugin
void addFwdKinPlugin(const std::string &group_name, const std::string &solver_name, tesseract_common::PluginInfo plugin_info)
Add a forward kinematics plugin to the manager.
Definition: kinematics_plugin_factory.cpp:112
tesseract_kinematics::InvKinFactory::ConstPtr
std::shared_ptr< const InvKinFactory > ConstPtr
Definition: kinematics_plugin_factory.h:65
tesseract_kinematics::KinematicsPluginFactory::setDefaultFwdKinPlugin
void setDefaultFwdKinPlugin(const std::string &group_name, const std::string &solver_name)
Set a groups default forward kinematics solver.
Definition: kinematics_plugin_factory.cpp:144
plugin_info.h


tesseract_kinematics
Author(s): Levi Armstrong
autogenerated on Sun May 18 2025 03:02:14