This node provides a global localization based on landmarks. On the ADC competition, these landmarks are [ar_track_alvar](http://wiki.ros.org/ar_track_alvar) tags from the traffic signs and from additional localization signs. This node takes the filtered ar tag detections of both cameras and optimizes a landmark based slam problem to get the robot position. A landmarks based slam problem is the problem of optimize a number of robot poses with a map of landmarks. It uses [Ceres Solver](http://ceres-solver.org/index.html) to make the optimization.
This node provides a global localization based on landmarks. On the ADC competition, these landmarks are [ar_track_alvar](http://wiki.ros.org/ar_track_alvar) tags from the traffic signs and from additional localization signs. This node takes the [filtered ar tag detections](https://gitlab.iri.upc.edu/mobile_robotics/adc/adc_2021/iri_adc_tag_localization_filter)(features) of both cameras and optimizes a landmark based slam problem to get the robot position. A landmarks based slam problem is the problem of optimize a number of robot poses with a map of landmarks. It uses [Ceres Solver](http://ceres-solver.org/index.html) to make the optimization.
The following image is a skecth of the input and output of the node.
The following image is a skecth of the input and output of the node.
...
@@ -10,7 +10,7 @@ The following image is a basic representation of the slam problem. Is a sequence
...
@@ -10,7 +10,7 @@ The following image is a basic representation of the slam problem. Is a sequence
<imgsrc="doc/images/slam_problem_sketch.png"alt="Image: Slam problem overview">
<imgsrc="doc/images/slam_problem_sketch.png"alt="Image: Slam problem overview">
When searching for new landmarks, there is a landmark time persistence filter that checks that a landmark is seen enough times on the same location before adding it as a mapped landmarks. An orientation filter can be enabled to check that it has a similar orientation on each detection.
When searching for new landmarks, there is a time persistence filter that checks that a feature is seen enough times on the same location before adding it as a mapped landmarks. An orientation filter can be enabled to check that it has a similar orientation on each detection.
To match a detection with a landmark the [Mahalanobis distance](https://en.wikipedia.org/wiki/Mahalanobis_distance) is used. Basically, a match between a detection and a landmark is done when the detection is inside an ellipse centered on the landmark. The ellipse is defined by the sensor noise and the mahalanobis distance parameter.
To match a detection with a landmark the [Mahalanobis distance](https://en.wikipedia.org/wiki/Mahalanobis_distance) is used. Basically, a match between a detection and a landmark is done when the detection is inside an ellipse centered on the landmark. The ellipse is defined by the sensor noise and the mahalanobis distance parameter.
...
@@ -25,7 +25,9 @@ The landmarks information can be loaded in two ways:
...
@@ -25,7 +25,9 @@ The landmarks information can be loaded in two ways:
***yaw** (double): Landmark yaw.
***yaw** (double): Landmark yaw.
***marker_id** (integer): The ar_track_alvar marker id.
***marker_id** (integer): The ar_track_alvar marker id.
If the lanmarks are loaded from the xodr file, *load_landmarks_from_xodr* parameter must be set to true.
The landmarks txt file can be generated loading the landmarks from the xodr file and setting the parameter *write_output_files* on a *Dynamic Reconfigure* window.
If the landmarks are loaded from the xodr file, *load_landmarks_from_xodr* parameter must be set to true.
# ROS Interface
# ROS Interface
### Topic publishers
### Topic publishers
...
@@ -45,7 +47,7 @@ If the lanmarks are loaded from the xodr file, *load_landmarks_from_xodr* parame
...
@@ -45,7 +47,7 @@ If the lanmarks are loaded from the xodr file, *load_landmarks_from_xodr* parame
- ~**global_frame** (String; default: map) Global frame id.
- ~**global_frame** (String; default: map) Global frame id.