129 {
130
131
132
133
134 if (enable_lidar_localization_) {
136 }
138
140
141
143 LocalizationEstimate integ_localization;
144 integ_process_->
GetResult(&state, &integ_localization);
145 ImuData corrected_imu;
147 InertialParameter earth_param;
149
150
151 LocalizationIntegStatus integ_status;
154 integ_localization.mutable_sensor_status(),
155 &integ_status);
156
158
159 if (imu_altitude_from_lidar_localization_available_) {
161 position->set_z(imu_altitude_from_lidar_localization_);
162 }
163
164
165 Eigen::Vector3d orig_acceleration(corrected_imu.fb[0], corrected_imu.fb[1],
166 corrected_imu.fb[2]);
168 integ_localization.pose().orientation();
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);
173
174
175 vec_acceleration(2) -= earth_param.g;
176
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));
182
183 Eigen::Vector3d vec_acceleration_vrf =
184 quaternion.inverse() * vec_acceleration;
185
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));
191
192
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));
202
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]);
208
209 lastest_integ_localization_ =
211 integ_localization, integ_status);
212
213 InsPva integ_sins_pva;
214 double covariance[9][9];
215 integ_process_->
GetResult(&state, &integ_sins_pva, covariance);
216
217
219
221
224 }
225
226 if (!is_use_gnss_bestpose_) {
227
229 }
230 }
231}
void IntegSinsPvaProcess(const InsPva &sins_pva, const double variance[9][9])
void GetEarthParameter(InertialParameter *earth_param)
void RawImuProcess(const ImuData &imu_msg)
void GetCorrectedImu(ImuData *imu_data)
void GetResult(IntegState *state, LocalizationEstimate *localization)
void RawImuProcess(const ImuData &imu_msg)
void IntegPvaProcess(const InsPva &sins_pva_msg)
void IntegPvaProcess(const InsPva &inspva_msg)
void GetFusionStatus(MsfStatus *msf_status, MsfSensorMsgStatus *sensor_status, LocalizationIntegStatus *integstatus)
void AddFusionLocalization(const LocalizationEstimate &data)
void AddImu(const ImuData &data)