From 7b2c3e1baeaa9f4f1965fdc62f37f2081bb57d57 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Tue, 14 Sep 2021 10:10:46 +0200
Subject: [PATCH] Updated the configuration of the landmark global
 localization. Solved some bugs in the local and global localization EKF
 frameworks. Updated some navigation parameters.

---
 config/adc_common/adc_control_config.yaml     |   2 +-
 .../adc_global_ekf_odom_imu_amcl.yaml         |  40 ++---
 config/adc_common/adc_local_ekf_odom_imu.yaml |  23 ++-
 config/adc_common/basler_roi_config.yaml      |   7 +
 config/adc_common/delock_roi_config.yaml      |   6 +
 .../landmarks_loc/landmarks_calibration.yaml  |   4 +-
 .../landmarks_calibration_amcl.yaml           |   4 +-
 .../landmarks_loc/localization.yaml           |   8 +-
 .../landmarks_loc/slam_mapping.yaml           |   4 +-
 config/adc_rosnav/amcl_no_tf.yaml             |  12 +-
 config/adc_rosnav/costmap/common_params.yaml  |   4 +-
 .../local_planner/ackermann_params.yaml       |  35 ++--
 launch/adc_ar_detector.launch                 |  31 +++-
 launch/adc_ar_detector_inverse.launch         |  27 ++-
 launch/adc_landmarks_localization.launch      | 154 ++++++++++++++++++
 rviz/localization_global.rviz                 |   2 +-
 rviz/nav.rviz                                 |  78 ++++++++-
 17 files changed, 360 insertions(+), 81 deletions(-)
 create mode 100644 config/adc_common/basler_roi_config.yaml
 create mode 100644 config/adc_common/delock_roi_config.yaml
 create mode 100644 launch/adc_landmarks_localization.launch

diff --git a/config/adc_common/adc_control_config.yaml b/config/adc_common/adc_control_config.yaml
index 2538247..cc0a54c 100644
--- a/config/adc_common/adc_control_config.yaml
+++ b/config/adc_common/adc_control_config.yaml
@@ -5,7 +5,7 @@ speed_Kd: 0.00
 speed_i_max: 20.0
 speed_deadband: 0.1
 watchdog_time: 0.5
-axel_distance: 0.36
+axel_distance: 0.3662
 max_steer_angle: 0.5
 min_steer_angle: -0.5
 max_speed_control: 20.0
diff --git a/config/adc_common/adc_global_ekf_odom_imu_amcl.yaml b/config/adc_common/adc_global_ekf_odom_imu_amcl.yaml
index 1a9f450..35232f0 100644
--- a/config/adc_common/adc_global_ekf_odom_imu_amcl.yaml
+++ b/config/adc_common/adc_global_ekf_odom_imu_amcl.yaml
@@ -5,33 +5,26 @@ two_d_mode: true
 print_diagnostics: true
 debug: false
 debug_out_file: /tmp/debug_ekf_localization.txt
-use_control: true
+use_control: false
 control_config: [true, true, false, false, false, true]
 
 
-publish_tf: false
+publish_tf: true 
 map_frame: map
 odom_frame: adc_car/odom
 base_link_frame: adc_car/base_footprint
 world_frame: map
 
-odom0: /adc_car/odom
+odom0: /adc_car/local_odom_combined
 odom0_config: [false, false, false,
                false, false, false,
-               true,  false,  false,
+               true,  true,  false,
                false, false, true,
                false, false, false]
 
-# imu0: /adc_car/sensors/imu_data
-# imu0_config: [false, false, false,
-#               false, false, false,
-#               false, false, false,
-#               false, false, true,
-#               false,  false, false]
-
-# imu0_differential: false
-# imu0_relative: true
-#imu0_remove_gravitational_acceleration: true
+imu0_differential: false
+imu0_relative: true
+imu0_remove_gravitational_acceleration: true
 
 pose0: /adc_car/amcl_pose
 pose0_config: [true,  true,  false,
@@ -45,12 +38,19 @@ pose0_relative: false
 #pose0_rejection_threshold: 2  # Note the difference in parameter name
 #pose0_nodelay: false
 
-#odom1: /adc_car/visual_odometry
-#odom1_config: [false, false, false,
-               #false, false, false,
-               #true,  true,  false,
-               #false, false, true,
-               #false, false, false]
+pose1: /adc_car/iri_adc_landmarks_slam_solver/landmarks_localization_pose
+pose1_config: [true,  true,  false,
+               false, false, false,
+               false, false, false,
+               false, false, false,
+               false, false, false]
+pose1_differential: true
+pose1_relative: false
+#pose1_queue_size: 5
+#pose1_rejection_threshold: 2  # Note the difference in parameter name
+#pose1_nodelay: false
+#
+
 
 #meaning_config: [x,     y,      z,
 #                 roll,  pitch,  yaw,
diff --git a/config/adc_common/adc_local_ekf_odom_imu.yaml b/config/adc_common/adc_local_ekf_odom_imu.yaml
index de8288d..2f95611 100644
--- a/config/adc_common/adc_local_ekf_odom_imu.yaml
+++ b/config/adc_common/adc_local_ekf_odom_imu.yaml
@@ -17,19 +17,30 @@ world_frame: adc_car/odom
 odom0: /adc_car/odom
 odom0_config: [false, false, false,
                false, false, false,
-               true,  false, false,
+               true,  true,  false,
                false, false, true,
                false, false, false]
 
-imu0: /adc_car/sensors/imu_data
+#imu0: /adc_car/sensors/imu_data
+#imu0_config: [false, false, false,
+#              false, false, true,
+#              false, false, false,
+#              false, false, false,
+#              false, false, false]
+
+#imu0_differential: false
+#imu0_relative: true
+#imu0_remove_gravitational_acceleration: true
+
+imu0: /adc_car/sensors/imu
 imu0_config: [false, false, false,
-              false, false, true,
               false, false, false,
-              false, false, true,
-              false,  false, false]
+              false, false, false,
+              true,  true,  true,
+              true,  true,  true]
 
 imu0_differential: false
