diff --git a/source/armarx/navigation/components/Navigator/Navigator.cpp b/source/armarx/navigation/components/Navigator/Navigator.cpp index 74292c5b68c1f503c246e1c2a3ec2880076204da..9660789cae1083ba1725e8ef4245d8b9c3b55e1c 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 d065bcebaf03ddded87eb421a4323fb70bf7fd07..464966dfa62ff83484c00c7f3b88288633f6501e 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 9180d28e48428d7ed6ec526ae95626925b1556ef..baa0409c9c865ad59c59932714406ed21f435c97 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");