Apollo  6.0
Open source self driving car software
mlf_engine.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2018 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 #pragma once
17 
18 #include <memory>
19 #include <set>
20 #include <string>
21 #include <vector>
22 
27 #include "modules/perception/proto/perception_obstacle.pb.h"
30 
31 namespace apollo {
32 namespace perception {
33 namespace lidar {
34 
36  public:
37  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
38 
39  public:
40  MlfEngine() = default;
41  virtual ~MlfEngine() = default;
42 
43  bool Init(const MultiTargetTrackerInitOptions& options =
45 
46  // @brief: track segmented objects from multiple lidar sensors
47  // @params [in]: tracker options
48  // @params [in/out]: lidar frame
49  bool Track(const MultiTargetTrackerOptions& options,
50  LidarFrame* frame) override;
51 
52  std::string Name() const override { return "MlfEngine"; };
53 
54  protected:
55  // @brief: split foreground/background objects and attach to tracked objects
56  // @params [in]: objects
57  // @params [in]: sensor info
59  const std::vector<base::ObjectPtr>& objects,
60  const base::SensorInfo& sensor_info);
61 
62  // @brief: match tracks and objects and object-track assignment
63  // @params [in]: match options
64  // @params [in]: objects for match
65  // @params [in]: name
66  // @params [in/out]: tracks for match and assignment
68  const MlfTrackObjectMatcherOptions& match_options,
69  const std::vector<TrackedObjectPtr>& objects, const std::string& name,
70  std::vector<MlfTrackDataPtr>* tracks);
71 
72  // @brief: filter tracks
73  // @params [in]: tracks for filter
74  // @params [in]: frame timestamp
75  void TrackStateFilter(const std::vector<MlfTrackDataPtr>& tracks,
76  double frame_timestamp);
77 
78  // @brief: collect track results and store in frame tracked objects
79  // @params [in/out]: lidar frame
80  void CollectTrackedResult(LidarFrame* frame);
81 
82  // @brief: remove stale track data for memory management
83  // @params: name
84  // @params: timestamp
85  // @params [in/out]: tracks to be cleaned
86  void RemoveStaleTrackData(const std::string& name, double timestamp,
87  std::vector<MlfTrackDataPtr>* tracks);
88 
89 // void AttachDebugInfo(
90 // std::vector<std::shared_ptr<base::Object>>* foreground_objs);
91 
92 // void AttachSemanticPredictedTrajectory(
93 // const std::vector<MlfTrackDataPtr>& tracks);
94 
95  protected:
96  // foreground and background track data
97  std::vector<MlfTrackDataPtr> foreground_track_data_;
98  std::vector<MlfTrackDataPtr> background_track_data_;
99  // foreground and background tracked objects
100  std::vector<TrackedObjectPtr> foreground_objects_;
101  std::vector<TrackedObjectPtr> background_objects_;
102  // tracker
103  std::unique_ptr<MlfTracker> tracker_;
104  // track object matcher
105  std::unique_ptr<MlfTrackObjectMatcher> matcher_;
106  // offset maintained for numeric issues
109  // main sensor info
110  std::set<std::string> main_sensor_;
111  // params
113  size_t histogram_bin_size_ = 10;
116  bool use_frame_timestamp_ = false;
117  // semantic map
121  bool use_semantic_map_ = false;
122 // apollo::perception::EvaluatorManager evaluator_;
123 };
124 
125 } // namespace lidar
126 } // namespace perception
127 } // namespace apollo
Definition: mlf_engine.h:35
bool output_predict_objects_
Definition: mlf_engine.h:114
double reserved_invisible_time_
Definition: mlf_engine.h:115
Definition: obstacles_container.h:39
size_t histogram_bin_size_
Definition: mlf_engine.h:113
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Definition: base_multi_target_tracker.h:27
Definition: base_multi_target_tracker.h:31
std::vector< TrackedObjectPtr > foreground_objects_
Definition: mlf_engine.h:100
void TrackObjectMatchAndAssign(const MlfTrackObjectMatcherOptions &match_options, const std::vector< TrackedObjectPtr > &objects, const std::string &name, std::vector< MlfTrackDataPtr > *tracks)
Eigen::Vector3d Vector3d
Definition: frame_transform.h:27
Eigen::Vector3d global_to_local_offset_
Definition: mlf_engine.h:107
std::set< std::string > main_sensor_
Definition: mlf_engine.h:110
bool use_semantic_map_
Definition: mlf_engine.h:121
Obstacles container.
Definition: base_multi_target_tracker.h:29
apollo::perception::onboard::MsgSerializer serializer_
Definition: mlf_engine.h:120
Definition: pose_container.h:33
std::string Name() const override
Definition: mlf_engine.h:52
Definition: msg_serializer.h:27
Definition: mlf_track_object_matcher.h:34
void CollectTrackedResult(LidarFrame *frame)
bool use_frame_timestamp_
Definition: mlf_engine.h:116
bool use_histogram_for_match_
Definition: mlf_engine.h:112
std::unique_ptr< MlfTracker > tracker_
Definition: mlf_engine.h:103
std::vector< MlfTrackDataPtr > background_track_data_
Definition: mlf_engine.h:98
void SplitAndTransformToTrackedObjects(const std::vector< base::ObjectPtr > &objects, const base::SensorInfo &sensor_info)
Definition: sensor_meta.h:57
Definition: lidar_frame.h:33
std::vector< MlfTrackDataPtr > foreground_track_data_
Definition: mlf_engine.h:97
bool Init(const MultiTargetTrackerInitOptions &options=MultiTargetTrackerInitOptions()) override
Eigen::Affine3d sensor_to_local_pose_
Definition: mlf_engine.h:108
Obstacles container.
std::unique_ptr< MlfTrackObjectMatcher > matcher_
Definition: mlf_engine.h:105
void RemoveStaleTrackData(const std::string &name, double timestamp, std::vector< MlfTrackDataPtr > *tracks)
bool Track(const MultiTargetTrackerOptions &options, LidarFrame *frame) override
apollo::prediction::ObstaclesContainer obstacle_container_
Definition: mlf_engine.h:118
void TrackStateFilter(const std::vector< MlfTrackDataPtr > &tracks, double frame_timestamp)
Eigen::Affine3d Affine3d
Definition: base_map_fwd.h:34
std::vector< TrackedObjectPtr > background_objects_
Definition: mlf_engine.h:101
apollo::prediction::PoseContainer pose_container_
Definition: mlf_engine.h:119