Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]
Messages
Services
Plugins
Recent questions tagged autoware_gnss_poser at Robotics Stack Exchange
Package Summary
| Version | 1.10.0 |
| License | Apache License 2.0 |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/autowarefoundation/autoware_core.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-10-07 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Maintainers
- Xingang Liu
- Yamato Ando
- Masahiro Sakamoto
- NGUYEN Viet Anh
- Taiki Yamada
Authors
- Ryo Watanabe
gnss_poser
Overview
The gnss_poser is a node that subscribes gnss sensing messages and calculates vehicle pose with covariance.
Design
This node subscribes to NavSatFix to publish the pose of base_link. The data in NavSatFix represents the antenna’s position. Therefore, it performs a coordinate transformation using the tf from base_link to the antenna’s position. The frame_id of the antenna’s position refers to NavSatFix’s header.frame_id.
(Note that header.frame_id in NavSatFix indicates the antenna’s frame_id, not the Earth or reference ellipsoid. See also NavSatFix definition.)
If the transformation from base_link to the antenna cannot be obtained, it outputs the pose of the antenna position without performing coordinate transformation.
Inputs / Outputs
Input
| Name | Type | Description |
|---|---|---|
/map/map_projector_info |
autoware_map_msgs::msg::MapProjectorInfo |
map projection info |
~/input/fix |
sensor_msgs::msg::NavSatFix |
gnss status message |
~/input/autoware_orientation |
autoware_sensing_msgs::msg::GnssInsOrientationStamped |
orientation click here for more details |
Output
| Name | Type | Description |
|---|---|---|
~/output/pose |
geometry_msgs::msg::PoseStamped |
vehicle pose calculated from gnss sensing data |
~/output/gnss_pose_cov |
geometry_msgs::msg::PoseWithCovarianceStamped |
vehicle pose with covariance calculated from gnss sensing data |
~/output/gnss_fixed |
autoware_internal_debug_msgs::msg::BoolStamped |
gnss fix status |
Parameters
Parameters in below table
| Name | Type | Default | Description |
|---|---|---|---|
base_frame |
string |
base_link |
frame id for base_frame |
gnss_base_frame |
string |
gnss_base_link |
frame id for gnss_base_frame |
map_frame |
string |
map |
frame id for map_frame |
use_gnss_ins_orientation |
boolean |
true |
use Gnss-Ins orientation |
gnss_pose_pub_method |
integer |
0 |
0: Instant Value 1: Average Value 2: Median Value. Any other value is rejected at startup. |
buff_epoch |
integer |
1 |
Number of positions the average / median is taken over (ignored for method 0). Range: 1~inf; smaller values are rejected at startup. |
All above parameters can be changed in config file gnss_poser.param.yaml .
Changelog for package autoware_gnss_poser
1.1.0 (2025-05-01)
1.10.0 (2026-09-28)
-
Merge remote-tracking branch 'origin/main' into tmp/bot/bump_version_base
-
fix(autoware_gnss_poser): stamp gnss_fixed with the fixed header stamp (#1459) fix(autoware_gnss_poser): stamp gnss_fixed with the fix header stamp gnss_fixed was the only output stamped with the node clock; gnss_pose, gnss_pose_cov and the TF broadcast all carry the header stamp of the fix they were computed from. It now carries that stamp too, so the status can be matched to the fix and to the pose it belongs to. It comes before the logic is separated out because it decides what the pose computation answers with: once the outputs are built there, every one of them is stamped with the fix, and this is the only one that was not. The characterization case GnssFixed_StampIsNodeClockNotFixHeaderStamp pinned the old behavior and is rewritten as GnssFixed_StampIsFixHeaderStamp; built against this change with the old assertions, exactly that case fails and the other 30 pass. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
fix(autoware_gnss_poser): reject invalid gnss_pose_pub_method and buff_epoch at startup (#1458) gnss_pose_pub_method is now an enum (Instant / Average / Median). A value outside 0..2 used to be accepted silently: every non-zero value enabled buffering and every value other than 1 selected the median. buff_epoch must now be at least 1: a zero-capacity buffer counted as "full", so the average published NaN coordinates on every output and the median threw std::out_of_range inside the fix callback. Both are rejected with std::invalid_argument while the node is constructed, so a misconfiguration fails at launch instead of at runtime. The schema already documented 0..2 for the method; buff_epoch's minimum moves from 0 to 1 and the README no longer claims that buff_epoch = 0 disables the method (it never did). Characterization tests rewritten on purpose: MethodUnknown_BehavesLikeMedian, MethodAverage_BuffEpochZero_PublishesNaNPosition and MethodInstant_BuffEpochZero_IsHarmless (all three fail against this change with the old assertions) are replaced by Construct_UnknownPubMethod_FailsToStart and Construct_BuffEpochBelowOne_FailsToStart. The other 29 cases are unchanged. Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance (#1448)
* test(autoware_gnss_poser): characterize orientation, antenna TF composition and covariance Third PR of the series, stacked on the position branch. Ten cases on the orientation sources (INS message vs. heading from displacement), the antenna -> base_link TF lookup and composition including the fallback to identity, the lookup time and the interpolation of a changing relation, the map -> gnss_base_link broadcast, and the covariance layout of gnss_pose_cov. No production code changes. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): use one tolerance for positions and one for angles The file compared positions with 1e-9, 1e-6 and 1e-4 m depending on the case, with no principle behind the difference: the tighter values were meant to show "the same library call", which is more than a characterization test needs. Computed positions now share [position_tolerance]{.title-ref} (1e-4 m) and headings [angle_tolerance]{.title-ref} (1e-6 rad), each with its rationale next to the definition; [expect_same_rotation]{.title-ref} compares the rotation angle between the orientations so the same constant applies. Values the node copies keep exact equality, and the geoid-height check keeps its own 1 cm bound. Co-Authored-By: Claude Fable 5.1 <<noreply@anthropic.com>>
* test(autoware_gnss_poser): explain the covariance constants in the assertions Review of #1448: the orientation and covariance cases assert squared rmse values and two hard-coded fallbacks without saying where they come from. Each of them now carries the arithmetic (0.1\^2 = 0.01 and so on), the origin of the 1.0 placeholder and of the 10.0 substitute, and the input covariance names the diagonal it expects to survive. Co-Authored-By: Claude Opus 5 <<noreply@anthropic.com>> ---------Co-authored-by: Claude Fable 5.1 <<noreply@anthropic.com>>
-
test(autoware_gnss_poser): characterize the position pipeline and buffering (#1437)
* test(autoware_gnss_poser): characterize the position pipeline and buffering Second PR of the series, stacked on the harness branch. Twelve cases on how a fixed NavSatFix becomes a position: projection through autoware_geography_utils, height datum conversion, the instantaneous method, and the average / median buffering with its full-buffer gate, sliding window, independence from gated and
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
Launch files
- launch/gnss_poser.launch.xml
-
- param_file [default: $(find-pkg-share autoware_gnss_poser)/config/gnss_poser.param.yaml]
- input_topic_fix [default: /fix]
- input_topic_orientation [default: /autoware_orientation]
- output_topic_gnss_pose [default: gnss_pose]
- output_topic_gnss_pose_cov [default: gnss_pose_cov]
- output_topic_gnss_fixed [default: gnss_fixed]