Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro jazzy showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro kilted showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro lyrical showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro rolling showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro ardent showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro bouncy showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro crystal showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro eloquent showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro dashing showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro galactic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro foxy showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro iron showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro lunar showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro jade showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro indigo showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro hydro showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro kinetic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro melodic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange

No version for distro noetic showing humble. Known supported distros are highlighted in the buttons above.

Package Summary

Version 1.1.3
License BSD-3-Clause
Build type AMENT_CMAKE
Use RECOMMENDED

Repository Summary

Description Aerostack2 is a ROS 2 framework developed to create autonomous multi-aerial-robots systems in an easy and powerful way.
Checkout URI https://github.com/aerostack2/aerostack2.git
VCS Type git
VCS Version main
Last Updated 2026-10-08
Dev Status DEVELOPED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Package Description

State estimator for Aerostack2

Maintainers

  • CVAR-UPM

Authors

No additional authors.

as2_state_estimator

State estimation server for Aerostack2.

The state_estimator node maintains the drone’s pose and velocity, publishes them on self_localization/*, and broadcasts the REP-105 transform chain earth -> map -> odom -> base_link. It does not itself know how to estimate anything: the actual estimation is done by plugins loaded at runtime through pluginlib.

The node owns the output path. Plugins never touch /tf or the publishers directly, they report state updates through an interface and the node decides what gets published.

graph LR
  S[sensor topics] --> P[Plugin]
  P -->|report| W[PluginWrapper]
  W --> A[authority check]
  A --> C[StateEstimator]
  C --> T["/tf, /tf_static"]
  C --> L["self_localization/pose<br/>self_localization/twist"]

Index

Plugins

Plugin Use it when Docs
raw_odometry The platform already gives you a fused odometry (PX4, DJI, flow deck). Optionally anchors the tree to a GPS datum. plugins/raw_odometry
ground_truth You have a source of absolute, essentially exact pose: a simulator, or a motion capture rig. plugins/ground_truth

The plugin is selected with the plugin_name parameter. It accepts either a single string or a list of strings, so more than one plugin can be loaded in the same node.

Multi-plugin is expressible but not yet arbitrated. Both plugins currently claim every transform type, so loading two of them is last-write-wins rather than a real handover. Per-plugin scoping is future work.

Frames

The node follows REP-105:

Transform Meaning Typically
earth -> map Where this drone’s local frame sits in the global frame Static, set once at startup
map -> odom Accumulated correction from absolute measurements Jumps when a correction arrives
odom -> base_link Smooth, continuous dead-reckoned pose Updated at sensor rate

earth is shared by every drone. map, odom and base_link are namespaced per drone (drone0/map, drone0/odom, …).

Empty frame names resolve to the namespace. Setting base_frame_id: "" in a node under namespace drone0 gives the frame drone0 instead of drone0/base_link. This is what Gazebo needs, since it roots each model’s TF at the bare model name, and it replaces the old use_gazebo_tf parameter.

Plugins read TF through a filtered listener that hides the estimator’s own three transforms, so a plugin cannot accidentally consume the output it just produced.

Interface

Published topics

Topic Type Frame
self_localization/pose geometry_msgs/PoseStamped earth
self_localization/twist geometry_msgs/TwistStamped base_link
/tf, /tf_static tf2_msgs/TFMessage the three transforms above

Per-plugin debug copies of the same state are published on state_estimation/<plugin_name>/pose and state_estimation/<plugin_name>/twist. They carry each plugin’s own view, before the authority check, which makes them the way to see what a non-authoritative plugin would have published. Rate is controlled by <plugin_name>.debug_publish_hz.

Subscribed topics and services depend entirely on the loaded plugin. See the plugin READMEs.

Parameters

Top-level parameters, defaulted in config/state_estimator_default.yaml:

Parameter Type Default Description
plugin_name string or string[] (required) Plugin(s) to load
publish_hz double 0.0 Output rate. 0.0 publishes on every update
<plugin_name>.debug_publish_hz double -1.0 Per-plugin debug topics. -1 = every update, 0 = disabled, >0 = fixed rate

The frame ids are not parameters of this package: as2::Node declares earth_frame_id, map_frame_id, odom_frame_id and base_frame_id once and shares them with the whole stack.

Plugin parameters live in a block named after the plugin:

File truncated at 100 lines see the full file

CHANGELOG

Changelog for package as2_state_estimator

1.1.3 (2025-07-23)

  • [as2_state_estimator] In Raw Odometry Plugin, fix GPS Origin Info
  • [as2_state_estimator] Fix odom topic default parameter in ground_truth_odometry_fuse plugin
  • [as2_state_estimator] Replace timer for odometry callback in ground_truth_odometry_fuse
  • [as2_state_estimator] Add ground truth and odometry fuse plugin for state estimator
  • [as2_state_estimator] Set map to odom transform only if param is enable
  • [as2_state_estimator] Enable gazebo TFs for all plugins
  • [as2_state_estimator] Add ground truth and odometry fuse node
  • [as2_state_estimator] Fix tf_handler instantiation in plugin base
  • [as2_state_estimator] Improve mocap plugin
  • [as2_state_estimator] Add earth to map transform using ROS 2 params in raw odometry plugin
  • [as2_state_estimator] In raw_odometry plugin, replace frames checker from error to warning
  • [as2_state_estimator] Use tf_handler instead of tf2_ros directly
  • [aerostack2] Use as2::spingLoop without preset_loop_frequency
  • [aerostack2] Maintainer and license tags update
  • Contributors: Rafael Pérez, pariaspe

1.1.2 (2024-08-22)

1.1.1 (2024-08-20)

  • [as2_state_estimator] Fix gtest warning: publisher already registered
  • Contributors: Rafael Perez-Segui, pariaspe

1.1.0 (2024-08-08)

  • [as2_state_estimator] map frame generates at the drone initial position
  • [as2_state_estimator] Change gazebo tf parameter name
  • [as2_state_estimator] update state estimator with new launch utils and new launchers for each plugin
  • [as2_state_estimator] Code refactor, adding individually CMakeLists.txt and config for each plugin. Update launch using as2_core launch params utils
  • [as2_state_estimator] Migrate to ament lint
  • [as2_state_estimator] mocap_pose plugin changed to work with mocap4ros2
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, Rafael Perez-Segui, pariaspe

1.0.9 (2024-03-25)

  • latlon2local function fails in z coordinate, added earth_to_map_height parameter
  • raw odometry plugin should have a set gps origin
  • Contributors: Javier Melero, Javilinos, Rafael Pérez

1.0.8 (2024-02-12)

1.0.7 (2024-02-04)

1.0.6 (2023-12-12)

1.0.5 (2023-11-08)

1.0.4 (2023-08-23)

1.0.3 (2023-08-22)

  • Merge pull request #317 from aerostack2/316-tf2_geometry_msgs-dep Only use tf2_geometry_msgs library when needed
  • only use library when needed
  • Contributors: Miguel Fernandez-Cortizas, pariaspe

1.0.2 (2023-08-17)

  • Merge pull request #279 from aerostack2/230-gps_support_for_ground_truth_plugin Add gps support for ground truth plugin
  • Change origin param
  • parameters added, compiling, add origin manually working
  • gps support for ground truth plugin
  • Contributors: Javilinos, Miguel Fernandez-Cortizas, RPS98, pariaspe

1.0.1 (2023-04-25)

  • Merge pull request #223 from aerostack2/200-unify-maintainer-in-packagexmls Maintainer unified to CVAR-UPM
  • Maintainer unified to CVAR-UPM
  • Merge pull request #212 from aerostack2/211-nodes-should-use-aerostack2-node-create-timer-method-not-create-wall-timer Nodes use Aerostack2 Node Create Timer method, not create wall timer
  • Change create wall timer to as2 create timer
  • Contributors: Miguel Fernandez-Cortizas, RPS98, pariaspe

File truncated at 100 lines see the full file

Launch files

No launch files found

Messages

No message files found.

Services

No service files found

Plugins

No plugins found.

Recent questions tagged as2_state_estimator at Robotics Stack Exchange