Apollo 11.0
自动驾驶开放平台
apollo::perception::fusion::ProbabilisticFusion类 参考

#include <probabilistic_fusion.h>

类 apollo::perception::fusion::ProbabilisticFusion 继承关系图:
apollo::perception::fusion::ProbabilisticFusion 的协作图:

Public 成员函数

 ProbabilisticFusion ()=default
 
 ~ProbabilisticFusion ()=default
 
bool Init (const FusionInitOptions &options) override
 Initialization
 
bool Fuse (const base::FrameConstPtr &sensor_frame, std::vector< base::ObjectPtr > *fused_objects) override
 Probabilistic fusion of sensor data, the input is the detection results of different sensors, and the output is the result after fusion
 
std::string Name () const override
 The name of BaseFusionSystem
 
- Public 成员函数 继承自 apollo::perception::fusion::BaseFusionSystem
 BaseFusionSystem ()=default
 
virtual ~BaseFusionSystem ()=default
 

额外继承的成员函数

- Protected 成员函数 继承自 apollo::perception::fusion::BaseFusionSystem
 DISALLOW_COPY_AND_ASSIGN (BaseFusionSystem)
 

详细描述

在文件 probabilistic_fusion.h 第 43 行定义.

构造及析构函数说明

◆ ProbabilisticFusion()

apollo::perception::fusion::ProbabilisticFusion::ProbabilisticFusion ( )
default

◆ ~ProbabilisticFusion()

apollo::perception::fusion::ProbabilisticFusion::~ProbabilisticFusion ( )
default

成员函数说明

◆ Fuse()

bool apollo::perception::fusion::ProbabilisticFusion::Fuse ( const base::FrameConstPtr &  sensor_frame,
std::vector< base::ObjectPtr > *  fused_objects 
)
overridevirtual

Probabilistic fusion of sensor data, the input is the detection results of different sensors, and the output is the result after fusion

参数
sensor_framesensor data
fused_objectsobjects after fusion
返回
true
false

实现了 apollo::perception::fusion::BaseFusionSystem.

在文件 probabilistic_fusion.cc 第 102 行定义.

103 {
104 if (fused_objects == nullptr) {
105 AERROR << "fusion error: fused_objects is nullptr";
106 return false;
107 }
108
109 auto* sensor_data_manager = SensorDataManager::Instance();
110 // 1. save frame data
111 {
112 std::lock_guard<std::mutex> data_lock(data_mutex_);
113 if (!params_.use_lidar && sensor_data_manager->IsLidar(sensor_frame)) {
114 return true;
115 }
116 if (!params_.use_radar && sensor_data_manager->IsRadar(sensor_frame)) {
117 return true;
118 }
119 if (!params_.use_camera && sensor_data_manager->IsCamera(sensor_frame)) {
120 return true;
121 }
122
123 bool is_publish_sensor = IsPublishSensor(sensor_frame);
124
125 AINFO << "add sensor measurement: " << sensor_frame->sensor_info.name
126 << ", obj_cnt : " << sensor_frame->objects.size() << ", "
127 << FORMAT_TIMESTAMP(sensor_frame->timestamp);
128 sensor_data_manager->AddSensorMeasurements(sensor_frame);
129
130 if (!is_publish_sensor) {
131 return true;
132 }
133 }
134
135 // 2. query related sensor_frames for fusion
136 std::lock_guard<std::mutex> fuse_lock(fuse_mutex_);
137 double fusion_time = sensor_frame->timestamp;
138 std::vector<SensorFramePtr> frames;
139 sensor_data_manager->GetLatestFrames(fusion_time, &frames);
140 AINFO << "Get " << frames.size() << " related frames for fusion";
141
142 // 3. perform fusion on related frames
143 for (const auto& frame : frames) {
144 FuseFrame(frame);
145 }
146
147 // 4. collect fused objects
148 CollectFusedObjects(fusion_time, fused_objects);
149 return true;
150}
#define AERROR
Definition log.h:44
#define AINFO
Definition log.h:42
#define FORMAT_TIMESTAMP(timestamp)
Definition string_util.h:29

◆ Init()

