From 608e2380f35f06a688b98abb5dc93aeaa1cc00af Mon Sep 17 00:00:00 2001
From: jvallve <jvallve@iri.upc.edu>
Date: Fri, 8 Jul 2022 11:23:02 +0200
Subject: [PATCH] [skip ci] gtest_problem ok

---
 schema/Prior.schema                           |   5 +-
 schema/problem/Problem.schema                 |   6 +-
 schema/processor/ProcessorBase.schema         |  12 --
 schema/processor/ProcessorSequence.schema     |  13 ++
 schema/sensor/SensorBase.schema               |  14 +-
 schema/sensor/SensorSequence.schema           |  13 ++
 schema/solver/SolverCeres.schema              |   6 +-
 schema/solver/SolverManager.schema            |   4 +-
 schema/tree_manager/None.schema               |   1 +
 src/problem/problem.cpp                       |   8 +-
 test/CMakeLists.txt                           |   3 +
 test/gtest_schema.cpp                         |  39 ++++++
 test/yaml/params1.yaml                        |  81 ++++++------
 test/yaml/params2.yaml                        |  75 ++++++-----
 test/yaml/params3.yaml                        |  43 +++---
 test/yaml/params_basic.yaml                   |  67 +++++-----
 test/yaml/params_problem_autosetup.yaml       | 109 ++++++++--------
 .../yaml/params_problem_autosetup_no_map.yaml | 105 ++++++++-------
 test/yaml/params_problem_odom_3d.yaml         |  91 +++++++------
 test/yaml/params_tree_manager1.yaml           | 115 ++++++++--------
 test/yaml/params_tree_manager2.yaml           | 115 ++++++++--------
 .../params_tree_manager_sliding_window1.yaml  | 107 ++++++++-------
 .../params_tree_manager_sliding_window2.yaml  | 107 ++++++++-------
 ...ree_manager_sliding_window_dual_rate1.yaml |  29 ++---
 ...ree_manager_sliding_window_dual_rate2.yaml |  41 +++---
 ...ree_manager_sliding_window_dual_rate3.yaml | 123 +++++++++---------
 ...ger_sliding_window_dual_rate_baseline.yaml | 109 ++++++++--------
 27 files changed, 737 insertions(+), 704 deletions(-)
 create mode 100644 schema/processor/ProcessorSequence.schema
 create mode 100644 schema/sensor/SensorSequence.schema
 create mode 100644 schema/tree_manager/None.schema
 create mode 100644 test/gtest_schema.cpp

diff --git a/schema/Prior.schema b/schema/Prior.schema
index 8cf11e634..5556861da 100644
--- a/schema/Prior.schema
+++ b/schema/Prior.schema
@@ -12,10 +12,7 @@ mode:
   type: string
   yaml_type: scalar
   mandatory: true
-  options:
-    - "fix"
-    - "factor"
-    - "initial_guess"
+  options: ["fix", "factor", "initial_guess"]
   doc: The prior mode can be 'factor' to add an absolute factor (requires 'noise_std'), 'fix' to set the values constant or 'initial_guess' to just set the values
 dynamic:
   type: bool
diff --git a/schema/problem/Problem.schema b/schema/problem/Problem.schema
index 587f7bdb1..12519e7b9 100644
--- a/schema/problem/Problem.schema
+++ b/schema/problem/Problem.schema
@@ -1,6 +1,7 @@
 problem:
   tree_manager:
     type: derived
+    base: TreeManagerBase.schema
     yaml_type: scalar
     mandatory: true
     doc: Tree manager parameters
@@ -18,18 +19,19 @@ problem:
   #prior:
 map:
   type: derived
+  base: Map.schema
   yaml_type: scalar
   mandatory: false
   doc: The map used in the wolf problem.
-solver:
-  follow: Solver.schema
 sensors:
   yaml_type: sequence
   type: derived
+  base: SensorSequence.schema
   mandatory: true
   doc: A sequence of all the sensors.
 processors:
   yaml_type: sequence
   type: derived
+  base: ProcessorSequence.schema
   mandatory: true
   doc: A sequence of all the processors.
diff --git a/schema/processor/ProcessorBase.schema b/schema/processor/ProcessorBase.schema
index d5dcf3694..0d33f7357 100644
--- a/schema/processor/ProcessorBase.schema
+++ b/schema/processor/ProcessorBase.schema
@@ -4,18 +4,6 @@ name:
   yaml_type: scalar
   doc: The processor's name. It has to be unique.
 
