From 1300570687300df47c674b1da00a705aa42fb838 Mon Sep 17 00:00:00 2001 From: Fabian Reister <fabian.reister@kit.edu> Date: Fri, 17 Dec 2021 15:31:30 +0100 Subject: [PATCH] introducing mutexes for scene --- .../components/Navigator/Navigator.cpp | 17 +++++++++++------ source/armarx/navigation/core/types.h | 4 ++++ .../armarx/navigation/global_planning/AStar.cpp | 2 ++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp index 74292c5b..9660789c 100644 --- a/source/armarx/navigation/components/Navigator/Navigator.cpp +++ b/source/armarx/navigation/components/Navigator/Navigator.cpp @@ -145,10 +145,7 @@ namespace armarx::navigation::components // initialize scene ARMARX_TRACE; - scene.robot = getRobot(); - scene.staticScene = staticScene(); - scene.graph = core::SceneGraph{.subgraphs = graphReader.graphs()}; - + updateContext(); executor = server::PlatformUnitExecutor(platformUnit); @@ -215,9 +212,17 @@ namespace armarx::navigation::components ARMARX_TRACE; scene.robot = getRobot(); - scene.staticScene = staticScene(); + + { + std::lock_guard g{scene.staticSceneMtx}; + scene.staticScene = staticScene(); + } + // TODO dynamic scene - scene.graph = core::SceneGraph{.subgraphs = graphReader.graphs()}; + { + std::lock_guard g{scene.graphMtx}; + scene.graph = core::SceneGraph{.subgraphs = graphReader.graphs()}; + } } std::string diff --git a/source/armarx/navigation/core/types.h b/source/armarx/navigation/core/types.h index d065bceb..464966df 100644 --- a/source/armarx/navigation/core/types.h +++ b/source/armarx/navigation/core/types.h @@ -78,7 +78,10 @@ namespace armarx::navigation::core struct Scene { + mutable std::mutex staticSceneMtx; std::optional<core::StaticScene> staticScene = std::nullopt; + + mutable std::mutex dynamicSceneMtx; std::optional<core::DynamicScene> dynamicScene = std::nullopt; // TopologicMapPtr topologicMap; VirtualRobot::RobotPtr robot; @@ -86,6 +89,7 @@ namespace armarx::navigation::core mutable std::mutex platformVelocityMtx; std::optional<core::Twist> platformVelocity; + mutable std::mutex graphMtx; std::optional<core::SceneGraph> graph; TimeServerInterface* timeServer; diff --git a/source/armarx/navigation/global_planning/AStar.cpp b/source/armarx/navigation/global_planning/AStar.cpp index 9180d28e..baa0409c 100644 --- a/source/armarx/navigation/global_planning/AStar.cpp +++ b/source/armarx/navigation/global_planning/AStar.cpp @@ -1,6 +1,7 @@ #include "AStar.h" #include <algorithm> +#include <mutex> #include <optional> #include <Eigen/Geometry> @@ -112,6 +113,7 @@ namespace armarx::navigation::glob_plan { ARMARX_TRACE; + std::lock_guard g{scene.staticSceneMtx}; algorithm::astar::AStarPlanner planner(scene.robot, scene.staticScene->objects, 100.F); // planner.setRobotColModel("Platform-colmodel"); -- GitLab