-imu0_relative: true
+imu0_relative: false
 imu0_remove_gravitational_acceleration: true
 
 #meaning_config: [x,     y,      z,
diff --git a/config/adc_common/basler_roi_config.yaml b/config/adc_common/basler_roi_config.yaml
new file mode 100644
index 0000000..72174e1
--- /dev/null
+++ b/config/adc_common/basler_roi_config.yaml
@@ -0,0 +1,7 @@
+rate: 10
+roi_x_offset: 0
+roi_y_offset: 320
+roi_width: 1280
+roi_height: 320
+output_format: "mono8"
+
diff --git a/config/adc_common/delock_roi_config.yaml b/config/adc_common/delock_roi_config.yaml
new file mode 100644
index 0000000..43084de
--- /dev/null
+++ b/config/adc_common/delock_roi_config.yaml
@@ -0,0 +1,6 @@
+rate: 10
+roi_x_offset: 0
+roi_y_offset: 320
+roi_width: 1280
+roi_height: 256
+output_format: "mono8"
diff --git a/config/adc_common/landmarks_loc/landmarks_calibration.yaml b/config/adc_common/landmarks_loc/landmarks_calibration.yaml
index f726fed..869beea 100644
--- a/config/adc_common/landmarks_loc/landmarks_calibration.yaml
+++ b/config/adc_common/landmarks_loc/landmarks_calibration.yaml
@@ -21,8 +21,8 @@ calculate_covariance: False
 publish_tf_map_odom: True
 
 update_problem_rate: 0.001
-update_problem_distance: 0.2
-update_problem_angle: 0.1
+update_problem_distance: 0.07
+update_problem_angle: 0.07
 update_problem_features_detected: 3
 wait_feature_detected_timeout: 0.2
 problem_frame_window: -1
diff --git a/config/adc_common/landmarks_loc/landmarks_calibration_amcl.yaml b/config/adc_common/landmarks_loc/landmarks_calibration_amcl.yaml
index 02cc8d1..a49cdf3 100644
--- a/config/adc_common/landmarks_loc/landmarks_calibration_amcl.yaml
+++ b/config/adc_common/landmarks_loc/landmarks_calibration_amcl.yaml
@@ -21,8 +21,8 @@ calculate_covariance: False
 publish_tf_map_odom: False
 
 update_problem_rate: 0.001
-update_problem_distance: 0.2
-update_problem_angle: 0.1
+update_problem_distance: 0.07
+update_problem_angle: 0.07
 update_problem_features_detected: 3
 wait_feature_detected_timeout: 0.2
 problem_frame_window: -1
diff --git a/config/adc_common/landmarks_loc/localization.yaml b/config/adc_common/landmarks_loc/localization.yaml
index 577d40a..b1c1039 100644
--- a/config/adc_common/landmarks_loc/localization.yaml
+++ b/config/adc_common/landmarks_loc/localization.yaml
@@ -18,14 +18,14 @@ last_robot_state_estimated: False
 all_robot_states_estimated: False
 amcl_localization: False
 calculate_covariance: True
-publish_tf_map_odom: True
+publish_tf_map_odom: False
 
 update_problem_rate: 0.001
-update_problem_distance: 0.2
-update_problem_angle: 0.1
+update_problem_distance: 0.07
+update_problem_angle: 0.07
 update_problem_features_detected: 3
 wait_feature_detected_timeout: 0.2
-problem_frame_window: 60
+problem_frame_window: 120
 
 landmarks_candidates_filter_en: True
 landmark_mahalanobis_dist: 3.5
