Your SICK ID gives you access to our extensive range of services. This includes direct online orders, price and availability checks, and access to our digital services.
Please use the Python tools README on how to call the python scripts, and see which inputs are required (can differ per script).
You can generate each plot individually, or show all plots using the ‘plot_all.py’ script.
Procedure 1: Visualize and analyze a Triton map
1.1. Map and cluster visualization
Visualize your map, where the color indicates the cluster ID
Use the Python script plot_map_visualization.py
1.2. Distance between signatures
Metric explained: Triton aims to create a signature every 2cm to ensure some overlap. The mean should be close to this value for proper localization performance.
Use the Python script plot_distance_between_signatures_map.py with the file ‘floor_map.db’ as input
Use the Python script plot_distance_between_signatures_histogram.py with the file ‘floor_map.db’ as input
With the two scripts above, you end up with a scatter plot and a histogram plot:
1.3. Loop closure errors
Please read the section Appendix: Search for loop closures for more information about loop closures, and how to get a file with loop closures based on your map.
Use the Python script plot_residual_position_errors_g2o.pywith as input:
‘loop_closures.g2o' file
'floor_map.db’
to generate the following plots:
Magnitude of jumps from loop closures (scatter plot)
Magnitude of jumps from loop closures (histogram)
Example output:
Optional later: Improve accuracy of map
Accerion has tools to improve the accuracy of a map using Pose graph optimization. This involves logging certain signals during mapping, and Accerion optimizing maps. Please contact Accerion if you are interested in this.
To plot the driven path (external reference) and correctios on top of you map, use plot_map_with_sensor_poses.py with as input:
‘arams_user_logs' folder
'floor_map.db’
Example output:
2.2. Distance between corrections
The goal of this metric is to visualize: “how far did I drive between consecutive corrections?”
The histogram defines bins based on the “grid spacing” parameter inside your “conf_template.yml” file (inside sdk/tools/python/sdk/resources/)
Use the python plots plot_distance_between_corrections_map.py or plot_distance_between_corrections_histogram.py
with as input:
‘arams_user_logs' folder
'floor_map.db’
Example output:
2.3. Position corrections
For every drift correction Triton calculates the error with respect to the pose that is provided by the user via the external reference.
This error consists of both a position error, and a heading error. The error can be a result of various aspects, such as odometry drift between corrections, latency effects, inaccuracies in the map, …
The limit for the “_map.py” plot is based on the max position error defined in the “test_template.yml” inside “sdk/tools/python/sdk/resources”
Use the python plots plot_position_corrections_map.py or plot_position_corrections_histogram.py
with as input:
‘arams_user_logs' folder
'floor_map.db’
Example output:
2.4. Heading corrections
For every drift correction Triton calculates the error with respect to the pose that is provided by the user via the external reference.
This error consists of both a position error, and a heading error. The error can be a result of various aspects, such as odometry drift between corrections, latency effects, inaccuracies in the map, …
The limit for the “_map.py” plot is based on the max heading error defined in the “test_template.yml” inside “sdk/tools/python/sdk/resources”
Use the python plots plot_heading_corrections_map.py or plot_heading_corrections_histogram.py
with as input:
‘arams_user_logs' folder
'floor_map.db’
Example output:
2.5. External reference
The external reference that you send to Triton during mapping and localization is extremely important for the performance that you get out of Triton.
The external_reference_timeseries plots can help you to debug or improve integration in various ways:
check if the frequency of the external reference is sufficient (>20Hz) and matches what you expect
check if the external reference pose is smooth (no gaps, jumps, ...) and accurate (if you your vehicle drove 1m in a straight line, does the external reference also reflect this)
if you already have a map and localize on the map: check if the drift correction poses are similar to the external reference (if there is a big offset, this is a sign something might be off)
Use the python plots plot_external_reference_timeseries.py with as input:
‘arams_user_logs' folder
'floor_map.db’
Example output:
Appendix: Generate PDF report with plots and metrics
Besides the individual plots, there is also the option to generate a report (.pdf) with all relevant plots, and metrics. This allows you to have a clear overview of your localization performance.
How to generate the report"
Change your working directory to accerionsdk/tools/python, then use the following syntax to generate a report:
Triton arams logs (absolute path to arams_user_logs folder)
Triton map (absolute path to .db file)
Optional: loop closure file (absolute path to .g2o file)
-o
absolute path of where to store plots and the report
For and example report, check the attachment 'example_triton_report.pdf'
Appendix: Search for loop closures
What is a loop closure?
If a horizontal and vertical cluster cross each other, there will be a part of the floor that is covered by signatures from both clusters. Triton can match signatures against each other, and find the difference in position and heading between these signatures. A match between two overlapping signatures from different clusters is called a loop closure.
Later we will see how we can use these loop closures to analyze the accuracy of our map.