diff --git a/source/armarx/navigation/server/execution/ExecutorInterface.h b/source/armarx/navigation/server/execution/ExecutorInterface.h index e0ba451ebd0080e4a0f951e8e414e16beb5dc98e..c4a38f29de96c727e12f5ef2e0fe1f2c92cfd04c 100644 --- a/source/armarx/navigation/server/execution/ExecutorInterface.h +++ b/source/armarx/navigation/server/execution/ExecutorInterface.h @@ -2,7 +2,7 @@ namespace armarx::navigation::core { - struct Twist; + class Trajectory; } // namespace armarx::navigation::core namespace armarx::navigation::server @@ -17,7 +17,8 @@ namespace armarx::navigation::server public: virtual ~ExecutorInterface() = default; - virtual void move(const core::Twist& twist) = 0; + virtual void execute(const core::Trajectory& trajectory) = 0; + virtual void stop() = 0; }; } // namespace armarx::navigation::server diff --git a/source/armarx/navigation/server/execution/PlatformControllerExecutor.cpp b/source/armarx/navigation/server/execution/PlatformControllerExecutor.cpp new file mode 100644 index 0000000000000000000000000000000000000000..90acc53bc116ecb63ddf20b9a18441b9545a2398 --- /dev/null +++ b/source/armarx/navigation/server/execution/PlatformControllerExecutor.cpp @@ -0,0 +1,36 @@ +#include "PlatformControllerExecutor.h" + +#include <armarx/control/client/ComponentPlugin.h> +#include <armarx/control/common/type.h> +#include <armarx/navigation/common/controller_types.h> +#include <armarx/navigation/platform_controller/aron/PlatformTrajectoryControllerConfig.aron.generated.h> + + + +namespace armarx::navigation::server +{ + + PlatformControllerExecutor::PlatformControllerExecutor( + ControllerComponentPlugin& controllerComponentPlugin) : + controllerPlugin(controllerComponentPlugin) + { + controllerComponentPlugin.getRobotUnitPlugin().getRobotUnit()->loadLibFromPackage( + "armarx_navigation", "libarmarx_navigation_platform_controller.so"); + + + auto builder = controllerPlugin.createControllerBuilder< + armarx::navigation::common::ControllerType::PlatformTrajectory>(); + + ctrl.emplace(builder.create().value()); + + ARMARX_CHECK(ctrl.has_value()); + } + + PlatformControllerExecutor::~PlatformControllerExecutor() = default; + + + void + PlatformControllerExecutor::execute(const core::Trajectory& trajectory) + { + } +} // namespace armarx::navigation::server diff --git a/source/armarx/navigation/server/execution/PlatformControllerExecutor.h b/source/armarx/navigation/server/execution/PlatformControllerExecutor.h new file mode 100644 index 0000000000000000000000000000000000000000..1b2ec239553a3b0c397f47bd962355cd46fe84ff --- /dev/null +++ b/source/armarx/navigation/server/execution/PlatformControllerExecutor.h @@ -0,0 +1,48 @@ +#pragma once + +#include <RobotAPI/interface/units/RobotUnit/RobotUnitInterface.h> + +#include <armarx/control/client/ComponentPlugin.h> +#include <armarx/navigation/common/controller_types.h> +#include <armarx/navigation/core/types.h> +#include <armarx/navigation/platform_controller/aron/PlatformTrajectoryControllerConfig.aron.generated.h> +#include <armarx/navigation/platform_controller/controller_descriptions.h> +#include <armarx/navigation/server/execution/ExecutorInterface.h> + +namespace armarx::control::client +{ + class ComponentPlugin; +} + +namespace armarx::navigation::server +{ + + /** + * @brief The PlatformUnitExecutor class + * + * TODO: Should be renamed to whatever the new unit will be called which takes Mat4f + * as input instead of X/Y/Yaw, so that we have a generic interface. + */ + class PlatformControllerExecutor : virtual public ExecutorInterface + { + + public: + using ControllerComponentPlugin = armarx::control::client::ComponentPlugin; + + PlatformControllerExecutor(ControllerComponentPlugin& controllerComponentPlugin); + ~PlatformControllerExecutor() override; + + void execute(const core::Trajectory& trajectory) override; + void stop() override{ + // FIXME implement + }; + + private: + std::optional<armarx::control::client::ControllerWrapper< + armarx::navigation::common::ControllerType::PlatformTrajectory>> + ctrl; + + ControllerComponentPlugin& controllerPlugin; + }; + +} // namespace armarx::navigation::server