diff --git a/config/adc_common/landmarks_loc/slam_mapping.yaml b/config/adc_common/landmarks_loc/slam_mapping.yaml
index 60b8e36..1442dc3 100644
--- a/config/adc_common/landmarks_loc/slam_mapping.yaml
+++ b/config/adc_common/landmarks_loc/slam_mapping.yaml
@@ -21,8 +21,8 @@ calculate_covariance: False
 publish_tf_map_odom: True
 
 update_problem_rate: 0.001
-update_problem_distance: 0.2
-update_problem_angle: 0.1
+update_problem_distance: 0.07
+update_problem_angle: 0.07
 update_problem_features_detected: 3
 wait_feature_detected_timeout: 0.2
 problem_frame_window: -1
diff --git a/config/adc_rosnav/amcl_no_tf.yaml b/config/adc_rosnav/amcl_no_tf.yaml
index af186af..02cb42e 100644
--- a/config/adc_rosnav/amcl_no_tf.yaml
+++ b/config/adc_rosnav/amcl_no_tf.yaml
@@ -11,8 +11,8 @@ min_particles: 1000
 max_particles: 5000
 kld_err: 0.01
 kld_z: 0.99
-update_min_d: 0.1
-update_min_a: 0.1
+update_min_d: 0.01
+update_min_a: 0.01
 resample_interval: 2
 transform_tolerance: 0.1
 recovery_alpha_slow: 0.0
@@ -38,9 +38,9 @@ laser_likelihood_max_dist: 2.0
 laser_model_type: 'likelihood_field'
 # odom parameters
 odom_model_type: "diff"
-odom_alpha1: 0.2
-odom_alpha2: 0.2
-odom_alpha3: 0.02
-odom_alpha4: 0.2
+odom_alpha1: 10.0
+odom_alpha2: 10.0
+odom_alpha3: 0.2
+odom_alpha4: 10.0
 odom_alpha5: 0.2
 tf_broadcast: false
diff --git a/config/adc_rosnav/costmap/common_params.yaml b/config/adc_rosnav/costmap/common_params.yaml
index 9d3714b..338f281 100644
--- a/config/adc_rosnav/costmap/common_params.yaml
+++ b/config/adc_rosnav/costmap/common_params.yaml
@@ -34,8 +34,8 @@ obstacle_layer:
     min_obstacle_height: -0.2,
     max_obstacle_height: 1.0,
     expected_update_rate: 1,
-    obstacle_range: 30.0,
-    raytrace_range: 40.0
+    obstacle_range: 5.0,
+    raytrace_range: 10.0
   }
 
 inflation_layer:
diff --git a/config/adc_rosnav/local_planner/ackermann_params.yaml b/config/adc_rosnav/local_planner/ackermann_params.yaml
index 0286e32..847ec77 100644
--- a/config/adc_rosnav/local_planner/ackermann_params.yaml
+++ b/config/adc_rosnav/local_planner/ackermann_params.yaml
@@ -1,47 +1,48 @@
 base_local_planner: "AckermannPlannerROS"
 
 AckermannPlannerROS:
-  max_sim_time: 3.0
-  min_sim_time: 1.0
-  sim_granularity: 0.2
-  angular_sim_granularity: 0.02
+  max_sim_time: 1.75
+  min_sim_time: 1.75
+  sim_granularity: 0.05
+  angular_sim_granularity: 0.01
 
   path_distance_bias: 50.0
   goal_distance_bias: 10.0
   occdist_scale: 0.05
 
-#  stop_time_buffer: 
   oscillation_reset_dist: 0.002
   oscillation_reset_angle: 0.001
 
-#  forward_point_distance:
-
-#  scaling_speed:
-#  max_scaling_factor:
-
   trans_vel_samples: 31
   steer_angle_samples: 21
+  angular_vel_samples: 21
+  use_steer_angle_cmd: true
 
   prune_plan: true
   xy_goal_tolerance: 0.1
-  yaw_goal_tolerance: 0.5
+  yaw_goal_tolerance: 0.2
   trans_stopped_vel: 0.1
   rot_stopped_vel: 0.1
 
   restore_defaults: false
 
   max_trans_vel: 1.0
-  min_trans_vel: 0.11
-  max_trans_acc: 0.2
-  max_steer_angle: 0.5
-  min_steer_angle: -0.5
+  min_trans_vel: 0.0
+  max_trans_acc: 0.5
+  max_steer_angle: 0.46
+  min_steer_angle: -0.46
   max_steer_vel: 0.3
   min_steer_vel: -0.3
-  max_steer_acc: 1.0
+  max_steer_acc: 5.0
+  max_angular_vel: 0.5
+  min_angular_vel: -0.5
   axis_distance: 0.36
   wheel_distance: 0.265
   wheel_radius: 0.05
 
