Apollo 11.0
自动驾驶开放平台
radar_obstacle_perception.cc
浏览该文件的文档.
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 *****************************************************************************/
17
18#include "modules/perception/radar_detection/proto/radar_obstacle_perception.pb.h"
19
20#include "cyber/common/file.h"
21#include "cyber/common/log.h"
25
26namespace apollo {
27namespace perception {
28namespace radar {
29
31 std::string config_file =
32 GetConfigFile(options.config_path, options.config_file);
33 RadarObstaclePerceptionConfig radar_obstacle_config;
34 if (!cyber::common::GetProtoFromFile(config_file, &radar_obstacle_config)) {
35 AERROR << "Read config failed: " << config_file;
36 return false;
37 }
38
39 auto detector_param = radar_obstacle_config.detector_param();
40 DetectorInitOptions detector_init_options;
41 detector_init_options.config_path = detector_param.config_path();
42 detector_init_options.config_file = detector_param.config_file();
43 BaseDetector* detector =
44 BaseDetectorRegisterer::GetInstanceByName(detector_param.name());
45 CHECK_NOTNULL(detector);
46 detector_.reset(detector);
47 ACHECK(detector_->Init(detector_init_options)) << "radar detector init error";
48
49 auto roi_filter_param = radar_obstacle_config.roi_filter_param();
50 RoiFilterInitOptions roi_filter_init_options;
51 roi_filter_init_options.config_path = roi_filter_param.config_path();
52 roi_filter_init_options.config_file = roi_filter_param.config_file();
53 BaseRoiFilter* roi_filter =
54 BaseRoiFilterRegisterer::GetInstanceByName(roi_filter_param.name());
55 CHECK_NOTNULL(roi_filter);
56 roi_filter_.reset(roi_filter);
57 ACHECK(roi_filter_->Init(roi_filter_init_options))
58 << "radar roi filter init error";
59
60 auto tracker_param = radar_obstacle_config.tracker_param();
61 TrackerInitOptions tracker_init_options;
62 tracker_init_options.config_path = tracker_param.config_path();
63 tracker_init_options.config_file = tracker_param.config_file();
64 BaseTracker* tracker =
65 BaseTrackerRegisterer::GetInstanceByName(tracker_param.name());
66 CHECK_NOTNULL(tracker);
67 tracker_.reset(tracker);
68 ACHECK(tracker_->Init(tracker_init_options)) << "radar tracker init error";
69
70 return true;
71}
72
74 const drivers::ContiRadar& corrected_obstacles,
75 const RadarPerceptionOptions& options,
76 std::vector<base::ObjectPtr>* objects) {
78 const std::string& sensor_name = options.sensor_name;
80 base::FramePtr detect_frame_ptr(new base::Frame());
81
82 if (!detector_->Detect(corrected_obstacles, options.detector_options,
83 detect_frame_ptr)) {
84 AERROR << "radar detect error";
85 return false;
86 }
87 ADEBUG << "Detected frame objects number: "
88 << detect_frame_ptr->objects.size();
89 PERF_BLOCK_END_WITH_INDICATOR(sensor_name, "detector");
90 if (!roi_filter_->RoiFilter(options.roi_filter_options, detect_frame_ptr)) {
91 ADEBUG << "All radar objects were filtered out";
92 }
93 ADEBUG << "RoiFiltered frame objects number: "
94 << detect_frame_ptr->objects.size();
95 PERF_BLOCK_END_WITH_INDICATOR(sensor_name, "roi_filter");
96
97 base::FramePtr tracker_frame_ptr(new base::Frame);
98 if (!tracker_->Track(*detect_frame_ptr, options.track_options,
99 tracker_frame_ptr)) {
100 AERROR << "radar track error";
101 return false;
102 }
103 ADEBUG << "tracked frame objects number: "
104 << tracker_frame_ptr->objects.size();
105 PERF_BLOCK_END_WITH_INDICATOR(sensor_name, "tracker");
106
107 *objects = tracker_frame_ptr->objects;
108
109 return true;
110}
111
112std::string RadarObstaclePerception::Name() const {
113 return "RadarObstaclePerception";
114}
115
117
118} // namespace radar
119} // namespace perception
120} // namespace apollo
#define PERCEPTION_REGISTER_RADAR_OBSTACLE_PERCEPTION(name)
bool Perceive(const drivers::ContiRadar &corrected_obstacles, const RadarPerceptionOptions &options, std::vector< base::ObjectPtr > *objects) override
Process the radar raw data obtained from radar driver, and get targets after tracking.
bool Init(const PerceptionInitOptions &options) override
Init the radar object detection processor includes config, create classes, etc.
std::string Name() const override
The name of the radar object detection processor
#define ACHECK(cond)
Definition log.h:80
#define ADEBUG
Definition log.h:41
#define AERROR
Definition log.h:44
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,...
Definition file.cc:132
std::shared_ptr< Frame > FramePtr
Definition frame.h:60
std::string GetConfigFile(const std::string &config_path, const std::string &config_file)
Definition util.cc:80
class register implement
Definition arena_queue.h:37
#define PERF_BLOCK_END_WITH_INDICATOR(indicator, msg)
Definition perf_util.h:128
#define PERF_BLOCK_START()
Definition perf_util.h:126
#define PERF_FUNCTION(...)
Definition profiler.h:54