ugv_nav4d
ConfigLoader.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <yaml-cpp/yaml.h>
5#include <ugv_nav4d/Planner.hpp>
6#include <traversability_generator3d/TraversabilityGenerator3d.hpp>
7#include <sbpl_spline_primitives/SbplSplineMotionPrimitives.hpp>
8
9namespace ugv_nav4d {
10
12public:
13 static bool loadConfig(
14 const std::string& configPath,
15 sbpl_spline_primitives::SplinePrimitivesConfig& splineConfig,
16 ugv_nav4d::Mobility& mobilityConfig,
17 traversability_generator3d::TraversabilityConfig& travConfig,
18 ugv_nav4d::PlannerConfig& plannerConfig)
19 {
20 try {
21 YAML::Node config = YAML::LoadFile(configPath);
22
23 // Load spline config
24 if (config["splineConfig"]) {
25 auto sc = config["splineConfig"];
26 splineConfig.gridSize = sc["gridSize"].as<double>(0.5);
27 splineConfig.numAngles = sc["numAngles"].as<unsigned>(16);
28 splineConfig.numEndAngles = sc["numEndAngles"].as<unsigned>(8);
29 splineConfig.destinationCircleRadius = sc["destinationCircleRadius"].as<double>(6);
30 splineConfig.cellSkipFactor = sc["cellSkipFactor"].as<double>(0.1);
31 splineConfig.generatePointTurnMotions = sc["generatePointTurnMotions"].as<bool>(true);
32 splineConfig.generateLateralMotions = sc["generateLateralMotions"].as<bool>(true);
33 splineConfig.generateBackwardMotions = sc["generateBackwardMotions"].as<bool>(true);
34 splineConfig.generateForwardMotions = sc["generateForwardMotions"].as<bool>(true);
35 splineConfig.splineOrder = sc["splineOrder"].as<unsigned>(4);
36 }
37
38 // Load mobility config
39 if (config["mobilityConfig"]) {
40 auto mc = config["mobilityConfig"];
41 mobilityConfig.translationSpeed = mc["translationSpeed"].as<double>(0.5);
42 mobilityConfig.rotationSpeed = mc["rotationSpeed"].as<double>(0.5);
43 mobilityConfig.minTurningRadius = mc["minTurningRadius"].as<double>(1);
44 mobilityConfig.searchRadius = mc["searchRadius"].as<double>(0.0);
45 mobilityConfig.searchProgressSteps = mc["searchProgressSteps"].as<double>(0.1);
46 mobilityConfig.multiplierForward = mc["multiplierForward"].as<double>(1);
47 mobilityConfig.multiplierForwardTurn = mc["multiplierForwardTurn"].as<double>(2);
48 mobilityConfig.multiplierBackward = mc["multiplierBackward"].as<double>(2);
49 mobilityConfig.multiplierBackwardTurn = mc["multiplierBackwardTurn"].as<double>(3);
50 mobilityConfig.multiplierLateral = mc["multiplierLateral"].as<double>(4);
51 mobilityConfig.multiplierLateralCurve = mc["multiplierLateralCurve"].as<double>(4);
52 mobilityConfig.multiplierPointTurn = mc["multiplierPointTurn"].as<double>(3);
53 mobilityConfig.maxMotionCurveLength = mc["maxMotionCurveLength"].as<double>(100);
54 mobilityConfig.spline_sampling_resolution = mc["spline_sampling_resolution"].as<double>(0.05);
55 mobilityConfig.remove_goal_offset = mc["remove_goal_offset"].as<bool>(false);
56 }
57
58 // Load traversability config
59 if (config["travConfig"]) {
60 auto tc = config["travConfig"];
61 travConfig.gridResolution = tc["gridResolution"].as<double>(0.3);
62 travConfig.maxSlope = tc["maxSlope"].as<double>(0.45);
63 travConfig.maxStepHeight = tc["maxStepHeight"].as<double>(0.25);
64 travConfig.robotSizeX = tc["robotSizeX"].as<double>(0.5);
65 travConfig.robotSizeY = tc["robotSizeY"].as<double>(0.5);
66 travConfig.robotHeight = tc["robotHeight"].as<double>(0.5);
67 travConfig.slopeMetricScale = tc["slopeMetricScale"].as<double>(1.0);
68 travConfig.inclineLimittingMinSlope = tc["inclineLimittingMinSlope"].as<double>(0.22);
69 travConfig.inclineLimittingLimit = tc["inclineLimittingLimit"].as<double>(0.43);
70 travConfig.costFunctionDist = tc["costFunctionDist"].as<double>(0.0);
71 travConfig.distToGround = tc["distToGround"].as<double>(0.0);
72 travConfig.minTraversablePercentage = tc["minTraversablePercentage"].as<double>(0.5);
73 travConfig.allowForwardDownhill = tc["allowForwardDownhill"].as<bool>(true);
74 travConfig.enableInclineLimitting = tc["enableInclineLimitting"].as<bool>(false);
75
76 std::string slopeMetricStr = tc["slopeMetric"].as<std::string>("NONE");
77 if (slopeMetricStr == "AVG_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::AVG_SLOPE;
78 else if (slopeMetricStr == "MAX_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::MAX_SLOPE;
79 else if (slopeMetricStr == "TRIANGLE_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::TRIANGLE_SLOPE;
80 else travConfig.slopeMetric = traversability_generator3d::SlopeMetric::NONE;
81 }
82
83 // Load planner config
84 if (config["plannerConfig"]) {
85 auto pc = config["plannerConfig"];
86 plannerConfig.epsilonSteps = pc["epsilonSteps"].as<double>(2.0);
87 plannerConfig.initialEpsilon = pc["initialEpsilon"].as<double>(64.0);
88 plannerConfig.numThreads = pc["numThreads"].as<unsigned>(4);
89 plannerConfig.usePathStatistics = pc["usePathStatistics"].as<bool>(false);
90 plannerConfig.searchUntilFirstSolution = pc["searchUntilFirstSolution"].as<bool>(false);
91 }
92
93 return true;
94 } catch (const std::exception& e) {
95 LOG_ERROR_S << "Failed to load config: " << e.what();
96 return false;
97 }
98 }
99};
100
101}
Definition ConfigLoader.hpp:11
static bool loadConfig(const std::string &configPath, sbpl_spline_primitives::SplinePrimitivesConfig &splineConfig, ugv_nav4d::Mobility &mobilityConfig, traversability_generator3d::TraversabilityConfig &travConfig, ugv_nav4d::PlannerConfig &plannerConfig)
Definition ConfigLoader.hpp:13
Definition ConfigLoader.hpp:9
Definition Mobility.hpp:12
unsigned int multiplierPointTurn
Definition Mobility.hpp:32
double minTurningRadius
Definition Mobility.hpp:19
unsigned int multiplierForwardTurn
Definition Mobility.hpp:30
unsigned int multiplierLateral
Definition Mobility.hpp:29
double spline_sampling_resolution
Definition Mobility.hpp:21
unsigned int multiplierBackwardTurn
Definition Mobility.hpp:31
unsigned int multiplierBackward
Definition Mobility.hpp:28
double searchRadius
Definition Mobility.hpp:36
double translationSpeed
Definition Mobility.hpp:14
unsigned int multiplierForward
Definition Mobility.hpp:27
double rotationSpeed
Definition Mobility.hpp:16
double searchProgressSteps
Definition Mobility.hpp:38
double maxMotionCurveLength
Definition Mobility.hpp:40
bool remove_goal_offset
Definition Mobility.hpp:23
unsigned int multiplierLateralCurve
Definition Mobility.hpp:33
Definition PlannerConfig.hpp:8
double epsilonSteps
Definition PlannerConfig.hpp:20
double initialEpsilon
Definition PlannerConfig.hpp:17
bool usePathStatistics
Definition PlannerConfig.hpp:11
unsigned numThreads
Definition PlannerConfig.hpp:22
bool searchUntilFirstSolution
Definition PlannerConfig.hpp:14