+  use_trans_vel_deadzone: True
+  trans_vel_deadzone: 0.1
+
   split_ignore_length: 0.1
 
   cmd_vel_avg: 1
@@ -49,5 +50,5 @@ AckermannPlannerROS:
 
   planner_patience: 5
 
-  hdiff_scale: 0.5
+  hdiff_scale: 1.0
   heading_points: 8
diff --git a/launch/adc_ar_detector.launch b/launch/adc_ar_detector.launch
index 4c7e016..b7c0f37 100644
--- a/launch/adc_ar_detector.launch
+++ b/launch/adc_ar_detector.launch
@@ -1,18 +1,39 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <launch>
-  <arg name="car_name"     default="adc_car"/>
-  <arg name="marker_size"  default="5.0"/>
+  <arg name="car_name"               default="adc_car"/>
+  <arg name="output"                 default="screen"/>
+  <arg name="launch_prefix"          default=""/>
+  <arg name="marker_size"            default="5.0"/>
+  <arg name="marker_margin"          default="1.0"/>
+  <arg name="output"                 default="$(arg output)"/>
+  <arg name="launch_prefix"          default="$(arg launch_prefix)"/>
+  <arg name="marker_size"            default="5.0"/>
+  <arg name="marker_margin"          default="1.0"/>
+  <arg name="basler_roi_config_file" default="$(find iri_adc_launch)/config/adc_common/basler_roi_config.yaml"/>
+
+  <include file="$(find iri_image_roi)/launch/node.launch">
+    <arg name="node_name"              value="iri_image_roi_basler"/>
+    <arg name="output"                 value="$(arg output)"/>
+    <arg name="launch_prefix"          value="$(arg launch_prefix)"/>
+    <arg name="config_file"            value="$(arg basler_roi_config_file)"/>
+    <arg name="image_raw_in_topic"     value="/$(arg car_name)/sensors/basler_camera/image_raw"/>
+    <arg name="camera_info_in_topic"   value="/$(arg car_name)/sensors/basler_camera/camera_info"/>
+    <arg name="image_raw_out_topic"    value="/$(arg car_name)/sensors/basler_camera_roi/image_raw"/>
+    <arg name="camera_info_out_topic"  value="/$(arg car_name)/sensors/basler_camera_roi/camera_info"/>
+  </include>
 
   <node name="ar_track_alvar" 
         pkg="ar_track_alvar" 
         type="individualMarkersNoKinect" 
         respawn="false" 
-        output="screen">
+        output="$(arg output)">
     <param name="marker_size"           type="double" value="$(arg marker_size)" />
+    <param name="marker_margin"         type="double" value="$(arg marker_margin)" />
     <param name="max_new_marker_error"  type="double" value="0.08" />
     <param name="max_track_error"       type="double" value="0.2" />
+    <param name="max_frequency"         type="double" value="30.0" />
     <param name="output_frame"          type="string" value="$(arg car_name)/front_camera_uvc_camera_optical" />
-    <remap from="/camera_image"  to="$(arg car_name)/sensors/basler_camera/image_raw" />
-    <remap from="/camera_info"   to="$(arg car_name)/sensors/basler_camera/camera_info" />
+    <remap from="/camera_image"  to="$(arg car_name)/sensors/basler_camera_roi/image_raw" />
+    <remap from="/camera_info"   to="$(arg car_name)/sensors/basler_camera_roi/camera_info" />
   </node>
 </launch>
diff --git a/launch/adc_ar_detector_inverse.launch b/launch/adc_ar_detector_inverse.launch
index 90d0c55..62a2761 100644
--- a/launch/adc_ar_detector_inverse.launch
+++ b/launch/adc_ar_detector_inverse.launch
@@ -1,12 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <launch>
-  <arg name="car_name"     default="adc_car"/>
-  <arg name="marker_size"   default="5.0"/>
-  <arg name="marker_margin" default="1.0"/>
+  <arg name="car_name"               default="adc_car"/>
+  <arg name="output"                 default="screen"/>
+  <arg name="launch_prefix"          default=""/>
+  <arg name="marker_size"            default="5.0"/>
+  <arg name="marker_margin"          default="1.0"/>
+  <arg name="basler_roi_config_file" default="$(find iri_adc_launch)/config/adc_common/basler_roi_config.yaml"/>
+
+  <include file="$(find iri_image_roi)/launch/node.launch">
+    <arg name="node_name"              value="iri_image_roi_basler"/>
+    <arg name="output"                 value="$(arg output)"/>
+    <arg name="launch_prefix"          value="$(arg launch_prefix)"/>
+    <arg name="config_file"            value="$(arg basler_roi_config_file)"/>
+    <arg name="image_raw_in_topic"     value="/$(arg car_name)/sensors/basler_camera/image_raw"/>
+    <arg name="camera_info_in_topic"   value="/$(arg car_name)/sensors/basler_camera/camera_info"/>
+    <arg name="image_raw_out_topic"    value="/$(arg car_name)/sensors/basler_camera_roi/image_raw"/>
+    <arg name="camera_info_out_topic"  value="/$(arg car_name)/sensors/basler_camera_roi/camera_info"/>
+  </include>
 
   <include file="$(find iri_image_inverter)/launch/node.launch">
     <arg name="node_name"       value="iri_image_inverter_basler"/>
