From e46e08390807baab41a740143c6324796802e6b2 Mon Sep 17 00:00:00 2001 From: Rainer Kartmann <rainer.kartmann@kit.edu> Date: Wed, 13 May 2020 10:21:50 +0200 Subject: [PATCH] Add ObjectPoseObserver component --- source/RobotAPI/components/CMakeLists.txt | 1 + .../ObjectPoseObserver/CMakeLists.txt | 34 +++++ .../ObjectPoseObserver/ObjectPoseObserver.cpp | 118 ++++++++++++++++++ .../ObjectPoseObserver/ObjectPoseObserver.h | 109 ++++++++++++++++ .../components/ObjectPoseObserver/main.cpp | 32 +++++ .../ObjectPoseObserver/test/CMakeLists.txt | 5 + .../test/ObjectPoseObserverTest.cpp | 37 ++++++ 7 files changed, 336 insertions(+) create mode 100644 source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt create mode 100644 source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp create mode 100644 source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h create mode 100644 source/RobotAPI/components/ObjectPoseObserver/main.cpp create mode 100644 source/RobotAPI/components/ObjectPoseObserver/test/CMakeLists.txt create mode 100644 source/RobotAPI/components/ObjectPoseObserver/test/ObjectPoseObserverTest.cpp diff --git a/source/RobotAPI/components/CMakeLists.txt b/source/RobotAPI/components/CMakeLists.txt index a001f08c8..e3adea9f2 100644 --- a/source/RobotAPI/components/CMakeLists.txt +++ b/source/RobotAPI/components/CMakeLists.txt @@ -13,6 +13,7 @@ add_subdirectory(KITHandUnit) add_subdirectory(KITProstheticHandUnit) add_subdirectory(MultiHandUnit) add_subdirectory(NaturalIKTest) +add_subdirectory(ObjectPoseObserver) add_subdirectory(RobotHealth) add_subdirectory(RobotNameService) add_subdirectory(RobotState) diff --git a/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt b/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt new file mode 100644 index 000000000..0da706a1c --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/CMakeLists.txt @@ -0,0 +1,34 @@ +armarx_component_set_name("ObjectPoseObserver") + + +set(COMPONENT_LIBS + ArmarXCore ArmarXCoreInterfaces + RobotAPIComponentPlugins + + ${PROJECT_NAME}Interfaces +) + +set(SOURCES + ObjectPoseObserver.cpp +) +set(HEADERS + ObjectPoseObserver.h +) + + +armarx_add_component("${SOURCES}" "${HEADERS}") + +#find_package(MyLib QUIET) +#armarx_build_if(MyLib_FOUND "MyLib not available") +# all target_include_directories must be guarded by if(Xyz_FOUND) +# for multiple libraries write: if(X_FOUND AND Y_FOUND).... +#if(MyLib_FOUND) +# target_include_directories(ObjectPoseObserver PUBLIC ${MyLib_INCLUDE_DIRS}) +#endif() + +# add unit tests +add_subdirectory(test) + +armarx_component_set_name("ObjectPoseObserverApp") +set(COMPONENT_LIBS ObjectPoseObserver) +armarx_add_component_executable(main.cpp) diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp new file mode 100644 index 000000000..4bfd62e21 --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.cpp @@ -0,0 +1,118 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::ObjectPoseObserver + * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) + * @date 2020 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#include "ObjectPoseObserver.h" + + +namespace armarx +{ + ObjectPoseObserverPropertyDefinitions::ObjectPoseObserverPropertyDefinitions(std::string prefix) : + armarx::ObserverPropertyDefinitions(prefix) + { + } + + armarx::PropertyDefinitionsPtr ObjectPoseObserver::createPropertyDefinitions() + { + armarx::PropertyDefinitionsPtr defs(new ObjectPoseObserverPropertyDefinitions(getConfigIdentifier())); + + return defs; + } + + + std::string ObjectPoseObserver::getDefaultName() const + { + return "ObjectPoseObserver"; + } + + void ObjectPoseObserver::onInitObserver() + { + } + + void ObjectPoseObserver::onConnectObserver() + { + } + + void ObjectPoseObserver::onDisconnectComponent() + { + } + + void ObjectPoseObserver::onExitObserver() + { + } + + + void ObjectPoseObserver::reportProviderInfo(const std::string& providerName, const objpose::ProviderInfo& info, const Ice::Current&) + { + + } + + void ObjectPoseObserver::reportObjectPoses(const std::string& providerName, const objpose::ObjectPoseSeq& candidates, const Ice::Current&) + { + + } + + objpose::InfoMap ObjectPoseObserver::getAvailableProvidersWithInfo(const Ice::Current&) + { + return {}; + } + + Ice::StringSeq ObjectPoseObserver::getAvailableProviderNames(const Ice::Current&) + { + return {}; + } + + objpose::ProviderInfo ObjectPoseObserver::getProviderInfo(const std::string& providerName, const Ice::Current&) + { + return {}; + } + + bool ObjectPoseObserver::hasProvider(const std::string& providerName, const Ice::Current&) + { + return {}; + } + + objpose::ObjectPoseSeq ObjectPoseObserver::getObjectPoses(const Ice::Current&) + { + return {}; + } + + objpose::ObjectPoseSeq ObjectPoseObserver::getObjectPosesByProvider(const std::string& providerName, const Ice::Current&) + { + return {}; + } + + Ice::Int ObjectPoseObserver::getUpdateCounterByProvider(const std::string& providerName, const Ice::Current&) + { + return {}; + } + + StringIntDictionary ObjectPoseObserver::getAllUpdateCounters(const Ice::Current&) + { + return {}; + } + + bool ObjectPoseObserver::setProviderConfig(const std::string& providerName, const StringVariantBaseMap& config, const Ice::Current&) + { + return {}; + } + +} diff --git a/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h new file mode 100644 index 000000000..e00b4bc45 --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h @@ -0,0 +1,109 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::ObjectPoseObserver + * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) + * @date 2020 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#pragma once + + +#include <ArmarXCore/observers/Observer.h> + +#include <RobotAPI/interface/objectpose/ObjectPoseObserver.h> +#include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h> + +#define ICE_CURRENT_ARG const Ice::Current& = Ice::emptyCurrent + + +namespace armarx +{ + /** + * @class ObjectPoseObserverPropertyDefinitions + * @brief Property definitions of `ObjectPoseObserver`. + */ + class ObjectPoseObserverPropertyDefinitions : + public ObserverPropertyDefinitions + { + public: + ObjectPoseObserverPropertyDefinitions(std::string prefix); + }; + + + + /** + * @defgroup Component-ObjectPoseObserver ObjectPoseObserver + * @ingroup RobotAPI-Components + * A description of the component ObjectPoseObserver. + * + * @class ObjectPoseObserver + * @ingroup Component-ObjectPoseObserver + * @brief Brief description of class ObjectPoseObserver. + * + * Detailed description of class ObjectPoseObserver. + */ + class ObjectPoseObserver : + virtual public Observer + , virtual public objpose::ObjectPoseObserverInterface + , virtual public armarx::ArVizComponentPluginUser + { + public: + + /// @see armarx::ManagedIceObject::getDefaultName() + std::string getDefaultName() const override; + + + // ObjectPoseTopic interface + public: + void reportProviderInfo(const std::string& providerName, const objpose::ProviderInfo& info, ICE_CURRENT_ARG) override; + void reportObjectPoses(const std::string& providerName, const objpose::ObjectPoseSeq& candidates, ICE_CURRENT_ARG) override; + + // ObjectPoseObserverInterface interface + public: + objpose::InfoMap getAvailableProvidersWithInfo(ICE_CURRENT_ARG) override; + Ice::StringSeq getAvailableProviderNames(ICE_CURRENT_ARG) override; + objpose::ProviderInfo getProviderInfo(const std::string& providerName, ICE_CURRENT_ARG) override; + bool hasProvider(const std::string& providerName, ICE_CURRENT_ARG) override; + + objpose::ObjectPoseSeq getObjectPoses(ICE_CURRENT_ARG) override; + objpose::ObjectPoseSeq getObjectPosesByProvider(const std::string& providerName, ICE_CURRENT_ARG) override; + + Ice::Int getUpdateCounterByProvider(const std::string& providerName, ICE_CURRENT_ARG) override; + StringIntDictionary getAllUpdateCounters(ICE_CURRENT_ARG) override; + bool setProviderConfig(const std::string& providerName, const StringVariantBaseMap& config, ICE_CURRENT_ARG) override; + + + protected: + + void onInitObserver() override; + void onConnectObserver() override; + + void onDisconnectComponent() override; + void onExitObserver() override; + + armarx::PropertyDefinitionsPtr createPropertyDefinitions() override; + + + private: + + + }; + +} + +#undef ICE_CURRENT_ARG diff --git a/source/RobotAPI/components/ObjectPoseObserver/main.cpp b/source/RobotAPI/components/ObjectPoseObserver/main.cpp new file mode 100644 index 000000000..d83c2d5e8 --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/main.cpp @@ -0,0 +1,32 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::application::ObjectPoseObserver + * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) + * @date 2020 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#include <RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h> + +#include <ArmarXCore/core/application/Application.h> +#include <ArmarXCore/core/Component.h> +#include <ArmarXCore/core/logging/Logging.h> + +int main(int argc, char* argv[]) +{ + return armarx::runSimpleComponentApp < armarx::ObjectPoseObserver > (argc, argv, "ObjectPoseObserver"); +} diff --git a/source/RobotAPI/components/ObjectPoseObserver/test/CMakeLists.txt b/source/RobotAPI/components/ObjectPoseObserver/test/CMakeLists.txt new file mode 100644 index 000000000..878921745 --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/test/CMakeLists.txt @@ -0,0 +1,5 @@ + +# Libs required for the tests +SET(LIBS ${LIBS} ArmarXCore ObjectPoseObserver) + +armarx_add_test(ObjectPoseObserverTest ObjectPoseObserverTest.cpp "${LIBS}") diff --git a/source/RobotAPI/components/ObjectPoseObserver/test/ObjectPoseObserverTest.cpp b/source/RobotAPI/components/ObjectPoseObserver/test/ObjectPoseObserverTest.cpp new file mode 100644 index 000000000..c75c9d76a --- /dev/null +++ b/source/RobotAPI/components/ObjectPoseObserver/test/ObjectPoseObserverTest.cpp @@ -0,0 +1,37 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package RobotAPI::ArmarXObjects::ObjectPoseObserver + * @author Rainer Kartmann ( rainer dot kartmann at kit dot edu ) + * @date 2020 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#define BOOST_TEST_MODULE RobotAPI::ArmarXObjects::ObjectPoseObserver + +#define ARMARX_BOOST_TEST + +#include <RobotAPI/Test.h> +#include <RobotAPI/components/ObjectPoseObserver/ObjectPoseObserver.h> + +#include <iostream> + +BOOST_AUTO_TEST_CASE(testExample) +{ + armarx::ObjectPoseObserver instance; + + BOOST_CHECK_EQUAL(true, true); +} -- GitLab