ADORe
ADORe is a modular open source software library and toolkit for decision making, planning, control and simulation of automated vehicles
trajectory_planner_lc.h
Go to the documentation of this file.
1 /********************************************************************************
2  * Copyright (C) 2017-2020 German Aerospace Center (DLR).
3  * Eclipse ADORe, Automated Driving Open Research https://eclipse.org/adore
4  *
5  * This program and the accompanying materials are made available under the
6  * terms of the Eclipse Public License 2.0 which is available at
7  * http://www.eclipse.org/legal/epl-2.0.
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  * Daniel Heß - trajectory planner for lane following maneuvers
13  ********************************************************************************/
14 
15 
16 #pragma once
17 
18 #include <adore/fun/afactory.h>
19 #include <adore/env/afactory.h>
20 #include <adore/params/afactory.h>
32 
33 
34 namespace adore
35 {
36  namespace apps
37  {
43  {
44  private:
51 
74  int id_;
75  std::string plannerName_;
80  double gapX_;
81  double gapY_;
82  double gapT_;
83  double gapv_;
84  double gaps_;
87  public:
89  {
90  delete nominal_planner_;
91  delete emergency_planner1_;
92  delete emergency_planner2_;
93  }
94  void setEMContinueActive(bool value)
95  {
96  em_continue_active_ = value;
97  }
98  void setEMCancelActive(bool value)
99  {
100  em_cancel_active_ = value;
101  }
102  TrajectoryPlannerLC(bool directionLeft,std::string name,int id,double lateral_i_grid):
103  connectionSet_(adore::env::EnvFactoryInstance::get()->getVehicleMotionStateReader(),
104  adore::env::EnvFactoryInstance::get()->getControlledConnectionFeed()),
105  checkPointSet_(adore::env::EnvFactoryInstance::get()->getVehicleMotionStateReader(),
106  adore::env::EnvFactoryInstance::get()->getCheckPointFeed()),
107  ngo_(adore::env::EnvFactoryInstance::get(),
108  directionLeft
109  ?three_lanes_.getLeftLaneChange()->getTargetLane()
110  :three_lanes_.getRightLaneChange()->getTargetLane()
111  ,0,0),
112  prediction_(),
114  directionLeft_(directionLeft),
115  gapTrackingActive_(false),
116  lateral_i_grid_(lateral_i_grid),
118  em_continue_active_(true),
119  em_cancel_active_(false),
121  {
122  id_ = id;
123  plannerName_ = name;
124  const_penalty_ = 0.0;
129  auto pLongitudinalPlanner = adore::params::ParamsFactoryInstance::get()->getLongitudinalPlanner();
132  auto target_lc = directionLeft
135  auto target = target_lc->getTargetLane();
136  auto source = target_lc->getSourceLane();
141  //create nominal planner and add additional constraints
143  target_lc,
144  &ngo_,
149  pLongitudinalPlanner,
150  pLateralPlanner,
151  pTacticalPlanner,
152  pvehicle_,
154  lateral_i_grid);
155  nominal_planner_->setGap(&gap_);//assign constant empty gap for testing
156 
157  //create emergency planner 1
158  emergency_planner1_ = new TEmergencyPlanner1(target_lc,
159  pLateralPlanner,
160  pTacticalPlanner,
161  pvehicle_,
168 
169  //create emergency planner 2
170  emergency_planner2_ = new TEmergencyPlanner2(target_lc,
171  pLateralPlanner,
172  pTacticalPlanner,
173  pvehicle_,
175  lateral_i_grid);
181  emergency_planner2_->setGap(&gap_);//assign constant empty gap for testing
182 
183  }
184  void setSpeedScale(double value)
185  {
187  }
188  void setConstPenalty(double value)
189  {
190  const_penalty_ = value;
191  }
196  virtual void computeTrajectory(const adore::fun::PlanningRequest& planning_request, adore::fun::PlanningResult& planning_result) override
197  {
198  //document planner result
199  planning_result.id = id_; // in lfbehavior, there is only one maneuver
200  planning_result.name = plannerName_;
202  planning_result.iteration = planning_request.iteration;
203  planning_result.nominal_maneuver_valid = false;
204  planning_result.combined_maneuver_valid = false;
205  planning_result.indicator_left = false;
206  planning_result.indicator_right = false;
207 
209  ngo_.update();
216  auto current = three_lanes_.getCurrentLane();
217  auto target_lc = directionLeft_
220  auto target = target_lc->getTargetLane();
221 
222 
223  if(!current->isValid())
224  {
225  planning_result.status_string = "current lane invalid";
226  return;
227  }
228  if(!target->isValid())
229  {
230  planning_result.status_string = "target lane invalid";
231  return;
232  }
233  if(target_lc->getNavigationCostDifference()>pTacticalPlanner_->getMaxNavcostLoss())
234  {
235  planning_result.status_string = "lc not required for navigation";
236  return;
237  }
238 
239 
241 
242  //delayed indicator activation
243  double s,n;
244  target->toRelativeCoordinates(planning_request.initial_state.x0ref.getX(),
245  planning_request.initial_state.x0ref.getY(),
246  s,n);
247  double sg0 = target_lc->getProgressOfGateOpen();
248  double indicator_lookahead = pTacticalPlanner_->getIndicatorLookahead();
249  if(s+indicator_lookahead>sg0)
250  {
251  planning_result.indicator_left = directionLeft_;
252  planning_result.indicator_right = !directionLeft_;
253  }
254 
255  //@TODO: Gap selection
256  // - store XY-coordinate for gap identification
257  // - remember speed of gap and time
258  // - advance XY-coordinate with speed of gap and time to get an estimate of next gap position
259  // - relocate XY-coordinate in gap center
260  // - compute s-porgress from XY-coordinate to to identify gap to basiclanechangeplanner
261  // here: naive gap selection: always use ego coordinate
262  gapX_ = planning_request.initial_state.x0ref.getX();
263  gapY_ = planning_request.initial_state.x0ref.getY();
264  double tmp;
265  target->toRelativeCoordinates(gapX_,gapY_,gaps_,tmp);
266 
269  {
270  planning_result.status_string = "nominal maneuver planning failed, "+ nominal_planner_->getStatus();
271  return;
272  }
273 
275 
276  // adore::fun::RestartEffort re;
277  // if(!re.isValid(planning_result.nominal_maneuver))
278  // {
279  // planning_result.status_string = "not restarting, maneuver too short";
280  // return;
281  // }
282 
283 
284  planning_result.nominal_maneuver_valid = true;
286  bool valid_em_found = false;
287 
289  {
294  emergency_planner2_->compute(x0em.toMotionState());
296  {
298  planning_result.combined_maneuver.removeAfter(planning_request.t_emergency_start);
299  planning_result.combined_maneuver.setPoints.back().tEnd = planning_request.t_emergency_start;
301  if(collision_detection_.isValid(planning_result.combined_maneuver))
302  {
303  valid_em_found = true;
304  }
305  else
306  {
307  planning_result.status_string = "collision detection em_continue invalid, "+ planning_result.status_string;
308  //planning_result.combined_maneuver.setPoints.clear();
309  }
310 
311  }
312  }
313  else
314  {
315  planning_result.status_string = "em_continue_active=false, "+ planning_result.status_string;
316  }
317 
318 
320  {
321  if(!valid_em_found)
322  {
327  emergency_planner1_->compute(x0em.toMotionState());
329  {
331  planning_result.combined_maneuver.removeAfter(planning_request.t_emergency_start);
332  planning_result.combined_maneuver.setPoints.back().tEnd = planning_request.t_emergency_start;
334  if(collision_detection_.isValid(planning_result.combined_maneuver))
335  {
336  valid_em_found = true;
337  }
338  else
339  {
340  planning_result.status_string = "collision detection em_cancel invalid, "+ planning_result.status_string;
341  // planning_result.combined_maneuver.setPoints.clear();
342  }
343  }
344  }
345  }
346  else
347  {
348  planning_result.status_string = "em_cancel_active=false, "+ planning_result.status_string;
349  }
350 
351  if(!valid_em_found)
352  {
353  planning_result.status_string += "emergency maneuver planning failed";
354  return;
355  }
356 
357  double front_buffer_space = pTacticalPlanner_->getCollisionDetectionFrontBufferSpace();
358  double lateral_precision = pTacticalPlanner_->getCollisionDetectionLateralPrecision();
360  pvehicle_->get_a()+pvehicle_->get_b()+pvehicle_->get_c()+pvehicle_->get_d()+front_buffer_space,
362  pvehicle_->get_d(),//spr reference point at rear axle
363  lateral_precision);
366  spr_swath.append_cylinder_swath_linear(planning_result.combined_maneuver,planning_result.combined_maneuver_swath);
367  spr_swath.append_cylinder_swath_linear(planning_result.nominal_maneuver,planning_result.nominal_maneuver_swath);
368 
370  if(planning_result.combined_maneuver.setPoints.size()==0)
371  {
372  planning_result.status_string = "stopping";
373  return;
374  }
375 
376  planning_result.combined_maneuver_valid = true;
377  int laneid = directionLeft_?1:-1;
379  planning_result.objective_values.insert({navcostOnLane.getName(),
380  navcostOnLane.getCost(planning_result.nominal_maneuver)});
381 
383  planning_result.objective_values.insert({navcostNormalized.getName(),
384  navcostNormalized.getCost(planning_result.nominal_maneuver)});
385 
387  planning_result.objective_values.insert({lacccost.getName(),
388  lacccost.getCost(planning_result.nominal_maneuver)});
389 
391  planning_result.objective_values.insert({ljerkcost.getName(),
392  ljerkcost.getCost(planning_result.nominal_maneuver)});
393 
395  planning_result.objective_values.insert({progressLoss.getName(),
396  progressLoss.getCost(planning_result.nominal_maneuver)});
397 
398  planning_result.objective_values.insert({"const_penalty",const_penalty_});
399 
400  //ttc cost
401  planning_result.objective_values.insert({ttcCost_.getName(),
402  ttcCost_.getCost(planning_result.nominal_maneuver)});
403 
404 
406  {
407  case 0://turned off
408  {
409  planning_result.objective_values.insert({coercion_detection_.getName(),0.0});
410  }
411  break;
412  case 1://encode as objective value
413  {
414  planning_result.objective_values.insert({coercion_detection_.getName(),
416  ? 0.0 : 1.0});
417  }
418  break;
419  case 2://encode as constraint
420  {
421  bool coercion_detection_passed = coercion_detection_.isValid(planning_result.nominal_maneuver);
422  planning_result.combined_maneuver_valid = coercion_detection_passed && planning_result.combined_maneuver_valid;
423  if(!coercion_detection_passed)
424  {
425  planning_result.status_string = "coercion detected for nominal maneuver";
426  }
427  }
428  break;
429  }
430 
431 
432  int number_of_time_steps = nominal_planner_->getProgressSolver().lbx().nc();
433  auto time_steps = adore::mad::linspace(nominal_planner_->getPlanningHorizon()/number_of_time_steps,nominal_planner_->getPlanningHorizon(),number_of_time_steps);
435  planning_result.nominal_maneuver_longitudinal_lbx.getData() = dlib::join_cols(time_steps,nominal_planner_->getProgressSolver().lbx());
436  planning_result.nominal_maneuver_longitudinal_ubx.getData() = dlib::join_cols(time_steps,nominal_planner_->getProgressSolver().ubx());
438  planning_result.nominal_maneuver_lateral_lbx.getData() = dlib::join_cols(time_steps,nominal_planner_->getOffsetSolver().lbx());
439  planning_result.nominal_maneuver_lateral_ubx.getData() = dlib::join_cols(time_steps,nominal_planner_->getOffsetSolver().ubx());
440  }
441  };
442  }
443 }
Base class for different trajectory planners: Handles communication w/ decision making module....
Definition: trajectory_planner_base.h:31
Decoupled trajectory planner, which uses TrajectoryPlannerBase to compute and provide a PlanningResul...
Definition: trajectory_planner_lc.h:43
adore::env::NavigationGoalObserver ngo_
Definition: trajectory_planner_lc.h:57
adore::params::APVehicle * pvehicle_
Definition: trajectory_planner_lc.h:53
adore::fun::SPRNonCoercive coercion_detection_
Definition: trajectory_planner_lc.h:67
double gapv_
Definition: trajectory_planner_lc.h:83
double const_penalty_
Definition: trajectory_planner_lc.h:79
adore::env::ConnectionsOnLane * connectionsOnTargetLane_
Definition: trajectory_planner_lc.h:61
double gapT_
Definition: trajectory_planner_lc.h:82
std::string plannerName_
Definition: trajectory_planner_lc.h:75
TrajectoryPlannerLC(bool directionLeft, std::string name, int id, double lateral_i_grid)
Definition: trajectory_planner_lc.h:102
adore::env::DecoupledTrafficPredictionView prediction_
Definition: trajectory_planner_lc.h:64
adore::fun::ContinueLCMRMPlanner< 20, 5 > TEmergencyPlanner2
Definition: trajectory_planner_lc.h:47
int id_
Definition: trajectory_planner_lc.h:74
bool em_cancel_active_
Definition: trajectory_planner_lc.h:86
void setEMContinueActive(bool value)
Definition: trajectory_planner_lc.h:94
double gapX_
Definition: trajectory_planner_lc.h:80
adore::params::APTrajectoryGeneration * pTrajectoryGeneration_
Definition: trajectory_planner_lc.h:55
virtual ~TrajectoryPlannerLC()
Definition: trajectory_planner_lc.h:88
void setSpeedScale(double value)
Definition: trajectory_planner_lc.h:184
adore::env::ConnectionsOnLane * connectionsOnSourceLane_
Definition: trajectory_planner_lc.h:60
bool gapTrackingActive_
Definition: trajectory_planner_lc.h:77
void setEMCancelActive(bool value)
Definition: trajectory_planner_lc.h:98
adore::env::ControlledConnectionSet4Ego checkPointSet_
Definition: trajectory_planner_lc.h:59
adore::fun::CancelLCMRMPlanner< 20, 5 > TEmergencyPlanner1
Definition: trajectory_planner_lc.h:46
bool em_continue_active_
Definition: trajectory_planner_lc.h:85
TNominalPlanner * nominal_planner_
Definition: trajectory_planner_lc.h:48
adore::fun::SPRTTCNominal ttcCost_
Definition: trajectory_planner_lc.h:66
adore::env::ControlledConnectionSet4Ego connectionSet_
Definition: trajectory_planner_lc.h:58
double gapY_
Definition: trajectory_planner_lc.h:81
adore::env::ConnectionsOnLane * checkPointsOnTargetLane_
Definition: trajectory_planner_lc.h:62
TEmergencyPlanner1 * emergency_planner1_
Definition: trajectory_planner_lc.h:49
adore::fun::BasicLaneChangePlanner< 20, 5 > TNominalPlanner
Definition: trajectory_planner_lc.h:45
double lateral_i_grid_
Definition: trajectory_planner_lc.h:78
adore::params::APEmergencyOperation * pEmergencyOperation_
Definition: trajectory_planner_lc.h:56
TEmergencyPlanner2 * emergency_planner2_
Definition: trajectory_planner_lc.h:50
bool directionLeft_
Definition: trajectory_planner_lc.h:76
virtual void computeTrajectory(const adore::fun::PlanningRequest &planning_request, adore::fun::PlanningResult &planning_result) override
update data, views and recompute maneuver
Definition: trajectory_planner_lc.h:196
adore::env::ConnectionsOnLane * checkPointsOnSourceLane_
Definition: trajectory_planner_lc.h:63
void setConstPenalty(double value)
Definition: trajectory_planner_lc.h:188
adore::fun::SPRInvariantCollisionFreedom collision_detection_
Definition: trajectory_planner_lc.h:72
adore::env::EmptyGap gap_
Definition: trajectory_planner_lc.h:65
adore::env::ThreeLaneViewDecoupled three_lanes_
Definition: trajectory_planner_lc.h:52
double gaps_
Definition: trajectory_planner_lc.h:84
adore::params::APTacticalPlanner * pTacticalPlanner_
Definition: trajectory_planner_lc.h:54
Definition: connectionsonlane.h:33
void update()
Definition: connectionsonlane.h:82
Specialization of ControlledConnectionSet: Filters connections in range of ego.
Definition: controlledconnection.h:232
virtual void update()
Definition: controlledconnection.h:243
Definition: decoupledtrafficpredictionview.h:24
void update()
Definition: decoupledtrafficpredictionview.h:43
defines a gap for testing purposes, which never has lead or chase vehicles.
Definition: emptygap.h:25
Definition: navigationgoalobserver.h:31
void update()
Definition: navigationgoalobserver.h:56
Definition: threelaneviewdecoupled.h:32
virtual adore::view::ALaneChangeView * getLeftLaneChange()
Definition: threelaneviewdecoupled.h:412
virtual adore::view::ALaneChangeView * getRightLaneChange()
Definition: threelaneviewdecoupled.h:419
virtual adore::view::ALane * getCurrentLane()
Definition: threelaneviewdecoupled.h:405
void update()
Definition: threelaneviewdecoupled.h:373
void setGap(adore::view::AGap *gap)
Definition: basiclanechangeplanner.h:147
void setSpeedScale(double value)
Definition: basiclanechangeplanner.h:156
Plans minimum risk maneuver to cancel lane change.
Definition: cancellcmrmplanner.h:35
Plans minimum risk maneuver to cancel lane change.
Definition: continuelcmrmplanner.h:35
void setGap(adore::view::AGap *gap)
Definition: continuelcmrmplanner.h:91
double getPlanningHorizon() const
Definition: decoupled_lflc_planner.h:327
virtual const SetPointRequest * getSetPointRequest() const override
Definition: decoupled_lflc_planner.h:491
TProgressSolver & getProgressSolver()
Definition: decoupled_lflc_planner.h:335
std::string getStatus()
Definition: decoupled_lflc_planner.h:348
virtual bool hasValidPlan() const override
Definition: decoupled_lflc_planner.h:484
TOffsetSolver & getOffsetSolver()
Definition: decoupled_lflc_planner.h:339
virtual void compute(const VehicleMotionState9d &initial_state) override
Definition: decoupled_lflc_planner.h:372
virtual const SetPointRequest * getSetPointRequest() const
Definition: mrmplanner.h:273
void setAMin(double value)
Definition: mrmplanner.h:55
void setTStall(double value)
Definition: mrmplanner.h:53
virtual void compute(const VehicleMotionState9d &initial_state)
Definition: mrmplanner.h:175
void setJMax(double value)
Definition: mrmplanner.h:52
void setAStall(double value)
Definition: mrmplanner.h:54
void setSecondAttempt(bool value)
Definition: mrmplanner.h:56
virtual bool hasValidPlan() const
Definition: mrmplanner.h:266
Definition: basicsetpointrequestevaluators.h:148
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:155
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:154
Definition: basicsetpointrequestevaluators.h:32
virtual bool isValid(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:46
Definition: basicsetpointrequestevaluators.h:364
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:366
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:367
Definition: basicsetpointrequestevaluators.h:378
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:381
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:380
Definition: basicsetpointrequestevaluators.h:178
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:189
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:190
Definition: basicsetpointrequestevaluators.h:68
std::string getName() const
Definition: basicsetpointrequestevaluators.h:99
virtual bool isValid(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:82
Definition: basicsetpointrequestevaluators.h:256
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:268
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:267
Definition: basicsetpointrequestevaluators.h:107
virtual double getCost(const adore::fun::SetPointRequest &spr) const override
Definition: basicsetpointrequestevaluators.h:117
virtual std::string getName() const override
Definition: basicsetpointrequestevaluators.h:116
Definition: setpointrequestswath.h:26
void append_cylinder_swath_linear(const SetPointRequest &spr, adore::mad::OccupancyCylinderTree &prediction, bool terminal=false)
Definition: setpointrequestswath.h:55
void setLonError(double value)
Definition: setpointrequestswath.h:42
void setLatError(double value)
Definition: setpointrequestswath.h:41
void cropAfterFirstStop(double vxslow)
remove SetPoints after first stop Method looks for first downward zero crossing of vx and removes all...
Definition: setpointrequest.h:412
SetPoint interpolateSetPoint(double t, adore::params::APVehicle *p) const
Definition: setpointrequest.h:145
void removeAfter(double t)
Definition: setpointrequest.h:211
void copyTo(SetPointRequest &destination) const
Definition: setpointrequest.h:293
std::vector< SetPoint > setPoints
Definition: setpointrequest.h:38
PlanarVehicleState10d x0ref
Definition: setpoint.h:32
VehicleMotionState9d toMotionState() const
Definition: setpoint.h:46
adoreMatrix< T, n+1, 0 > & getData()
Definition: llinearpiecewisefunction.h:147
t_lbx & lbx()
Definition: lq_oc_single_shooting.h:713
t_ubx & ubx()
Definition: lq_oc_single_shooting.h:714
t_resultfun & result_fun()
Definition: lq_oc_single_shooting.h:704
virtual APLateralPlanner * getLateralPlanner() const =0
virtual APTacticalPlanner * getTacticalPlanner() const =0
virtual APTrajectoryGeneration * getTrajectoryGeneration() const =0
virtual APVehicle * getVehicle() const =0
virtual APEmergencyOperation * getEmergencyOperation() const =0
virtual APLongitudinalPlanner * getLongitudinalPlanner() const =0
abstract class containing parameters concerning emergency operation behaviour
Definition: ap_emergency_operation.h:25
virtual double getEmergencyManeuverJMin() const =0
virtual double getEmergencyManeuverAMin() const =0
virtual double getEmergencyManeuverAStall() const =0
virtual double getEmergencyManeuverTStall() const =0
abstract classs containing parameters to configure aspects and constraints of the tactical planner
Definition: ap_tactical_planner.h:25
virtual int getCoercionPreventionStrategy() const =0
getCoercionPreventionStrategy returns 0 switched off, 1 objective function, 2 constraint
virtual double getCollisionDetectionLateralError() const =0
virtual double getTerminateAfterFirstStopThresholdSpeed() const =0
virtual double getMaxNavcostLoss() const =0
virtual double getCollisionDetectionFrontBufferSpace() const =0
virtual double getCollisionDetectionLongitudinalError() const =0
virtual double getCollisionDetectionLateralPrecision() const =0
virtual double getIndicatorLookahead() const =0
abstract class containing parameters to configure the behaviour of trajectory generation
Definition: ap_trajectory_generation.h:26
abstract class for vehicle configuration related paremeters
Definition: ap_vehicle.h:29
virtual double get_b() const =0
rear axle to cog
virtual double get_bodyWidth() const =0
virtual double get_d() const =0
rear border to rear axle
virtual double get_a() const =0
cog to front axle
virtual double get_c() const =0
front axle to front border
static adore::params::AFactory * get()
Definition: afactory.h:103
virtual ALane * getTargetLane()=0
adoreMatrix< T, 1, n > linspace(T x0, T x1)
Definition: adoremath.h:91
Definition: areaofeffectconverter.h:20
double getX() const
Definition: planarvehiclestate10d.h:62
double getY() const
Definition: planarvehiclestate10d.h:63
Definition: planning_request.h:22
double t_emergency_start
Definition: planning_request.h:26
SetPoint initial_state
Definition: planning_request.h:27
long long int iteration
Definition: planning_request.h:23
Definition: planning_result.h:29
adore::mad::LLinearPiecewiseFunctionM< double, 3 > nominal_maneuver_lateral_lbx
Definition: planning_result.h:56
bool combined_maneuver_valid
Definition: planning_result.h:64
adore::mad::LLinearPiecewiseFunctionM< double, 4 > nominal_maneuver_longitudinal_plan
Definition: planning_result.h:43
std::string name
Definition: planning_result.h:32
static const int NOMINAL_DRIVING
Definition: planning_result.h:75
adore::mad::LLinearPiecewiseFunctionM< double, 4 > nominal_maneuver_lateral_plan
Definition: planning_result.h:54
adore::mad::LLinearPiecewiseFunctionM< double, 3 > nominal_maneuver_longitudinal_lbx
Definition: planning_result.h:46
std::string status_string
Definition: planning_result.h:65
adore::mad::LLinearPiecewiseFunctionM< double, 3 > nominal_maneuver_lateral_ubx
Definition: planning_result.h:59
std::unordered_map< std::string, double > objective_values
Definition: planning_result.h:68
int id
Definition: planning_result.h:30
int maneuver_type
Definition: planning_result.h:72
adore::mad::OccupancyCylinderTree combined_maneuver_swath
Definition: planning_result.h:40
bool indicator_right
Definition: planning_result.h:77
bool nominal_maneuver_valid
Definition: planning_result.h:63
int iteration
Definition: planning_result.h:31
adore::mad::OccupancyCylinderTree nominal_maneuver_swath
Definition: planning_result.h:38
bool indicator_left
Definition: planning_result.h:76
SetPointRequest nominal_maneuver
Definition: planning_result.h:33
SetPointRequest combined_maneuver
Definition: planning_result.h:35
adore::mad::LLinearPiecewiseFunctionM< double, 3 > nominal_maneuver_longitudinal_ubx
Definition: planning_result.h:50