Apollo 10.0
自动驾驶开放平台
apollo::localization::MSFLocalization类 参考

generate localization info based on MSF 更多...

#include <msf_localization.h>

apollo::localization::MSFLocalization 的协作图:

Public 成员函数

 MSFLocalization ()
 
apollo::common::Status Init ()
 
void InitParams ()
 
void OnPointCloud (const std::shared_ptr< drivers::PointCloud > &message)
 
void OnRawImu (const std::shared_ptr< drivers::gnss::Imu > &imu_msg)
 
void OnRawImuCache (const std::shared_ptr< drivers::gnss::Imu > &imu_msg)
 
void OnGnssRtkObs (const std::shared_ptr< drivers::gnss::EpochObservation > &raw_obs_msg)
 
void OnGnssRtkEph (const std::shared_ptr< drivers::gnss::GnssEphemeris > &gnss_orbit_msg)
 
void OnGnssBestPose (const std::shared_ptr< drivers::gnss::GnssBestPose > &bestgnsspos_msg)
 
void OnGnssHeading (const std::shared_ptr< drivers::gnss::Heading > &gnss_heading_msg)
 
void SetPublisher (const std::shared_ptr< LocalizationMsgPublisher > &publisher)
 
void OnLocalizationTimer ()
 

详细描述

generate localization info based on MSF

在文件 msf_localization.h58 行定义.

构造及析构函数说明

◆ MSFLocalization()

apollo::localization::MSFLocalization::MSFLocalization ( )

在文件 msf_localization.cc35 行定义.

成员函数说明

◆ Init()

Status apollo::localization::MSFLocalization::Init ( )

在文件 msf_localization.cc42 行定义.

42 {
43 InitParams();
44
45 return localization_integ_.Init(localization_param_);
46}
common::Status Init(const LocalizationIntegParam &params)

◆ InitParams()

void apollo::localization::MSFLocalization::InitParams ( )

在文件 msf_localization.cc48 行定义.

