From 47479041466f9f833ca8e178ff510d754bb2e654 Mon Sep 17 00:00:00 2001 From: "Christian R. G. Dreher" <c.dreher@kit.edu> Date: Thu, 8 Jul 2021 16:33:18 +0200 Subject: [PATCH] fix: Make component::Navigator and server::Navigator compile. --- .../components/Navigator/Navigator.cpp | 54 ++++++++++--------- .../components/Navigator/Navigator.h | 17 ++++-- .../Navigator/NavigatorInterface.ice | 1 + .../Navigation/libraries/server/Navigator.cpp | 35 +++++++++--- .../Navigation/libraries/server/Navigator.h | 9 +++- .../libraries/server/test/serverTest.cpp | 2 +- 6 files changed, 79 insertions(+), 39 deletions(-) diff --git a/source/Navigation/components/Navigator/Navigator.cpp b/source/Navigation/components/Navigator/Navigator.cpp index b941324f..83ccf9fb 100644 --- a/source/Navigation/components/Navigator/Navigator.cpp +++ b/source/Navigation/components/Navigator/Navigator.cpp @@ -32,6 +32,11 @@ namespace armarx::nav::components { + Navigator::Navigator() : + executor{platformUnit} + { + } + Navigator::~Navigator() { } @@ -51,11 +56,11 @@ namespace armarx::nav::components void Navigator::onExitComponent() { } - - void Navigator::updateContext() + + void Navigator::updateContext() { - ctx.staticScene = staticScene(); - ctx.robot = getRobot(); + scene.staticScene = staticScene(); + scene.robot = getRobot(); } std::string Navigator::getDefaultName() const @@ -63,34 +68,34 @@ namespace armarx::nav::components return "Navigator"; } - void Navigator::moveTo(const Eigen::Matrix4f& pose, + void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const aron::data::AronDictPtr& stackConfig, const std::string& navigationMode, const Ice::Current&) { updateContext(); - server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, ctx); - server::Navigator navigator{stack, ctx, executor}; - - SimplePeriodicTask<> task( - [](){navigator.updateContext()} - ); - task.start() - + server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene); + server::Navigator navigator{stack, scene, executor}; - navigator.moveTo(core::Pose(pose), core::NavigationFramesMap.from_name(navigationMode)); + navigator.moveTo(waypoints, core::NavigationFramesMap.from_name(navigationMode)); } - void Navigator::moveTowards(const Eigen::Matrix4f& direction, + void Navigator::moveTowards(const Eigen::Vector3f& direction, const aron::data::AronDictPtr& stackConfig, const std::string& navigationMode, const Ice::Current&) { - server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, ctx); - server::Navigator navigator{stack, ctx}; + server::NavigationStack stack = fac::NavigationStackFactory::create(stackConfig, scene); + server::Navigator navigator{stack, scene, executor}; - // navigator.moveTowards(direction); TODO + navigator.moveTowards(direction, core::NavigationFramesMap.from_name(navigationMode)); + } + + void Navigator::stop(const Ice::Current&) + { + //server::Navigator navigator; + //navigator.stop(); } armarx::PropertyDefinitionsPtr Navigator::createPropertyDefinitions() @@ -116,22 +121,21 @@ namespace armarx::nav::components return def; } - core::StaticScenePtr Navigator::staticScene() + core::StaticScene Navigator::staticScene() { - core::StaticScenePtr scene(new core::StaticScene); + core::StaticScene scene; objpose::ObjectPoseSeq objectPoses = ObjectPoseClientPluginUser::getObjectPoses(); - scene->objects = util::asSceneObjects(objectPoses); + scene.objects = util::asSceneObjects(objectPoses); return scene; } - - VirtualRobot::RobotPtr Navigator::getRobot() - { + VirtualRobot::RobotPtr Navigator::getRobot() + { auto robot = RemoteRobot::createLocalCloneFromFile( - getRobotStateComponent(), VirtualRobot::RobotIO::RobotDescription::eFull); + getRobotStateComponent(), VirtualRobot::RobotIO::RobotDescription::eFull); // auto robot = RemoteRobot::createLocalClone(getRobotStateComponent()); ARMARX_CHECK_NOT_NULL(robot); diff --git a/source/Navigation/components/Navigator/Navigator.h b/source/Navigation/components/Navigator/Navigator.h index 84f41c17..04c7879f 100644 --- a/source/Navigation/components/Navigator/Navigator.h +++ b/source/Navigation/components/Navigator/Navigator.h @@ -26,6 +26,7 @@ // STD/STL #include <string> +#include <vector> // Eigen #include <Eigen/Core> @@ -39,6 +40,7 @@ // Navigation #include "Navigation/libraries/core/StaticScene.h" #include "Navigation/libraries/core/types.h" +#include <Navigation/libraries/server/execution/PlatformUnitExecutor.h> #include <Navigation/components/Navigator/NavigatorInterface.h> @@ -64,21 +66,25 @@ namespace armarx::nav::components { public: + + Navigator(); ~Navigator() override; /// @see armarx::ManagedIceObject::getDefaultName() std::string getDefaultName() const override; - void moveTo(const Eigen::Matrix4f& pose, + void moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const aron::data::AronDictPtr& config, const std::string& navigationMode, const Ice::Current&) override; - void moveTowards(const Eigen::Matrix4f& direction, + void moveTowards(const Eigen::Vector3f& direction, const aron::data::AronDictPtr& config, const std::string& navigationMode, const Ice::Current&) override; + void stop(const Ice::Current&) override; + protected: /// @see PropertyUser::createPropertyDefinitions() armarx::PropertyDefinitionsPtr createPropertyDefinitions() override; @@ -97,7 +103,7 @@ namespace armarx::nav::components void updateContext(); - core::StaticScenePtr staticScene(); + core::StaticScene staticScene(); VirtualRobot::RobotPtr getRobot(); @@ -105,9 +111,12 @@ namespace armarx::nav::components private: // TODO update context periodically - core::Scene ctx; + core::Scene scene; + + server::PlatformUnitExecutor executor; PlatformUnitListenerPrx platformUnit; + }; } // namespace armarx::nav::components diff --git a/source/Navigation/components/Navigator/NavigatorInterface.ice b/source/Navigation/components/Navigator/NavigatorInterface.ice index 94c689e6..2a5ac274 100644 --- a/source/Navigation/components/Navigator/NavigatorInterface.ice +++ b/source/Navigation/components/Navigator/NavigatorInterface.ice @@ -40,6 +40,7 @@ module armarx { void moveTo(Eigen::Matrix4fSeq waypoints, aron::data::AronDict config, string navigationFrame); void moveTowards(Eigen::Vector3f direction, aron::data::AronDict config, string navigationFrame); + idempotent void stop(); }; }; diff --git a/source/Navigation/libraries/server/Navigator.cpp b/source/Navigation/libraries/server/Navigator.cpp index 749ad8f3..bf2be760 100644 --- a/source/Navigation/libraries/server/Navigator.cpp +++ b/source/Navigation/libraries/server/Navigator.cpp @@ -1,5 +1,7 @@ #include "Navigator.h" +#include <algorithm> + #include <VirtualRobot/Robot.h> #include "ArmarXCore/core/exceptions/local/ExpressionException.h" @@ -42,29 +44,32 @@ namespace armarx::nav::server setTag("Navigator"); } - void Navigator::moveTo(const core::Pose& goal, const core::NavigationFrames& navigationFrame) + void Navigator::moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame) { - core::Pose globalPose; + std::vector<Eigen::Matrix4f> globalWaypoints; switch (navigationFrame) { case core::NavigationFrames::Absolute: - globalPose = goal; + globalWaypoints = waypoints; break; case core::NavigationFrames::Relative: - globalPose = core::Pose(scene.robot->getGlobalPose()) * goal; + std::transform(std::begin(waypoints), std::end(waypoints), std::begin(globalWaypoints), [&](const Eigen::Matrix4f & m) + { + return scene.robot->getGlobalPose() * m; + }); break; } - moveToAbsolute(globalPose); + moveToAbsolute(globalWaypoints); } - void Navigator::moveToAbsolute(const core::Pose& goal) + void Navigator::moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints) { ARMARX_INFO << "Planning global trajectory"; ARMARX_CHECK_NOT_NULL(stack.globalPlanner); StackResult res; - res.globalTrajectory = stack.globalPlanner->plan(goal); + res.globalTrajectory = stack.globalPlanner->plan(waypoints.at(0)); if (stack.localPlanner) { @@ -90,4 +95,20 @@ namespace armarx::nav::server executor.move(res.velocity()); } } + + void Navigator::moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame) + { + + } + + void Navigator::moveTowardsAbsolute(const Eigen::Vector3f direction) + { + + } + + void Navigator::stop() + { + + } + } // namespace armarx::nav::server diff --git a/source/Navigation/libraries/server/Navigator.h b/source/Navigation/libraries/server/Navigator.h index 848daae3..6ae203bf 100644 --- a/source/Navigation/libraries/server/Navigator.h +++ b/source/Navigation/libraries/server/Navigator.h @@ -52,8 +52,13 @@ namespace armarx::nav::server public: Navigator(const server::NavigationStack& navigationStack, const core::Scene& scene, ExecutorInterface& executor); - void moveTo(const core::Pose& goal, const core::NavigationFrames& navigationFrame); - void moveToAbsolute(const core::Pose& goal); + void moveTo(const std::vector<Eigen::Matrix4f>& waypoints, const core::NavigationFrames& navigationFrame); + void moveToAbsolute(const std::vector<Eigen::Matrix4f>& waypoints); + + void moveTowards(const Eigen::Vector3f direction, const core::NavigationFrames& navigationFrame); + void moveTowardsAbsolute(const Eigen::Vector3f direction); + + void stop(); protected: private: diff --git a/source/Navigation/libraries/server/test/serverTest.cpp b/source/Navigation/libraries/server/test/serverTest.cpp index 6695d314..86da7406 100644 --- a/source/Navigation/libraries/server/test/serverTest.cpp +++ b/source/Navigation/libraries/server/test/serverTest.cpp @@ -65,7 +65,7 @@ BOOST_AUTO_TEST_CASE(testNavigator) server::DummyExecutor executor{scene.robot, server::DummyExecutor::Params()}; server::Navigator navigator(stack, scene, executor); - navigator.moveTo(goal, core::NavigationFrames::Absolute); + navigator.moveTo({goal}, core::NavigationFrames::Absolute); BOOST_CHECK_EQUAL(true, true); } -- GitLab