Apollo  6.0
Open source self driving car software
message_process.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2020 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 <chrono>
24 #include <fstream>
25 #include <list>
26 #include <memory>
27 #include <string>
28 #include <unordered_map>
29 #include <utility>
30 #include <vector>
31 
32 #include "modules/canbus/proto/chassis.pb.h"
33 #include "modules/dreamview/proto/hmi_status.pb.h"
34 #include "modules/localization/proto/localization.pb.h"
36 #include "modules/perception/proto/traffic_light_detection.pb.h"
38 #include "modules/planning/proto/learning_data.pb.h"
39 #include "modules/planning/proto/planning_config.pb.h"
40 #include "modules/prediction/proto/prediction_obstacle.pb.h"
41 #include "modules/routing/proto/routing.pb.h"
42 #include "modules/storytelling/proto/story.pb.h"
43 
44 namespace apollo {
45 namespace planning {
46 
48  public:
49  bool Init(const PlanningConfig& planning_config);
50  bool Init(const PlanningConfig& planning_config,
51  const std::shared_ptr<DependencyInjector>& injector);
52 
53  void Close();
54 
55  void OnChassis(const apollo::canbus::Chassis& chassis);
56 
57  void OnHMIStatus(apollo::dreamview::HMIStatus hmi_status);
58 
59  void OnLocalization(const apollo::localization::LocalizationEstimate& le);
60 
61  void OnPrediction(
62  const apollo::prediction::PredictionObstacles& prediction_obstacles);
63 
64  void OnRoutingResponse(
65  const apollo::routing::RoutingResponse& routing_response);
66 
67  void OnStoryTelling(const apollo::storytelling::Stories& stories);
68 
70  const apollo::perception::TrafficLightDetection& traffic_light_detection);
71 
72  void ProcessOfflineData(const std::string& record_file);
73 
74  private:
75  struct ADCCurrentInfo {
76  std::pair<double, double> adc_cur_position_;
77  std::pair<double, double> adc_cur_velocity_;
78  std::pair<double, double> adc_cur_acc_;
79  double adc_cur_heading_;
80  };
81 
82  apollo::hdmap::LaneInfoConstPtr GetCurrentLane(
83  const apollo::common::PointENU& position);
84  bool GetADCCurrentRoutingIndex(int* adc_road_index, int* adc_passage_index,
85  double* adc_passage_s);
86 
87  int GetADCCurrentInfo(ADCCurrentInfo* adc_curr_info);
88 
89  void GenerateObstacleTrajectory(const int frame_num, const int obstacle_id,
90  const ADCCurrentInfo& adc_curr_info,
91  ObstacleFeature* obstacle_feature);
92 
93  void GenerateObstaclePrediction(
94  const int frame_num,
95  const apollo::prediction::PredictionObstacle& prediction_obstacle,
96  const ADCCurrentInfo& adc_curr_info, ObstacleFeature* obstacle_feature);
97 
98  void GenerateObstacleFeature(LearningDataFrame* learning_data_frame);
99 
100  bool GenerateLocalRouting(
101  const int frame_num,
102  RoutingResponseFeature* local_routing,
103  std::vector<std::string>* local_routing_lane_ids);
104 
105  void GenerateRoutingFeature(
106  const RoutingResponseFeature& local_routing,
107  const std::vector<std::string>& local_routing_lane_ids,
108  LearningDataFrame* learning_data_frame);
109 
110  void GenerateTrafficLightDetectionFeature(
111  LearningDataFrame* learning_data_frame);
112  void GenerateADCTrajectoryPoints(
113  const std::list<apollo::localization::LocalizationEstimate>&
114  localizations,
115  LearningDataFrame* learning_data_frame);
116 
117  void GeneratePlanningTag(LearningDataFrame* learning_data_frame);
118 
119  bool GenerateLearningDataFrame(LearningDataFrame* learning_data_frame);
120 
121  private:
122  std::shared_ptr<DependencyInjector> injector_;
123  PlanningConfig planning_config_;
124  std::chrono::time_point<std::chrono::system_clock> start_time_;
125  std::ofstream log_file_;
126  std::string record_file_;
127  std::unordered_map<std::string, std::string> map_m_;
128  LearningData learning_data_;
129  int learning_data_file_index_ = 0;
130  std::list<apollo::localization::LocalizationEstimate> localizations_;
131  std::unordered_map<int, apollo::prediction::PredictionObstacle>
132  prediction_obstacles_map_;
133  std::unordered_map<int, std::list<PerceptionObstacleFeature>>
134  obstacle_history_map_;
135  ChassisFeature chassis_feature_;
136  std::string map_name_;
137  PlanningTag planning_tag_;
138  apollo::routing::RoutingResponse routing_response_;
139  double traffic_light_detection_message_timestamp_;
140  std::vector<TrafficLightFeature> traffic_lights_;
141  int total_learning_data_frame_num_ = 0;
142  double last_localization_message_timestamp_sec_ = 0.0;
143 };
144 
145 } // namespace planning
146 } // namespace apollo
void OnTrafficLightDetection(const apollo::perception::TrafficLightDetection &traffic_light_detection)
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Planning module main class. It processes GPS and IMU as input, to generate planning info...
void OnRoutingResponse(const apollo::routing::RoutingResponse &routing_response)
void ProcessOfflineData(const std::string &record_file)
void OnLocalization(const apollo::localization::LocalizationEstimate &le)
void OnStoryTelling(const apollo::storytelling::Stories &stories)
std::shared_ptr< const LaneInfo > LaneInfoConstPtr
Definition: hdmap_common.h:125
Definition: message_process.h:47
bool Init(const PlanningConfig &planning_config)
void OnPrediction(const apollo::prediction::PredictionObstacles &prediction_obstacles)
void OnChassis(const apollo::canbus::Chassis &chassis)
void OnHMIStatus(apollo::dreamview::HMIStatus hmi_status)