34#include "modules/prediction/proto/offline_features.pb.h"
63 AERROR <<
"Map cannot be loaded.";
74 AERROR <<
"Unable to load adapter conf file: "
75 << FLAGS_prediction_adapter_config_filename;
78 ADEBUG <<
"Adapter config file is loaded into: "
79 << adapter_conf.ShortDebugString();
81 container_manager->
Init(adapter_conf);
87 evaluator_manager->
Init(prediction_conf);
93 predictor_manager->
Init(prediction_conf);
98 const std::shared_ptr<ContainerManager>& container_manager,
101 ADEBUG <<
"Received a perception message ["
102 << perception_obstacles.ShortDebugString() <<
"].";
105 auto ptr_obstacles_container =
108 CHECK_NOTNULL(ptr_obstacles_container);
109 ptr_obstacles_container->CleanUp();
112 auto ptr_ego_pose_container = container_manager->GetContainer<
PoseContainer>(
114 CHECK_NOTNULL(ptr_ego_pose_container);
117 auto ptr_ego_trajectory_container =
120 CHECK_NOTNULL(ptr_ego_trajectory_container);
123 auto ptr_storytelling_container =
126 CHECK_NOTNULL(ptr_storytelling_container);
130 ptr_ego_pose_container->ToPerceptionObstacle();
131 if (ptr_ego_vehicle !=
nullptr) {
132 double perception_obs_timestamp = ptr_ego_vehicle->
timestamp();
133 if (perception_obstacles.has_header() &&
134 perception_obstacles.
header().has_timestamp_sec()) {
135 ADEBUG <<
"Correcting " << std::fixed << std::setprecision(6)
136 << ptr_ego_vehicle->
timestamp() <<
" to " << std::fixed
137 << std::setprecision(6)
141 ptr_obstacles_container->InsertPerceptionObstacle(*ptr_ego_vehicle,
142 perception_obs_timestamp);
143 double x = ptr_ego_vehicle->
position().
x();
144 double y = ptr_ego_vehicle->
position().
y();
145 ADEBUG <<
"Get ADC position [" << std::fixed << std::setprecision(6) << x
146 <<
", " << std::fixed << std::setprecision(6) << y <<
"].";
147 ptr_ego_trajectory_container->SetPosition({x, y});
151 ptr_obstacles_container->Insert(perception_obstacles);
161 scenario_manager->
Run(container_manager.get());
166 ptr_obstacles_container->GetJunctionAnalyzer()->Init(
168 ptr_obstacles_container->BuildJunctionFeature();
172 ptr_obstacles_container->BuildLaneGraph();
178 if (FLAGS_enable_interactive_tag) {
188 const std::shared_ptr<ContainerManager>& container_manager,
192 ContainerProcess(container_manager, perception_obstacles, scenario_manager);
194 auto ptr_obstacles_container =
197 CHECK_NOTNULL(ptr_obstacles_container);
199 auto ptr_ego_trajectory_container =
202 CHECK_NOTNULL(ptr_ego_trajectory_container);
207 ptr_obstacles_container->curr_frame_movable_obstacle_ids()) {
208 Obstacle* obstacle_ptr = ptr_obstacles_container->GetObstacle(
id);
209 if (obstacle_ptr ==
nullptr) {
210 AERROR <<
"Null obstacle found.";
214 AERROR <<
"Obstacle [" <<
id <<
"] has no latest feature.";
220 ptr_ego_trajectory_container->adc_trajectory().trajectory_point();
224 ptr_ego_trajectory_container->adc_trajectory()
225 .header().timestamp_sec());
228 auto ptr_ego_pose = container_manager->GetContainer<
PoseContainer>(
230 CHECK_NOTNULL(ptr_ego_pose);
234 CopyFrom(*ptr_ego_pose->ToPerceptionObstacle());
237 ADEBUG <<
"Insert feature into feature output";
244 evaluator_manager->
Run(ptr_ego_trajectory_container,
245 ptr_obstacles_container);
246 if (FLAGS_prediction_offline_mode ==
252 predictor_manager->
Run(perception_obstacles, ptr_ego_trajectory_container,
253 ptr_obstacles_container);
264 ACHECK(ptr_ego_pose_container !=
nullptr);
265 ptr_ego_pose_container->Insert(localization);
267 ADEBUG <<
"Received a localization message ["
268 << localization.ShortDebugString() <<
"].";
273 auto ptr_ego_trajectory_container =
276 ACHECK(ptr_ego_trajectory_container !=
nullptr);
277 ptr_ego_trajectory_container->Insert(adc_trajectory);
279 ADEBUG <<
"Received a planning message [" << adc_trajectory.ShortDebugString()
282 auto ptr_storytelling_container =
285 CHECK_NOTNULL(ptr_storytelling_container);
286 ptr_ego_trajectory_container->SetJunction(
287 ptr_storytelling_container->ADCJunctionId(),
288 ptr_storytelling_container->ADCDistanceToJunction());
293 auto ptr_storytelling_container =
296 CHECK_NOTNULL(ptr_storytelling_container);
297 ptr_storytelling_container->Insert(story);
299 ADEBUG <<
"Received a storytelling message [" << story.ShortDebugString()
305 const std::shared_ptr<ContainerManager>& container_manager,
307 ScenarioManager* scenario_manager,
const std::string& record_filepath) {
312 writer.
Open(record_filepath +
".new_prediction");
318 if (perception_obstacles.ParseFromString(message.
content)) {
324 OnPerception(perception_obstacles, container_manager, evaluator_manager,
325 predictor_manager, scenario_manager,
326 &prediction_obstacles);
330 prediction_obstacles, message.
time);
331 AINFO <<
"Generated a new prediction message.";
337 if (localization.ParseFromString(message.
content)) {
340 localization, message.
time);
347 if (adc_trajectory.ParseFromString(message.
content)) {
348 OnPlanning(container_manager.get(), adc_trajectory);
bool ReadMessage(RecordMessage *message, uint64_t begin_time=0, uint64_t end_time=std::numeric_limits< uint64_t >::max())
Read one message from reader.
bool Open(const std::string &file)
Open a record to write.
bool WriteMessage(const std::string &channel_name, const MessageT &message, const uint64_t time_nanosec, const std::string &proto_desc="")
Write a message to record.
void Close()
Clean the record.
T * GetContainer(const common::adapter::AdapterConfig::MessageType &type)
Get mutable container
void Init(const common::adapter::AdapterManagerConfig &config)
Container manager initialization
void Run(const ADCTrajectoryContainer *adc_trajectory_container, ObstaclesContainer *obstacles_container)
Run evaluators
void Init(const PredictionConf &config)
Initializer
static void InsertFeatureProto(const Feature &feature)
Insert a feature
void AssignInteractiveTag()
Assign interactive tag for vehicle type obstacles which are close to ADC
static bool InitContainers(ContainerManager *container_manager)
static bool InitEvaluators(EvaluatorManager *evaluator_manager, const PredictionConf &prediction_conf)
static void ProcessOfflineData(const PredictionConf &prediction_conf, const std::shared_ptr< ContainerManager > &container_manager, EvaluatorManager *evaluator_manager, PredictorManager *predictor_manager, ScenarioManager *scenario_manager, const std::string &record_filepath)
static void OnPerception(const perception::PerceptionObstacles &perception_obstacles, const std::shared_ptr< ContainerManager > &container_manager, EvaluatorManager *evaluator_manager, PredictorManager *predictor_manager, ScenarioManager *scenario_manager, PredictionObstacles *const prediction_obstacles)
static void OnStoryTelling(ContainerManager *container_manager, const storytelling::Stories &story)
static void OnLocalization(ContainerManager *container_manager, const localization::LocalizationEstimate &localization)
static void OnPlanning(ContainerManager *container_manager, const planning::ADCTrajectory &adc_trajectory)
static bool Init(ContainerManager *container_manager, EvaluatorManager *evaluator_manager, PredictorManager *predictor_manager, const PredictionConf &prediction_conf)
static void ContainerProcess(const std::shared_ptr< ContainerManager > &container_manager, const perception::PerceptionObstacles &perception_obstacles, ScenarioManager *scenario_manger)
static bool InitPredictors(PredictorManager *predictor_manager, const PredictionConf &prediction_conf)
Feature * mutable_latest_feature()
Get a pointer to the latest feature.
const Feature & latest_feature() const
Get the latest feature.
void AssignCautionLevel()
static const int kDumpFrameEnv
static const int kDumpDataForLearning
static const int kDumpRecord
static const int kDumpFeatureProto
static bool Ready()
Check if map is ready
void Run(const apollo::perception::PerceptionObstacles &perception_obstacles, const ADCTrajectoryContainer *adc_trajectory_container, ObstaclesContainer *obstacles_container)
Execute the predictor generation
void Init(const PredictionConf &config)
Initializer
const PredictionObstacles & prediction_obstacles()
Get prediction obstacles
static void Analyze(ContainerManager *container_manager)
Set right_of_way for all lane_sequence
const Scenario scenario() const
Get scenario analysis result
void Run(ContainerManager *container_manager)
Run scenario analysis
bool GetProtoFromFile(const std::string &file_name, google::protobuf::Message *message)
Parses the content of the file specified by the file_name as a representation of protobufs,...
Use evaluator manager to manage all evaluators
Holds all global constants for the prediction module.
Use predictor manager to manage all predictors
Basic data struct of record message.
std::string content
The content of the message.
uint64_t time
The time (nanosecond) of the message.
std::string channel_name
The channel name of the message.
optional double timestamp
optional apollo::common::Point3D position
optional apollo::common::Header header
optional TopicConf topic_conf
optional string junction_id
optional string planning_trajectory_topic
optional string perception_obstacle_topic
optional string localization_topic