diff --git a/src/dyknow_echo/CMakeLists.txt b/src/dyknow_echo/CMakeLists.txt index 3ee26d271351cdf3a91efab4c089022d48f6f8d5..9b2a3c0250bf3edcfc3350d52e16b03d3ec86b49 100644 --- a/src/dyknow_echo/CMakeLists.txt +++ b/src/dyknow_echo/CMakeLists.txt @@ -12,13 +12,11 @@ find_package(rclcpp_components REQUIRED) find_package(dyknow_nodehandle REQUIRED) find_package(dyknow_analytics REQUIRED) -message(STATUS "include: ${include}") -include_directories( - include - ${dyknow_nodehandle_INCLUDE_DIRS} - ${dyknow_analytics_INCLUDE_DIRS} - #"/root/ros2_ws/install/dyknow_nodehandle/include/dyknow_nodehandle" # this is the way that the directory structure is created but there is an extra dyknow_nodehandle in the file path i deduce that the include file path is likly mangled in dyknow_nodehandle cmakefile -) +# include_directories( +# include +# ${dyknow_nodehandle_INCLUDE_DIRS} +# ${dyknow_analytics_INCLUDE_DIRS} +# ) # Declare a shared library add_library(dyknow_echo_component SHARED diff --git a/src/dyknow_interfaces/CMakeLists.txt b/src/dyknow_interfaces/CMakeLists.txt index 9864eae979d2ab10375374cd38936e58827870c6..40eb2a0a452550646f808b718406f28819e40915 100644 --- a/src/dyknow_interfaces/CMakeLists.txt +++ b/src/dyknow_interfaces/CMakeLists.txt @@ -13,12 +13,34 @@ find_package(builtin_interfaces REQUIRED) set(msg_files "msg/Configuration.msg" + "msg/Connection.msg" "msg/Field.msg" + "msg/Parameter.msg" "msg/Sample.msg" + "msg/Tag.msg" + "msg/Target.msg" + "msg/Transformation.msg" + "msg/Unit.msg" ) + set(srv_files + "srv/AddTarget.srv" + "srv/AddTransformation.srv" "srv/Configure.srv" + "srv/CreateStream.srv" + "srv/Destroy.srv" + "srv/ExpPopulate.srv" "srv/GetConfig.srv" + "srv/GetConfiguration.srv" + "srv/GetUniqueName.srv" + "srv/GetValidInputs.srv" + "srv/ManagerConfigure.srv" + "srv/Refresh.srv" + "srv/RemoveTarget.srv" + "srv/RemoveTransformation.srv" + "srv/Repair.srv" + "srv/RequestUnload.srv" + "srv/Spawn.srv" ) # Add message and service files @@ -30,7 +52,4 @@ rosidl_generate_interfaces(${PROJECT_NAME} ament_export_dependencies(rosidl_default_runtime) - - - ament_package() diff --git a/src/dyknow_manager/msg/Connection.msg b/src/dyknow_interfaces/msg/Connection.msg similarity index 100% rename from src/dyknow_manager/msg/Connection.msg rename to src/dyknow_interfaces/msg/Connection.msg diff --git a/src/dyknow_manager/msg/Parameter.msg b/src/dyknow_interfaces/msg/Parameter.msg similarity index 100% rename from src/dyknow_manager/msg/Parameter.msg rename to src/dyknow_interfaces/msg/Parameter.msg diff --git a/src/dyknow_manager/msg/Tag.msg b/src/dyknow_interfaces/msg/Tag.msg similarity index 100% rename from src/dyknow_manager/msg/Tag.msg rename to src/dyknow_interfaces/msg/Tag.msg diff --git a/src/dyknow_manager/msg/Target.msg b/src/dyknow_interfaces/msg/Target.msg similarity index 100% rename from src/dyknow_manager/msg/Target.msg rename to src/dyknow_interfaces/msg/Target.msg diff --git a/src/dyknow_manager/msg/Transformation.msg b/src/dyknow_interfaces/msg/Transformation.msg similarity index 61% rename from src/dyknow_manager/msg/Transformation.msg rename to src/dyknow_interfaces/msg/Transformation.msg index 11462e6ef9c41e166b12b9f8d9918ba995883d0b..0cd8ee2ef5f97f0c14983cef1a61cf4f4fb949db 100644 --- a/src/dyknow_manager/msg/Transformation.msg +++ b/src/dyknow_interfaces/msg/Transformation.msg @@ -1,9 +1,9 @@ string label string type string source -dyknow_manager/Parameter[] params +dyknow_interfaces/Parameter[] params string[] out_ports string[] in_ports -dyknow_manager/Tag[] tags +dyknow_interfaces/Tag[] tags float64 cost uint32 environment \ No newline at end of file diff --git a/src/dyknow_interfaces/msg/Unit.msg b/src/dyknow_interfaces/msg/Unit.msg new file mode 100644 index 0000000000000000000000000000000000000000..2262d4d71b80bd38931512a8bf6ca46a0c575872 --- /dev/null +++ b/src/dyknow_interfaces/msg/Unit.msg @@ -0,0 +1,5 @@ +string label +string type +uint32 environment +dyknow_interfaces/Connection[] incoming +dyknow_interfaces/Connection[] outgoing diff --git a/src/dyknow_interfaces/srv/AddTarget.srv b/src/dyknow_interfaces/srv/AddTarget.srv new file mode 100644 index 0000000000000000000000000000000000000000..1bcb1294756ffe7f34797fe249cf279113015372 --- /dev/null +++ b/src/dyknow_interfaces/srv/AddTarget.srv @@ -0,0 +1,4 @@ +dyknow_interfaces/Target[] targets +uint32 envid +--- +bool success \ No newline at end of file diff --git a/src/dyknow_interfaces/srv/AddTransformation.srv b/src/dyknow_interfaces/srv/AddTransformation.srv new file mode 100644 index 0000000000000000000000000000000000000000..0b50d4f43506160a9e05cf03c6b353d0d2aeb86f --- /dev/null +++ b/src/dyknow_interfaces/srv/AddTransformation.srv @@ -0,0 +1,4 @@ +dyknow_interfaces/Transformation[] transformations +uint32 envid +--- +bool success \ No newline at end of file diff --git a/src/dyknow_manager/srv/CreateStream.srv b/src/dyknow_interfaces/srv/CreateStream.srv similarity index 100% rename from src/dyknow_manager/srv/CreateStream.srv rename to src/dyknow_interfaces/srv/CreateStream.srv diff --git a/src/dyknow_manager/srv/Destroy.srv b/src/dyknow_interfaces/srv/Destroy.srv similarity index 100% rename from src/dyknow_manager/srv/Destroy.srv rename to src/dyknow_interfaces/srv/Destroy.srv diff --git a/src/dyknow_manager/srv/ExpPopulate.srv b/src/dyknow_interfaces/srv/ExpPopulate.srv similarity index 79% rename from src/dyknow_manager/srv/ExpPopulate.srv rename to src/dyknow_interfaces/srv/ExpPopulate.srv index 80a0f2b746c89848d530b3f8e80fc097494f731f..41054694656f440f476194008175b548480d90d2 100644 --- a/src/dyknow_manager/srv/ExpPopulate.srv +++ b/src/dyknow_interfaces/srv/ExpPopulate.srv @@ -1,7 +1,7 @@ uint32 env uint32 seed uint32 numtransform -float32 lambda +float32 lambdafunction uint32 numtarget float32 density --- diff --git a/src/dyknow_interfaces/srv/GetConfiguration.srv b/src/dyknow_interfaces/srv/GetConfiguration.srv new file mode 100644 index 0000000000000000000000000000000000000000..322c0f524a678c07eeb7da4fbfe0ad238f3e16b1 --- /dev/null +++ b/src/dyknow_interfaces/srv/GetConfiguration.srv @@ -0,0 +1,4 @@ +--- +dyknow_interfaces/Unit[] units +dyknow_interfaces/Transformation[] transformations +dyknow_interfaces/Target[] targets \ No newline at end of file diff --git a/src/dyknow_manager/srv/GetUniqueName.srv b/src/dyknow_interfaces/srv/GetUniqueName.srv similarity index 100% rename from src/dyknow_manager/srv/GetUniqueName.srv rename to src/dyknow_interfaces/srv/GetUniqueName.srv diff --git a/src/dyknow_manager/srv/GetValidInputs.srv b/src/dyknow_interfaces/srv/GetValidInputs.srv similarity index 100% rename from src/dyknow_manager/srv/GetValidInputs.srv rename to src/dyknow_interfaces/srv/GetValidInputs.srv diff --git a/src/dyknow_manager/srv/Configure.srv b/src/dyknow_interfaces/srv/ManagerConfigure.srv similarity index 51% rename from src/dyknow_manager/srv/Configure.srv rename to src/dyknow_interfaces/srv/ManagerConfigure.srv index 513003be3a16abce45cb8f2b064e6a9f1bd881b2..3345cacd57bc9d289d18384fcad16604fc5691da 100644 --- a/src/dyknow_manager/srv/Configure.srv +++ b/src/dyknow_interfaces/srv/ManagerConfigure.srv @@ -1,5 +1,5 @@ string name -dyknow_nodehandle/Configuration config +dyknow_interfaces/Configuration config uint32 envid --- bool success \ No newline at end of file diff --git a/src/dyknow_manager/srv/Refresh.srv b/src/dyknow_interfaces/srv/Refresh.srv similarity index 100% rename from src/dyknow_manager/srv/Refresh.srv rename to src/dyknow_interfaces/srv/Refresh.srv diff --git a/src/dyknow_manager/srv/RemoveTarget.srv b/src/dyknow_interfaces/srv/RemoveTarget.srv similarity index 100% rename from src/dyknow_manager/srv/RemoveTarget.srv rename to src/dyknow_interfaces/srv/RemoveTarget.srv diff --git a/src/dyknow_manager/srv/RemoveTransformation.srv b/src/dyknow_interfaces/srv/RemoveTransformation.srv similarity index 100% rename from src/dyknow_manager/srv/RemoveTransformation.srv rename to src/dyknow_interfaces/srv/RemoveTransformation.srv diff --git a/src/dyknow_manager/srv/Repair.srv b/src/dyknow_interfaces/srv/Repair.srv similarity index 100% rename from src/dyknow_manager/srv/Repair.srv rename to src/dyknow_interfaces/srv/Repair.srv diff --git a/src/dyknow_manager/srv/RequestUnload.srv b/src/dyknow_interfaces/srv/RequestUnload.srv similarity index 100% rename from src/dyknow_manager/srv/RequestUnload.srv rename to src/dyknow_interfaces/srv/RequestUnload.srv diff --git a/src/dyknow_manager/srv/Spawn.srv b/src/dyknow_interfaces/srv/Spawn.srv similarity index 100% rename from src/dyknow_manager/srv/Spawn.srv rename to src/dyknow_interfaces/srv/Spawn.srv diff --git a/src/dyknow_manager/CMakeLists.txt b/src/dyknow_manager/CMakeLists.txt index f3a20a625cf98c0bddcbb7c83146cfc696bce021..57b94d2706486c8611006de5d8178f1e6bc6b5c4 100644 --- a/src/dyknow_manager/CMakeLists.txt +++ b/src/dyknow_manager/CMakeLists.txt @@ -14,94 +14,59 @@ find_package(dyknow_nodehandle REQUIRED) find_package(dyknow_analytics REQUIRED) find_package(rosidl_default_generators REQUIRED) - - -# Add message and service files -rosidl_generate_interfaces(${PROJECT_NAME} - "msg/Tag.msg" - "msg/Parameter.msg" - "msg/Transformation.msg" - "msg/Unit.msg" - "msg/Connection.msg" - "msg/Target.msg" - "srv/GetUniqueName.srv" - "srv/RequestUnload.srv" - "srv/CreateStream.srv" - "srv/GetConfiguration.srv" - "srv/AddTransformation.srv" - "srv/RemoveTransformation.srv" - "srv/Spawn.srv" - "srv/Destroy.srv" - "srv/Configure.srv" - "srv/AddTarget.srv" - "srv/RemoveTarget.srv" - "srv/Refresh.srv" - "srv/Repair.srv" - "srv/GetValidInputs.srv" - "srv/ExpPopulate.srv" - DEPENDENCIES dyknow_nodehandle -) - -ament_export_dependencies(rosidl_default_runtime) - - - -include_directories( - include - ${rclcpp_INCLUDE_DIRS} - ${dyknow_nodehandle_INCLUDE_DIRS} - ${dyknow_analytics_INCLUDE_DIRS} - ${rosidl_default_generators_INCLUDE_DIRS} - "${CMAKE_BINARY_DIR}/rosidl_generator_cpp" -) +# include_directories( # Testing if this part is needed or not.... +# include +# ${rclcpp_INCLUDE_DIRS} +# ${dyknow_nodehandle_INCLUDE_DIRS} +# ${dyknow_analytics_INCLUDE_DIRS} +# ) # Define our target, should this not be all of our cpp files? -add_library(${PROJECT_NAME}_lib SHARED +add_library(${PROJECT_NAME} SHARED src/manager_componet.cpp #src/configuration_manager.cpp # if this is included the project fails to compile ) # this should be all the source files that are requierd for compiling the lib -# Define where the include directories for our target is -target_include_directories(${PROJECT_NAME}_lib PUBLIC - $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include> - $<INSTALL_INTERFACE:include/${PROJECT_NAME}> -) # Either this one or the add library one could be faulty +target_include_directories(${PROJECT_NAME} PUBLIC + "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>" + "$<INSTALL_INTERFACE:include>" +) # Link dependencies to our target ,hmmm # For this we might instead conider using target_link_libraries, works the same but with namespaces -ament_target_dependencies(${PROJECT_NAME}_lib +ament_target_dependencies(${PROJECT_NAME} rclcpp rclcpp_components dyknow_nodehandle ) # These are going to be the PACKAGES that we are dependend on # This is the component that we are creating -rclcpp_components_register_node(${PROJECT_NAME}_lib +rclcpp_components_register_node(${PROJECT_NAME} PLUGIN "manager::ManagerComponet" EXECUTABLE dyknow_manager_componet ) - - -#target_compile_features(dyknow_manager_componet PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -# Ensure that the generated message headers are available to this target -# add_dependencies(${PROJECT_NAME}_lib ${PROJECT_NAME}__rosidl_typesupport_cpp) - install( - TARGETS ${PROJECT_NAME}_lib + TARGETS ${PROJECT_NAME} EXPORT export_${PROJECT_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) +# Export the header files downstream +install( + DIRECTORY include/ + DESTINATION include/ +) + # This will tell any packages downstream what dependencies that this library has to we dont need to call add_packages for them too #ament_export_dependencies(some_dependency) -# Have tested and this is not be needed -#install(DIRECTORY include/ -# DESTINATION include/${PROJECT_NAME}/ -#) +ament_export_targets(export_${PROJECT_NAME} HAS_LIBRARY_TARGET) + +ament_export_dependencies(dyknow_nodehandle) + +ament_export_include_directories(include) ament_package() diff --git a/src/dyknow_manager/include/dyknow_manager/configuration_manager.hpp b/src/dyknow_manager/include/dyknow_manager/configuration_manager.hpp index 15faf4c478404bb6f82aba177f6ecd500ac3dc24..2fd8fd601e3e0098638098d9750793b9730bf300 100644 --- a/src/dyknow_manager/include/dyknow_manager/configuration_manager.hpp +++ b/src/dyknow_manager/include/dyknow_manager/configuration_manager.hpp @@ -11,22 +11,22 @@ #include "target_spec.hpp" #include "dyknow_nodehandle/node.hpp" -#include "dyknow_manager/srv/get_configuration.hpp" -#include "dyknow_manager/srv/add_transformation.hpp" -#include "dyknow_manager/srv/remove_transformation.hpp" -#include "dyknow_manager/srv/spawn.hpp" -#include "dyknow_manager/srv/destroy.hpp" -#include "dyknow_manager/srv/add_target.hpp" -#include "dyknow_manager/srv/remove_target.hpp" -#include "dyknow_manager/srv/refresh.hpp" -#include "dyknow_manager/srv/repair.hpp" -#include "dyknow_manager/srv/exp_populate.hpp" -#include "dyknow_manager/msg/unit.hpp" -#include "dyknow_manager/msg/transformation.hpp" -#include "dyknow_manager/srv/configure.hpp" -#include "dyknow_manager/msg/connection.hpp" -#include "dyknow_manager/msg/target.hpp" -#include "dyknow_manager/srv/get_valid_inputs.hpp" +#include "dyknow_interfaces/srv/get_configuration.hpp" +#include "dyknow_interfaces/srv/add_transformation.hpp" +#include "dyknow_interfaces/srv/remove_transformation.hpp" +#include "dyknow_interfaces/srv/spawn.hpp" +#include "dyknow_interfaces/srv/destroy.hpp" +#include "dyknow_interfaces/srv/add_target.hpp" +#include "dyknow_interfaces/srv/remove_target.hpp" +#include "dyknow_interfaces/srv/refresh.hpp" +#include "dyknow_interfaces/srv/repair.hpp" +#include "dyknow_interfaces/srv/exp_populate.hpp" +#include "dyknow_interfaces/msg/unit.hpp" +#include "dyknow_interfaces/msg/transformation.hpp" +#include "dyknow_interfaces/srv/configure.hpp" +#include "dyknow_interfaces/msg/connection.hpp" +#include "dyknow_interfaces/msg/target.hpp" +#include "dyknow_interfaces/srv/get_valid_inputs.hpp" namespace dyknow { @@ -36,21 +36,21 @@ public: static const unsigned int VERBOSITY = 10; static const bool EXPERIMENTAL = true; - //, getConfigurationService(nh->create_service<dyknow_manager::srv::GetConfiguration>("get_model", &ConfigurationManager::getConfigurationCallback)) - //, getConfigurationService(nh->create_service<dyknow_manager::srv::GetConfiguration>("get_model", [this](const std::shared_ptr<dyknow_manager::srv::GetConfiguration::Request> req, std::shared_ptr<dyknow_manager::srv::GetConfiguration::Response> res) {this->getConfigurationCallback(req, res);})) + //, getConfigurationService(nh->create_service<dyknow_interfaces::srv::GetConfiguration>("get_model", &ConfigurationManager::getConfigurationCallback)) + //, getConfigurationService(nh->create_service<dyknow_interfaces::srv::GetConfiguration>("get_model", [this](const std::shared_ptr<dyknow_interfaces::srv::GetConfiguration::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetConfiguration::Response> res) {this->getConfigurationCallback(req, res);})) ConfigurationManager(std::shared_ptr<dyknow::Node>& nh) : nh(nh) - , getConfigurationService(nh->create_service<dyknow_manager::srv::GetConfiguration>("get_model", std::bind(&ConfigurationManager::getConfigurationCallback, this, std::placeholders::_1, std::placeholders::_2))) // We need to say where the function should operate i.e. this - , addTransformationService(nh->create_service<dyknow_manager::srv::AddTransformation>("add_transformation", std::bind(&ConfigurationManager::addTransformationCallback, this, std::placeholders::_1, std::placeholders::_2))) - , removeTransformationService(nh->create_service<dyknow_manager::srv::RemoveTransformation>("remove_transformation", std::bind(&ConfigurationManager::removeTransformationCallback, this, std::placeholders::_1, std::placeholders::_2))) - , spawnService(nh->create_service<dyknow_manager::srv::Spawn>("spawn", std::bind(&ConfigurationManager::spawnCallback, this, std::placeholders::_1, std::placeholders::_2))) - , destroyService(nh->create_service<dyknow_manager::srv::Destroy>("destroy", std::bind(&ConfigurationManager::destroyCallback, this, std::placeholders::_1, std::placeholders::_2))) - , configureService(nh->create_service<dyknow_manager::srv::Configure>("configure", std::bind(&ConfigurationManager::configureCallback, this, std::placeholders::_1, std::placeholders::_2))) - , addTargetService(nh->create_service<dyknow_manager::srv::AddTarget>("add_target", std::bind(&ConfigurationManager::addTargetCallback, this, std::placeholders::_1, std::placeholders::_2))) - , removeTargetService(nh->create_service<dyknow_manager::srv::RemoveTarget>("remove_target", std::bind(&ConfigurationManager::removeTargetCallback, this, std::placeholders::_1, std::placeholders::_2))) - , refreshService(nh->create_service<dyknow_manager::srv::Refresh>("refresh", std::bind(&ConfigurationManager::refreshCallback, this, std::placeholders::_1, std::placeholders::_2))) - , repairService(nh->create_service<dyknow_manager::srv::Repair>("repair", std::bind(&ConfigurationManager::repairCallback, this, std::placeholders::_1, std::placeholders::_2))) - , getValidInputsService(nh->create_service<dyknow_manager::srv::GetValidInputs>("get_valid_inputs", std::bind(&ConfigurationManager::getValidInputsCallback, this, std::placeholders::_1, std::placeholders::_2))) + , getConfigurationService(nh->create_service<dyknow_interfaces::srv::GetConfiguration>("get_model", std::bind(&ConfigurationManager::getConfigurationCallback, this, std::placeholders::_1, std::placeholders::_2))) // We need to say where the function should operate i.e. this + , addTransformationService(nh->create_service<dyknow_interfaces::srv::AddTransformation>("add_transformation", std::bind(&ConfigurationManager::addTransformationCallback, this, std::placeholders::_1, std::placeholders::_2))) + , removeTransformationService(nh->create_service<dyknow_interfaces::srv::RemoveTransformation>("remove_transformation", std::bind(&ConfigurationManager::removeTransformationCallback, this, std::placeholders::_1, std::placeholders::_2))) + , spawnService(nh->create_service<dyknow_interfaces::srv::Spawn>("spawn", std::bind(&ConfigurationManager::spawnCallback, this, std::placeholders::_1, std::placeholders::_2))) + , destroyService(nh->create_service<dyknow_interfaces::srv::Destroy>("destroy", std::bind(&ConfigurationManager::destroyCallback, this, std::placeholders::_1, std::placeholders::_2))) + , configureService(nh->create_service<dyknow_interfaces::srv::Configure>("configure", std::bind(&ConfigurationManager::configureCallback, this, std::placeholders::_1, std::placeholders::_2))) + , addTargetService(nh->create_service<dyknow_interfaces::srv::AddTarget>("add_target", std::bind(&ConfigurationManager::addTargetCallback, this, std::placeholders::_1, std::placeholders::_2))) + , removeTargetService(nh->create_service<dyknow_interfaces::srv::RemoveTarget>("remove_target", std::bind(&ConfigurationManager::removeTargetCallback, this, std::placeholders::_1, std::placeholders::_2))) + , refreshService(nh->create_service<dyknow_interfaces::srv::Refresh>("refresh", std::bind(&ConfigurationManager::refreshCallback, this, std::placeholders::_1, std::placeholders::_2))) + , repairService(nh->create_service<dyknow_interfaces::srv::Repair>("repair", std::bind(&ConfigurationManager::repairCallback, this, std::placeholders::_1, std::placeholders::_2))) + , getValidInputsService(nh->create_service<dyknow_interfaces::srv::GetValidInputs>("get_valid_inputs", std::bind(&ConfigurationManager::getValidInputsCallback, this, std::placeholders::_1, std::placeholders::_2))) , planner(nh) { this->processThread = std::shared_ptr< std::thread >(new std::thread(std::bind(&ConfigurationManager::spin, this))); @@ -66,18 +66,18 @@ public: void createEnvironment(int id, std::string manager); // Services - void getConfigurationCallback(const std::shared_ptr<dyknow_manager::srv::GetConfiguration::Request> req, std::shared_ptr<dyknow_manager::srv::GetConfiguration::Response> res); - void addTransformationCallback(const std::shared_ptr<dyknow_manager::srv::AddTransformation::Request> req, std::shared_ptr<dyknow_manager::srv::AddTransformation::Response> res); - void removeTransformationCallback(const std::shared_ptr<dyknow_manager::srv::RemoveTransformation::Request> req, std::shared_ptr<dyknow_manager::srv::RemoveTransformation::Response> res); - void spawnCallback(const std::shared_ptr<dyknow_manager::srv::Spawn::Request> req, std::shared_ptr<dyknow_manager::srv::Spawn::Response> res); - void destroyCallback(const std::shared_ptr<dyknow_manager::srv::Destroy::Request> req, std::shared_ptr<dyknow_manager::srv::Destroy::Response> res); - void configureCallback(const std::shared_ptr<dyknow_manager::srv::Configure::Request> req, std::shared_ptr<dyknow_manager::srv::Configure::Response> res); - void addTargetCallback(const std::shared_ptr<dyknow_manager::srv::AddTarget::Request> req, std::shared_ptr<dyknow_manager::srv::AddTarget::Response> res); - void removeTargetCallback(const std::shared_ptr<dyknow_manager::srv::RemoveTarget::Request> req, std::shared_ptr<dyknow_manager::srv::RemoveTarget::Response> res); - void refreshCallback(const std::shared_ptr<dyknow_manager::srv::Refresh::Request> req, std::shared_ptr<dyknow_manager::srv::Refresh::Response> res); - void repairCallback(const std::shared_ptr<dyknow_manager::srv::Repair::Request> req, std::shared_ptr<dyknow_manager::srv::Repair::Response> res); - void getValidInputsCallback(const std::shared_ptr<dyknow_manager::srv::GetValidInputs::Request> req, std::shared_ptr<dyknow_manager::srv::GetValidInputs::Response> res); - void expPopulateCallback(const std::shared_ptr<dyknow_manager::srv::ExpPopulate::Request> req, std::shared_ptr<dyknow_manager::srv::ExpPopulate::Response> res); + void getConfigurationCallback(const std::shared_ptr<dyknow_interfaces::srv::GetConfiguration::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetConfiguration::Response> res); + void addTransformationCallback(const std::shared_ptr<dyknow_interfaces::srv::AddTransformation::Request> req, std::shared_ptr<dyknow_interfaces::srv::AddTransformation::Response> res); + void removeTransformationCallback(const std::shared_ptr<dyknow_interfaces::srv::RemoveTransformation::Request> req, std::shared_ptr<dyknow_interfaces::srv::RemoveTransformation::Response> res); + void spawnCallback(const std::shared_ptr<dyknow_interfaces::srv::Spawn::Request> req, std::shared_ptr<dyknow_interfaces::srv::Spawn::Response> res); + void destroyCallback(const std::shared_ptr<dyknow_interfaces::srv::Destroy::Request> req, std::shared_ptr<dyknow_interfaces::srv::Destroy::Response> res); + void configureCallback(const std::shared_ptr<dyknow_interfaces::srv::Configure::Request> req, std::shared_ptr<dyknow_interfaces::srv::Configure::Response> res); + void addTargetCallback(const std::shared_ptr<dyknow_interfaces::srv::AddTarget::Request> req, std::shared_ptr<dyknow_interfaces::srv::AddTarget::Response> res); + void removeTargetCallback(const std::shared_ptr<dyknow_interfaces::srv::RemoveTarget::Request> req, std::shared_ptr<dyknow_interfaces::srv::RemoveTarget::Response> res); + void refreshCallback(const std::shared_ptr<dyknow_interfaces::srv::Refresh::Request> req, std::shared_ptr<dyknow_interfaces::srv::Refresh::Response> res); + void repairCallback(const std::shared_ptr<dyknow_interfaces::srv::Repair::Request> req, std::shared_ptr<dyknow_interfaces::srv::Repair::Response> res); + void getValidInputsCallback(const std::shared_ptr<dyknow_interfaces::srv::GetValidInputs::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetValidInputs::Response> res); + void expPopulateCallback(const std::shared_ptr<dyknow_interfaces::srv::ExpPopulate::Request> req, std::shared_ptr<dyknow_interfaces::srv::ExpPopulate::Response> res); bool apply(Change delta, int environment); void spin(); @@ -98,17 +98,17 @@ private: std::queue<std::pair<int, Change> > changeQueue; ConfigurationPlanner planner; - rclcpp::Service<dyknow_manager::srv::GetConfiguration>::SharedPtr getConfigurationService; - rclcpp::Service<dyknow_manager::srv::AddTransformation>::SharedPtr addTransformationService; - rclcpp::Service<dyknow_manager::srv::RemoveTransformation>::SharedPtr removeTransformationService; - rclcpp::Service<dyknow_manager::srv::Spawn>::SharedPtr spawnService; - rclcpp::Service<dyknow_manager::srv::Destroy>::SharedPtr destroyService; - rclcpp::Service<dyknow_manager::srv::Configure>::SharedPtr configureService; - rclcpp::Service<dyknow_manager::srv::AddTarget>::SharedPtr addTargetService; - rclcpp::Service<dyknow_manager::srv::RemoveTarget>::SharedPtr removeTargetService; - rclcpp::Service<dyknow_manager::srv::Refresh>::SharedPtr refreshService; - rclcpp::Service<dyknow_manager::srv::Repair>::SharedPtr repairService; - rclcpp::Service<dyknow_manager::srv::GetValidInputs>::SharedPtr getValidInputsService; + rclcpp::Service<dyknow_interfaces::srv::GetConfiguration>::SharedPtr getConfigurationService; + rclcpp::Service<dyknow_interfaces::srv::AddTransformation>::SharedPtr addTransformationService; + rclcpp::Service<dyknow_interfaces::srv::RemoveTransformation>::SharedPtr removeTransformationService; + rclcpp::Service<dyknow_interfaces::srv::Spawn>::SharedPtr spawnService; + rclcpp::Service<dyknow_interfaces::srv::Destroy>::SharedPtr destroyService; + rclcpp::Service<dyknow_interfaces::srv::Configure>::SharedPtr configureService; + rclcpp::Service<dyknow_interfaces::srv::AddTarget>::SharedPtr addTargetService; + rclcpp::Service<dyknow_interfaces::srv::RemoveTarget>::SharedPtr removeTargetService; + rclcpp::Service<dyknow_interfaces::srv::Refresh>::SharedPtr refreshService; + rclcpp::Service<dyknow_interfaces::srv::Repair>::SharedPtr repairService; + rclcpp::Service<dyknow_interfaces::srv::GetValidInputs>::SharedPtr getValidInputsService; std::mutex deltaAccess; std::mutex envAccess; diff --git a/src/dyknow_manager/include/dyknow_manager/target_spec.hpp b/src/dyknow_manager/include/dyknow_manager/target_spec.hpp index 64b951d6c4de44cae880599cd98f9b23c26c0137..eef7bf64537d36197fbf81825691cfe351ce2d09 100644 --- a/src/dyknow_manager/include/dyknow_manager/target_spec.hpp +++ b/src/dyknow_manager/include/dyknow_manager/target_spec.hpp @@ -2,7 +2,7 @@ #define INCLUDE_TARGET_SPEC_HPP_ #include <rclcpp/rclcpp.hpp> -#include "dyknow_manager/msg/target.hpp" +#include "dyknow_interfaces/msg/target.hpp" namespace dyknow { @@ -34,7 +34,7 @@ struct TargetSpec { class TargetFactory { public: static TargetSpec create(int id, std::string label, int port = 0, std::string topic = "/result"); - static TargetSpec create(dyknow_manager::msg::Target target); + static TargetSpec create(dyknow_interfaces::msg::Target target); }; } //namespace diff --git a/src/dyknow_manager/include/dyknow_manager/transformation_spec.hpp b/src/dyknow_manager/include/dyknow_manager/transformation_spec.hpp index d529972ab46758835c000b059d76300bf70e7f28..d9cf9f13b41a451d86af93fec9378d79e5d1e836 100644 --- a/src/dyknow_manager/include/dyknow_manager/transformation_spec.hpp +++ b/src/dyknow_manager/include/dyknow_manager/transformation_spec.hpp @@ -2,9 +2,9 @@ #define INCLUDE_TRANSFORMATION_SPEC_HPP_ #include <rclcpp/rclcpp.hpp> -#include "dyknow_manager/msg/transformation.hpp" -#include "dyknow_manager/msg/tag.hpp" -#include "dyknow_manager/msg/parameter.hpp" +#include "dyknow_interfaces/msg/transformation.hpp" +#include "dyknow_interfaces/msg/tag.hpp" +#include "dyknow_interfaces/msg/parameter.hpp" namespace dyknow { @@ -67,7 +67,7 @@ struct TransformationSpec { class TransformationFactory { public: static TransformationSpec create(std::string path); - static TransformationSpec create(dyknow_manager::msg::Transformation); + static TransformationSpec create(dyknow_interfaces::msg::Transformation); }; } //namespace diff --git a/src/dyknow_manager/msg/Unit.msg b/src/dyknow_manager/msg/Unit.msg deleted file mode 100644 index 1dd43405295b809bd75d7eb59456ae6603b0afa8..0000000000000000000000000000000000000000 --- a/src/dyknow_manager/msg/Unit.msg +++ /dev/null @@ -1,5 +0,0 @@ -string label -string type -uint32 environment -dyknow_manager/Connection[] incoming -dyknow_manager/Connection[] outgoing diff --git a/src/dyknow_manager/srv/AddTarget.srv b/src/dyknow_manager/srv/AddTarget.srv deleted file mode 100644 index 2f00dacc9629ab04f7361543451ed129d9b85e99..0000000000000000000000000000000000000000 --- a/src/dyknow_manager/srv/AddTarget.srv +++ /dev/null @@ -1,4 +0,0 @@ -dyknow_manager/Target[] targets -uint32 envid ---- -bool success \ No newline at end of file diff --git a/src/dyknow_manager/srv/AddTransformation.srv b/src/dyknow_manager/srv/AddTransformation.srv deleted file mode 100644 index a98a4c2944aa69dca9203dd6324de64a76f4c2e7..0000000000000000000000000000000000000000 --- a/src/dyknow_manager/srv/AddTransformation.srv +++ /dev/null @@ -1,4 +0,0 @@ -dyknow_manager/Transformation[] transformations -uint32 envid ---- -bool success \ No newline at end of file diff --git a/src/dyknow_manager/srv/GetConfiguration.srv b/src/dyknow_manager/srv/GetConfiguration.srv deleted file mode 100644 index b5b607faf16f879f10e8523807cbdb4e3760e49b..0000000000000000000000000000000000000000 --- a/src/dyknow_manager/srv/GetConfiguration.srv +++ /dev/null @@ -1,4 +0,0 @@ ---- -dyknow_manager/Unit[] units -dyknow_manager/Transformation[] transformations -dyknow_manager/Target[] targets \ No newline at end of file diff --git a/src/dyknow_nodehandle/CMakeLists.txt b/src/dyknow_nodehandle/CMakeLists.txt index 55d6627e3413b9e443c64ab95037ba03ab342546..acb7a7d16565d4e53558b539044f7d3d39dd4cb5 100644 --- a/src/dyknow_nodehandle/CMakeLists.txt +++ b/src/dyknow_nodehandle/CMakeLists.txt @@ -11,12 +11,12 @@ find_package(rclcpp REQUIRED) find_package(dyknow_analytics REQUIRED) find_package(dyknow_interfaces REQUIRED) -include_directories( - include - ${rclcpp_INCLUDE_DIRS} - ${dyknow_analytics_INCLUDE_DIRS} - ${dyknow_interfaces_INCLUDE_DIRS} -) +# include_directories( # i guess these are not needed then +# include +# ${rclcpp_INCLUDE_DIRS} +# ${dyknow_analytics_INCLUDE_DIRS} +# ${dyknow_interfaces_INCLUDE_DIRS} +# ) # Add library add_library(${PROJECT_NAME} SHARED @@ -57,7 +57,7 @@ install(TARGETS ${PROJECT_NAME} # Export the header files downstream install( DIRECTORY include/ - DESTINATION include/ # extra project name? + DESTINATION include/ ) # OK, this line is NESSESARY else the packages downstream wont find THIS .so file diff --git a/src/dyknow_nodehandle/include/dyknow_nodehandle/node.hpp b/src/dyknow_nodehandle/include/dyknow_nodehandle/node.hpp index 01e447ebe0d64c5f913f38ccb4e375a9f92c4380..0ea833cc26d37488f3d912ebaf4324b96175587c 100644 --- a/src/dyknow_nodehandle/include/dyknow_nodehandle/node.hpp +++ b/src/dyknow_nodehandle/include/dyknow_nodehandle/node.hpp @@ -59,19 +59,7 @@ public: return create_subscription(statePtr); } - dyknow::Subscriber create_subscription(SubscriberState* statePtr) { - auto iter = subscriberMap.find(statePtr->channel); - if (iter != subscriberMap.end()) { - RCLCPP_WARN(this->get_logger(), "Input channel %s already exists", statePtr->channel.c_str()); - delete subscriberMap[statePtr->channel]; - subscriberMap[statePtr->channel] = statePtr; - return dyknow::Subscriber(iter->second); - } else { - subCount++; - subscriberMap[statePtr->channel] = statePtr; - return dyknow::Subscriber(statePtr); - } - } + dyknow::Subscriber create_subscription(SubscriberState* statePtr); template<class M> @@ -92,61 +80,17 @@ public: return create_publisher(statePtr); } - dyknow::Publisher create_publisher(PublisherState* statePtr) { - auto iter = publisherMap.find(statePtr->channel); - if (iter != publisherMap.end()) { - RCLCPP_WARN(this->get_logger(), "Output channel %s already exists", statePtr->channel.c_str()); - delete publisherMap[statePtr->channel]; - publisherMap[statePtr->channel] = statePtr; - return dyknow::Publisher(statePtr); - } else { - pubCount++; - publisherMap[statePtr->channel] = statePtr; - return dyknow::Publisher(statePtr); - } - } - + dyknow::Publisher create_publisher(PublisherState* statePtr); - bool getConfigCallback(const std::shared_ptr<dyknow_interfaces::srv::GetConfig::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetConfig::Response> res) { - res->inputs = getInputs(); - res->outputs = getOutputs(); - res->success = true; - return true; - } - // I propose an experiment, I will atempt to move this function to the source and i will se what gose wrong. Great success! cmake now works + bool getConfigCallback(const std::shared_ptr<dyknow_interfaces::srv::GetConfig::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetConfig::Response> res); std::vector<std::string> getInputs(); - /* - std::vector<std::string> getInputs() { - std::vector<std::string> inputs; - for(auto& subPair : subscriberMap) { - inputs.push_back(subPair.second->getTopic()); - } - return inputs; - } - */ - + std::vector<std::string> getOutputs(); - // std::vector<std::string> getOutputs() { - // std::vector<std::string> outputs; - // for(auto& pubPair : publisherMap) { - // outputs.push_back(pubPair.second->getTopic()); - // } - // return outputs; - // } - - void connectInput(std::string channel, std::string topic) { - auto iter = subscriberMap.find(channel); - if(iter != subscriberMap.end()) { - iter->second->createSubscriber(topic, iter->second->size == 0 ? DEFAULT_QUEUE_SIZE : iter->second->size); - } - else { - if(channel.at(0) != '_') { - RCLCPP_WARN(this->get_logger(), "Could not find a Subscriber for input channel %s", channel.c_str()); - } - } - } + + + void connectInput(std::string channel, std::string topic); template<class M, class T> void delegateSubscribe(std::string topic, uint32_t queueSize, void(T::*fp)(std::shared_ptr<M>&), T* obj, SubscriberState* statePtr, bool decorate = true) { @@ -169,17 +113,7 @@ public: statePtr->connected = true; } - void connectOutput(std::string channel, std::string topic) { - auto iter = publisherMap.find(channel); - if(iter != publisherMap.end()) { - iter->second->createPublisher(topic, iter->second->size == 0 ? DEFAULT_QUEUE_SIZE : iter->second->size); - } - else { - if(channel.at(0) != '/') { - RCLCPP_WARN(this->get_logger(), "Could not find a Publisher for output channel %s", channel.c_str()); - } - } - } + void connectOutput(std::string channel, std::string topic); template<class M> void delegateAdvertise(std::string topic, uint32_t queueSize, PublisherState* statePtr, bool latch = false) { @@ -189,80 +123,11 @@ public: } - bool configureCallback(const std::shared_ptr<dyknow_interfaces::srv::Configure::Request> req, std::shared_ptr<dyknow_interfaces::srv::Configure::Response> res) { - std::map<std::string, std::string> incoming; - std::map<std::string, std::string> outgoing; - - if(req->config.in_names.size() == req->config.in_channels.size()) { - for(size_t i = 0; i < req->config.in_names.size(); ++i) { - std::stringstream ss; - ss << i; - std::string port = "_" + ss.str(); - - connectInput(req->config.in_channels[i].empty() ? port : req->config.in_channels[i], req->config.in_names[i]); - incoming[req->config.in_channels[i].empty() ? port : req->config.in_channels[i]] = req->config.in_names[i]; - } - } - else { - RCLCPP_WARN(this->get_logger(), "Number of incoming topics does not match number of incoming channels: skipping"); - } - - if(req->config.out_names.size() == req->config.out_channels.size()) { - for(size_t i = 0; i < req->config.out_names.size(); ++i) { - std::stringstream ss; - ss << i; - std::string port = "/" + ss.str(); + bool configureCallback(const std::shared_ptr<dyknow_interfaces::srv::Configure::Request> req, std::shared_ptr<dyknow_interfaces::srv::Configure::Response> res); - connectOutput(req->config.out_channels[i].empty() ? port : req->config.out_channels[i], req->config.out_names[i]); - outgoing[req->config.out_channels[i].empty() ? port : req->config.out_channels[i]] = req->config.out_names[i]; - } - } - else { - RCLCPP_WARN(this->get_logger(), "Number of outgoing topics does not match number of outgoing channels: skipping"); - } + // dyknow::Timer createTimer(TimerState* statePtr); // TODO this is yet to be implemented - if(this->reconfigCallbackFn != NULL) { - this->reconfigCallbackFn(incoming, outgoing); - } - reconfigCount++; - res->success = true; - return true; - } - - void analyticsCallback() { - dyknow_analytics::msg::MonitorSet msg; - msg.received = 0; - msg.sent = 0; - - for(auto* timer : timers) { - auto trace = timer->collectTrace(); - for(auto& pair : trace) { - dyknow_analytics::msg::MonitorPair monitorPair; - monitorPair.first = pair.first.toMsg(); - monitorPair.second = pair.second.toMsg(); - msg.monitors.push_back(monitorPair); - } - } - - for(auto& subPair : subscriberMap) { - auto trace = subPair.second->collectTrace(); - for(auto& pair : trace) { - dyknow_analytics::msg::MonitorPair monitorPair; - monitorPair.first = pair.first.toMsg(); - monitorPair.second = pair.second.toMsg(); - msg.monitors.push_back(monitorPair); - } - msg.received += subPair.second->received; - } - - for(auto& pubPair : publisherMap) { - msg.sent += pubPair.second->sent; - } - - if(this->ready) { - analyticsPublisher->publish(msg); - } - } + void analyticsCallback() ; private: diff --git a/src/dyknow_nodehandle/src/node.cpp b/src/dyknow_nodehandle/src/node.cpp index 29e0adcbc7c44ca6f386f529d5bfe39e399c3cf8..4f7dbbfead4dbc5c7bf1d98611cfbe6b1811112b 100644 --- a/src/dyknow_nodehandle/src/node.cpp +++ b/src/dyknow_nodehandle/src/node.cpp @@ -3,8 +3,59 @@ namespace dyknow{ + dyknow::Subscriber Node::create_subscription(SubscriberState* statePtr) { + auto iter = subscriberMap.find(statePtr->channel); + if (iter != subscriberMap.end()) { + RCLCPP_WARN(this->get_logger(), "Input channel %s already exists", statePtr->channel.c_str()); + delete subscriberMap[statePtr->channel]; + subscriberMap[statePtr->channel] = statePtr; + return dyknow::Subscriber(iter->second); + } else { + subCount++; + subscriberMap[statePtr->channel] = statePtr; + return dyknow::Subscriber(statePtr); + } + } + + dyknow::Publisher Node::create_publisher(PublisherState* statePtr) { + auto iter = publisherMap.find(statePtr->channel); + if (iter != publisherMap.end()) { + RCLCPP_WARN(this->get_logger(), "Output channel %s already exists", statePtr->channel.c_str()); + delete publisherMap[statePtr->channel]; + publisherMap[statePtr->channel] = statePtr; + return dyknow::Publisher(statePtr); + } else { + pubCount++; + publisherMap[statePtr->channel] = statePtr; + return dyknow::Publisher(statePtr); + } + } + + void Node::connectInput(std::string channel, std::string topic) { + auto iter = subscriberMap.find(channel); + if(iter != subscriberMap.end()) { + iter->second->createSubscriber(topic, iter->second->size == 0 ? DEFAULT_QUEUE_SIZE : iter->second->size); + } + else { + if(channel.at(0) != '_') { + RCLCPP_WARN(this->get_logger(), "Could not find a Subscriber for input channel %s", channel.c_str()); + } + } + } + + void Node::connectOutput(std::string channel, std::string topic) { + auto iter = publisherMap.find(channel); + if(iter != publisherMap.end()) { + iter->second->createPublisher(topic, iter->second->size == 0 ? DEFAULT_QUEUE_SIZE : iter->second->size); + } + else { + if(channel.at(0) != '/') { + RCLCPP_WARN(this->get_logger(), "Could not find a Publisher for output channel %s", channel.c_str()); + } + } + } - std::vector<std::string> Node::getInputs() { + std::vector<std::string> Node::getInputs() { std::vector<std::string> inputs; for(auto& subPair : subscriberMap) { inputs.push_back(subPair.second->getTopic()); @@ -20,7 +71,91 @@ namespace dyknow{ return outputs; } - + bool Node::getConfigCallback(const std::shared_ptr<dyknow_interfaces::srv::GetConfig::Request> req, std::shared_ptr<dyknow_interfaces::srv::GetConfig::Response> res) { + res->inputs = getInputs(); + res->outputs = getOutputs(); + res->success = true; + return true; + } + + bool Node::configureCallback(const std::shared_ptr<dyknow_interfaces::srv::Configure::Request> req, std::shared_ptr<dyknow_interfaces::srv::Configure::Response> res) { + std::map<std::string, std::string> incoming; + std::map<std::string, std::string> outgoing; + + if(req->config.in_names.size() == req->config.in_channels.size()) { + for(size_t i = 0; i < req->config.in_names.size(); ++i) { + std::stringstream ss; + ss << i; + std::string port = "_" + ss.str(); + + connectInput(req->config.in_channels[i].empty() ? port : req->config.in_channels[i], req->config.in_names[i]); + incoming[req->config.in_channels[i].empty() ? port : req->config.in_channels[i]] = req->config.in_names[i]; + } + } + else { + RCLCPP_WARN(this->get_logger(), "Number of incoming topics does not match number of incoming channels: skipping"); + } + + if(req->config.out_names.size() == req->config.out_channels.size()) { + for(size_t i = 0; i < req->config.out_names.size(); ++i) { + std::stringstream ss; + ss << i; + std::string port = "/" + ss.str(); + + connectOutput(req->config.out_channels[i].empty() ? port : req->config.out_channels[i], req->config.out_names[i]); + outgoing[req->config.out_channels[i].empty() ? port : req->config.out_channels[i]] = req->config.out_names[i]; + } + } + else { + RCLCPP_WARN(this->get_logger(), "Number of outgoing topics does not match number of outgoing channels: skipping"); + } + + if(this->reconfigCallbackFn != NULL) { + this->reconfigCallbackFn(incoming, outgoing); + } + reconfigCount++; + res->success = true; + return true; + } + + void Node::analyticsCallback() { + dyknow_analytics::msg::MonitorSet msg; + msg.received = 0; + msg.sent = 0; + + for(auto* timer : timers) { + auto trace = timer->collectTrace(); + for(auto& pair : trace) { + dyknow_analytics::msg::MonitorPair monitorPair; + monitorPair.first = pair.first.toMsg(); + monitorPair.second = pair.second.toMsg(); + msg.monitors.push_back(monitorPair); + } + } + + for(auto& subPair : subscriberMap) { + auto trace = subPair.second->collectTrace(); + for(auto& pair : trace) { + dyknow_analytics::msg::MonitorPair monitorPair; + monitorPair.first = pair.first.toMsg(); + monitorPair.second = pair.second.toMsg(); + msg.monitors.push_back(monitorPair); + } + msg.received += subPair.second->received; + } + + for(auto& pubPair : publisherMap) { + msg.sent += pubPair.second->sent; + } + + if(this->ready) { + analyticsPublisher->publish(msg); + } + } + + + + }