48 {
49 // integration module
50 localization_param_.is_ins_can_self_align = FLAGS_integ_ins_can_self_align;
51 localization_param_.is_sins_align_with_vel = FLAGS_integ_sins_align_with_vel;
52 localization_param_.is_sins_state_check = FLAGS_integ_sins_state_check;
53 localization_param_.sins_state_span_time = FLAGS_integ_sins_state_span_time;
54 localization_param_.sins_state_pos_std = FLAGS_integ_sins_state_pos_std;
55 localization_param_.vel_threshold_get_yaw = FLAGS_vel_threshold_get_yaw;
56 localization_param_.is_trans_gpstime_to_utctime =
57 FLAGS_trans_gpstime_to_utctime;
58 localization_param_.gnss_mode = FLAGS_gnss_mode;
59 localization_param_.is_using_raw_gnsspos = true;
60
61 // gnss module
62 localization_param_.enable_ins_aid_rtk = FLAGS_enable_ins_aid_rtk;
63
64 // lidar module
65 localization_param_.map_path = FLAGS_map_dir + "/" + FLAGS_local_map_name;
66 localization_param_.lidar_extrinsic_file = FLAGS_lidar_extrinsics_file;
67 localization_param_.lidar_height_file = FLAGS_lidar_height_file;
68 localization_param_.lidar_height_default = FLAGS_lidar_height_default;
69 localization_param_.localization_mode = FLAGS_lidar_localization_mode;
70 localization_param_.lidar_yaw_align_mode = FLAGS_lidar_yaw_align_mode;
71 localization_param_.lidar_filter_size = FLAGS_lidar_filter_size;
72 localization_param_.map_coverage_theshold = FLAGS_lidar_map_coverage_theshold;
73 localization_param_.imu_lidar_max_delay_time = FLAGS_lidar_imu_max_delay_time;
74 localization_param_.if_use_avx = FLAGS_if_use_avx;
75
76 AINFO << "map: " << localization_param_.map_path;
77 AINFO << "lidar_extrin: " << localization_param_.lidar_extrinsic_file;
78 AINFO << "lidar_height: " << localization_param_.lidar_height_file;
79
80 localization_param_.utm_zone_id = FLAGS_local_utm_zone_id;
81 // try load zone id from local_map folder
82 if (FLAGS_if_utm_zone_id_from_folder) {
83 bool success = LoadZoneIdFromFolder(localization_param_.map_path,
84 &localization_param_.utm_zone_id);
85 if (!success) {
86 AWARN << "Can't load utm zone id from map folder, use default value.";
87 }
88 }
89 AINFO << "utm zone id: " << localization_param_.utm_zone_id;
90
91 // vehicle imu extrinsic
92 imu_vehicle_quat_.x() = FLAGS_imu_vehicle_qx;
93 imu_vehicle_quat_.y() = FLAGS_imu_vehicle_qy;
94 imu_vehicle_quat_.z() = FLAGS_imu_vehicle_qz;
95 imu_vehicle_quat_.w() = FLAGS_imu_vehicle_qw;
96 imu_vehicle_translation_[0] = 0.0;
97 imu_vehicle_translation_[1] = 0.0;
98 imu_vehicle_translation_[2] = 0.0;
99 // try to load imu vehicle quat from file
100 if (FLAGS_if_vehicle_imu_from_file) {
101 double qx = 0.0;
102 double qy = 0.0;
103 double qz = 0.0;
104 double qw = 0.0;
105
106 AINFO << "Vehile imu file: " << FLAGS_vehicle_imu_file;
107 if (LoadImuVehicleExtrinsic(FLAGS_vehicle_imu_file, &qx, &qy, &qz, &qw,
108 &imu_vehicle_translation_)) {
109 imu_vehicle_quat_.x() = qx;
110 imu_vehicle_quat_.y() = qy;
111 imu_vehicle_quat_.z() = qz;
112 imu_vehicle_quat_.w() = qw;
113 } else {
114 AWARN << "Can't load imu vehicle quat from file, use default value.";
115 }
116 }
117 AINFO << "imu_vehicle_quat: " << imu_vehicle_quat_.x() << " "
118 << imu_vehicle_quat_.y() << " " << imu_vehicle_quat_.z() << " "
119 << imu_vehicle_quat_.w();
120
121 // common
122 localization_param_.enable_lidar_localization =
123 FLAGS_enable_lidar_localization;
124
125 if (!FLAGS_if_imuant_from_file) {
126 localization_param_.imu_to_ant_offset.offset_x = FLAGS_imu_to_ant_offset_x;
127 localization_param_.imu_to_ant_offset.offset_y = FLAGS_imu_to_ant_offset_y;
128 localization_param_.imu_to_ant_offset.offset_z = FLAGS_imu_to_ant_offset_z;
129 localization_param_.imu_to_ant_offset.uncertainty_x =
130 FLAGS_imu_to_ant_offset_ux;
131 localization_param_.imu_to_ant_offset.uncertainty_y =
132 FLAGS_imu_to_ant_offset_uy;
133 localization_param_.imu_to_ant_offset.uncertainty_z =
134 FLAGS_imu_to_ant_offset_uz;
135 } else {
136 double offset_x = 0.0;
137 double offset_y = 0.0;
138 double offset_z = 0.0;
139 double uncertainty_x = 0.0;
140 double uncertainty_y = 0.0;
141 double uncertainty_z = 0.0;
142 AINFO << "Ant imu lever arm file: " << FLAGS_ant_imu_leverarm_file;
143 ACHECK(LoadGnssAntennaExtrinsic(FLAGS_ant_imu_leverarm_file, &offset_x,
144 &offset_y, &offset_z, &uncertainty_x,
145 &uncertainty_y, &uncertainty_z));
146 localization_param_.ant_imu_leverarm_file = FLAGS_ant_imu_leverarm_file;
147
148 localization_param_.imu_to_ant_offset.offset_x = offset_x;
149 localization_param_.imu_to_ant_offset.offset_y = offset_y;
150 localization_param_.imu_to_ant_offset.offset_z = offset_z;
151 localization_param_.imu_to_ant_offset.uncertainty_x = uncertainty_x;
152 localization_param_.imu_to_ant_offset.uncertainty_y = uncertainty_y;
153 localization_param_.imu_to_ant_offset.uncertainty_z = uncertainty_z;
154
155 AINFO << localization_param_.imu_to_ant_offset.offset_x << " "
156 << localization_param_.imu_to_ant_offset.offset_y << " "
157 << localization_param_.imu_to_ant_offset.offset_z << " "
158 << localization_param_.imu_to_ant_offset.uncertainty_x << " "
159 << localization_param_.imu_to_ant_offset.uncertainty_y << " "
160 << localization_param_.imu_to_ant_offset.uncertainty_z;
161 }
162
163 localization_param_.imu_delay_time_threshold_1 =
164 FLAGS_imu_delay_time_threshold_1;
165 localization_param_.imu_delay_time_threshold_2 =
166 FLAGS_imu_delay_time_threshold_2;
167 localization_param_.imu_delay_time_threshold_3 =
168 FLAGS_imu_delay_time_threshold_3;
169
170 localization_param_.imu_missing_time_threshold_1 =
171 FLAGS_imu_missing_time_threshold_1;
172 localization_param_.imu_missing_time_threshold_2 =
173 FLAGS_imu_missing_time_threshold_2;
174 localization_param_.imu_missing_time_threshold_3 =
175 FLAGS_imu_missing_time_threshold_3;
176
177 localization_param_.bestgnsspose_loss_time_threshold =
178 FLAGS_bestgnsspose_loss_time_threshold;
179 localization_param_.lidar_loss_time_threshold =
180 FLAGS_lidar_loss_time_threshold;
181
182 localization_param_.localization_std_x_threshold_1 =
183 FLAGS_localization_std_x_threshold_1;
184 localization_param_.localization_std_y_threshold_1 =
185 FLAGS_localization_std_y_threshold_1;
186
187 localization_param_.localization_std_x_threshold_2 =
188 FLAGS_localization_std_x_threshold_2;
189 localization_param_.localization_std_y_threshold_2 =
190 FLAGS_localization_std_y_threshold_2;
191
192 localization_timer_.reset(new cyber::Timer(
193 10, [this]() { this->OnLocalizationTimer(); }, false));
194 localization_timer_->Start();
195}
#define ACHECK(cond)
Definition log.h:80
#define AINFO
Definition log.h:42
#define AWARN
Definition log.h:43