-    <arg name="image_in_topic"  value="/$(arg car_name)/sensors/basler_camera/image_raw"/>
+    <arg name="output"          value="$(arg output)"/>
+    <arg name="launch_prefix"   value="$(arg launch_prefix)"/>
+    <arg name="image_in_topic"  value="/$(arg car_name)/sensors/basler_camera_roi/image_raw"/>
     <arg name="image_out_topic" value="/$(arg car_name)/sensors/basler_camera_inverse/image_raw"/>
   </include>
   
@@ -14,11 +30,12 @@
         pkg="ar_track_alvar" 
         type="individualMarkersNoKinect" 
         respawn="false" 
-        output="screen">
+        output="$(arg output)">
     <param name="marker_size"           type="double" value="$(arg marker_size)" />
     <param name="marker_margin"         type="double" value="$(arg marker_margin)" />
     <param name="max_new_marker_error"  type="double" value="0.08" />
     <param name="max_track_error"       type="double" value="0.2" />
+    <param name="max_frequency"         type="double" value="30.0" />
     <param name="output_frame"          type="string" value="$(arg car_name)/front_camera_uvc_camera_optical" />
     <remap from="/camera_image"  to="$(arg car_name)/sensors/basler_camera_inverse/image_raw" />
     <remap from="/camera_info"   to="$(arg car_name)/sensors/basler_camera_inverse/camera_info" />
