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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |
Launch files
Messages
Services
Plugins
Recent questions tagged as2_state_estimator at Robotics Stack Exchange
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
Maintainers
- CVAR-UPM
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 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
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_gtest | |
| ament_index_cpp | |
| rclcpp | |
| as2_core | |
| nav_msgs | |
| geometry_msgs | |
| mocap4r2_msgs | |
| tf2 | |
| tf2_ros | |
| geographic_msgs | |
| as2_msgs | |
| sensor_msgs |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| aerostack2 |