Apollo 10.0
自动驾驶开放平台
frame.h
浏览该文件的文档.
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
31#include "modules/common/vehicle_state/proto/vehicle_state.pb.h"
32#include "modules/common_msgs/basic_msgs/geometry.pb.h"
33#include "modules/common_msgs/localization_msgs/pose.pb.h"
34#include "modules/common_msgs/planning_msgs/pad_msg.pb.h"
35#include "modules/common_msgs/planning_msgs/planning.pb.h"
36#include "modules/common_msgs/planning_msgs/planning_internal.pb.h"
37#include "modules/common_msgs/prediction_msgs/prediction_obstacle.pb.h"
38#include "modules/common_msgs/routing_msgs/routing.pb.h"
39#include "modules/planning/planning_base/proto/planning_config.pb.h"
40
52
53namespace apollo {
54namespace planning {
55
62class Frame {
63 public:
64 explicit Frame(uint32_t sequence_num);
65
66 Frame(uint32_t sequence_num, const LocalView &local_view,
67 const common::TrajectoryPoint &planning_start_point,
69 ReferenceLineProvider *reference_line_provider);
70
71 Frame(uint32_t sequence_num, const LocalView &local_view,
72 const common::TrajectoryPoint &planning_start_point,
74
75 virtual ~Frame() = default;
76
78
80 const common::VehicleStateProvider *vehicle_state_provider,
81 const std::list<ReferenceLine> &reference_lines,
82 const std::list<hdmap::RouteSegments> &segments,
83 const std::vector<routing::LaneWaypoint> &future_route_waypoints,
84 const EgoInfo *ego_info);
85
87 const common::VehicleStateProvider *vehicle_state_provider,
88 const EgoInfo *ego_info);
89
90 uint32_t SequenceNum() const;
91
92 std::string DebugString() const;
93
95
97
98 const std::list<ReferenceLineInfo> &reference_line_info() const;
99 std::list<ReferenceLineInfo> *mutable_reference_line_info();
100
101 Obstacle *Find(const std::string &id);
102
104
106
108
110
111 const std::vector<const Obstacle *> obstacles() const;
112
115 const std::string &obstacle_id, const double obstacle_s,
116 double stop_wall_width = 4.0);
117
118 const Obstacle *CreateStopObstacle(const std::string &obstacle_id,
119 const std::string &lane_id,
120 const double lane_s);
121
124 const std::string &obstacle_id, const double obstacle_start_s,
125 const double obstacle_end_s);
126
127 bool Rerouting(PlanningContext *planning_context);
128
129 const common::VehicleState &vehicle_state() const;
130
131 static void AlignPredictionTime(
132 const double planning_start_time,
133 prediction::PredictionObstacles *prediction_obstacles);
134
137 current_frame_planned_trajectory_ =
139 }
140
142 return current_frame_planned_trajectory_;
143 }
144
147 current_frame_planned_path_ = std::move(current_frame_planned_path);
148 }
149
151 return current_frame_planned_path_;
152 }
153
154 const bool is_near_destination() const { return is_near_destination_; }
155
161 const std::map<std::string, uint32_t> &id_to_priority);
162
163 const LocalView &local_view() const { return local_view_; }
164
166
167 const OpenSpaceInfo &open_space_info() const { return open_space_info_; }
168
169 OpenSpaceInfo *mutable_open_space_info() { return &open_space_info_; }
170
171 perception::TrafficLight GetSignal(const std::string &traffic_light_id) const;
172
174 return pad_msg_driving_action_;
175 }
176
177 private:
178 common::Status InitFrameData(
179 const common::VehicleStateProvider *vehicle_state_provider,
180 const EgoInfo *ego_info);
181
182 bool CreateReferenceLineInfo(const std::list<ReferenceLine> &reference_lines,
183 const std::list<hdmap::RouteSegments> &segments);
184
191 const Obstacle *FindCollisionObstacle(const EgoInfo *ego_info) const;
192
196 const Obstacle *CreateStaticVirtualObstacle(const std::string &id,
197 const common::math::Box2d &box);
198
199 void AddObstacle(const Obstacle &obstacle);
200
201 void ReadTrafficLights();
202
203 void ReadPadMsgDrivingAction();
204 void ResetPadMsgDrivingAction();
205
206 private:
207 static PadMessage::DrivingAction pad_msg_driving_action_;
208 uint32_t sequence_num_ = 0;
209 LocalView local_view_;
210 const hdmap::HDMap *hdmap_ = nullptr;
211 common::TrajectoryPoint planning_start_point_;
212 common::VehicleState vehicle_state_;
213 std::list<ReferenceLineInfo> reference_line_info_;
214
215 bool is_near_destination_ = false;
216
220 const ReferenceLineInfo *drive_reference_line_info_ = nullptr;
221
223
224 std::unordered_map<std::string, const perception::TrafficLight *>
225 traffic_lights_;
226
227 // current frame published trajectory
228 ADCTrajectory current_frame_planned_trajectory_;
229
230 // current frame path for future possible speed fallback
231 DiscretizedPath current_frame_planned_path_;
232
233 const ReferenceLineProvider *reference_line_provider_ = nullptr;
234
235 OpenSpaceInfo open_space_info_;
236
237 std::vector<routing::LaneWaypoint> future_route_waypoints_;
238
239 common::monitor::MonitorLogBuffer monitor_logger_buffer_;
240};
241
242class FrameHistory : public IndexedQueue<uint32_t, Frame> {
243 public:
244 FrameHistory();
245};
246
247} // namespace planning
248} // namespace apollo
A general class to denote the return status of an API call.
Definition status.h:43
Rectangular (undirected) bounding box in 2-D.
Definition box2d.h:52
High-precision map loader interface.
Definition hdmap.h:54
Frame holds all data for one planning cycle.
Definition frame.h:62
const std::vector< const Obstacle * > obstacles() const
Definition frame.cc:577
const OpenSpaceInfo & open_space_info() const
Definition frame.h:167
static void AlignPredictionTime(const double planning_start_time, prediction::PredictionObstacles *prediction_obstacles)
Definition frame.cc:458
const PadMessage::DrivingAction & GetPadMsgDrivingAction() const
Definition frame.h:173
uint32_t SequenceNum() const
Definition frame.cc:423
const LocalView & local_view() const
Definition frame.h:163
const common::VehicleState & vehicle_state() const
Definition frame.cc:83
const bool is_near_destination() const
Definition frame.h:154
const Obstacle * CreateStaticObstacle(ReferenceLineInfo *const reference_line_info, const std::string &obstacle_id, const double obstacle_start_s, const double obstacle_end_s)
: create static virtual object with lane width,
Definition frame.cc:274
void set_current_frame_planned_trajectory(ADCTrajectory current_frame_planned_trajectory)
Definition frame.h:135
OpenSpaceInfo * mutable_open_space_info()
Definition frame.h:169
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)
Definition frame.cc:334
void UpdateReferenceLinePriority(const std::map< std::string, uint32_t > &id_to_priority)
Adjust reference line priority according to actual road conditions @id_to_priority lane id and refere...
Definition frame.cc:131
ThreadSafeIndexedObstacles * GetObstacleList()
Definition frame.h:165
const ReferenceLineInfo * FindDriveReferenceLineInfo()
Definition frame.cc:538
perception::TrafficLight GetSignal(const std::string &traffic_light_id) const
Definition frame.cc:511
virtual ~Frame()=default
std::string DebugString() const
Definition frame.cc:425
const PublishableTrajectory & ComputedTrajectory() const
Obstacle * Find(const std::string &id)
Definition frame.cc:486
void RecordInputDebug(planning_internal::Debug *debug)
Definition frame.cc:429
const ADCTrajectory & current_frame_planned_trajectory() const
Definition frame.h:141
const ReferenceLineInfo * FindFailedReferenceLineInfo()
Definition frame.cc:562
common::Status InitForOpenSpace(const common::VehicleStateProvider *vehicle_state_provider, const EgoInfo *ego_info)
Definition frame.cc:358
void set_current_frame_planned_path(DiscretizedPath current_frame_planned_path)
Definition frame.h:145
const ReferenceLineInfo * DriveReferenceLineInfo() const
Definition frame.cc:573
const DiscretizedPath & current_frame_planned_path() const
Definition frame.h:150
const std::list< ReferenceLineInfo > & reference_line_info() const
Definition frame.cc:123
const Obstacle * CreateStopObstacle(ReferenceLineInfo *const reference_line_info, const std::string &obstacle_id, const double obstacle_s, double stop_wall_width=4.0)
: create static virtual object with lane width, mainly used for virtual stop wall
Definition frame.cc:214
std::list< ReferenceLineInfo > * mutable_reference_line_info()
Definition frame.cc:127
const ReferenceLineInfo * FindTargetReferenceLineInfo()
Definition frame.cc:551
const common::TrajectoryPoint & PlanningStartPoint() const
Definition frame.cc:79
This is the class that associates an Obstacle with its path properties.
Definition obstacle.h:62
ReferenceLineInfo holds all data for one reference line.
The class of ReferenceLineProvider.
This class decides whether we should send rerouting request based on traffic situation.
Definition rerouting.h:37
Planning module main class.
The class of MonitorLogBuffer
class register implement
Definition arena_queue.h:37
Declaration of the class ReferenceLineProvider.
LocalView contains all necessary data as planning input
Defines the Vec2d class.