◆ OnGnssBestPose()

void apollo::localization::MSFLocalization::OnGnssBestPose ( const std::shared_ptr< drivers::gnss::GnssBestPose > &  bestgnsspos_msg)

在文件 msf_localization.cc257 行定义.

258 {
259 if ((localization_state_ == msf::LocalizationMeasureState::OK ||
260 localization_state_ == msf::LocalizationMeasureState::VALID) &&
261 FLAGS_gnss_only_init) {
262 return;
263 }
264
265 localization_integ_.GnssBestPoseProcess(*bestgnsspos_msg);
266
267 const auto &result = localization_integ_.GetLastestGnssLocalization();
268
269 if (result.state() == msf::LocalizationMeasureState::OK ||
270 result.state() == msf::LocalizationMeasureState::VALID) {
271 publisher_->PublishLocalizationMsfGnss(result.localization());
272 }
273}
const LocalizationResult & GetLastestGnssLocalization() const
void GnssBestPoseProcess(const drivers::gnss::GnssBestPose &bestgnsspos_msg)

◆ OnGnssHeading()

void apollo::localization::MSFLocalization::OnGnssHeading ( const std::shared_ptr< drivers::gnss::Heading > &  gnss_heading_msg)

在文件 msf_localization.cc304 行定义.

305 {
306 if ((localization_state_ == msf::LocalizationMeasureState::OK ||
307 localization_state_ == msf::LocalizationMeasureState::VALID) &&
308 FLAGS_gnss_only_init) {
309 return;
310 }
311 localization_integ_.GnssHeadingProcess(*gnss_heading_msg);
312}
void GnssHeadingProcess(const drivers::gnss::Heading &gnss_heading_msg)

◆ OnGnssRtkEph()

void apollo::localization::MSFLocalization::OnGnssRtkEph ( const std::shared_ptr< drivers::gnss::GnssEphemeris > &  gnss_orbit_msg)

在文件 msf_localization.cc293 行定义.

294 {
295 if ((localization_state_ == msf::LocalizationMeasureState::OK ||
296 localization_state_ == msf::LocalizationMeasureState::VALID) &&
297 FLAGS_gnss_only_init) {
298 return;
299 }
300
301 localization_integ_.RawEphemerisProcess(*gnss_orbit_msg);
302}
void RawEphemerisProcess(const drivers::gnss::GnssEphemeris &gnss_orbit_msg)

◆ OnGnssRtkObs()

void apollo::localization::MSFLocalization::OnGnssRtkObs ( const std::shared_ptr< drivers::gnss::EpochObservation > &  raw_obs_msg)

在文件 msf_localization.cc275 行定义.

