From 5d2d2f303f7039c632bb51f9439c9e1b9e7f57e0 Mon Sep 17 00:00:00 2001 From: ARMAR-7a User <armar7a@h2t> Date: Tue, 21 Nov 2023 09:37:12 +0100 Subject: [PATCH] changes from A7 pc1 --- .../RobotNameService/RobotNameService.cpp | 10 ++-- .../RobotNameService/RobotNameService.h | 12 ++--- .../RobotNameServiceInterface.ice | 42 +++++++++++------ .../libraries/armem_robot/aron/Robot.xml | 1 - .../robot_name_service/client/Plugin.cpp | 10 ++-- .../robot_name_service/client/Plugin.h | 2 +- .../robot_name_service/core/CMakeLists.txt | 10 ++++ .../robot_name_service/core/Robot.cpp | 46 +++++++++---------- .../libraries/robot_name_service/core/Robot.h | 26 +++++------ .../robot_name_service/core/aron/Robot.xml | 40 ++++++++++++++++ .../core/aron_conversions.cpp | 6 +++ .../core/aron_conversions.h | 14 ++++++ .../robot_name_service/server/CMakeLists.txt | 2 + .../server/segments/RobotSegment.cpp | 6 +++ .../server/segments/RobotSegment.h | 17 +++++++ 15 files changed, 174 insertions(+), 70 deletions(-) create mode 100644 source/RobotAPI/libraries/robot_name_service/core/aron/Robot.xml create mode 100644 source/RobotAPI/libraries/robot_name_service/core/aron_conversions.cpp create mode 100644 source/RobotAPI/libraries/robot_name_service/core/aron_conversions.h create mode 100644 source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.cpp create mode 100644 source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.h diff --git a/source/RobotAPI/components/RobotNameService/RobotNameService.cpp b/source/RobotAPI/components/RobotNameService/RobotNameService.cpp index 9ab8e07d7..397a63891 100644 --- a/source/RobotAPI/components/RobotNameService/RobotNameService.cpp +++ b/source/RobotAPI/components/RobotNameService/RobotNameService.cpp @@ -54,8 +54,8 @@ namespace armarx } bool - RobotNameService::registerRobot(const robot_name_service::dto::Robot& robot, - const Ice::Current& current) + RobotNameService::registerRobotInfo(const robot_name_service::dto::RobotInfo& robot, + const Ice::Current& current) { std::scoped_lock l(robotsMutex); ARMARX_INFO << "Register a new robot with name '" << robot.name << "' in RNS"; @@ -72,7 +72,7 @@ namespace armarx } void - RobotNameService::unregisterRobot(const std::string& name, const Ice::Current& current) + RobotNameService::unregisterRobotInfo(const std::string& name, const Ice::Current& current) { std::scoped_lock l(robotsMutex); @@ -82,8 +82,8 @@ namespace armarx } } - IceUtil::Optional<robot_name_service::dto::Robot> - RobotNameService::getRobot(const std::string& name, const Ice::Current& current) + IceUtil::Optional<robot_name_service::dto::RobotInfo> + RobotNameService::getRobotInfo(const std::string& name, const Ice::Current& current) { std::scoped_lock l(robotsMutex); diff --git a/source/RobotAPI/components/RobotNameService/RobotNameService.h b/source/RobotAPI/components/RobotNameService/RobotNameService.h index 7af787aef..6cc056c19 100644 --- a/source/RobotAPI/components/RobotNameService/RobotNameService.h +++ b/source/RobotAPI/components/RobotNameService/RobotNameService.h @@ -87,14 +87,14 @@ namespace armarx // RobotNameServiceInterface interface public: - bool registerRobot(const robot_name_service::dto::Robot& robot, - const Ice::Current& current) override; - void unregisterRobot(const std::string& name, const Ice::Current& current) override; - IceUtil::Optional<robot_name_service::dto::Robot> - getRobot(const std::string& name, const Ice::Current& current) override; + bool registerRobotInfo(const robot_name_service::dto::RobotInfo& robot, + const Ice::Current& current) override; + void unregisterRobotInfo(const std::string& name, const Ice::Current& current) override; + IceUtil::Optional<robot_name_service::dto::RobotInfo> + getRobotInfo(const std::string& name, const Ice::Current& current) override; private: mutable std::mutex robotsMutex; - std::map<std::string, robot_name_service::core::Robot> robots; + std::map<std::string, robot_name_service::core::RobotInfo> robots; }; } // namespace armarx diff --git a/source/RobotAPI/interface/robot_name_service/RobotNameServiceInterface.ice b/source/RobotAPI/interface/robot_name_service/RobotNameServiceInterface.ice index 7891ed5db..5fb248cd5 100644 --- a/source/RobotAPI/interface/robot_name_service/RobotNameServiceInterface.ice +++ b/source/RobotAPI/interface/robot_name_service/RobotNameServiceInterface.ice @@ -27,10 +27,12 @@ #include <RobotAPI/interface/armem/mns.ice> #include <RobotAPI/interface/skills/SkillManagerInterface.ice> +#include <RobotAPI/interface/units/ForceTorqueUnit.ice> #include <RobotAPI/interface/units/HandUnitInterface.ice> #include <RobotAPI/interface/units/KinematicUnitInterface.ice> #include <RobotAPI/interface/units/LocalizationUnitInterface.ice> #include <RobotAPI/interface/units/PlatformUnitInterface.ice> +#include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.ice> module armarx { @@ -39,24 +41,38 @@ module armarx module dto { - struct Hand + module location + { + enum Side + { + LEFT, + RIGHT, + UNKNOWN + }; + }; + + struct TCPInfo { string name; string ft_name; + location::Side side; HandUnitInterface* handUnitInterface; }; - dictionary<string, Hand> Hands; + // maps tcp name to tcp + dictionary<string, TCPInfo> TCPInfos; - struct Arm + struct ArmInfo { string kinematicChainName; - Hand hand; + location::Side side; + TCPInfo tcpInfo; }; - dictionary<string, Arm> Arms; + // maps kinematic chain name to arm + dictionary<string, ArmInfo> ArmInfos; - struct Robot + struct RobotInfo { string name; armarx::data::PackagePath xmlPackagePath; @@ -66,12 +82,10 @@ module armarx armarx::skills::manager::dti::SkillManagerInterface* skillManager; // kinematic stuff. MAY BE EMPTY - Arms arms; + ArmInfos armInfos; - // units. MAY BE NULL - armarx::KinematicUnitInterface* kinematicUnitInterface; - armarx::PlatformUnitInterface* platformUnitInterface; - armarx::LocalizationUnitInterface* localizationUnitInterface; + // RobotUnit + armarx::RobotUnitInterface* robotUnit; // TODO: Feel free to extend! }; @@ -81,9 +95,9 @@ module armarx { interface RobotNameServiceInterface { - bool registerRobot(dto::Robot robot); - void unregisterRobot(string name); - optional(1) dto::Robot getRobot(string name); + bool registerRobotInfo(dto::RobotInfo robot); + void unregisterRobotInfo(string name); + optional(1) dto::RobotInfo getRobotInfo(string name); }; }; }; diff --git a/source/RobotAPI/libraries/armem_robot/aron/Robot.xml b/source/RobotAPI/libraries/armem_robot/aron/Robot.xml index 7303d707d..b7192c366 100644 --- a/source/RobotAPI/libraries/armem_robot/aron/Robot.xml +++ b/source/RobotAPI/libraries/armem_robot/aron/Robot.xml @@ -1,4 +1,3 @@ -<!--This class contains the data structure for ObjectPose --> <?xml version="1.0" encoding="UTF-8" ?> <AronTypeDefinition> <AronIncludes> diff --git a/source/RobotAPI/libraries/robot_name_service/client/Plugin.cpp b/source/RobotAPI/libraries/robot_name_service/client/Plugin.cpp index 89f973a6e..0f944891c 100644 --- a/source/RobotAPI/libraries/robot_name_service/client/Plugin.cpp +++ b/source/RobotAPI/libraries/robot_name_service/client/Plugin.cpp @@ -19,6 +19,8 @@ namespace armarx::plugins { using namespace armarx::robot_name_service::client::constants; + ARMARX_INFO << "Got as config: " << properties.configJson; + nlohmann::json config = nlohmann::json::parse(properties.configJson); if (config.contains(CONFIG_ROBOT_NAME)) @@ -53,7 +55,7 @@ namespace armarx::plugins { for (const auto& [k, config_arm] : config[CONFIG_ARMS].items()) { - auto& arm = robot.arms[k]; + auto& arm = robot.armInfos[k]; if (config_arm.contains(CONFIG_ARM_KINEMATIC_CHAIN_NAME)) { @@ -109,7 +111,7 @@ namespace armarx::plugins { for (const auto& [k, config_arm] : config[CONFIG_ARMS].items()) { - auto& arm = robot.arms[k]; + auto& arm = robot.armInfos[k]; if (config_arm.contains(CONFIG_ARM_HAND)) { @@ -126,7 +128,7 @@ namespace armarx::plugins } // finally commit robot - properties.rns->registerRobot(robot.toIce()); + properties.rns->registerRobotInfo(robot.toIce()); } void @@ -139,7 +141,7 @@ namespace armarx::plugins void RobotNameServiceComponentPlugin::preOnDisconnectComponent() { - properties.rns->unregisterRobot(robot.name); + properties.rns->unregisterRobotInfo(robot.name); } } // namespace armarx::plugins diff --git a/source/RobotAPI/libraries/robot_name_service/client/Plugin.h b/source/RobotAPI/libraries/robot_name_service/client/Plugin.h index 813003f98..5d59cd16f 100644 --- a/source/RobotAPI/libraries/robot_name_service/client/Plugin.h +++ b/source/RobotAPI/libraries/robot_name_service/client/Plugin.h @@ -60,7 +60,7 @@ namespace armarx::plugins armarx::robot_name_service::dti::RobotNameServiceInterfacePrx rns; } properties; - armarx::robot_name_service::core::Robot robot; + armarx::robot_name_service::core::RobotInfo robot; friend class armarx::RobotNameServiceComponentPluginUser; }; diff --git a/source/RobotAPI/libraries/robot_name_service/core/CMakeLists.txt b/source/RobotAPI/libraries/robot_name_service/core/CMakeLists.txt index 6c702dd1e..19ac42cfe 100644 --- a/source/RobotAPI/libraries/robot_name_service/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/robot_name_service/core/CMakeLists.txt @@ -17,8 +17,18 @@ armarx_add_library( SOURCES Robot.cpp + aron_conversions.cpp HEADERS Robot.h + aron_conversions.h +) + +armarx_enable_aron_file_generation_for_target( + TARGET_NAME + "${LIB_NAME}" + ARON_FILES + aron/Robot.xml ) add_library(RobotAPI::robot_name_service_core ALIAS robot_name_service_core) + diff --git a/source/RobotAPI/libraries/robot_name_service/core/Robot.cpp b/source/RobotAPI/libraries/robot_name_service/core/Robot.cpp index bfa5fbfe5..11978184a 100644 --- a/source/RobotAPI/libraries/robot_name_service/core/Robot.cpp +++ b/source/RobotAPI/libraries/robot_name_service/core/Robot.cpp @@ -4,17 +4,17 @@ namespace armarx::robot_name_service::core { void - Hand::fromIce(const dto::Hand& r) + TCPInfo::fromIce(const dto::TCPInfo& r) { name = r.name; ft_name = r.ft_name; handUnitInterface = r.handUnitInterface; } - dto::Hand - Hand::toIce() const + dto::TCPInfo + TCPInfo::toIce() const { - dto::Hand r; + dto::TCPInfo r; r.name = name; r.ft_name = ft_name; r.handUnitInterface = handUnitInterface; @@ -22,57 +22,53 @@ namespace armarx::robot_name_service::core } void - Arm::fromIce(const dto::Arm& r) + ArmInfo::fromIce(const dto::ArmInfo& r) { kinematicChainName = r.kinematicChainName; - hand.fromIce(r.hand); + hand.fromIce(r.tcpInfo); } - dto::Arm - Arm::toIce() const + dto::ArmInfo + ArmInfo::toIce() const { - dto::Arm r; + dto::ArmInfo r; r.kinematicChainName = kinematicChainName; - r.hand = hand.toIce(); + r.tcpInfo = hand.toIce(); return r; } void - Robot::fromIce(const dto::Robot& r) + RobotInfo::fromIce(const dto::RobotInfo& r) { name = r.name; xmlPackagePath = r.xmlPackagePath; memoryNameSystem = armarx::armem::client::MemoryNameSystem(r.memoryNameSystem); skillManager = r.skillManager; - arms.clear(); - for (const auto& [k, a] : r.arms) + armInfos.clear(); + for (const auto& [k, a] : r.armInfos) { - arms[k].fromIce(a); + armInfos[k].fromIce(a); } - kinematicUnitInterface = r.kinematicUnitInterface; - platformUnitInterface = r.platformUnitInterface; - localizationUnitInterface = r.localizationUnitInterface; + robotUnit = r.robotUnit; } - dto::Robot - Robot::toIce() const + dto::RobotInfo + RobotInfo::toIce() const { - dto::Robot r; + dto::RobotInfo r; r.name = name; r.xmlPackagePath = xmlPackagePath; r.memoryNameSystem = memoryNameSystem.getMemoryNameSystem(); r.skillManager = skillManager; - for (const auto& [k, a] : arms) + for (const auto& [k, a] : armInfos) { - r.arms[k] = a.toIce(); + r.armInfos[k] = a.toIce(); } - r.kinematicUnitInterface = kinematicUnitInterface; - r.platformUnitInterface = platformUnitInterface; - r.localizationUnitInterface = localizationUnitInterface; + r.robotUnit = robotUnit; return r; } diff --git a/source/RobotAPI/libraries/robot_name_service/core/Robot.h b/source/RobotAPI/libraries/robot_name_service/core/Robot.h index 243d94c1b..4dedb60a9 100644 --- a/source/RobotAPI/libraries/robot_name_service/core/Robot.h +++ b/source/RobotAPI/libraries/robot_name_service/core/Robot.h @@ -10,11 +10,11 @@ namespace armarx::robot_name_service::core { - class Hand + class TCPInfo { public: - void fromIce(const armarx::robot_name_service::dto::Hand& r); - armarx::robot_name_service::dto::Hand toIce() const; + void fromIce(const armarx::robot_name_service::dto::TCPInfo& r); + armarx::robot_name_service::dto::TCPInfo toIce() const; public: std::string name; @@ -22,22 +22,22 @@ namespace armarx::robot_name_service::core armarx::HandUnitInterfacePrx handUnitInterface; }; - class Arm + class ArmInfo { public: - void fromIce(const armarx::robot_name_service::dto::Arm& r); - armarx::robot_name_service::dto::Arm toIce() const; + void fromIce(const armarx::robot_name_service::dto::ArmInfo& r); + armarx::robot_name_service::dto::ArmInfo toIce() const; public: std::string kinematicChainName; - Hand hand; + TCPInfo hand; }; - class Robot + class RobotInfo { public: - void fromIce(const armarx::robot_name_service::dto::Robot& r); - armarx::robot_name_service::dto::Robot toIce() const; + void fromIce(const armarx::robot_name_service::dto::RobotInfo& r); + armarx::robot_name_service::dto::RobotInfo toIce() const; public: // header @@ -49,11 +49,9 @@ namespace armarx::robot_name_service::core armarx::skills::manager::dti::SkillManagerInterfacePrx skillManager; // kinematic stuff - std::map<std::string, Arm> arms; + std::map<std::string, ArmInfo> armInfos; // units - armarx::KinematicUnitInterfacePrx kinematicUnitInterface; - armarx::PlatformUnitInterfacePrx platformUnitInterface; - armarx::LocalizationUnitInterfacePrx localizationUnitInterface; + armarx::RobotUnitInterfacePrx robotUnit; }; } // namespace armarx::robot_name_service::core diff --git a/source/RobotAPI/libraries/robot_name_service/core/aron/Robot.xml b/source/RobotAPI/libraries/robot_name_service/core/aron/Robot.xml new file mode 100644 index 000000000..5b29a3d3c --- /dev/null +++ b/source/RobotAPI/libraries/robot_name_service/core/aron/Robot.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<AronTypeDefinition> + <GenerateTypes> + + <Object name='armarx::robot_name_service::arondto::TCPInfo'> + <ObjectChild key='name'> + <string /> + </ObjectChild> + + </Object> + + <Object name='armarx::robot_name_service::arondto::TCPInfo'> + <ObjectChild key='name'> + <string /> + </ObjectChild> + + <ObjectChild key='ft_name'> + <string /> + </ObjectChild> + + </Object> + + <Object name='armarx::robot_name_service::arondto::ArmInfo'> + <ObjectChild key='kinematicChainName'> + <string /> + </ObjectChild> + + </Object> + + + <Object name='armarx::robot_name_service::arondto::RobotInfo'> + <ObjectChild key='name'> + <string /> + </ObjectChild> + + </Object> + + + </GenerateTypes> +</AronTypeDefinition> diff --git a/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.cpp b/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.cpp new file mode 100644 index 000000000..57d536636 --- /dev/null +++ b/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.cpp @@ -0,0 +1,6 @@ +#include "aron_conversions.h" + +namespace armarx::robot_name_service::core +{ + +} // namespace armarx::robot_name_service::core diff --git a/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.h b/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.h new file mode 100644 index 000000000..4019e276e --- /dev/null +++ b/source/RobotAPI/libraries/robot_name_service/core/aron_conversions.h @@ -0,0 +1,14 @@ +#pragma once + +#include <map> +#include <memory> +#include <string> +#include <vector> + +#include <RobotAPI/interface/robot_name_service/RobotNameServiceInterface.h> +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> + +namespace armarx::robot_name_service::core +{ + +} // namespace armarx::robot_name_service::core diff --git a/source/RobotAPI/libraries/robot_name_service/server/CMakeLists.txt b/source/RobotAPI/libraries/robot_name_service/server/CMakeLists.txt index d0c268aa4..862934fff 100644 --- a/source/RobotAPI/libraries/robot_name_service/server/CMakeLists.txt +++ b/source/RobotAPI/libraries/robot_name_service/server/CMakeLists.txt @@ -18,8 +18,10 @@ armarx_add_library( SOURCES plugins.cpp + segments/RobotSegment.cpp HEADERS plugins.h + segments/RobotSegment.h ) add_library(RobotAPI::robot_name_service_server ALIAS robot_name_service_server) diff --git a/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.cpp b/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.cpp new file mode 100644 index 000000000..9e67bbb25 --- /dev/null +++ b/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.cpp @@ -0,0 +1,6 @@ +#include "RobotSegment.h" + +namespace armarx::robot_name_service::server::segment +{ + +} // namespace armarx::robot_name_service::server::segment diff --git a/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.h b/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.h new file mode 100644 index 000000000..7e9d006f6 --- /dev/null +++ b/source/RobotAPI/libraries/robot_name_service/server/segments/RobotSegment.h @@ -0,0 +1,17 @@ +#pragma once + +#include <map> +#include <memory> +#include <string> +#include <vector> + +#include <RobotAPI/libraries/armem/client/MemoryNameSystem.h> +#include <RobotAPI/libraries/armem/server/segment/SpecializedCoreSegment.h> + +namespace armarx::robot_name_service::server::segment +{ + class RobotInfoCoreSegment : public armarx::armem::server::segment::SpecializedCoreSegment + { + public: + }; +} // namespace armarx::robot_name_service::server::segment -- GitLab