@@ -286,6 +286,7 @@ std::vector<Parser::ParsedMessage> NovatelParser::PrepareMessage(
286286 break ;
287287 }
288288 // HandleCorrImuData updates internal ins_.
289+ has_corr_imu_message_ = true ;
289290 if (HandleCorrImuData (
290291 reinterpret_cast <const novatel::CorrImuData*>(payload_data))) {
291292 auto msg_ptr = std::make_shared<apollo::drivers::gnss::Ins>();
@@ -744,6 +745,16 @@ bool NovatelParser::HandleRawImu(const novatel::RawImu* imu) {
744745 -imu->y_angle_change_neg * gyro_scale,
745746 imu->z_angle_change * gyro_scale,
746747 imu_.mutable_angular_velocity ());
748+ if (!has_corr_imu_message_) {
749+ z_rot_90_ccw (imu->x_velocity_change * accel_scale,
750+ -imu->y_velocity_change_neg * accel_scale,
751+ imu->z_velocity_change * accel_scale,
752+ ins_.mutable_linear_acceleration ());
753+ z_rot_90_ccw (imu->x_angle_change * gyro_scale,
754+ -imu->y_angle_change_neg * gyro_scale,
755+ imu->z_angle_change * gyro_scale,
756+ ins_.mutable_angular_velocity ());
757+ }
747758 break ;
748759 case 6 :
749760 z_rot_90_ccw (-imu->y_velocity_change_neg * accel_scale,
@@ -754,6 +765,16 @@ bool NovatelParser::HandleRawImu(const novatel::RawImu* imu) {
754765 imu->x_angle_change * gyro_scale,
755766 -imu->z_angle_change * gyro_scale,
756767 imu_.mutable_angular_velocity ());
768+ if (!has_corr_imu_message_) {
769+ z_rot_90_ccw (-imu->y_velocity_change_neg * accel_scale,
770+ imu->x_velocity_change * accel_scale,
771+ -imu->z_velocity_change * accel_scale,
772+ ins_.mutable_linear_acceleration ());
773+ z_rot_90_ccw (-imu->y_angle_change_neg * gyro_scale,
774+ imu->x_angle_change * gyro_scale,
775+ -imu->z_angle_change * gyro_scale,
776+ ins_.mutable_angular_velocity ());
777+ }
757778 break ;
758779 default :
759780 AERROR_EVERY (5 ) << " Unsupported IMU frame mapping: "
0 commit comments