diff --git a/launch/adc_landmarks_localization.launch b/launch/adc_landmarks_localization.launch
new file mode 100644
index 0000000..45dedff
--- /dev/null
+++ b/launch/adc_landmarks_localization.launch
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<launch>
+  <arg name="car_name"        default="adc_car"/>
+  <arg name="output"          default="screen"/>
+  <arg name="launch_prefix"   default=""/>
+  <arg name="dr"              default="false"/>
+
+  <!--Ar track alvar parameters-->
+  <arg name="marker_size"     default="4.8"/>
+  <arg name="ar_max_freq"     default="30.0"/>
+
+  <!-- Img ROI parameters -->
+  <arg name="front_roi_config_file" default="$(find iri_adc_launch)/config/adc_common/basler_roi_config.yaml"/>
+  <arg name="rear_roi_config_file"  default="$(find iri_adc_launch)/config/adc_common/delock_roi_config.yaml"/>
+
+  <!-- Global localization parameters-->
+  <arg name="car_x"                       default="0.0"/>
+  <arg name="car_y"                       default="0.0"/>
+  <arg name="car_yaw"                     default="0.0"/>
+  <arg name="global_ekf_config_file"      default="$(find iri_adc_launch)/config/adc_common/adc_global_ekf_odom_imu_amcl.yaml"/>
+  <arg name="map_path"                    default="$(find iri_adc_launch)/maps"/>
+  <arg name="map_name"                    default="adc_map" />
+  <arg name="amcl_config"                 default="$(find iri_adc_launch)/config/adc_rosnav/amcl_no_tf.yaml"/>
+  <arg name="landmarks_config_dir"        default="$(find iri_adc_launch)/config/adc_common/landmarks_loc"/>
+  <arg name="landmarks_config_file"       default="amcl_mapping.yaml"/>
+  <arg name="landmarks_data_dir"          default="$(find iri_adc_launch)/data/sample_parking"/>
+  <arg name="landmarks_file"              default="landmarks.txt"/>
+  <arg name="use_rear_camera_loc"         default="false"/>
+
+  <group ns="$(arg car_name)">
+    <!-- Front image ROI -->
+    <include file="$(find iri_image_roi)/launch/node.launch">
+      <arg name="node_name"              value="front_iri_image_roi"/>
+      <arg name="output"                 value="$(arg output)"/>
+      <arg name="launch_prefix"          value="$(arg launch_prefix)"/>
+      <arg name="config_file"            value="$(arg front_roi_config_file)"/>
+      <arg name="image_raw_in_topic"     value="/$(arg car_name)/sensors/basler_camera/image_raw"/>
+      <arg name="camera_info_in_topic"   value="/$(arg car_name)/sensors/basler_camera/camera_info"/>
+      <arg name="image_raw_out_topic"    value="/$(arg car_name)/sensors/basler_camera_roi/image_raw"/>
+      <arg name="camera_info_out_topic"  value="/$(arg car_name)/sensors/basler_camera_roi/camera_info"/>
+  </include>
+
+  <!-- Front image inverter -->
+    <include file="$(find iri_image_inverter)/launch/node.launch">
+      <arg name="node_name"         value="front_iri_image_inverter"/>
+      <arg name="output"            value="$(arg output)"/>
+      <arg name="launch_prefix"     value="$(arg launch_prefix)"/>
+      <arg name="image_in_topic"    value="/$(arg car_name)/sensors/basler_camera_roi/image_raw"/>
+      <arg name="image_out_topic"   value="/$(arg car_name)/sensors/basler_camera_inverse/image_raw"/>
+    </include>
+
+    <!-- Front ar track_alvar -->
+    <node name="front_ar_track_alvar" 
+          pkg="ar_track_alvar" 
+          type="individualMarkersNoKinect" 
+          respawn="false" 
+          output="screen">
+      <param name="marker_size"           type="double" value="$(arg marker_size)" />
+      <param name="max_frequency"         type="double" value="$(arg ar_max_freq)" />
+      <param name="max_new_marker_error"  type="double" value="0.08" />
+      <param name="max_track_error"       type="double" value="0.2" />
+      <param name="marker_margin"         type="double" value="1.0" />
+      <param name="output_frame"          type="string" value="$(arg car_name)/front_camera_uvc_camera_optical" />
+      <remap from="/$(arg car_name)/camera_image"     to="/$(arg car_name)/sensors/basler_camera_inverse/image_raw" />
+      <remap from="/$(arg car_name)/camera_info"      to="/$(arg car_name)/sensors/basler_camera_inverse/camera_info" />
+      <remap from="/$(arg car_name)/ar_pose_marker"   to="/$(arg car_name)/front_ar_pose_marker" />
+    </node>
+
+    <!-- Front ar tag filter -->
+    <include file="$(find iri_adc_tag_localization_filter)/launch/node.launch">
+      <arg name="node_name"                value="front_iri_adc_tag_localization_filter"/>
+      <arg name="output"                   value="$(arg output)"/>
+      <arg name="launch_prefix"            value="$(arg launch_prefix)"/>
+      <arg name="config_file"              value="$(find iri_adc_launch)/config/adc_common/ar_tag_loc_filter.yaml"/>
+      <arg name="robot_name"               value="$(arg car_name)"/>
+      <arg name="ar_input_topic"           value="/$(arg car_name)/front_ar_pose_marker"/>
+      <arg name="features_output_topic"    value="/$(arg car_name)/front_features"/>
+    </include>
+    
+
+    <group if="$(arg use_rear_camera_loc)">
+      <!-- Rear image ROI -->
+      <include file="$(find iri_image_roi)/launch/node.launch">
+        <arg name="node_name"              value="rear_iri_image_roi"/>
+        <arg name="output"                 value="$(arg output)"/>
+        <arg name="launch_prefix"          value="$(arg launch_prefix)"/>
+        <arg name="config_file"            value="$(arg rear_roi_config_file)"/>
+        <arg name="image_raw_in_topic"     value="/$(arg car_name)/sensors/delock_camera/image_raw"/>
+        <arg name="camera_info_in_topic"   value="/$(arg car_name)/sensors/delock_camera/camera_info"/>
+        <arg name="image_raw_out_topic"    value="/$(arg car_name)/sensors/delock_camera_roi/image_raw"/>
+        <arg name="camera_info_out_topic"  value="/$(arg car_name)/sensors/delock_camera_roi/camera_info"/>
+      </include>
+
+      <!-- Rear image inverter -->
+      <include file="$(find iri_image_inverter)/launch/node.launch">
+        <arg name="node_name"         value="rear_iri_image_inverter"/>
+        <arg name="output"            value="$(arg output)"/>
+        <arg name="launch_prefix"     value="$(arg launch_prefix)"/>
+        <arg name="image_in_topic"    value="/$(arg car_name)/sensors/delock_camera_roi/image_raw"/>
+        <arg name="image_out_topic"   value="/$(arg car_name)/sensors/delock_camera_inverse/image_raw"/>
+      </include>
+
+      <!--rear ar track_alvar -->
+      <node name="rear_ar_track_alvar" 
+            pkg="ar_track_alvar" 
+            type="individualMarkersNoKinect" 
+            respawn="false" 
+            output="screen">
+        <param name="marker_size"           type="double" value="$(arg marker_size)"/>
+        <param name="max_frequency"         type="double" value="$(arg ar_max_freq)"/>
+        <param name="max_new_marker_error"  type="double" value="0.08" />
+        <param name="max_track_error"       type="double" value="0.2" />
+        <param name="marker_margin"         type="double" value="1.0" />
+        <param name="output_frame"          type="string" value="$(arg car_name)/rear_camera_uvc_camera_optical" />
+        <remap from="/$(arg car_name)/camera_image"     to="/$(arg car_name)/sensors/delock_camera_inverse/image_raw" />
+        <remap from="/$(arg car_name)/camera_info"      to="/$(arg car_name)/sensors/delock_camera_inverse/camera_info" />
+        <remap from="/$(arg car_name)/ar_pose_marker"   to="/$(arg car_name)/rear_ar_pose_marker" />
+      </node>
+
+      <!-- Rear ar tag filter -->
+      <include file="$(find iri_adc_tag_localization_filter)/launch/node.launch">
+        <arg name="node_name"                value="rear_iri_adc_tag_localization_filter"/>
+        <arg name="output"                   value="$(arg output)"/>
+        <arg name="launch_prefix"            value="$(arg launch_prefix)"/>
+        <arg name="config_file"              value="$(find iri_adc_launch)/config/adc_common/ar_tag_loc_filter.yaml"/>
+        <arg name="robot_name"               value="$(arg car_name)"/>
+        <arg name="ar_input_topic"           value="/$(arg car_name)/rear_ar_pose_marker"/>
+        <arg name="features_output_topic"    value="/$(arg car_name)/rear_features"/>
+      </include>
+    </group>
+
+    <include file="$(find iri_adc_landmarks_slam_solver)/launch/node.launch">
+      <arg name="node_name"                  value="iri_adc_landmarks_slam_solver"/>
+      <arg name="output"                     value="$(arg output)"/>
+      <arg name="launch_prefix"              value="$(arg launch_prefix)"/>
+      <arg name="config_file"                value="$(arg landmarks_config_dir)/$(arg landmarks_config_file)"/>
+      <arg name="landmarks_map_file"         value="$(arg landmarks_data_dir)/$(arg landmarks_file)"/>
+      <arg name="estimated_pose_topic_name"  value="/$(arg car_name)/estimated_pose"/>
+      <arg name="initialpose_topic_name"     value="/$(arg car_name)/initialpose"/>
+      <arg name="front_features_topic_name"  value="/$(arg car_name)/front_features"/>
+      <arg name="rear_features_topic_name"   value="/$(arg car_name)/rear_features"/>
+      <arg name="initial_pose_x"     value="$(arg car_x)"/>
+      <arg name="initial_pose_y"     value="$(arg car_y)"/>
+      <arg name="initial_pose_yaw"   value="$(arg car_yaw)"/>
+    </include>
+  </group>
+
+  <node name="rqt_reconfigure_iri_adc_tag_localization_filter"
+        pkg ="rqt_reconfigure"
+        type="rqt_reconfigure"
+        if  ="$(arg dr)"
+        args="iri_adc_tag_localization_filter">
+  </node>
+</launch>
diff --git a/rviz/localization_global.rviz b/rviz/localization_global.rviz
index 13b8fd3..f43a004 100644
--- a/rviz/localization_global.rviz
+++ b/rviz/localization_global.rviz
@@ -879,4 +879,4 @@ Window Geometry:
     collapsed: false
   Width: 1853
   X: 67
