diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp index 7090cb6ef73a6303e69290386e6b69b79b0a86ac..5c4f03377560d1d80e7ae636cbac84fd5e036fbd 100644 --- a/source/armarx/navigation/components/Navigator/Navigator.cpp +++ b/source/armarx/navigation/components/Navigator/Navigator.cpp @@ -58,6 +58,7 @@ #include "ArmarXGui/libraries/RemoteGui/Client/Widgets.h" +#include "RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h" #include <RobotAPI/components/ArViz/Client/Client.h> #include <RobotAPI/components/ArViz/Client/Elements.h> #include <RobotAPI/components/ArViz/Client/elements/Color.h> @@ -84,7 +85,6 @@ #include <armarx/navigation/factories/NavigationStackFactory.h> #include <armarx/navigation/server/Navigator.h> #include <armarx/navigation/server/event_publishing/MemoryPublisher.h> -#include <armarx/navigation/server/execution/PlatformUnitExecutor.h> #include <armarx/navigation/server/introspection/MemoryIntrospector.h> #include <armarx/navigation/util/util.h> @@ -117,7 +117,7 @@ namespace armarx::navigation::components components::Navigator::Navigator() : parameterizationService(nullptr, nullptr) // publisher(&resultsWriter, &eventsWriter) { - scene.timeServer = &timeServer; + // scene.timeServer = &timeServer; addPlugin(parameterizationReaderPlugin); addPlugin(parameterizationWriterPlugin); @@ -163,7 +163,7 @@ namespace armarx::navigation::components ARMARX_TRACE; initializeScene(); - executor = server::PlatformUnitExecutor(platformUnit); + executor.emplace(server::PlatformControllerExecutor(getControlComponentPlugin())); introspector = server::ArvizIntrospector(getArvizClient(), scene.robot); @@ -172,12 +172,12 @@ namespace armarx::navigation::components // TODO param (10) - robotStateUpdateTask = new PeriodicTask<Navigator>(this, - &Navigator::updateRobot, - params.robotUpdatePeriodMs, - false, - "RobotStateUpdateTask"); - robotStateUpdateTask->start(); + // robotStateUpdateTask = new PeriodicTask<Navigator>(this, + // &Navigator::updateRobot, + // params.robotUpdatePeriodMs, + // false, + // "RobotStateUpdateTask"); + // robotStateUpdateTask->start(); navRemoteGui = std::make_unique<NavigatorRemoteGui>(remoteGui, *this); navRemoteGui->enable(); @@ -222,7 +222,7 @@ namespace armarx::navigation::components { ARMARX_TRACE; auto robot = virtualRobotReaderPlugin->get().getSynchronizedRobot( - params.robotName, + getControlComponentPlugin().getRobotUnitPlugin().getRobotUnit()->getKinematicUnit()->getRobotName(), armarx::core::time::Clock::Now(), VirtualRobot::RobotIO::RobotDescription::eCollisionModel, true); @@ -239,8 +239,6 @@ namespace armarx::navigation::components scene.robot = getRobot(); { - std::lock_guard g{scene.staticSceneMtx}; - if (not scene.staticScene.has_value()) { scene.staticScene = staticScene(); @@ -253,7 +251,6 @@ namespace armarx::navigation::components // TODO dynamic scene { - std::lock_guard g{scene.graphMtx}; scene.graph = core::SceneGraph{.subgraphs = graphReaderPlugin->get().graphs()}; } } @@ -392,7 +389,7 @@ namespace armarx::navigation::components navigators.at(configId).stop(); // emit UserAbortTriggered event - const core::UserAbortTriggeredEvent event{{scene.timeServer->now()}, + const core::UserAbortTriggeredEvent event{{timeServer.now()}, core::Pose(scene.robot->getGlobalPose())}; memoryPublishers.at(configId)->userAbortTriggered(event); } @@ -409,7 +406,7 @@ namespace armarx::navigation::components } // emit UserAbortTriggered event - const core::UserAbortTriggeredEvent event{{scene.timeServer->now()}, + const core::UserAbortTriggeredEvent event{{timeServer.now()}, core::Pose(scene.robot->getGlobalPose())}; for (auto& [callerId, memoryPublisher] : memoryPublishers) { @@ -449,14 +446,10 @@ namespace armarx::navigation::components // def->topic<PlatformUnitListener>("MyTopic"); // Use (and depend on) another component (passing the ComponentInterfacePrx). - def->component(platformUnit); - def->component(remoteGui, "RemoteGuiProvider"); // Add a required property. // def->required(properties.boxLayerName, "p.box.LayerName", "Name of the box layer in ArViz."); - def->optional(params.robotName, "p.robotName"); - // Add an optionalproperty. def->optional(params.occupiedGridThreshold, "p.occupancy_grid.occopied_threshold", @@ -640,7 +633,7 @@ namespace armarx::navigation::components ARMARX_TRACE; const auto robotDescription = - virtualRobotReader.queryDescription(params.robotName, timestamp); + virtualRobotReader.queryDescription(scene.robot->getType(), timestamp); ARMARX_CHECK(robotDescription.has_value()); // synchronizing platform state @@ -651,8 +644,6 @@ namespace armarx::navigation::components // TODO / FIXME make this thread safe! { - std::lock_guard g{scene.platformVelocityMtx}; - if (not scene.platformVelocity.has_value()) { scene.platformVelocity = core::Twist(); diff --git a/source/armarx/navigation/components/Navigator/Navigator.h b/source/armarx/navigation/components/Navigator/Navigator.h index 6fa6459d03cf26b18d4735adff071787ed6e7ec7..618b378daf6ff0cc48b25651f3baca7fc340ea69 100644 --- a/source/armarx/navigation/components/Navigator/Navigator.h +++ b/source/armarx/navigation/components/Navigator/Navigator.h @@ -33,14 +33,15 @@ #include <Ice/Object.h> +#include "ArmarXCore/util/CPPUtility/TripleBuffer.h" #include <ArmarXCore/core/Component.h> #include <ArmarXCore/core/services/tasks/PeriodicTask.h> #include <ArmarXGui/interface/RemoteGuiInterface.h> #include <ArmarXGui/libraries/ArmarXGuiComponentPlugins/LightweightRemoteGuiComponentPlugin.h> +#include "RobotAPI/libraries/RobotAPIComponentPlugins/RobotUnitComponentPlugin.h" #include "RobotAPI/libraries/armem/client/plugins/ReaderWriterPlugin.h" -#include <RobotAPI/interface/units/PlatformUnitInterface.h> #include <RobotAPI/libraries/ArmarXObjects/plugins/ObjectPoseClientPlugin.h> #include <RobotAPI/libraries/RobotAPIComponentPlugins/ArVizComponentPlugin.h> #include <RobotAPI/libraries/RobotAPIComponentPlugins/RobotStateComponentPlugin.h> @@ -50,6 +51,7 @@ #include <RobotAPI/libraries/armem_vision/client/occupancy_grid/Reader.h> #include "armarx/navigation/memory/client/costmap/Writer.h" +#include <armarx/control/client/ComponentPlugin.h> #include <armarx/navigation/client/ice/NavigatorInterface.h> #include <armarx/navigation/components/Navigator/RemoteGui.h> #include <armarx/navigation/core/time/ChronoMonotonicTimeServer.h> @@ -59,8 +61,8 @@ #include <armarx/navigation/memory/client/stack_result/Writer.h> #include <armarx/navigation/server/Navigator.h> #include <armarx/navigation/server/event_publishing/MemoryPublisher.h> -#include <armarx/navigation/server/execution/PlatformUnitExecutor.h> #include <armarx/navigation/server/introspection/ArvizIntrospector.h> +#include <armarx/navigation/server/execution/PlatformControllerExecutor.h> #include <armarx/navigation/server/introspection/MemoryIntrospector.h> #include <armarx/navigation/server/parameterization/MemoryParameterizationService.h> @@ -83,7 +85,8 @@ namespace armarx::navigation::components virtual public Component, virtual public client::NavigatorInterface, virtual public ObjectPoseClientPluginUser, - virtual public ArVizComponentPluginUser + virtual public ArVizComponentPluginUser, + virtual public armarx::control::client::ComponentPluginUser // virtual public armem::ListeningClientPluginUser { @@ -163,16 +166,12 @@ namespace armarx::navigation::components private: void visualizeSPFA(); - // TODO update context periodically - - // TODO: Remove dependency to PlatformUnit. This component is generally - // capable to also control drones or the like... - PlatformUnitInterfacePrx platformUnit; RemoteGuiInterfacePrx remoteGui; core::Scene scene; - std::optional<server::PlatformUnitExecutor> executor; + + std::optional<server::PlatformControllerExecutor> executor; std::optional<server::ArvizIntrospector> introspector; std::unordered_map<std::string, server::Navigator> navigators; @@ -214,8 +213,6 @@ namespace armarx::navigation::components { float occupiedGridThreshold{0.55F}; - std::string robotName = "Armar6"; - int robotUpdatePeriodMs = 10; }; diff --git a/source/armarx/navigation/components/Navigator/RemoteGui.cpp b/source/armarx/navigation/components/Navigator/RemoteGui.cpp index 2f8afd275ed36e8b8b850f0ba2a20ec9bce09ade..37a191ba49d9b2b1926f7d6a4e68feaf4c46d1c2 100644 --- a/source/armarx/navigation/components/Navigator/RemoteGui.cpp +++ b/source/armarx/navigation/components/Navigator/RemoteGui.cpp @@ -23,7 +23,6 @@ #include <armarx/navigation/global_planning/AStar.h> #include <armarx/navigation/global_planning/Point2Point.h> #include <armarx/navigation/server/Navigator.h> -#include <armarx/navigation/server/execution/PlatformUnitExecutor.h> #include <armarx/navigation/trajectory_control/TrajectoryFollowingController.h> #include <armarx/navigation/util/util.h>