| 99 | } |
| 100 | |
| 101 | void LoadPlugin(BT::BehaviorTreeFactory& factory, const std::filesystem::path& file_path, |
| 102 | BT::RosNodeParams params) |
| 103 | { |
| 104 | const auto filename = file_path.filename(); |
| 105 | try |
| 106 | { |
| 107 | BT::SharedLibrary loader(file_path.string()); |
| 108 | if(loader.hasSymbol(BT::PLUGIN_SYMBOL)) |
| 109 | { |
| 110 | typedef void (*Func)(BehaviorTreeFactory&); |
| 111 | auto func = (Func)loader.getSymbol(BT::PLUGIN_SYMBOL); |
| 112 | func(factory); |
| 113 | } |
| 114 | else if(loader.hasSymbol(BT::ROS_PLUGIN_SYMBOL)) |
| 115 | { |
| 116 | typedef void (*Func)(BT::BehaviorTreeFactory&, const BT::RosNodeParams&); |
| 117 | auto func = (Func)loader.getSymbol(BT::ROS_PLUGIN_SYMBOL); |
| 118 | func(factory, params); |
| 119 | } |
| 120 | else |
| 121 | { |
| 122 | RCLCPP_ERROR(kLogger, "Failed to load Plugin from file: %s.", filename.c_str()); |
| 123 | return; |
| 124 | } |
| 125 | RCLCPP_INFO(kLogger, "Loaded ROS Plugin: %s", filename.c_str()); |
| 126 | } |
| 127 | catch(const std::exception& ex) |
| 128 | { |
| 129 | RCLCPP_ERROR(kLogger, "Failed to load ROS Plugin: %s \n %s", filename.c_str(), |
| 130 | ex.what()); |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | void RegisterPlugins(bt_server::Params& params, BT::BehaviorTreeFactory& factory, |
| 135 | rclcpp::Node::SharedPtr node) |