-  Y: 27
+  Y: 27
\ No newline at end of file
diff --git a/rviz/nav.rviz b/rviz/nav.rviz
index 4230645..81ad3b7 100644
--- a/rviz/nav.rviz
+++ b/rviz/nav.rviz
@@ -6,13 +6,15 @@ Panels:
       Expanded:
         - /Global Options1
         - /Models1
+        - /Sensors1
         - /Sensors1/Sonar1
+        - /Sensors1/outliers_scan1
         - /Odometry1/(red)OdomEncoders(1)1/Shape1
         - /Odometry1/(green)OdomCombinedLocal(1)1/Shape1
         - /Odometry1/(green)OdomCombinedLocal1/Shape1
         - /Nav1
       Splitter Ratio: 0.637188196182251
-    Tree Height: 641
+    Tree Height: 794
   - Class: rviz/Selection
     Name: Selection
   - Class: rviz/Tool Properties
@@ -306,6 +308,66 @@ Visualization Manager:
           Use Fixed Frame: true
           Use rainbow: true
           Value: true
+        - Alpha: 1
+          Autocompute Intensity Bounds: true
+          Autocompute Value Bounds:
+            Max Value: 10
+            Min Value: -10
+            Value: true
+          Axis: Z
+          Channel Name: intensity
+          Class: rviz/LaserScan
+          Color: 117; 80; 123
+          Color Transformer: FlatColor
+          Decay Time: 0
+          Enabled: true
+          Invert Rainbow: false
+          Max Color: 255; 255; 255
+          Max Intensity: 0
+          Min Color: 0; 0; 0
+          Min Intensity: 0
+          Name: inliers_scan
+          Position Transformer: XYZ
+          Queue Size: 10
+          Selectable: true
+          Size (Pixels): 3
+          Size (m): 0.009999999776482582
+          Style: Points
+          Topic: /adc_car/sensors/inliers_scan
+          Unreliable: false
+          Use Fixed Frame: true
+          Use rainbow: true
+          Value: true
+        - Alpha: 1
+          Autocompute Intensity Bounds: true
+          Autocompute Value Bounds:
+            Max Value: 10
+            Min Value: -10
+            Value: true
+          Axis: Z
+          Channel Name: intensity
+          Class: rviz/LaserScan
+          Color: 193; 125; 17
+          Color Transformer: FlatColor
+          Decay Time: 0
+          Enabled: true
+          Invert Rainbow: false
+          Max Color: 193; 125; 17
+          Max Intensity: 0
+          Min Color: 0; 0; 0
+          Min Intensity: 0
+          Name: outliers_scan
+          Position Transformer: XYZ
+          Queue Size: 10
+          Selectable: true
+          Size (Pixels): 3
+          Size (m): 0.009999999776482582
+          Style: Points
+          Topic: /adc_car/sensors/outliers_scan
+          Unreliable: false
+          Use Fixed Frame: true
+          Use rainbow: true
+          Value: true
         - Alpha: 0.25
           Class: rviz_plugin_tutorials/Imu
           Color: 204; 51; 204