bool apollo::perception::fusion::ProbabilisticFusion::Init ( const FusionInitOptions &  options)
overridevirtual

Initialization

参数
options
返回
true
false

实现了 apollo::perception::fusion::BaseFusionSystem.

在文件 probabilistic_fusion.cc 第 41 行定义.

41 {
42 std::string config_file =
43 GetConfigFile(options.config_path, options.config_file);
44 ProbabilisticFusionConfig params;
45 if (!cyber::common::GetProtoFromFile(config_file, &params)) {
46 AERROR << "Read config failed: " << config_file;
47 return false;
48 }
49
50 params_.use_lidar = params.use_lidar();
51 params_.use_radar = params.use_radar();
52 params_.use_camera = params.use_camera();
53 for (int i = 0; i < params.prohibition_sensors_size(); ++i) {
54 params_.prohibition_sensors.push_back(params.prohibition_sensors(i));
55 }
56
57 // static member initialization from PB config
58 Track::SetMaxLidarInvisiblePeriod(params.max_lidar_invisible_period());
59 Track::SetMaxRadarInvisiblePeriod(params.max_radar_invisible_period());
60 Track::SetMaxCameraInvisiblePeriod(params.max_camera_invisible_period());
61 Sensor::SetMaxCachedFrameNumber(params.max_cached_frame_num());
62
63 scenes_.reset(new Scene());
64
65 // Init data association
66 auto data_association_param = params.data_association_param();
67 AssociationInitOptions association_init_options;
68 association_init_options.config_path = data_association_param.config_path();
69 association_init_options.config_file = data_association_param.config_file();
70 BaseDataAssociation* matcher =
71 BaseDataAssociationRegisterer::GetInstanceByName(
72 data_association_param.name());
73 CHECK_NOTNULL(matcher);
74 matcher_.reset(matcher);
75 ACHECK(matcher_->Init(association_init_options))
76 << "Fusion matcher init error";
77
78 // Init gatekeeper
79 auto gatekeeper_param = params.gatekeeper_param();
80 GatekeeperInitOptions gatekeeper_init_options;
81 gatekeeper_init_options.config_path = gatekeeper_param.config_path();
82 gatekeeper_init_options.config_file = gatekeeper_param.config_file();
83 BaseGatekeeper* gate_keeper =
84 BaseGatekeeperRegisterer::GetInstanceByName(gatekeeper_param.name());
85 CHECK_NOTNULL(gate_keeper);
86 gate_keeper_.reset(gate_keeper);
87 ACHECK(gate_keeper_->Init(gatekeeper_init_options))
88 << "Fusion gate_keeper init error";
89
90 // Init pbftracker
91 auto tracker_param = params.tracker_param();
92 TrackerInitOptions tracker_init_options;
93 // TODO(zero): pbftracker is dynamically created, so only set the name.
94 params_.tracker_method = tracker_param.name();
95 tracker_init_options.config_path = tracker_param.config_path();
96 tracker_init_options.config_file = tracker_param.config_file();
97 bool state = PbfTracker::InitParams(tracker_init_options);
98
99 return state;
100}
static bool InitParams(const TrackerInitOptions &options)
Init params
static void SetMaxCachedFrameNumber(size_t number)
Definition sensor.h:67
static void SetMaxRadarInvisiblePeriod(double period)
Set the max radar invisible period
Definition track.h:51
static void SetMaxCameraInvisiblePeriod(double period)
Set the max camera invisible period
Definition track.h:60
static void SetMaxLidarInvisiblePeriod(double period)
Set the max lidar invisible period
Definition track.h:42
#define ACHECK(cond)
Definition log.h:80
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::string GetConfigFile(const std::string &config_path, const std::string &config_file)
Definition util.cc:80

◆ Name()

std::string apollo::perception::fusion::ProbabilisticFusion::Name ( ) const
inlineoverridevirtual

The name of BaseFusionSystem

返回
std::string

实现了 apollo::perception::fusion::BaseFusionSystem.

在文件 probabilistic_fusion.h 第 69 行定义.

69{ return "ProbabilisticFusion"; }

该类的文档由以下文件生成: