Skip to content

Commit 50c2fa8

Browse files
authored
fix(drivers/gnss): fill ins with raw imu data if no corrected imu data received (#113)
Signed-off-by: Pride Leong <[email protected]>
1 parent 5d85cd7 commit 50c2fa8

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

modules/drivers/gnss/parser/novatel/novatel_parser.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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: "

modules/drivers/gnss/parser/novatel/novatel_parser.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,9 @@ class NovatelParser : public Parser {
140140
// RTKLIB raw observation data structure
141141
raw_t raw_;
142142

143+
bool has_ins_stat_message_ = false;
144+
bool has_corr_imu_message_ = false;
145+
143146
::apollo::drivers::gnss::Gnss gnss_; // For combined position/velocity
144147
::apollo::drivers::gnss::GnssBestPose bestpos_;
145148
::apollo::drivers::gnss::Imu imu_; // For RAWIMU/RAWIMUX

0 commit comments

Comments
 (0)