-type:
-  mandatory: true
-  type: string
-  yaml_type: scalar
-  doc: The processor's class name.
-
-plugin:
-  mandatory: true
-  type: string
-  yaml_type: scalar
-  doc: The name of the wolf plugin where the processor is implemented.
-
 time_tolerance:
   mandatory: true
   type: double
diff --git a/schema/processor/ProcessorSequence.schema b/schema/processor/ProcessorSequence.schema
new file mode 100644
index 000000000..a9e6b7512
--- /dev/null
+++ b/schema/processor/ProcessorSequence.schema
@@ -0,0 +1,13 @@
+follow: ProcessorBase.schema
+
+type:
+  mandatory: true
+  type: string
+  yaml_type: scalar
+  doc: The processor's class name.
+
+plugin:
+  mandatory: true
+  type: string
+  yaml_type: scalar
+  doc: The name of the wolf plugin where the processor is implemented.
\ No newline at end of file
diff --git a/schema/sensor/SensorBase.schema b/schema/sensor/SensorBase.schema
index 07ebae6f5..f06ab44a7 100644
--- a/schema/sensor/SensorBase.schema
+++ b/schema/sensor/SensorBase.schema
@@ -2,16 +2,4 @@ name:
   mandatory: true
   type: string
   yaml_type: scalar
-  doc: The sensor's name. It has to be unique.
-
-type:
-  mandatory: true
-  type: string
-  yaml_type: scalar
-  doc: The sensor's class name.
-  
-plugin:
-  mandatory: true
-  type: string
-  yaml_type: scalar
-  doc: The name of the wolf plugin where the sensor is implemented.
\ No newline at end of file
+  doc: The sensor's name. It has to be unique.
\ No newline at end of file
diff --git a/schema/sensor/SensorSequence.schema b/schema/sensor/SensorSequence.schema
new file mode 100644
index 000000000..832d665f2
--- /dev/null
+++ b/schema/sensor/SensorSequence.schema
@@ -0,0 +1,13 @@
+follow: SensorBase.schema
+
+type:
+  mandatory: true
+  type: string
+  yaml_type: scalar
+  doc: The sensor's class name.
+  
+plugin:
+  mandatory: true
+  type: string
+  yaml_type: scalar
+  doc: The name of the wolf plugin where the sensor is implemented.
\ No newline at end of file
diff --git a/schema/solver/SolverCeres.schema b/schema/solver/SolverCeres.schema
index 81663b678..c262f81cb 100644
--- a/schema/solver/SolverCeres.schema
+++ b/schema/solver/SolverCeres.schema
@@ -25,18 +25,18 @@ function_tolerance:
   mandatory: true
   type: double
   yaml_type: scalar
-  doc: Function tolerance. Convergence criterion. Typical value: 1e-8
+  doc: "Function tolerance. Convergence criterion. Typical value: 1e-8"
 gradient_tolerance:
   mandatory: true
   type: double
   yaml_type: scalar
-  doc: gradient tolerance. Convergence criterion. Typical value: 1e-8
+  doc: "Gradient tolerance. Convergence criterion. Typical value: 1e-8"
 num_threads:
   mandatory: true
   type: unsigned int
   options: [1, 2, 3, 4]
   yaml_type: scalar
-  doc: threads used by ceres.
+  doc: Amount of hreads used by ceres.
 use_nonmonotonic_steps:
   mandatory: false
   default: false
diff --git a/schema/solver/SolverManager.schema b/schema/solver/SolverManager.schema
index 5386ee1ae..0bb50994f 100644
--- a/schema/solver/SolverManager.schema
+++ b/schema/solver/SolverManager.schema
@@ -8,7 +8,7 @@ verbose:
   type: int
   yaml_type: scalar
   options: [0, 1, 2]
-  doc: Verbosity of the solver. 0: Nothing, 1: Brief report, 2: Full report.
+  doc: "Verbosity of the solver. 0: Nothing, 1: Brief report, 2: Full report."
 compute_cov:
   mandatory: true
   type: bool
@@ -20,7 +20,7 @@ cov_enum:
   type: int
   options: [0, 1, 2, 3, 4, 5]
   yaml_type: scalar
-  doc: Which covariance matrix blocks have to be computed. 0: All blocks and all cross-covariances. 1: All marginals. 2: Marginals of landmarks and current robot pose plus cross covariances of current robot and all landmarks. 3: Last frame P and V. 4: Last frame P, O, V and T. 5: Last frame P and T.
+  doc: "Which covariance matrix blocks have to be computed. 0: All blocks and all cross-covariances. 1: All marginals. 2: Marginals of landmarks and current robot pose plus cross covariances of current robot and all landmarks. 3: Last frame P and V. 4: Last frame P, O, V and T. 5: Last frame P and T."
 cov_period:
   mandatory: true
   type: double
