NavigationStackFactory.cpp
Go to the documentation of this file.
2
3#include <experimental/memory>
4#include <string>
5
9
11#include <RobotAPI/interface/aron/Aron.h>
13
22
24{
25 server::NavigationStack
27 const aron::data::DictPtr& params,
28 const core::Scene& scene,
31 {
33 using aron::data::Dict;
34
35 const auto getElementOrNull = [&params](const core::StackLayer& layer) -> Dict::PointerType
36 {
38 const std::string key = core::StackLayerNames.to_name(layer);
39
40 if (params->hasElement(key))
41 {
42 return Dict::DynamicCast(params->getElement(key));
43 }
44
45 ARMARX_INFO << "Skipping " << QUOTED(key);
46
47 return nullptr;
48 };
49
50 const auto generalConfigDict = getElementOrNull(core::StackLayer::GeneralConfig);
51 ARMARX_CHECK_NOT_NULL(generalConfigDict);
53 aron::data::Dict::DynamicCast(generalConfigDict->getElement(core::PARAMS_KEY)));
54
55 const auto globalPlannerCfg = getElementOrNull(core::StackLayer::GlobalPlanner);
56 const auto localPlannerCfg = getElementOrNull(core::StackLayer::LocalPlanner);
57 const auto safetyGuardCfg = getElementOrNull(core::StackLayer::SafetyGuard);
58
59 const safety_guard::SafetyGuard::Context ctx{.arviz = arviz,
60 .debugObserver = debugObserver};
61
63 .generalConfig = generalConfig,
64 .globalPlanner = GlobalPlannerFactory::create(generalConfig, globalPlannerCfg, scene),
65 .localPlanner = LocalPlannerFactory::create(generalConfig, localPlannerCfg, scene),
66 .safetyGuard = SafetyGuardFactory::create(generalConfig, safetyGuardCfg, scene, ctx)};
67 }
68
71 const aron::data::dto::DictPtr& params,
72 const core::Scene& scene,
75 {
77 const auto dict = aron::data::Dict::FromAronDictDTO(params);
79 return create(dict, scene, arviz, debugObserver);
80 }
81
82} // namespace armarx::navigation::fac
#define QUOTED(x)
static PointerType FromAronDictDTO(const data::dto::DictPtr &aron)
Definition Dict.cpp:130
static global_planning::GlobalPlannerPtr create(const core::GeneralConfig &generalConfig, const aron::data::DictPtr &params, const core::Scene &ctx)
static local_planning::LocalPlannerPtr create(const core::GeneralConfig &generalConfig, const aron::data::DictPtr &params, const core::Scene &ctx)
static server::NavigationStack create(const aron::data::DictPtr &params, const core::Scene &scene, std::experimental::observer_ptr< viz::Client > arviz, std::experimental::observer_ptr< DebugObserverComponentPluginUser > debugObserver)
static safety_guard::SafetyGuardPtr create(const core::GeneralConfig &generalConfig, const aron::data::DictPtr &params, const core::Scene &scene, const safety_guard::SafetyGuard::Context &ctx)
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
#define ARMARX_INFO
The normal logging level.
Definition Logging.h:181
::IceInternal::Handle< Dict > DictPtr
std::shared_ptr< Dict > DictPtr
Definition Dict.h:42
const std::string PARAMS_KEY
Definition constants.h:34
const simox::meta::EnumNames< StackLayer > StackLayerNames
Definition constants.h:46
This file is part of ArmarX.
static GeneralConfig FromAron(const aron::data::DictPtr &dict)
#define ARMARX_TRACE
Definition trace.h:77