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>
14 const std::string& configPath,
15 sbpl_spline_primitives::SplinePrimitivesConfig& splineConfig,
17 traversability_generator3d::TraversabilityConfig& travConfig,
21 YAML::Node config = YAML::LoadFile(configPath);
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);
39 if (config[
"mobilityConfig"]) {
40 auto mc = config[
"mobilityConfig"];
42 mobilityConfig.
rotationSpeed = mc[
"rotationSpeed"].as<
double>(0.5);
44 mobilityConfig.
searchRadius = mc[
"searchRadius"].as<
double>(0.0);
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);
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;
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);
94 }
catch (
const std::exception& e) {
95 LOG_ERROR_S <<
"Failed to load config: " << e.what();
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