diff --git a/schema/tree_manager/None.schema b/schema/tree_manager/None.schema
new file mode 100644
index 000000000..355f0ebec
--- /dev/null
+++ b/schema/tree_manager/None.schema
@@ -0,0 +1 @@
+follow: TreeManagerBase.schema
\ No newline at end of file
diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp
index 63b8a78f5..d6f838d4f 100644
--- a/src/problem/problem.cpp
+++ b/src/problem/problem.cpp
@@ -149,8 +149,12 @@ ProblemPtr Problem::autoSetup(const std::string& _input_yaml_file, const std::ve
     WOLF_INFO("Loading tree manager parameters");
     YAML::Node tree_manager_node = problem_node["tree_manager"];
     std::string tree_manager_type = tree_manager_node["type"].as<std::string>();
-    problem->setTreeManager(FactoryTreeManager::create(tree_manager_type, tree_manager_node));
-
+    if (tree_manager_type != "none" and 
+        tree_manager_type != "None" and 
+        tree_manager_type != "NONE")
+    {
+        problem->setTreeManager(FactoryTreeManager::create(tree_manager_type, tree_manager_node));
+    }
     // TODO: Prior -- first keyframe 
     // std::string prior_mode = _server.getParam<std::string>("problem/prior/mode");
     // assert((prior_mode == "nothing" || prior_mode == "initial_guess" || prior_mode == "fix" || prior_mode == "factor") && "wrong _mode value, it should be: 'nothing', 'initial_guess', 'fix' or 'factor'");
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index ad07f3044..c2c6857f7 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -214,6 +214,9 @@ wolf_add_gtest(gtest_tree_manager gtest_tree_manager.cpp)
 # wolf_add_gtest(gtest_processor_tracker_landmark_dummy gtest_processor_tracker_landmark_dummy.cpp)
 # target_link_libraries(gtest_processor_tracker_landmark_dummy PUBLIC dummy)
 
+# Schema test
+wolf_add_gtest(gtest_schema gtest_schema.cpp)
+
 # # SensorDiffDriveSelfcalib class test
 # wolf_add_gtest(gtest_sensor_diff_drive gtest_sensor_diff_drive.cpp)
 
diff --git a/test/gtest_schema.cpp b/test/gtest_schema.cpp
new file mode 100644
index 000000000..7622f578d
--- /dev/null
+++ b/test/gtest_schema.cpp
@@ -0,0 +1,39 @@
+//--------LICENSE_START--------
+//
+// Copyright (C) 2020,2021,2022 Institut de Robòtica i Informàtica Industrial, CSIC-UPC.
+// Authors: Joan Solà Ortega (jsola@iri.upc.edu)
+// All rights reserved.
+//
+// This file is part of WOLF
+// WOLF is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with this program.  If not, see <http://www.gnu.org/licenses/>.
+//
+//--------LICENSE_END--------
+#include "core/utils/utils_gtest.h"
+#include "core/internal/config.h"
+#include "yaml-schema-cpp/yaml_schema.hpp"
+
+using namespace yaml_schema_cpp;
+
+std::string wolf_root = _WOLF_ROOT_DIR;
+
+TEST(Schema, validate_all_schemas)
+{
+    ASSERT_TRUE(validateAllSchemas({wolf_root}));
+}
+
+int main(int argc, char **argv)
+{
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}
diff --git a/test/yaml/params1.yaml b/test/yaml/params1.yaml
index 5e6431172..142e0059b 100644
--- a/test/yaml/params1.yaml
+++ b/test/yaml/params1.yaml
@@ -1,41 +1,40 @@
-config:
-  problem:
-    frame_structure: "POV"
-    dimension: 3
-  sensors: 
-    -
-      type: "ODOM 2d"
-      name: "odom"
-      plugin: "core"
-      intrinsic:
-        k_disp_to_disp: 0.1
-        k_rot_to_rot: 0.1 
-      extrinsic:
-        pose: [1,2,3]
-    -
-      type: "RANGE BEARING"
-      name: "rb"
-      plugin: "core"
-  processors:
-    -
-      type: "ODOM 2d"
-      name: "processor1"
-      sensor_name: "odom"
-      plugin: "core"
-    -
-      type: "RANGE BEARING"
-      name: "rb_processor"
-      sensor_name: "rb"
-      plugin: "core"
-    -
-      type: "ODOM 2d"
-      name: "my_proc_test"
-      sensor_name: "odom"
-      plugin: "core"
-      follow: "params3.1.yaml"
-    -
-      type: "ODOM 3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      follow: "processor_odom_3d.yaml"
+problem:
+  frame_structure: "POV"
+  dimension: 3
+sensors: 
+  -
+    type: "ODOM 2d"
+    name: "odom"
+    plugin: "core"
+    intrinsic:
+      k_disp_to_disp: 0.1
+      k_rot_to_rot: 0.1 
+    extrinsic:
+      pose: [1,2,3]
+  -
+    type: "RANGE BEARING"
+    name: "rb"
+    plugin: "core"
+processors:
+  -
+    type: "ODOM 2d"
+    name: "processor1"
+    sensor_name: "odom"
+    plugin: "core"
+  -
+    type: "RANGE BEARING"
+    name: "rb_processor"
+    sensor_name: "rb"
+    plugin: "core"
+  -
+    type: "ODOM 2d"
+    name: "my_proc_test"
+    sensor_name: "odom"
+    plugin: "core"
+    follow: "params3.1.yaml"
+  -
+    type: "ODOM 3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    follow: "processor_odom_3d.yaml"
diff --git a/test/yaml/params2.yaml b/test/yaml/params2.yaml
index 1aadb7624..38cfe68d2 100644
--- a/test/yaml/params2.yaml
+++ b/test/yaml/params2.yaml
@@ -1,38 +1,37 @@
-config:
-  problem:
-    frame_structure: "POV"
-    dimension: 2
-  sensors: 
-    -
-      type: "ODOM 2d"
-      name: "odom"
-      plugin: "core"
-      intrinsic:
-        k_disp_to_disp: 0.1
-        k_rot_to_rot: 0.1 
-      extrinsic:
-        pose: [1,2,3]
-    -
-      type: "RANGE BEARING"
-      name: "rb"
-      plugin: "core"
-  processors:
-    -
-      type: "ODOM 2d"
-      name: "processor1"
-      sensor_name: "odom"
-      plugin: "core"
-      $mymap:
-        k1: v1
-        k2: v2
-        k3: [v3,v4,v5]
-    -
-      type: "RANGE BEARING"
-      name: "rb_processor"
-      sensor_name: "rb"
-      plugin: "core"
-    -
-      type: "ODOM 2d"
-      name: "my_proc_test"
-      sensor_name: "odom"
-      plugin: "core"
+problem:
+  frame_structure: "POV"
+  dimension: 2
+sensors: 
+  -
+    type: "ODOM 2d"
+    name: "odom"
+    plugin: "core"
+    intrinsic:
+      k_disp_to_disp: 0.1
+      k_rot_to_rot: 0.1 
+    extrinsic:
+      pose: [1,2,3]
+  -
+    type: "RANGE BEARING"
+    name: "rb"
+    plugin: "core"
+processors:
+  -
+    type: "ODOM 2d"
+    name: "processor1"
+    sensor_name: "odom"
+    plugin: "core"
+    $mymap:
+      k1: v1
+      k2: v2
+      k3: [v3,v4,v5]
+  -
+    type: "RANGE BEARING"
+    name: "rb_processor"
+    sensor_name: "rb"
+    plugin: "core"
+  -
+    type: "ODOM 2d"
+    name: "my_proc_test"
+    sensor_name: "odom"
+    plugin: "core"
diff --git a/test/yaml/params3.yaml b/test/yaml/params3.yaml
index 14c6271cd..168d0d47a 100644
--- a/test/yaml/params3.yaml
+++ b/test/yaml/params3.yaml
@@ -1,22 +1,21 @@
-config:
-  problem:
-    frame_structure: "POV"
-    dimension: 2
-  sensors:
-    -
-      type: "ODOM 2d"
-      name: "odom"
-      plugin: "core"
-      intrinsic:
-        k_disp_to_disp: 0.1
-        k_rot_to_rot: 0.1
-      extrinsic:
-        pose: [1,2,3]
-  processors:
-    -
-      type: "ODOM 2d"
-      name: "my_proc_test"
-      plugin: "core"
-      sensor_name: "odom"
-      extern_params: 
-        follow: "params3.1.yaml"
\ No newline at end of file
+problem:
+  frame_structure: "POV"
+  dimension: 2
+sensors:
+  -
+    type: "ODOM 2d"
+    name: "odom"
+    plugin: "core"
+    intrinsic:
+      k_disp_to_disp: 0.1
+      k_rot_to_rot: 0.1
+    extrinsic:
+      pose: [1,2,3]
+processors:
+  -
+    type: "ODOM 2d"
+    name: "my_proc_test"
+    plugin: "core"
+    sensor_name: "odom"
+    extern_params: 
+      follow: "params3.1.yaml"
\ No newline at end of file
diff --git a/test/yaml/params_basic.yaml b/test/yaml/params_basic.yaml
index 730381520..2033bb4d0 100644
--- a/test/yaml/params_basic.yaml
+++ b/test/yaml/params_basic.yaml
@@ -1,35 +1,34 @@
-config:
-  problem:
-    dim: 2
-    
-  int_1: -3
-  int_2: 0
-  int_3: "6"
-  uint_1: 2
-  uint_2: 0
-  uint_3: "6"
-  double_1: 3.6
-  double_2: -3
-  double_3: "3.6"
-  string_1: wolf
-  string_2: "Wolf"
-  bool_1: true
-  bool_2: True
-  bool_3: TRUE
-  bool_4: "true"
-  bool_5: false
-  bool_6: False
-  bool_7: FALSE
-  bool_8: "false"
-  
-  int_wrong_1: 2.3
-  int_wrong_2: "wolf"
-  int_wrong_3: true
-  uint_wrong_1: -2
-  uint_wrong_2: 3.5
-  uint_wrong_3: "wolf"
-  uint_wrong_4: true
-  double_wrong_1: "wolf"
-  double_wrong_2: true
-  bool_wrong: 1
+problem:
+  dim: 2
   
+int_1: -3
+int_2: 0
+int_3: "6"
+uint_1: 2
+uint_2: 0
+uint_3: "6"
+double_1: 3.6
+double_2: -3
+double_3: "3.6"
+string_1: wolf
+string_2: "Wolf"
+bool_1: true
+bool_2: True
+bool_3: TRUE
+bool_4: "true"
+bool_5: false
+bool_6: False
+bool_7: FALSE
+bool_8: "false"
+
+int_wrong_1: 2.3
+int_wrong_2: "wolf"
+int_wrong_3: true
+uint_wrong_1: -2
+uint_wrong_2: 3.5
+uint_wrong_3: "wolf"
+uint_wrong_4: true
+double_wrong_1: "wolf"
+double_wrong_2: true
+bool_wrong: 1
+
diff --git a/test/yaml/params_problem_autosetup.yaml b/test/yaml/params_problem_autosetup.yaml
index fdd5b2f39..4f8f593f2 100644
--- a/test/yaml/params_problem_autosetup.yaml
+++ b/test/yaml/params_problem_autosetup.yaml
@@ -1,56 +1,55 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager: 
-      type: "None"
-  map:
-    type: "MapBase"
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager: 
+    type: "None"
+map:
+  type: "MapBase"
+  plugin: "core"
+sensors: 
+  -
+    type: "SensorOdom3d"
+    name: "odom"
     plugin: "core"
-  sensors: 
-    -
-      type: "SensorOdom3d"
-      name: "odom"
-      plugin: "core"
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-      states:
-        P:
-          state: [1,2,3]
-          mode: fix
-          dynamic: false
-        O:
-          state: [0,0,0,1]
-          mode: "fix"
-          dynamic: false
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        true
-        max_time_span:          1.95  # seconds
-        max_buff_length:        999   # motion deltas
-        dist_traveled:          999   # meters
-        angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.001
-      
-      state_getter: true
-      state_priority: 1
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+    states:
+      P:
+        state: [1,2,3]
+        mode: fix
+        dynamic: false
+      O:
+        state: [0,0,0,1]
+        mode: "fix"
+        dynamic: false
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        true
+      max_time_span:          1.95  # seconds
+      max_buff_length:        999   # motion deltas
+      dist_traveled:          999   # meters
+      angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.001
+    
+    state_getter: true
+    state_priority: 1
diff --git a/test/yaml/params_problem_autosetup_no_map.yaml b/test/yaml/params_problem_autosetup_no_map.yaml
index 840d40624..e7aa7c81b 100644
--- a/test/yaml/params_problem_autosetup_no_map.yaml
+++ b/test/yaml/params_problem_autosetup_no_map.yaml
@@ -1,53 +1,52 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager: 
-      type: "None"
-  sensors:  
-    -
-      type: "SensorOdom3d"
-      name: "odom"
-      plugin: "core"
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-      states:
-        P:
-          state: [1,2,3]
-          mode: fix
-          dynamic: false
-        O:
-          state: [0,0,0,1]
-          mode: "fix"
-          dynamic: false
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        true
-        max_time_span:          1.95  # seconds
-        max_buff_length:        999   # motion deltas
-        dist_traveled:          999   # meters
-        angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager: 
+    type: "None"
+sensors:  
+  -
+    type: "SensorOdom3d"
+    name: "odom"
+    plugin: "core"
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+    states:
+      P:
+        state: [1,2,3]
+        mode: fix
+        dynamic: false
+      O:
+        state: [0,0,0,1]
+        mode: "fix"
+        dynamic: false
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        true
+      max_time_span:          1.95  # seconds
+      max_buff_length:        999   # motion deltas
+      dist_traveled:          999   # meters
+      angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
diff --git a/test/yaml/params_problem_odom_3d.yaml b/test/yaml/params_problem_odom_3d.yaml
index 6c5ed47c2..b5e8c455b 100644
--- a/test/yaml/params_problem_odom_3d.yaml
+++ b/test/yaml/params_problem_odom_3d.yaml
@@ -1,46 +1,45 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager: 
-      type: "None"
-  sensors: 
-    -
-      type: "SensorOdom3d"
-      name: "odom"
-      plugin: "core"
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-      extrinsic:
-        pose: [1,2,3,0,0,0,1]
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        true
-        max_time_span:          1.95  # seconds
-        max_buff_length:        999   # motion deltas
-        dist_traveled:          999   # meters
-        angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager: 
+    type: "None"
+sensors: 
+  -
+    type: "SensorOdom3d"
+    name: "odom"
+    plugin: "core"
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+    extrinsic:
+      pose: [1,2,3,0,0,0,1]
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        true
+      max_time_span:          1.95  # seconds
+      max_buff_length:        999   # motion deltas
+      dist_traveled:          999   # meters
+      angle_turned:           999   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
diff --git a/test/yaml/params_tree_manager1.yaml b/test/yaml/params_tree_manager1.yaml
index 2cc4c231e..a51cf0355 100644
--- a/test/yaml/params_tree_manager1.yaml
+++ b/test/yaml/params_tree_manager1.yaml
@@ -1,58 +1,57 @@
-config:
-  problem:
-    frame_structure: "POV"
-    dimension: 3
-    prior:
-      mode: "factor"
-      # state: [0,0,0,0,0,0,1,0,0,0]
-      # cov: [[9,9],.1,0,0,0,0,0,0,0,0, 0,.1,0,0,0,0,0,0,0, 0,0,.1,0,0,0,0,0,0, 0,0,0,.1,0,0,0,0,0, 0,0,0,0,.1,0,0,0,0, 0,0,0,0,0,.1,0,0,0, 0,0,0,0,0,0,.1,0,0, 0,0,0,0,0,0,0,.1,0, 0,0,0,0,0,0,0,0,.1]
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-        V: [0,0,0]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-        V: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      follow: "tree_manager_dummy.yaml"
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        false
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          0.5   # meters
-        angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
-      
+problem:
+  frame_structure: "POV"
+  dimension: 3
+  prior:
+    mode: "factor"
+    # state: [0,0,0,0,0,0,1,0,0,0]
+    # cov: [[9,9],.1,0,0,0,0,0,0,0,0, 0,.1,0,0,0,0,0,0,0, 0,0,.1,0,0,0,0,0,0, 0,0,0,.1,0,0,0,0,0, 0,0,0,0,.1,0,0,0,0, 0,0,0,0,0,.1,0,0,0, 0,0,0,0,0,0,.1,0,0, 0,0,0,0,0,0,0,.1,0, 0,0,0,0,0,0,0,0,.1]
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+      V: [0,0,0]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+      V: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    follow: "tree_manager_dummy.yaml"
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        false
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          0.5   # meters
+      angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
+    
diff --git a/test/yaml/params_tree_manager2.yaml b/test/yaml/params_tree_manager2.yaml
index 555052c63..b38cefd89 100644
--- a/test/yaml/params_tree_manager2.yaml
+++ b/test/yaml/params_tree_manager2.yaml
@@ -1,58 +1,57 @@
-config:
-  problem:
-    frame_structure: "POV"
-    dimension: 3
-    prior:
-      mode: "factor"
-      # state: [0,0,0,0,0,0,1,0,0,0]
-      # cov: [[9,9],.1,0,0,0,0,0,0,0,0, 0,.1,0,0,0,0,0,0,0, 0,0,.1,0,0,0,0,0,0, 0,0,0,.1,0,0,0,0,0, 0,0,0,0,.1,0,0,0,0, 0,0,0,0,0,.1,0,0,0, 0,0,0,0,0,0,.1,0,0, 0,0,0,0,0,0,0,.1,0, 0,0,0,0,0,0,0,0,.1]
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-        V: [0,0,0]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-        V: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      type: "None"
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        false
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          0.5   # meters
-        angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
-      
+problem:
+  frame_structure: "POV"
+  dimension: 3
+  prior:
+    mode: "factor"
+    # state: [0,0,0,0,0,0,1,0,0,0]
+    # cov: [[9,9],.1,0,0,0,0,0,0,0,0, 0,.1,0,0,0,0,0,0,0, 0,0,.1,0,0,0,0,0,0, 0,0,0,.1,0,0,0,0,0, 0,0,0,0,.1,0,0,0,0, 0,0,0,0,0,.1,0,0,0, 0,0,0,0,0,0,.1,0,0, 0,0,0,0,0,0,0,.1,0, 0,0,0,0,0,0,0,0,.1]
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+      V: [0,0,0]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+      V: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    type: "None"
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        false
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          0.5   # meters
+      angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
+    
diff --git a/test/yaml/params_tree_manager_sliding_window1.yaml b/test/yaml/params_tree_manager_sliding_window1.yaml
index 5a6f7cac2..a317726ac 100644
--- a/test/yaml/params_tree_manager_sliding_window1.yaml
+++ b/test/yaml/params_tree_manager_sliding_window1.yaml
@@ -1,54 +1,53 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      follow: "tree_manager_sliding_window1.yaml"
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        false
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          0.5   # meters
-        angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
-      
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    follow: "tree_manager_sliding_window1.yaml"
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        false
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          0.5   # meters
+      angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
+    
diff --git a/test/yaml/params_tree_manager_sliding_window2.yaml b/test/yaml/params_tree_manager_sliding_window2.yaml
index 768cedbe4..935f0899f 100644
--- a/test/yaml/params_tree_manager_sliding_window2.yaml
+++ b/test/yaml/params_tree_manager_sliding_window2.yaml
@@ -1,54 +1,53 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      follow: "tree_manager_sliding_window2.yaml"
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        false
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          0.5   # meters
-        angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
-      
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    follow: "tree_manager_sliding_window2.yaml"
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        false
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          0.5   # meters
+      angle_turned:           0.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
+    
diff --git a/test/yaml/params_tree_manager_sliding_window_dual_rate1.yaml b/test/yaml/params_tree_manager_sliding_window_dual_rate1.yaml
index 12d338a33..6a7b21625 100644
--- a/test/yaml/params_tree_manager_sliding_window_dual_rate1.yaml
+++ b/test/yaml/params_tree_manager_sliding_window_dual_rate1.yaml
@@ -1,15 +1,14 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager: 
-      follow: "tree_manager_sliding_window_dual_rate1.yaml"
\ No newline at end of file
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager: 
+    follow: "tree_manager_sliding_window_dual_rate1.yaml"
\ No newline at end of file
diff --git a/test/yaml/params_tree_manager_sliding_window_dual_rate2.yaml b/test/yaml/params_tree_manager_sliding_window_dual_rate2.yaml
index 609fb96f5..12f59ad4a 100644
--- a/test/yaml/params_tree_manager_sliding_window_dual_rate2.yaml
+++ b/test/yaml/params_tree_manager_sliding_window_dual_rate2.yaml
@@ -1,21 +1,20 @@
-config:
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      type: "TreeManagerSlidingWindowDualRate"
-      plugin: "core"
-      n_frames: 5
-      n_frames_recent: 3
-      rate_old_frames: 2
-      n_fix_first_frames: 0
-      viral_remove_empty_parent: false
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    type: "TreeManagerSlidingWindowDualRate"
+    plugin: "core"
+    n_frames: 5
+    n_frames_recent: 3
+    rate_old_frames: 2
+    n_fix_first_frames: 0
+    viral_remove_empty_parent: false
diff --git a/test/yaml/params_tree_manager_sliding_window_dual_rate3.yaml b/test/yaml/params_tree_manager_sliding_window_dual_rate3.yaml
index 35cd9bc7d..d7c53fb13 100644
--- a/test/yaml/params_tree_manager_sliding_window_dual_rate3.yaml
+++ b/test/yaml/params_tree_manager_sliding_window_dual_rate3.yaml
@@ -1,62 +1,61 @@
-config:
-  solver: 
-    follow: "solver.yaml"
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager:
-      type: "TreeManagerSlidingWindowDualRate"
-      plugin: "core"
-      n_frames: 5
-      n_frames_recent: 3
-      rate_old_frames: 2
-      n_fix_first_frames: 2
-      viral_remove_empty_parent: true
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        true
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          10   # meters
-        angle_turned:           3.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
-      
+solver: 
+  follow: "solver.yaml"
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager:
+    type: "TreeManagerSlidingWindowDualRate"
+    plugin: "core"
+    n_frames: 5
+    n_frames_recent: 3
+    rate_old_frames: 2
+    n_fix_first_frames: 2
+    viral_remove_empty_parent: true
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        true
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          10   # meters
+      angle_turned:           3.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
+    
diff --git a/test/yaml/params_tree_manager_sliding_window_dual_rate_baseline.yaml b/test/yaml/params_tree_manager_sliding_window_dual_rate_baseline.yaml
index 769d7376a..e51b8a146 100644
--- a/test/yaml/params_tree_manager_sliding_window_dual_rate_baseline.yaml
+++ b/test/yaml/params_tree_manager_sliding_window_dual_rate_baseline.yaml
@@ -1,55 +1,54 @@
-config:
-  solver: 
-    follow: "solver.yaml"
-  problem:
-    frame_structure: "PO"
-    dimension: 3
-    prior:
-      mode: "factor"
-      $state:
-        P: [0,0,0]
-        O: [0,0,0,1]
-      $sigma:
-        P: [0.31, 0.31, 0.31]
-        O: [0.31, 0.31, 0.31]
-      time_tolerance: 0.1
-    tree_manager: 
-      type: "None"
-  sensors: 
-    -
-      type: "SensorOdom"
-      name: "odom"
-      plugin: "core"
-      states:
-        P:
-          mode: fix
-          state: [1, 2, 3]
-          dynamic: false
-        O:
-          mode: fix
-          state: [0, 0, 0, 1]
-          dynamic: false
-      k_disp_to_disp: 0.1
-      k_disp_to_rot: 0.1
-      k_rot_to_rot: 0.1 
-      min_disp_var: 0.1 
-      min_rot_var: 0.1
-  processors:
-    -
-      type: "ProcessorOdom3d"
-      name: "my_proc_odom3d"
-      sensor_name: "odom"
-      plugin: "core"
-      apply_loss_function: false
-      time_tolerance:         0.01  # seconds
-      keyframe_vote:
-        voting_active:        true
-        max_time_span:          0.2   # seconds
-        max_buff_length:        10    # motion deltas
-        dist_traveled:          10   # meters
-        angle_turned:           3.1   # radians (1 rad approx 57 deg, approx 60 deg)
-      
-      unmeasured_perturbation_std: 0.00111
-      
-      state_getter: true
-      state_priority: 1
+solver: 
+  follow: "solver.yaml"
+problem:
+  frame_structure: "PO"
+  dimension: 3
+  prior:
+    mode: "factor"
+    $state:
+      P: [0,0,0]
+      O: [0,0,0,1]
+    $sigma:
+      P: [0.31, 0.31, 0.31]
+      O: [0.31, 0.31, 0.31]
+    time_tolerance: 0.1
+  tree_manager: 
+    type: "None"
+sensors: 
+  -
+    type: "SensorOdom"
+    name: "odom"
+    plugin: "core"
+    states:
+      P:
+        mode: fix
+        state: [1, 2, 3]
+        dynamic: false
+      O:
+        mode: fix
+        state: [0, 0, 0, 1]
+        dynamic: false
+    k_disp_to_disp: 0.1
+    k_disp_to_rot: 0.1
+    k_rot_to_rot: 0.1 
+    min_disp_var: 0.1 
+    min_rot_var: 0.1
+processors:
+  -
+    type: "ProcessorOdom3d"
+    name: "my_proc_odom3d"
+    sensor_name: "odom"
+    plugin: "core"
+    apply_loss_function: false
+    time_tolerance:         0.01  # seconds
+    keyframe_vote:
+      voting_active:        true
+      max_time_span:          0.2   # seconds
+      max_buff_length:        10    # motion deltas
+      dist_traveled:          10   # meters
+      angle_turned:           3.1   # radians (1 rad approx 57 deg, approx 60 deg)
+    
+    unmeasured_perturbation_std: 0.00111
+    
+    state_getter: true
+    state_priority: 1
-- 
GitLab