Autoware.Auto
parking_planner.hpp
Go to the documentation of this file.
1 // Copyright 2020 Embotech AG, Zurich, Switzerland. Arm Limited. All rights reserved.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // This file contains the main interface to the parking planner. In order to
16 // use the planner, one constructs an object of the ParkingPlanner class and
17 // then calls the "plan" method with the appropriate arguments.
18 
19 #ifndef PARKING_PLANNER__PARKING_PLANNER_HPP_
20 #define PARKING_PLANNER__PARKING_PLANNER_HPP_
21 
22 #include <autoware_auto_msgs/msg/route.hpp>
23 #include <autoware_auto_msgs/msg/trajectory.hpp>
24 #include <common/types.hpp>
25 #include <lanelet2_core/LaneletMap.h>
26 #include <vector>
27 
28 #include "astar_path_planner.hpp"
29 #include "bicycle_model.hpp"
30 #include "nlp_path_planner.hpp"
32 #include "visibility_control.hpp"
33 
34 namespace autoware
35 {
36 namespace motion
37 {
38 namespace planning
39 {
40 namespace parking_planner
41 {
44 enum class PlanningStatus
45 {
47  OK,
48 
50  NLP_ERROR
51 };
52 
53 PARKING_PLANNER_PUBLIC std::vector<Polytope2D<float64_t>> convert_drivable_area_to_obstacles(
54  const lanelet::Polygon3d & drivable_area);
55 
56 PARKING_PLANNER_PUBLIC autoware_auto_msgs::msg::Trajectory
58  const Trajectory<float64_t> & parking_trajectory);
59 
61 class PARKING_PLANNER_PUBLIC PlanningResult
62 {
63 public:
70  const Trajectory<float64_t> trajectory,
71  const std::size_t nlp_iterations,
72  const float64_t nlp_proc_time,
73  const PlanningStatus status);
74 
75  const Trajectory<float64_t> & get_trajectory() const noexcept
76  {
77  return m_trajectory;
78  }
79  std::size_t get_nlp_iterations() const noexcept
80  {
81  return m_nlp_iterations;
82  }
83  float64_t get_nlp_proc_time() const noexcept
84  {
85  return m_nlp_proc_time;
86  }
87  PlanningStatus get_status() const noexcept
88  {
89  return m_status;
90  }
91 
92 private:
94  Trajectory<float64_t> m_trajectory;
95 
97  std::size_t m_nlp_iterations;
98 
100  float64_t m_nlp_proc_time;
101 
103  PlanningStatus m_status;
104 }; // class PlanningResult
105 
107 class PARKING_PLANNER_PUBLIC ParkingPlanner
108 {
109 public:
111  // friendly once that becomes required.
119  const BicycleModelParameters<float64_t> & parameters,
120  const NLPCostWeights<float64_t> & nlp_weights,
121  const VehicleState<float64_t> & lower_state_bounds,
122  const VehicleState<float64_t> & upper_state_bounds,
123  const VehicleCommand<float64_t> & lower_command_bounds,
124  const VehicleCommand<float64_t> & upper_command_bounds);
125 
131  PlanningResult plan(
132  const VehicleState<float64_t> & current_state,
133  const VehicleState<float64_t> & goal_state,
134  const std::vector<Polytope2D<float64_t>> & obstacles) const;
135 
136 
138  {
139  return m_model_parameters;
140  }
141 
142 private:
146  // The resulting trajectory is currently not dynamically feasible, since it is only
147  // used as an initial guess in the NLP solver and already useful enough as it is.
152  create_trajectory_from_states(
153  const std::vector<VehicleState<float64_t>> & states_input,
154  const std::size_t desired_trajectory_length) const;
155 
157  AstarPathPlanner m_astar_planner;
158 
160  NLPPathPlanner m_nlp_planner;
161 
163  BicycleModelParameters<float64_t> m_model_parameters;
164 }; // class ParkingPlanner
165 
166 } // namespace parking_planner
167 } // namespace planning
168 } // namespace motion
169 } // namespace autoware
170 
171 #endif // PARKING_PLANNER__PARKING_PLANNER_HPP_
double float64_t
Definition: types.hpp:37
std::vector< TrajectoryStep< T > > Trajectory
Class to represent a dynamic trajectory.
Definition: parking_planner_types.hpp:200
PARKING_PLANNER_PUBLIC std::vector< Polytope2D< float64_t > > convert_drivable_area_to_obstacles(const lanelet::Polygon3d &drivable_area)
Definition: parking_planner.cpp:220
std::size_t get_nlp_iterations() const noexcept
Definition: parking_planner.hpp:79
There was an error running the nonlinear solver.
const BicycleModelParameters< float64_t > & get_parameters() const
Definition: parking_planner.hpp:137
Parking motion planner.
Definition: parking_planner.hpp:107
autoware_auto_msgs::msg::Trajectory Trajectory
Definition: motion_common.hpp:37
const Trajectory< float64_t > & get_trajectory() const noexcept
Definition: parking_planner.hpp:75
float64_t get_nlp_proc_time() const noexcept
Definition: parking_planner.hpp:83
This file includes common type definition.
autoware::motion::planning::parking_planner::ParkingPlanner ParkingPlanner
Definition: parking_planner_node.hpp:66
PlanningStatus
Parking planner return codes.
Definition: parking_planner.hpp:44
PARKING_PLANNER_PUBLIC autoware_auto_msgs::msg::Trajectory convert_parking_planner_to_autoware_trajectory(const Trajectory< float64_t > &parking_trajectory)
Definition: parking_planner.cpp:295
Class describing a polytope in two-dimensional space.
Definition: geometry.hpp:244
Definition: controller_base.hpp:30
PlanningStatus get_status() const noexcept
Definition: parking_planner.hpp:87
Results of a parking planning call.
Definition: parking_planner.hpp:61
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24