Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]
Messages
Services
Plugins
Recent questions tagged autoware_twist2accel at Robotics Stack Exchange
Package Summary
| Version | 1.9.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-03 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Koji Minoda
autoware_twist2accel
Purpose
This package is responsible for estimating acceleration using the output of ekf_localizer. It uses lowpass filter to mitigate the noise.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
input/odom |
nav_msgs::msg::Odometry |
localization odometry |
input/twist |
geometry_msgs::msg::TwistWithCovarianceStamped |
twist |
Output
| Name | Type | Description |
|---|---|---|
output/accel |
geometry_msgs::msg::AccelWithCovarianceStamped |
estimated acceleration |
Parameters
{{ json_to_markdown(“localization/autoware_twist2accel/schema/twist2accel.schema.json”) }}
Future work
Future work includes integrating acceleration into the EKF state.
Changelog for package autoware_twist2accel
1.1.0 (2025-05-01)
1.9.0 (2026-06-24)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
feat(twist2accel): apply [agnocast_wrapper::Node]{.title-ref} to [twist2accel]{.title-ref} (#1189)
- apply agnocast_wrapper::Node
- fix to use ALLOCATE
- fix Cmake
- fix cpplint
* disable test when agnocast enabled ---------
-
refactor(autoware_twist2accel): arrange class interface (#1186)
* refactor(autoware_twist2accel): encapsulate dt and previous twist in AccelEstimator AccelEstimator::estimate() now takes only the current twist sample and owns the per-call state that previously lived in the node: it holds the previous twist, derives dt from successive header stamps, and returns a ready-to-publish AccelWithCovarianceStamped with the header copied from the input. Add TwistWithCovarianceStamped and Odometry overloads that normalize to a TwistStamped and delegate, so the node callbacks can pass the raw message directly and the estimate_accel helper is no longer needed.
* style(autoware_twist2accel): remove redundant comments ---------Co-authored-by: Takahisa.Ishikawa <<takahisa.ishikawa@tier4.jp>>
-
refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests (#1111)
* refactor(autoware_twist2accel): extract pure AccelEstimator and add unit tests Extract the ROS-free acceleration math (dt-clamped finite difference plus 6-channel LowpassFilter1d smoothing) out of Twist2Accel::estimate_accel into a pure, injectable AccelEstimator class, mirroring the sibling autoware_stop_filter::StopFilter pattern. estimate_accel becomes a thin wrapper that computes dt from the ROS clock, calls the estimator, fills the message, and publishes. This makes the previously untestable estimation logic exercisable without spinning a ROS node and adds gtest coverage for the no-smoothing-on-first-sample, finite-difference, low-pass smoothing, dt-clamp, channel-independence, and covariance-index branches. Behavior-preserving: the dt clamp (>= 1e-3), per-component LPF order, and the first-message zero/empty accel branch are unchanged. The accel covariance diagonal is now written via autoware_utils_geometry XYZRPY_COV_IDX named indices instead of magic i*6+i arithmetic (a gtest pins the equivalence), and the hot-path per-message std::make_shared copy is dropped by storing the previous twist as a value (std::optional). Dead tf2 / STL includes, the file-scope LowpassFilter1d using-declaration in the header, and the unused tf2 package.xml dependency are removed; autoware_utils_geometry is added. Refs: autowarefoundation/autoware_core#1096
* refactor(autoware_twist2accel): clarify AccelEstimator docstring The class operates on geometry_msgs Twist/Accel value types, so the "ROS-free" wording was imprecise. Reword to state the actual property: no rclcpp::Node / spinning dependency. Refs: autowarefoundation/autoware_core#1096
- refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator (#85)
* refactor(autoware_twist2accel): move accel covariance into pure AccelEstimator The previous extraction left the acceleration covariance assignment in the node while only the acceleration values moved into the pure AccelEstimator. Per reviewer feedback, the covariance is core estimation logic and belongs with the value estimate. AccelEstimator::estimate now returns geometry_msgs::msg::AccelWithCovariance, filling the same constant diagonal covariance the node used to set (linear variance 1.0, angular variance 0.05, off-diagonal terms zero) via named constants g_linear_accel_variance / g_angular_accel_variance. The node simply assigns the core's AccelWithCovariance output, so the published covariance is byte-for-byte unchanged. The core stays pure with no new mutable shared state. Unit tests assert the covariance against hand-computed literals, and the node test adds a characterization assertion locking the published covariance. Refs: autowarefoundation/autoware_core#1096
* Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>> ---------Co-authored-by: Copilot Autofix powered by AI <<175728472+Copilot@users.noreply.github.com>>
* test(autoware_twist2accel): assert covariance diagonal against named constants Address review: build the expected covariance array
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| autoware_core_localization |
Launch files
- launch/twist2accel.launch.xml
-
- param_file [default: $(find-pkg-share autoware_twist2accel)/config/twist2accel.param.yaml]
- in_odom [default: in_odom]
- in_twist [default: in_twist]
- out_accel [default: out_accel]