No version for distro humble showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro jazzy showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro kilted showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro rolling showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro github showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro galactic showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro iron showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro melodic showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.
Recent questions tagged fsm_localisation at Robotics Stack Exchange
No version for distro noetic showing lyrical. Known supported distros are highlighted in the buttons above.
|
fsm_localisation package from fsm_localisation repofsm_localisation |
ROS Distro
|
Package Summary
| Version | 1.0.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Description | |
| Checkout URI | https://github.com/fourier-scan-matcher/fsm-localisation.git |
| VCS Type | git |
| VCS Version | lyrical-devel |
| Last Updated | 2026-11-01 |
| Dev Status | MAINTAINED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Correspondenceless scan matching of panoramic 2D lidar scans in the frequency domain, in two modes: lidar odometry from consecutive scans, and correction of a pose estimate against an occupancy grid.
Additional Links
Maintainers
- Alexandros Filotheou
Authors
- Alexandros Filotheou
README
No README found.
See repository README.
CHANGELOG
Changelog for package fsm_localisation
Forthcoming
- Declares as test dependencies the packages that the Python tests
import:
launch,launch_ros,launch_testing,python3-pytest,rcl_interfaces,rclpyandtf2_msgs. Before, the tests got them only through other packages.
1.0.0 (2026-11-01)
- Declares
libfftw3-devas a build dependency andlibfftw3as a run dependency.ros/rosdistro#54634 split thelibfftw3rule: that key now installs the run time libraries only, and the new keylibfftw3-devinstalls the headers. Thusrosdepinstalls each dependency, and the install steps anddocker/Dockerfileno longer installlibfftw3-devby name or skip a key. - Switches the translation bound off in
params_amelioration.yaml. On the rb1 recording, the estimate was up to 0.25 m and 10 degrees out on every third frame. There the bound refused 510 to 670 of 2223 frames. It also let through 17 to 57 answers more than 0.5 m or 10 degrees out. With the bound off, no frame was refused and 1 to 49 answers were that far out. With the estimate on the logged pose, the median heading gap fell from 0.587 to 0.503 degrees. - Unpacks the spectrum of an odd count of rays correctly. It unpacked each spectrum as if its length was even. Thus at an odd length it removed the imaginary part of the highest coefficient and gave one coefficient too few. This changed each rotation that the matcher found for such a scan. In the test room the start was 0.14 m and 4.6 degrees out. From there a scan of 269 rays now comes to 0.067 degrees and 0.35 cm from the truth. Before, it came to 0.23 degrees and 1.1 cm. A scan laid out as the 1073 rays of the rb1 recording now comes to 0.012 degrees, where it came to 0.39 degrees. At an odd length the arithmetic no longer agrees with the ROS 1 package.
- Lays the map out from the first ray of the scan. The matcher cast its window of a turn from the start of that window. Thus it matched a scan whose first ray was at a different angle up to half a ray out. In the test room, the heading of a whole turn symmetric about the heading was 0.5 degrees out. On a narrower scan where the turn less its rays is odd, as on the rb1 recording, the finer casts of the rotation step were half a ray out. Now each cast lies along the rays of the scan, at each count of rays. In the test room the error is less than 4e-15 radians, and on the rb1 layout less than 2e-7.
-
Corrector::correcttakes a fifth argument,first_ray_angle. It is the angle of the first range from the heading of the sensor, and a caller must supply it. The node supplies theangle_minof the scan.FSM::Referenceincreases from 32 to 40 bytes. - Refuses a scan whose
angle_minis not a number. - Refuses an estimate stamped before zero with a sentence and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such estimate.
- Ignores a scan stamped before zero in odometry mode, with a warning, and keeps running. The conversion of such a stamp to a time threw an exception that nothing caught, and the node aborted at the first such scan.
- Makes the node's start and stop flag safe to read and write from
several executor threads at once. The flag was a plain
bool, written bystartandstopand read on other executor threads. A ThreadSanitizer run of the start, stop and correction tests reported that race seven times before and none after. - Lays the optional map scan over the scan the sensor reported, ray for ray, whatever the sensor covers. It spread the scan's ray count over a whole turn from half a turn behind the heading, but carried the scan's own angles. Thus for a sensor that covers less than a turn, it did not lie over the scan. Each ray is now cast along the matching ray of the scan. In the test room it now disagrees with a 270 degree scan by 0.026 m a ray, where it disagreed by 0.56 m.
- No longer says that a non-zero
rng_seedmakes a run repeat. The README and both parameter files said so. Each executor thread seeds its own generator, and any of them may run a match. Thus which draw a recovery gets depends on the thread schedule. On a recording from a real robot, three odometry runs atrng_seed1 over 2000 scans differed from step 79. - Reads a sensor mounted upside down from the transform tree, with nothing to set. The correction read the rotation of the sensor's placement on the robot as a heading and nothing more, so a lidar mounted half a turn about its forward axis was taken for an upright one and its scan was matched as the mirror image of the room. On a recording from a robot whose lidar is mounted that way, none of twenty estimates pushed 0.1 m and 5 degrees off the logged pose was put back within 0.1 m and 2 degrees of it. The whole rotation is now read. Where the sensor's z axis points down the ranges are taken in reverse order and laid out from the sensor's heading less the sum of the scan's first and last angles, which is exact for any scan the node accepts. Reversing the ranges alone would turn the answer by one ray on a scan beginning at minus pi. A setup that flipped the scan in its driver while its transform tree carries the half turn of roll is now read mirrored, and should drop one of the two. The optional map scan now runs in the order the sensor reports its rays, where for such a sensor it was drawn as the mirror image of the scan.
- Corrects a defect that answered a narrower sensor confidently and
wrongly.
Corrector::correctwas never told what the sensor covered, so it read the map over a whole turn and matched it against a measurement covering less of one. That converges rather than failing, so every signal a caller can read said the correction was fine. The map is now read over a whole turn at the sensor's own angular spacing and windowed to what the sensor could have seen. The aperture is a required argument with no default, since a default of
File truncated at 100 lines see the full file
Package Dependencies
System Dependencies
Dependant Packages
No known dependants.
Launch files
- launch/fsm_localisation.launch.xml
-
- namespace [default: /]
- node_name [default: fsm_localisation]
- params [default: $(find-pkg-share fsm_localisation)/config/params_odometry.yaml]
Messages
No message files found.
Services
No service files found
Plugins
No plugins found.