@@ -796,16 +858,16 @@ Visualization Manager:
   Views:
     Current:
       Class: rviz/Orbit
-      Distance: 27.908039093017578
+      Distance: 20.100095748901367
       Enable Stereo Rendering:
         Stereo Eye Separation: 0.05999999865889549
         Stereo Focal Distance: 1
         Swap Stereo Eyes: false
         Value: false
       Focal Point:
-        X: 1.1276541948318481
-        Y: 2.8684005737304688
-        Z: -1.8374912738800049
+        X: 3.2848408222198486
+        Y: 2.6993188858032227
+        Z: -1.6742990016937256
       Focal Shape Fixed Size: false
       Focal Shape Size: 0.05000000074505806
       Invert Z Axis: false
@@ -821,10 +883,10 @@ Window Geometry:
     collapsed: false
   FrontImage:
     collapsed: false
-  Height: 872
+  Height: 1025
   Hide Left Dock: false
   Hide Right Dock: false
-  QMainWindow State: 000000ff00000000fd0000000400000000000001560000030efc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000030e000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006501000002520000014e000000000000000000000001000001850000030efc020000000cfb0000001400460072006f006e00740049006d006100670065010000003d000001930000001600fffffffb0000001200520065006100720049006d00610067006501000001d6000001750000001600fffffffb0000001400460072006f006e00740049006d006100670065010000003d000001530000000000000000fb0000001200520065006100720049006d0061006700650100000196000001b50000000000000000fb0000001600530052003300300030005f0069006d0061006700650000000028000000b40000000000000000fb00000014006700700073005f00630061006d0065007200610000000028000001170000000000000000fb00000024004c0069006e00650044006500740065006300740069006f006e0049006d0061006700650000000028000002360000000000000000fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000030e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b20000000000000000fb000000220072006500610072005f00630061006d006500720061005f0049006d00610067006501000003b2000000160000000000000000fb0000002400660072006f006e0074005f00630061006d006500720061005f0049006d00610067006501000003ce0000001600000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000064f0000003efc0100000002fb0000000800540069006d006500000000000000064f000004f300fffffffb0000000800540069006d00650100000000000004500000000000000000000002760000030e00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+  QMainWindow State: 000000ff00000000fd000000040000000000000156000003a7fc0200000009fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000003a7000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261fb0000000a0049006d00610067006501000002520000014e00000000000000000000000100000185000003a7fc020000000cfb0000001400460072006f006e00740049006d006100670065010000003d000001e20000001600fffffffb0000001200520065006100720049006d0061006700650100000225000001bf0000001600fffffffb0000001400460072006f006e00740049006d006100670065010000003d000001530000000000000000fb0000001200520065006100720049006d0061006700650100000196000001b50000000000000000fb0000001600530052003300300030005f0069006d0061006700650000000028000000b40000000000000000fb00000014006700700073005f00630061006d0065007200610000000028000001170000000000000000fb00000024004c0069006e00650044006500740065006300740069006f006e0049006d0061006700650000000028000002360000000000000000fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000030e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b20000000000000000fb000000220072006500610072005f00630061006d006500720061005f0049006d00610067006501000003b2000000160000000000000000fb0000002400660072006f006e0074005f00630061006d006500720061005f0049006d00610067006501000003ce0000001600000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000064f0000003efc0100000002fb0000000800540069006d006500000000000000064f000004f300fffffffb0000000800540069006d0065010000000000000450000000000000000000000456000003a700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
   RearImage:
     collapsed: false
   Selection:
@@ -835,6 +897,6 @@ Window Geometry:
     collapsed: false
   Views:
     collapsed: false
-  Width: 1373
+  Width: 1853
   X: 67
   Y: 27
-- 
GitLab