diff --git a/scenarios/GamepadControlUnit/GamepadControlUnit.scx b/scenarios/GamepadControlUnit/GamepadControlUnit.scx new file mode 100644 index 0000000000000000000000000000000000000000..65fb5e9578f7cc759af2a8e3a9460b5fccaaeeb9 --- /dev/null +++ b/scenarios/GamepadControlUnit/GamepadControlUnit.scx @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8"?> +<scenario name="GamepadControlUnit" lastChange="2017-03-10.11:31:35" creation="2017-03-10.11:31:30" globalConfigName="./config/global.cfg" package="RobotAPI"> + <application name="GamepadControlUnitApp" instance="" package="RobotAPI"/> +</scenario> + diff --git a/scenarios/GamepadControlUnit/config/GamepadControlUnitApp.cfg b/scenarios/GamepadControlUnit/config/GamepadControlUnitApp.cfg new file mode 100644 index 0000000000000000000000000000000000000000..3b8084595a3adb135f9a348bde18abb1d9a22649 --- /dev/null +++ b/scenarios/GamepadControlUnit/config/GamepadControlUnitApp.cfg @@ -0,0 +1,172 @@ +# ================================================================== +# GamepadControlUnitApp properties +# ================================================================== + +# ArmarX.AdditionalPackages: List of additional ArmarX packages which should be in the list of default packages. If you have custom packages, which should be found by the gui or other apps, specify them here. Comma separated List. +# Attributes: +# - Default: Default value not mapped. +# - Case sensitivity: no +# - Required: no +# ArmarX.AdditionalPackages = Default value not mapped. + + +# ArmarX.ApplicationName: Application name +# Attributes: +# - Default: "" +# - Case sensitivity: no +# - Required: no +# ArmarX.ApplicationName = "" + + +# ArmarX.CachePath: Path for cache files +# Attributes: +# - Default: ${HOME}/.armarx/mongo/.cache +# - Case sensitivity: no +# - Required: no +# ArmarX.CachePath = ${HOME}/.armarx/mongo/.cache + + +# ArmarX.Config: Comma-separated list of configuration files +# Attributes: +# - Default: "" +# - Case sensitivity: no +# - Required: no +# ArmarX.Config = "" + + +# ArmarX.DataPath: Semicolon-separated search list for data files +# Attributes: +# - Default: "" +# - Case sensitivity: no +# - Required: no +# ArmarX.DataPath = "" + + +# ArmarX.DefaultPackages: List of ArmarX packages which are accessible by default. Comma separated List. If you want to add your own packages and use all default ArmarX packages, use the property 'AdditionalPackages'. +# Attributes: +# - Default: Default value not mapped. +# - Case sensitivity: no +# - Required: no +# ArmarX.DefaultPackages = Default value not mapped. + + +# ArmarX.DependenciesConfig: Path to the (usually generated) config file containing all data paths of all dependent projects. This property usually does not need to be edited. +# Attributes: +# - Default: ./config/dependencies.cfg +# - Case sensitivity: no +# - Required: no +# ArmarX.DependenciesConfig = ./config/dependencies.cfg + + +# ArmarX.DisableLogging: Turn logging off in whole application +# Attributes: +# - Default: 0 +# - Case sensitivity: no +# - Required: no +# ArmarX.DisableLogging = 0 + + +# ArmarX.EnableProfiling: Enable profiling of CPU load produced by this application +# Attributes: +# - Default: 0 +# - Case sensitivity: no +# - Required: no +# ArmarX.EnableProfiling = 0 + + +# ArmarX.GamepadControlUnit.EnableProfiling: enable profiler which is used for logging performance events +# Attributes: +# - Default: 0 +# - Case sensitivity: no +# - Required: no +# ArmarX.GamepadControlUnit.EnableProfiling = 0 + + +# ArmarX.GamepadControlUnit.GamepadTopicName: Name of the Gamepad Topic +# Attributes: +# - Default: GamepadValues +# - Case sensitivity: no +# - Required: no +# ArmarX.GamepadControlUnit.GamepadTopicName = GamepadValues + + +# ArmarX.GamepadControlUnit.MinimumLoggingLevel: Local logging level only for this component +# Attributes: +# - Default: Undefined +# - Case sensitivity: no +# - Required: no +# ArmarX.GamepadControlUnit.MinimumLoggingLevel = Undefined + + +# ArmarX.GamepadControlUnit.ObjectName: Name of IceGrid well-known object +# Attributes: +# - Default: "" +# - Case sensitivity: no +# - Required: no +# ArmarX.GamepadControlUnit.ObjectName = "" + + +# ArmarX.GamepadControlUnit.PlatformUnitName: Name of the platform unit to use +# Attributes: +# - Default: Armar6IcePlatformUnit +# - Case sensitivity: no +# - Required: no +# ArmarX.GamepadControlUnit.PlatformUnitName = Armar6IcePlatformUnit + + +# ArmarX.RedirectStdout: Redirect std::cout and std::cerr to ArmarXLog +# Attributes: +# - Default: 1 +# - Case sensitivity: no +# - Required: no +# ArmarX.RedirectStdout = 1 + + +# ArmarX.RemoteHandlesDeletionTimeout: The timeout (in ms) before a remote handle deletes the managed object after the use count reached 0. This time can be used by a client to increment the count again (may be required when transmitting remote handles) +# Attributes: +# - Default: 3000 +# - Case sensitivity: no +# - Required: no +# ArmarX.RemoteHandlesDeletionTimeout = 3000 + + +# ArmarX.StartDebuggerOnCrash: If this application crashes (segmentation fault) qtcreator will attach to this process and start the debugger. +# Attributes: +# - Default: 0 +# - Case sensitivity: no +# - Required: no +# ArmarX.StartDebuggerOnCrash = 0 + + +# ArmarX.TopicSuffix: Suffix appended to all topic names for outgoing topics. This is mainly used to direct all topics to another name for TopicReplaying purposes. +# Attributes: +# - Default: "" +# - Case sensitivity: no +# - Required: no +# ArmarX.TopicSuffix = "" + + +# ArmarX.UseTimeServer: Enable using a global Timeserver (e.g. from ArmarXSimulator) +# Attributes: +# - Default: 0 +# - Case sensitivity: no +# - Required: no +# ArmarX.UseTimeServer = 0 + + +# ArmarX.Verbosity: Global logging level for whole application +# Attributes: +# - Default: Info +# - Case sensitivity: no +# - Required: no +# ArmarX.Verbosity = Info + + +# Ice.Config: Custom Property +# Attributes: +# - Default: ::NOT_DEFINED:: +# - Case sensitivity: no +# - Required: no +# Ice.Config = ::NOT_DEFINED:: + + diff --git a/scenarios/GamepadControlUnit/config/global.cfg b/scenarios/GamepadControlUnit/config/global.cfg new file mode 100644 index 0000000000000000000000000000000000000000..63a93840d45c08bf2b7cb8f46f8baff8bb30848e --- /dev/null +++ b/scenarios/GamepadControlUnit/config/global.cfg @@ -0,0 +1,7 @@ +# ================================================================== +# Global Config from Scenario GamepadControlUnit +# ================================================================== + + + + diff --git a/source/RobotAPI/applications/CMakeLists.txt b/source/RobotAPI/applications/CMakeLists.txt index 4bc3a6d5fa7813f26a25371165a0dd122d5b60fa..057bcd82fe1e8e3aa35a1e244d2d671360abc9fe 100644 --- a/source/RobotAPI/applications/CMakeLists.txt +++ b/source/RobotAPI/applications/CMakeLists.txt @@ -28,4 +28,5 @@ add_subdirectory(OrientedTactileSensorUnitObserver) add_subdirectory(OptoForceUnit) add_subdirectory(OptoForceUnitObserver) add_subdirectory(GamepadUnit) -add_subdirectory(GamepadUnitObserver) \ No newline at end of file +add_subdirectory(GamepadUnitObserver) +add_subdirectory(GamepadControlUnit) \ No newline at end of file diff --git a/source/RobotAPI/applications/GamepadControlUnit/CMakeLists.txt b/source/RobotAPI/applications/GamepadControlUnit/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..350d81c8d49983e6715352eaf358d1bf9091f698 --- /dev/null +++ b/source/RobotAPI/applications/GamepadControlUnit/CMakeLists.txt @@ -0,0 +1,20 @@ +armarx_component_set_name("GamepadControlUnitApp") + +#find_package(MyLib QUIET) +#armarx_build_if(MyLib_FOUND "MyLib not available") +# +# all include_directories must be guarded by if(Xyz_FOUND) +# for multiple libraries write: if(X_FOUND AND Y_FOUND).... +#if(MyLib_FOUND) +# include_directories(${MyLib_INCLUDE_DIRS}) +#endif() + +set(COMPONENT_LIBS + ArmarXCoreInterfaces + ArmarXCore + GamepadControlUnit +) + +set(EXE_SOURCE main.cpp) + +armarx_add_component_executable("${EXE_SOURCE}") diff --git a/source/RobotAPI/applications/GamepadControlUnit/main.cpp b/source/RobotAPI/applications/GamepadControlUnit/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a2c5a7e4296a36c3012bbd7bb720120ef3e72c3d --- /dev/null +++ b/source/RobotAPI/applications/GamepadControlUnit/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::GamepadControlUnit + * @author Simon Ottenhaus ( simon dot ottenhaus at kit dot edu ) + * @date 2017 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#include <RobotAPI/components/GamepadControlUnit/GamepadControlUnit.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::GamepadControlUnit > (argc, argv, "GamepadControlUnit"); +} diff --git a/source/RobotAPI/components/CMakeLists.txt b/source/RobotAPI/components/CMakeLists.txt index 09e360143f92067237016c1c5a6469a759d79ded..34d20721211360b9ae6ff8d53be9827537cdc4f6 100644 --- a/source/RobotAPI/components/CMakeLists.txt +++ b/source/RobotAPI/components/CMakeLists.txt @@ -4,3 +4,5 @@ add_subdirectory(RobotState) add_subdirectory(EarlyVisionGraph) add_subdirectory(ViewSelection) + +add_subdirectory(GamepadControlUnit) \ No newline at end of file diff --git a/source/RobotAPI/components/GamepadControlUnit/CMakeLists.txt b/source/RobotAPI/components/GamepadControlUnit/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..146c18bf6813864d1ab7c854623bdfdc73c90c3b --- /dev/null +++ b/source/RobotAPI/components/GamepadControlUnit/CMakeLists.txt @@ -0,0 +1,26 @@ +armarx_component_set_name("GamepadControlUnit") + +#find_package(MyLib QUIET) +#armarx_build_if(MyLib_FOUND "MyLib not available") +# +# all include_directories must be guarded by if(Xyz_FOUND) +# for multiple libraries write: if(X_FOUND AND Y_FOUND).... +#if(MyLib_FOUND) +# include_directories(${MyLib_INCLUDE_DIRS}) +#endif() + +set(COMPONENT_LIBS ArmarXCoreInterfaces ArmarXCore RobotAPIInterfaces) + +set(SOURCES +./GamepadControlUnit.cpp +#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.cpp +) +set(HEADERS +./GamepadControlUnit.h +#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.h +) + +armarx_add_component("${SOURCES}" "${HEADERS}") + +# add unit tests +add_subdirectory(test) diff --git a/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.cpp b/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0ef985b5d8ba9b22377302e20f92cb23fa5e0f95 --- /dev/null +++ b/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.cpp @@ -0,0 +1,62 @@ +/* + * 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::GamepadControlUnit + * @author Simon Ottenhaus ( simon dot ottenhaus at kit dot edu ) + * @date 2017 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#include "GamepadControlUnit.h" + + +using namespace armarx; + + +void GamepadControlUnit::onInitComponent() +{ + usingProxy(getProperty<std::string>("PlatformUnitName").getValue()); +} + + +void GamepadControlUnit::onConnectComponent() +{ + platformUnitPrx = getTopic<PlatformUnitInterfacePrx>(getProperty<std::string>("PlatformUnitName").getValue()); +} + + +void GamepadControlUnit::onDisconnectComponent() +{ + +} + + +void GamepadControlUnit::onExitComponent() +{ + +} + +armarx::PropertyDefinitionsPtr GamepadControlUnit::createPropertyDefinitions() +{ + return armarx::PropertyDefinitionsPtr(new GamepadControlUnitPropertyDefinitions( + getConfigIdentifier())); +} + +void GamepadControlUnit::reportGamepadState(const std::string& device, const std::string& name, const GamepadData& data, const TimestampBasePtr& timestamp, const Ice::Current& c) +{ + platformUnitPrx->move(data.leftStickX, data.leftStickY, data.rightStickX); +} + diff --git a/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.h b/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.h new file mode 100644 index 0000000000000000000000000000000000000000..61f40e572d18081630967f30614541811444d296 --- /dev/null +++ b/source/RobotAPI/components/GamepadControlUnit/GamepadControlUnit.h @@ -0,0 +1,110 @@ +/* + * 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::GamepadControlUnit + * @author Simon Ottenhaus ( simon dot ottenhaus at kit dot edu ) + * @date 2017 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#ifndef _ARMARX_COMPONENT_RobotAPI_GamepadControlUnit_H +#define _ARMARX_COMPONENT_RobotAPI_GamepadControlUnit_H + + +#include <ArmarXCore/core/Component.h> + +#include <RobotAPI/interface/units/GamepadUnit.h> + +namespace armarx +{ + /** + * @class GamepadControlUnitPropertyDefinitions + * @brief + */ + class GamepadControlUnitPropertyDefinitions: + public armarx::ComponentPropertyDefinitions + { + public: + GamepadControlUnitPropertyDefinitions(std::string prefix): + armarx::ComponentPropertyDefinitions(prefix) + { + //defineRequiredProperty<std::string>("PropertyName", "Description"); + //defineOptionalProperty<std::string>("PropertyName", "DefaultValue", "Description"); + defineOptionalProperty<std::string>("PlatformUnitName", "Armar6IcePlatformUnit", "Name of the platform unit to use"); + defineOptionalProperty<std::string>("GamepadTopicName", "GamepadValues", "Name of the Gamepad Topic"); + } + }; + + /** + * @defgroup Component-GamepadControlUnit GamepadControlUnit + * @ingroup RobotAPI-Components + * A description of the component GamepadControlUnit. + * + * @class GamepadControlUnit + * @ingroup Component-GamepadControlUnit + * @brief Brief description of class GamepadControlUnit. + * + * Detailed description of class GamepadControlUnit. + */ + class GamepadControlUnit : + virtual public armarx::Component, + virtual public GamepadUnitListener + { + public: + /** + * @see armarx::ManagedIceObject::getDefaultName() + */ + virtual std::string getDefaultName() const + { + return "GamepadControlUnit"; + } + + protected: + /** + * @see armarx::ManagedIceObject::onInitComponent() + */ + virtual void onInitComponent(); + + /** + * @see armarx::ManagedIceObject::onConnectComponent() + */ + virtual void onConnectComponent(); + + /** + * @see armarx::ManagedIceObject::onDisconnectComponent() + */ + virtual void onDisconnectComponent(); + + /** + * @see armarx::ManagedIceObject::onExitComponent() + */ + virtual void onExitComponent(); + + /** + * @see PropertyUser::createPropertyDefinitions() + */ + virtual armarx::PropertyDefinitionsPtr createPropertyDefinitions(); + + private: + PlatformUnitInterfacePrx platformUnitPrx; + + public: + void reportGamepadState(const std::string& device, const std::string& name, const GamepadData& data, const TimestampBasePtr& timestamp, const Ice::Current& c); + + }; +} + +#endif diff --git a/source/RobotAPI/components/GamepadControlUnit/test/CMakeLists.txt b/source/RobotAPI/components/GamepadControlUnit/test/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..c79f86b6ad42bf2e1318560e8414d52be98057ed --- /dev/null +++ b/source/RobotAPI/components/GamepadControlUnit/test/CMakeLists.txt @@ -0,0 +1,5 @@ + +# Libs required for the tests +SET(LIBS ${LIBS} ArmarXCore GamepadControlUnit) + +armarx_add_test(GamepadControlUnitTest GamepadControlUnitTest.cpp "${LIBS}") \ No newline at end of file diff --git a/source/RobotAPI/components/GamepadControlUnit/test/GamepadControlUnitTest.cpp b/source/RobotAPI/components/GamepadControlUnit/test/GamepadControlUnitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c5a6caa4e4d4cecf3f707750164a6a0f9826e025 --- /dev/null +++ b/source/RobotAPI/components/GamepadControlUnit/test/GamepadControlUnitTest.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::GamepadControlUnit + * @author Simon Ottenhaus ( simon dot ottenhaus at kit dot edu ) + * @date 2017 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ + +#define BOOST_TEST_MODULE RobotAPI::ArmarXObjects::GamepadControlUnit + +#define ARMARX_BOOST_TEST + +#include <RobotAPI/Test.h> +#include <RobotAPI/components/GamepadControlUnit/GamepadControlUnit.h> + +#include <iostream> + +BOOST_AUTO_TEST_CASE(testExample) +{ + armarx::GamepadControlUnit instance; + + BOOST_CHECK_EQUAL(true, true); +}