50 auto state = lidar_process_->
Init(params);
56 auto state = republish_process_->
Init(params);
61 state = integ_process_->
Init(params);
67 state = gnss_process_->
Init(params);
68 is_use_gnss_bestpose_ =
false;
73 is_use_gnss_bestpose_ =
true;
77 gnss_antenna_extrinsic_.translation()(0) =
79 gnss_antenna_extrinsic_.translation()(1) =
81 gnss_antenna_extrinsic_.translation()(2) =
84 gnss_antenna_extrinsic_ = Eigen::Affine3d::Identity();
86 AINFO <<
"gnss and imu lever arm: "
87 << gnss_antenna_extrinsic_.translation()(0) <<
" "
88 << gnss_antenna_extrinsic_.translation()(1) <<
" "
89 << gnss_antenna_extrinsic_.translation()(2);
134 if (enable_lidar_localization_) {
144 integ_process_->
GetResult(&state, &integ_localization);
145 ImuData corrected_imu;
147 InertialParameter earth_param;
154 integ_localization.mutable_sensor_status(),
159 if (imu_altitude_from_lidar_localization_available_) {
161 position->set_z(imu_altitude_from_lidar_localization_);
165 Eigen::Vector3d orig_acceleration(corrected_imu.fb[0], corrected_imu.fb[1],
166 corrected_imu.fb[2]);
169 Eigen::Quaternion<double> quaternion(orientation.
qw(), orientation.
qx(),
170 orientation.
qy(), orientation.
qz());
171 Eigen::Vector3d vec_acceleration =
172 static_cast<Eigen::Vector3d
>(quaternion * orig_acceleration);
175 vec_acceleration(2) -= earth_param.g;
178 posepb_loc->mutable_linear_acceleration();
179 linear_acceleration->set_x(vec_acceleration(0));
180 linear_acceleration->set_y(vec_acceleration(1));
181 linear_acceleration->set_z(vec_acceleration(2));
183 Eigen::Vector3d vec_acceleration_vrf =
184 quaternion.inverse() * vec_acceleration;
187 posepb_loc->mutable_linear_acceleration_vrf();
188 linear_acceleration_vrf->set_x(vec_acceleration_vrf(0));
189 linear_acceleration_vrf->set_y(vec_acceleration_vrf(1));
190 linear_acceleration_vrf->set_z(vec_acceleration_vrf(2));
193 Eigen::Vector3d orig_angular_velocity(
194 corrected_imu.wibb[0], corrected_imu.wibb[1], corrected_imu.wibb[2]);
195 Eigen::Vector3d vec_angular_velocity =
static_cast<Eigen::Vector3d
>(
196 quaternion.toRotationMatrix() * orig_angular_velocity);
198 posepb_loc->mutable_angular_velocity();
199 angular_velocity->set_x(vec_angular_velocity(0));
200 angular_velocity->set_y(vec_angular_velocity(1));
201 angular_velocity->set_z(vec_angular_velocity(2));
204 posepb_loc->mutable_angular_velocity_vrf();
205 angular_velocity_vrf->set_x(corrected_imu.wibb[0]);
206 angular_velocity_vrf->set_y(corrected_imu.wibb[1]);
207 angular_velocity_vrf->set_z(corrected_imu.wibb[2]);
209 lastest_integ_localization_ =
211 integ_localization, integ_status);
213 InsPva integ_sins_pva;
214 double covariance[9][9];
215 integ_process_->
GetResult(&state, &integ_sins_pva, covariance);
226 if (!is_use_gnss_bestpose_) {
319 CHECK_NOTNULL(localization);
324 double timestamp = measure.time;
325 localization->set_measurement_time(timestamp);
326 headerpb->set_timestamp_sec(timestamp);
330 measure.gnss_pos.latitude, &utm_xy);
333 position->set_x(utm_xy.
x);
334 position->set_y(utm_xy.
y);
335 position->set_z(measure.gnss_pos.height);
338 quaternion->set_qx(0.0);
339 quaternion->set_qy(0.0);
340 quaternion->set_qz(0.0);
341 quaternion->set_qw(1.0);
344 localization->mutable_uncertainty();
347 uncertainty->mutable_position_std_dev();
348 position_std_dev->set_x(-1.0);
349 position_std_dev->set_y(-1.0);
350 position_std_dev->set_z(-1.0);
352 if (measure.is_have_variance) {
353 position_std_dev->set_x(measure.variance[0][0]);
354 position_std_dev->set_y(measure.variance[1][1]);
355 position_std_dev->set_z(measure.variance[2][2]);
359 uncertainty->mutable_orientation_std_dev();
360 orientation_std_dev->set_x(-1.0);
361 orientation_std_dev->set_y(-1.0);
362 orientation_std_dev->set_z(-1.0);