Apollo  6.0
Open source self driving car software
frame.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2017 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
21 #pragma once
22 
23 #include <list>
24 #include <map>
25 #include <string>
26 #include <tuple>
27 #include <unordered_map>
28 #include <utility>
29 #include <vector>
30 
33 #include "modules/common/proto/geometry.pb.h"
35 #include "modules/common/vehicle_state/proto/vehicle_state.pb.h"
36 #include "modules/localization/proto/pose.pb.h"
44 #include "modules/planning/proto/pad_msg.pb.h"
45 #include "modules/planning/proto/planning.pb.h"
46 #include "modules/planning/proto/planning_config.pb.h"
47 #include "modules/planning/proto/planning_internal.pb.h"
49 #include "modules/prediction/proto/prediction_obstacle.pb.h"
50 #include "modules/routing/proto/routing.pb.h"
51 
52 namespace apollo {
53 namespace planning {
54 
61 class Frame {
62  public:
63  explicit Frame(uint32_t sequence_num);
64 
65  Frame(uint32_t sequence_num, const LocalView &local_view,
66  const common::TrajectoryPoint &planning_start_point,
67  const common::VehicleState &vehicle_state,
68  ReferenceLineProvider *reference_line_provider);
69 
70  Frame(uint32_t sequence_num, const LocalView &local_view,
71  const common::TrajectoryPoint &planning_start_point,
72  const common::VehicleState &vehicle_state);
73 
74  virtual ~Frame() = default;
75 
76  const common::TrajectoryPoint &PlanningStartPoint() const;
77 
79  const common::VehicleStateProvider *vehicle_state_provider,
80  const std::list<ReferenceLine> &reference_lines,
81  const std::list<hdmap::RouteSegments> &segments,
82  const std::vector<routing::LaneWaypoint> &future_route_waypoints,
83  const EgoInfo *ego_info);
84 
86  const common::VehicleStateProvider *vehicle_state_provider,
87  const EgoInfo *ego_info);
88 
89  uint32_t SequenceNum() const;
90 
91  std::string DebugString() const;
92 
94 
95  void RecordInputDebug(planning_internal::Debug *debug);
96 
97  const std::list<ReferenceLineInfo> &reference_line_info() const;
98  std::list<ReferenceLineInfo> *mutable_reference_line_info();
99 
100  Obstacle *Find(const std::string &id);
101 
103 
105 
107 
109 
110  const std::vector<const Obstacle *> obstacles() const;
111 
113  ReferenceLineInfo *const reference_line_info,
114  const std::string &obstacle_id, const double obstacle_s);
115 
116  const Obstacle *CreateStopObstacle(const std::string &obstacle_id,
117  const std::string &lane_id,
118  const double lane_s);
119 
121  ReferenceLineInfo *const reference_line_info,
122  const std::string &obstacle_id, const double obstacle_start_s,
123  const double obstacle_end_s);
124 
125  bool Rerouting(PlanningContext *planning_context);
126 
127  const common::VehicleState &vehicle_state() const;
128 
129  static void AlignPredictionTime(
130  const double planning_start_time,
131  prediction::PredictionObstacles *prediction_obstacles);
132 
134  ADCTrajectory current_frame_planned_trajectory) {
135  current_frame_planned_trajectory_ =
136  std::move(current_frame_planned_trajectory);
137  }
138 
139  const ADCTrajectory &current_frame_planned_trajectory() const {
140  return current_frame_planned_trajectory_;
141  }
142 
145  current_frame_planned_path_ = std::move(current_frame_planned_path);
146  }
147 
149  return current_frame_planned_path_;
150  }
151 
152  const bool is_near_destination() const {
153  return is_near_destination_;
154  }
155 
161  const std::map<std::string, uint32_t> &id_to_priority);
162 
163  const LocalView &local_view() const {
164  return local_view_;
165  }
166 
168  return &obstacles_;
169  }
170 
172  return open_space_info_;
173  }
174 
176  return &open_space_info_;
177  }
178 
179  perception::TrafficLight GetSignal(const std::string &traffic_light_id) const;
180 
181  const DrivingAction &GetPadMsgDrivingAction() const {
182  return pad_msg_driving_action_;
183  }
184 
185  private:
186  common::Status InitFrameData(
187  const common::VehicleStateProvider *vehicle_state_provider,
188  const EgoInfo *ego_info);
189 
190  bool CreateReferenceLineInfo(const std::list<ReferenceLine> &reference_lines,
191  const std::list<hdmap::RouteSegments> &segments);
192 
199  const Obstacle *FindCollisionObstacle(const EgoInfo *ego_info) const;
200 
204  const Obstacle *CreateStaticVirtualObstacle(const std::string &id,
205  const common::math::Box2d &box);
206 
207  void AddObstacle(const Obstacle &obstacle);
208 
209  void ReadTrafficLights();
210 
211  void ReadPadMsgDrivingAction();
212  void ResetPadMsgDrivingAction();
213 
214  private:
215  static DrivingAction pad_msg_driving_action_;
216  uint32_t sequence_num_ = 0;
217  LocalView local_view_;
218  const hdmap::HDMap *hdmap_ = nullptr;
219  common::TrajectoryPoint planning_start_point_;
220  common::VehicleState vehicle_state_;
221  std::list<ReferenceLineInfo> reference_line_info_;
222 
223  bool is_near_destination_ = false;
224 
228  const ReferenceLineInfo *drive_reference_line_info_ = nullptr;
229 
230  ThreadSafeIndexedObstacles obstacles_;
231 
232  std::unordered_map<std::string, const perception::TrafficLight *>
233  traffic_lights_;
234 
235  // current frame published trajectory
236  ADCTrajectory current_frame_planned_trajectory_;
237 
238  // current frame path for future possible speed fallback
239  DiscretizedPath current_frame_planned_path_;
240 
241  const ReferenceLineProvider *reference_line_provider_ = nullptr;
242 
243  OpenSpaceInfo open_space_info_;
244 
245  std::vector<routing::LaneWaypoint> future_route_waypoints_;
246 
247  common::monitor::MonitorLogBuffer monitor_logger_buffer_;
248 };
249 
250 class FrameHistory : public IndexedQueue<uint32_t, Frame> {
251  public:
252  FrameHistory();
253 };
254 
255 } // namespace planning
256 } // namespace apollo
void UpdateReferenceLinePriority(const std::map< std::string, uint32_t > &id_to_priority)
Adjust reference line priority according to actual road conditions lane id and reference line priori...
const DiscretizedPath & current_frame_planned_path() const
Definition: frame.h:148
const common::TrajectoryPoint & PlanningStartPoint() const
Definition: discretized_path.h:31
Definition: planning_context.h:33
This is the class that associates an Obstacle with its path properties. An obstacle&#39;s path properties...
Definition: obstacle.h:60
const ReferenceLineInfo * FindDriveReferenceLineInfo()
Defines the Vec2d class.
The class of vehicle state. It includes basic information and computation about the state of the vehi...
Definition: vehicle_state_provider.h:46
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Declaration of the class ReferenceLineProvider.
OpenSpaceInfo * mutable_open_space_info()
Definition: frame.h:175
void RecordInputDebug(planning_internal::Debug *debug)
Definition: ego_info.h:35
uint32_t SequenceNum() const
static void AlignPredictionTime(const double planning_start_time, prediction::PredictionObstacles *prediction_obstacles)
const OpenSpaceInfo & open_space_info() const
Definition: frame.h:171
Planning module main class. It processes GPS and IMU as input, to generate planning info...
common::Status Init(const common::VehicleStateProvider *vehicle_state_provider, const std::list< ReferenceLine > &reference_lines, const std::list< hdmap::RouteSegments > &segments, const std::vector< routing::LaneWaypoint > &future_route_waypoints, const EgoInfo *ego_info)
LocalView contains all necessary data as planning input.
Frame holds all data for one planning cycle.
Definition: frame.h:61
ReferenceLineInfo holds all data for one reference line.
Definition: reference_line_info.h:54
Definition: publishable_trajectory.h:29
bool Rerouting(PlanningContext *planning_context)
const PublishableTrajectory & ComputedTrajectory() const
std::string DebugString() const
std::list< ReferenceLineInfo > * mutable_reference_line_info()
Rectangular (undirected) bounding box in 2-D.
Definition: box2d.h:52
perception::TrafficLight GetSignal(const std::string &traffic_light_id) const
Frame(uint32_t sequence_num)
virtual ~Frame()=default
const Obstacle * CreateStopObstacle(ReferenceLineInfo *const reference_line_info, const std::string &obstacle_id, const double obstacle_s)
const common::VehicleState & vehicle_state() const
Definition: open_space_info.h:60
const LocalView & local_view() const
Definition: frame.h:163
High-precision map loader interface.
Definition: hdmap.h:53
common::Status InitForOpenSpace(const common::VehicleStateProvider *vehicle_state_provider, const EgoInfo *ego_info)
const ReferenceLineInfo * FindFailedReferenceLineInfo()
The class of MonitorLogBuffer.
const std::list< ReferenceLineInfo > & reference_line_info() const
const Obstacle * CreateStaticObstacle(ReferenceLineInfo *const reference_line_info, const std::string &obstacle_id, const double obstacle_start_s, const double obstacle_end_s)
const ReferenceLineInfo * DriveReferenceLineInfo() const
A general class to denote the return status of an API call. It can either be an OK status for success...
Definition: status.h:43
const bool is_near_destination() const
Definition: frame.h:152
const ReferenceLineInfo * FindTargetReferenceLineInfo()
const std::vector< const Obstacle * > obstacles() const
void set_current_frame_planned_path(DiscretizedPath current_frame_planned_path)
Definition: frame.h:143
This class help collect MonitorMessage pb to monitor topic. The messages can be published automatical...
Definition: monitor_log_buffer.h:60
ThreadSafeIndexedObstacles * GetObstacleList()
Definition: frame.h:167
void set_current_frame_planned_trajectory(ADCTrajectory current_frame_planned_trajectory)
Definition: frame.h:133
Definition: local_view.h:38
Obstacle * Find(const std::string &id)
The class of ReferenceLineProvider. It provides smoothed reference line to planning.
Definition: reference_line_provider.h:59
const DrivingAction & GetPadMsgDrivingAction() const
Definition: frame.h:181
const ADCTrajectory & current_frame_planned_trajectory() const
Definition: frame.h:139
Definition: indexed_queue.h:34
Definition: frame.h:250