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);
75 travConfig.obstacleInflationMultiplier = tc[
"obstacleInflationMultiplier"].as<
double>(1.0);
77 std::string slopeMetricStr = tc[
"slopeMetric"].as<std::string>(
"NONE");
78 if (slopeMetricStr ==
"AVG_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::AVG_SLOPE;
79 else if (slopeMetricStr ==
"MAX_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::MAX_SLOPE;
80 else if (slopeMetricStr ==
"TRIANGLE_SLOPE") travConfig.slopeMetric = traversability_generator3d::SlopeMetric::TRIANGLE_SLOPE;
81 else travConfig.slopeMetric = traversability_generator3d::SlopeMetric::NONE;
85 if (config[
"plannerConfig"]) {
86 auto pc = config[
"plannerConfig"];
87 plannerConfig.
epsilonSteps = pc[
"epsilonSteps"].as<
double>(2.0);
88 plannerConfig.
initialEpsilon = pc[
"initialEpsilon"].as<
double>(64.0);
89 plannerConfig.
numThreads = pc[
"numThreads"].as<
unsigned>(4);
95 }
catch (
const std::exception& e) {
96 LOG_ERROR_S <<
"Failed to load config: " << e.what();