276 {
277 if ((localization_state_ == msf::LocalizationMeasureState::OK ||
278 localization_state_ == msf::LocalizationMeasureState::VALID) &&
279 FLAGS_gnss_only_init) {
280 return;
281 }
282
283 localization_integ_.RawObservationProcess(*raw_obs_msg);
284
285 const auto &result = localization_integ_.GetLastestGnssLocalization();
286
287 if (result.state() == msf::LocalizationMeasureState::OK ||
288 result.state() == msf::LocalizationMeasureState::VALID) {
289 publisher_->PublishLocalizationMsfGnss(result.localization());
290 }
291}
void RawObservationProcess(const drivers::gnss::EpochObservation &raw_obs_msg)

◆ OnLocalizationTimer()

void apollo::localization::MSFLocalization::OnLocalizationTimer ( )

在文件 msf_localization.cc314 行定义.

314 {
315 if (!raw_imu_msg_) {
316 return;
317 }
318 std::unique_lock<std::mutex> lock(mutex_imu_msg_);
319 OnRawImu(raw_imu_msg_);
320}
void OnRawImu(const std::shared_ptr< drivers::gnss::Imu > &imu_msg)

◆ OnPointCloud()

void apollo::localization::MSFLocalization::OnPointCloud ( const std::shared_ptr< drivers::PointCloud > &  message)

在文件 msf_localization.cc197 行定义.

198 {
199 ++pcd_msg_index_;
200 if (pcd_msg_index_ % FLAGS_point_cloud_step != 0) {
201 return;
202 }
203
204 localization_integ_.PcdProcess(*message);
205
206 const auto &result = localization_integ_.GetLastestLidarLocalization();
207
208 if (result.state() == msf::LocalizationMeasureState::OK ||
209 result.state() == msf::LocalizationMeasureState::VALID) {
210 // publish lidar message to debug
211 publisher_->PublishLocalizationMsfLidar(result.localization());
212 }
213}
const LocalizationResult & GetLastestLidarLocalization() const
void PcdProcess(const drivers::PointCloud &message)

◆ OnRawImu()

void apollo::localization::MSFLocalization::OnRawImu ( const std::shared_ptr< drivers::gnss::Imu > &  imu_msg)

在文件 msf_localization.cc215 行定义.

216 {
217 if (FLAGS_imu_coord_rfu) {
218 localization_integ_.RawImuProcessRfu(*imu_msg);
219 } else {
220 localization_integ_.RawImuProcessFlu(*imu_msg);
221 }
222
223 const auto &result = localization_integ_.GetLastestIntegLocalization();
224
225 // compose localization status
226 LocalizationStatus status;
227 apollo::common::Header *status_headerpb = status.mutable_header();
228 status_headerpb->set_timestamp_sec(
229 result.localization().header().timestamp_sec());
230 status.set_fusion_status(
231 static_cast<MeasureState>(result.integ_status().integ_state));
232 status.set_state_message(result.integ_status().state_message);
233 status.set_measurement_time(result.localization().measurement_time());
234 publisher_->PublishLocalizationStatus(status);
235
236 if (result.state() == msf::LocalizationMeasureState::OK ||
237 result.state() == msf::LocalizationMeasureState::VALID) {
238 // calculate orientation_vehicle_world
239 LocalizationEstimate local_result = result.localization();
240 CompensateImuVehicleExtrinsic(&local_result);
241
242 publisher_->PublishPoseBroadcastTF(local_result);
243 publisher_->PublishPoseBroadcastTopic(local_result);
244 }
245
246 localization_state_ = result.state();
247}
void RawImuProcessFlu(const drivers::gnss::Imu &imu_msg)
const LocalizationResult & GetLastestIntegLocalization() const
void RawImuProcessRfu(const drivers::gnss::Imu &imu_msg)

◆ OnRawImuCache()

void apollo::localization::MSFLocalization::OnRawImuCache ( const std::shared_ptr< drivers::gnss::Imu > &  imu_msg)

在文件 msf_localization.cc249 行定义.

250 {
251 if (imu_msg) {
252 std::unique_lock<std::mutex> lock(mutex_imu_msg_);
253 raw_imu_msg_ = const_cast<std::shared_ptr<drivers::gnss::Imu> &>(imu_msg);
254 }
255}

◆ SetPublisher()

void apollo::localization::MSFLocalization::SetPublisher ( const std::shared_ptr< LocalizationMsgPublisher > &  publisher)

在文件 msf_localization.cc322 行定义.

323 {
324 publisher_ = publisher;
325}

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