Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
Messages
Services
Plugins
Recent questions tagged autoware_imu_corrector at Robotics Stack Exchange
Package Summary
| Version | 0.53.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/autowarefoundation/autoware_universe.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-26 |
| Dev Status | UNKNOWN |
| Released | UNRELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Taiki Yamada
- Yoshi Ri
- Sergio Reyes Sanchez
- Manato Hirabayashi
Authors
- Yamato Ando
autoware_imu_corrector
imu_corrector
imu_corrector_node is a node that correct imu data.
- Correct yaw rate offset $b$ by reading the parameter.
- Correct yaw rate standard deviation $\sigma$ by reading the parameter.
- Correct yaw rate scale $s$ using NDT pose as a ground truth.
Mathematically, we assume the following equation:
\[\tilde{\omega}(t) = s(t) * \omega(t) + b(t) + n(t)\]where $\tilde{\omega}$ denotes observed angular velocity, $\omega$ denotes true angular velocity, $b$ denotes an offset, $s$ denotes the scale, and $n$ denotes a gaussian noise. We also assume that $n\sim\mathcal{N}(0, \sigma^2)$.
Input
| Name | Type | Description |
|---|---|---|
~input |
sensor_msgs::msg::Imu |
raw imu data |
Output
| Name | Type | Description |
|---|---|---|
~output |
sensor_msgs::msg::Imu |
corrected imu data |
Parameters
| Name | Type | Description |
|---|---|---|
angular_velocity_offset_x |
double | roll rate offset in imu_link [rad/s] |
angular_velocity_offset_y |
double | pitch rate offset imu_link [rad/s] |
angular_velocity_offset_z |
double | yaw rate offset imu_link [rad/s] |
angular_velocity_stddev_xx |
double | roll rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_yy |
double | pitch rate standard deviation imu_link [rad/s] |
angular_velocity_stddev_zz |
double | yaw rate standard deviation imu_link [rad/s] |
acceleration_stddev |
double | acceleration standard deviation imu_link [m/s^2] |
Note: The angular velocity offset values introduce a fixed compensation that is not considered in the gyro bias estimation. If the on_off_correction.correct_for_dynamic_bias flag and the on_off_correction.correct_for_static_bias flags are enabled, automatically the correct_for_static_bias will be disabled to avoid correction errors.
gyro_bias_estimator
gyro_bias_validator is a node that validates the bias of the gyroscope. It subscribes to the sensor_msgs::msg::Imu topic and validate if the bias of the gyroscope is within the specified range.
Note that the node calculates bias from the gyroscope data by averaging the data only when the vehicle is stopped.
Input
| Name | Type | Description |
|---|---|---|
~/input/imu_raw |
sensor_msgs::msg::Imu |
raw imu data |
~/input/pose |
geometry_msgs::msg::PoseWithCovarianceStamped |
ndt pose |
~/input/odometry |
nav_msgs::msg::Odometry |
odometry data |
Note that the input pose is assumed to be accurate enough. For example when using NDT, we assume that the NDT is appropriately converged.
Currently, it is possible to use methods other than NDT as a pose_source for Autoware, but less accurate methods are not suitable for IMU bias estimation.
In the future, with careful implementation for pose errors, the IMU bias estimated by NDT could potentially be used not only for validation but also for online calibration.
The Extended Kalman Filter (EKF) is used for scale estimation. The NDT pose is used as ground truth, and we assume it’s accurate enough to provide long-term convergence for the correct scale observation, the EKF filter includes an initial checking and it requires N amount of consecutive in bounds samples to initialize samples_in_bounds_to_init , otherwise retries up to the value set on max_reinitialization_retries before triggering an error.
Output
| Name | Type | Description |
|---|---|---|
~/output/gyro_bias |
geometry_msgs::msg::Vector3Stamped |
bias of the gyroscope [rad/s] |
~/output/gyro_scale |
geometry_msgs::msg::Vector3Stamped |
estimated scale of the gyroscope [no units] |
Parameters (Bias estimation)
Note that this node also uses angular_velocity_offset_x, angular_velocity_offset_y, angular_velocity_offset_z parameters from imu_corrector.param.yaml.
| Name | Type | Description |
|---|---|---|
gyro_bias_threshold |
double | threshold of the bias of the gyroscope [rad/s] |
timer_callback_interval_sec |
double | seconds about the timer callback function [sec] |
diagnostics_updater_interval_sec |
double | period of the diagnostics updater [sec] |
straight_motion_ang_vel_upper_limit |
double | upper limit of yaw angular velocity, beyond which motion is not considered straight [rad/s] |
Parameters (Scale estimation)
| Name | Type | Description |
|---|---|---|
estimate_scale_init |
double | Initial value for scale estimation |
min_allowed_scale |
double | Minimum allowed scale value |
max_allowed_scale |
double | Maximum allowed scale value |
threshold_to_estimate_scale |
double | Minimum yaw rate required to estimate scale |
percentage_scale_rate_allow_correct |
double | Allowed percentage change with respect to current scale for correction |
alpha |
double | Filter coefficient for scale (complementary filter) |
delay_gyro_ms |
int | Delay applied to gyro data in milliseconds |
samples_filter_pose_rate |
int | Number of samples for pose rate filtering |
samples_filter_gyro_rate |
int | Number of samples for gyro rate filtering |
File truncated at 100 lines see the full file
Changelog for package autoware_imu_corrector
0.53.0 (2026-09-29)
-
Merge remote-tracking branch 'origin/main' into prepare-0.53.0-changelog
-
refactor(sensing): move node design files into each package (#13105)
-
feat(imu_corrector): apply [agnocast_wrapper::Node]{.title-ref} to [autoware_imu_corrector]{.title-ref} (#12865)
- apply agnocast_wrapper::Node
- apply to gyro_bias_estimator
- style(pre-commit): autofix
* fix copilot review to add cmath and fix to disable test when agnocast enabled ---------Co-authored-by: pre-commit-ci-lite[bot] <117423508+pre-commit-ci-lite[bot]@users.noreply.github.com>
-
Contributors: Koichi Imai, Ryohsuke Mitsudome, Taekjin LEE
0.52.0 (2026-06-30)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(clang-tidy): fix unchecked optional access in imu corrector (#12597)
-
fix: imu scale estimation covariance limit for stability (#12562)
- fix: imu scale estimation covariance limit for stability
* chore: change covaraince limit ---------Co-authored-by: Yoshi Ri <<yoshiyoshidetteiu@gmail.com>>
-
chore(autoware_imu_corrector): add maintainers to package.xml (#12580)
-
Contributors: SergioReyesSan, Vishal Chauhan, Yoshi Ri, github-actions
0.51.0 (2026-05-01)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(autoware_imu_corrector): adopt cie (#12319)
- feat: adopt cie
- fix: revert ros2 executor
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
- fix
- fix: remove unnecessary lines
* fix: remove unnecessary lines ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
-
Contributors: Tetsuhiro Kawaguchi, github-actions
0.50.0 (2026-02-14)
-
Merge remote-tracking branch 'origin/main' into humble
-
fix(imu_scale_bias_estimator): ekf initializes only when it has in bounds samples (#11816)
- fix: restart scale estimation if initial value is out of bounds
- fix: variable initialization and typo error on README
* fix: uninitialized new variable ---------Co-authored-by: Taiki Yamada <<129915538+TaikiYamada4@users.noreply.github.com>>
-
feat!: remove ROS 2 Galactic codes (#11905)
-
Contributors: Ryohsuke Mitsudome, SergioReyesSan
0.49.0 (2025-12-30)
-
Merge remote-tracking branch 'origin/main' into prepare-0.49.0-changelog
-
docs: fix link to deviation_estimator in README (#11695) Updated the link for deviation_estimator in README.
-
feat: implement bias correction controls and update README
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Launch files
- launch/gyro_bias_estimator.launch.xml
-
- input_imu_raw [default: imu_raw]
- input_odom [default: odom]
- input_pose_ndt [default: pose_ndt]
- output_gyro_bias [default: gyro_bias]
- output_gyro_scale [default: gyro_scale]
- output_imu_scaled [default: imu_scaled]
- gyro_bias_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_bias_estimator.param.yaml]
- imu_corrector_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- gyro_scale_estimator_param_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]
- launch/imu_corrector.launch.xml
-
- input_topic [default: imu_raw]
- input_gyro_bias_topic [default: gyro_bias]
- input_gyro_scale_topic [default: gyro_scale]
- output_topic [default: imu_data]
- param_file [default: $(find-pkg-share autoware_imu_corrector)/config/imu_corrector.param.yaml]
- param_scale_file [default: $(find-pkg-share autoware_imu_corrector)/config/gyro_scale_estimator.param.yaml]