diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..eb16bf147665160995ef3124a3c540fa79387383
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,208 @@
+stages:
+  - demo
+
+############ YAML ANCHORS ############
+.preliminaries_template: &preliminaries_definition
+  ## Install ssh-agent if not already installed, it is required by Docker.
+  ## (change apt-get to yum if you use an RPM-based image)
+  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
+
+  ## Run ssh-agent (inside the build environment)
+  - eval $(ssh-agent -s)
+
+  ## Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store
+  ## We're using tr to fix line endings which makes ed25519 keys work
+  ## without extra base64 encoding.
+  ## https://gitlab.com/gitlab-examples/ssh-private-key/issues/1#note_48526556
+  - mkdir -p ~/.ssh
+  - chmod 700 ~/.ssh  
+  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
+  # - echo "$SSH_KNOWN_HOSTS" > $HOME/.ssh/known_hosts
+  - ssh-keyscan -H -p 2202 gitlab.iri.upc.edu >> $HOME/.ssh/known_hosts
+
+  # update apt
+  - apt-get update
+
+  # create ci_deps folder (if not exists)
+  - mkdir -pv ci_deps
+
+  # manually source ros setup.bash
+  - source /root/catkin_ws/devel/setup.bash
+  - roscd # check that it works
+
+.install_wolf_template: &install_wolf_definition
+  - cd ${CI_PROJECT_DIR}/ci_deps
+  - if [ -d wolf ]; then
+  -   echo "directory wolf exists"
+  -   cd wolf
+  -   git checkout devel
+  -   git pull
+  -   git checkout $WOLF_CORE_BRANCH
+  - else
+  -   git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_lib/wolf.git
+  -   cd wolf
+  -   git checkout $WOLF_CORE_BRANCH
+  - fi
+  - mkdir -pv build
+  - cd build
+  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_DEMOS=OFF -DBUILD_TESTS=OFF ..
+  - make -j$(nproc)
+  - make install
+  - ldconfig
+
+.install_gnssutils_template: &install_gnssutils_definition
+  - cd ${CI_PROJECT_DIR}/ci_deps
+  - if [ -d gnss_utils ]; then
+  -   echo "directory gnss_utils exists"
+  -   cd gnss_utils
+  -   git pull
+  - else
+  -   git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/gauss_project/gnss_utils.git
+  -   cd gnss_utils
+  -   git submodule update --init
+  - fi
+  - mkdir -pv build
+  - cd build
+  - rm -rf *
+  - cmake -DCMAKE_BUILD_TYPE=release ..
+  - make -j$(nproc)
+  - make install
+  - ldconfig
+
+.install_wolfgnss_template: &install_wolfgnss_definition
+  - cd ${CI_PROJECT_DIR}/ci_deps
+  - if [ -d gnss ]; then
+  -   echo "directory gnss exists"
+  -   cd gnss
+  -   git checkout devel
+  -   git pull
+  -   git checkout $WOLF_GNSS_BRANCH
+  - else
+  -   git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_lib/plugins/gnss.git
+  -   cd gnss
+  -   git checkout $WOLF_GNSS_BRANCH
+  - fi
+  - mkdir -pv build
+  - cd build
+  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_TESTS=OFF ..
+  - make -j$(nproc)
+  - make install
+  - ldconfig
+
+.install_wolfimu_template: &install_wolfimu_definition
+  - cd ${CI_PROJECT_DIR}/ci_deps
+  - if [ -d imu ]; then
+  -   echo "directory imu exists"
+  -   cd imu
+  -   git checkout devel
+  -   git pull
+  -   git checkout $WOLF_IMU_BRANCH
+  - else
+  -   git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_lib/plugins/imu.git
+  -   cd imu
+  -   git checkout $WOLF_IMU_BRANCH
+  - fi
+  - mkdir -pv build
+  - cd build
+  - cmake -DCMAKE_BUILD_TYPE=release -DBUILD_TESTS=OFF ..
+  - make -j$(nproc)
+  - make install
+  - ldconfig
+
+.clone_wolfrosnode_template: &clone_wolfrosnode_definition
+  - roscd
+  - cd ../src
+  - git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_ros/wolf_ros_node.git
+  - cd wolf_ros_node
+  - git checkout $WOLF_ROS_CORE_BRANCH
+
+.clone_wolfrosgnss_template: &clone_wolfrosgnss_definition
+  - roscd
+  - cd ../src
+  - git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_ros/wolf_ros_gnss.git
+  - cd wolf_ros_gnss
+  - git checkout $WOLF_ROS_GNSS_BRANCH
+
+.clone_wolfrosimu_template: &clone_wolfrosimu_definition
+  - roscd
+  - cd ../src
+  - git clone ssh://git@gitlab.iri.upc.edu:2202/mobile_robotics/wolf_projects/wolf_ros/wolf_ros_imu.git
+  - cd wolf_ros_imu
+  - git checkout $WOLF_ROS_IMU_BRANCH
+
+.demo_template: &demo_definition
+  - roscd
+  - cd ../src
+  - git clone ssh://git@gitlab.iri.upc.edu:2202/${CI_PROJECT_PATH}.git
+  - cd wolf_demo_gnss_imu
+  - git checkout $CI_COMMIT_BRANCH
+  - cd ../..
+  - catkin_make
+  - roslaunch wolf_demo_gnss demo_gnss_raw.launch rviz:=false
+  - roslaunch wolf_demo_gnss demo_imu_gnss_raw.launch rviz:=false
+
+############ UBUNTU 16.04 TEST ############
+demo:xenial:
+  stage: demo
+  image: labrobotica/wolf_deps_ros:16.04
+  cache:
+    - key: wolf_and_deps-xenial
+      paths:
+      - ci_deps
+  except:
+    - master
+  before_script:
+    - *preliminaries_definition
+    - *install_wolf_definition
+    - *install_gnssutils_definition
+    - *install_wolfgnss_definition
+    - *install_wolfimu_definition
+    - *clone_wolfrosnode_definition
+    - *clone_wolfrosgnss_definition
+    - *clone_wolfrosimu_definition
+  script:
+    - *demo_definition
+
+############ UBUNTU 18.04 TEST ############
+demo:bionic:
+  stage: demo
+  image: labrobotica/wolf_deps_ros:18.04
+  cache:
+    - key: wolf_and_deps-bionic
+      paths:
+      - ci_deps
+  except:
+    - master
+  before_script:
+    - *preliminaries_definition
+    - *install_wolf_definition
+    - *install_gnssutils_definition
+    - *install_wolfgnss_definition
+    - *install_wolfimu_definition
+    - *clone_wolfrosnode_definition
+    - *clone_wolfrosgnss_definition
+    - *clone_wolfrosimu_definition
+  script:
+    - *demo_definition
+
+############ UBUNTU 20.04 TEST ############
+demo:focal:
+  stage: demo
+  image: labrobotica/wolf_deps_ros:20.04
+  cache:
+    - key: wolf_and_deps-focal
+      paths:
+      - ci_deps
+  except:
+    - master
+  before_script:
+    - *preliminaries_definition
+    - *install_wolf_definition
+    - *install_gnssutils_definition
+    - *install_wolfgnss_definition
+    - *install_wolfimu_definition
+    - *clone_wolfrosnode_definition
+    - *clone_wolfrosgnss_definition
+    - *clone_wolfrosimu_definition
+  script:
+    - *demo_definition
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..7111f1378a9c61a3da328436a7d7f7a99c86f8cc
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,202 @@
+cmake_minimum_required(VERSION 3.0.2)
+project(wolf_demo_gnss_imu)
+
+## Compile as C++11, supported in ROS Kinetic and newer
+# add_compile_options(-std=c++11)
+
+## Find catkin macros and libraries
+## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+## is used, also find other catkin packages
+find_package(catkin REQUIRED)
+
+## System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+
+## Uncomment this if the package has a setup.py. This macro ensures
+## modules and global scripts declared therein get installed
+## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+# catkin_python_setup()
+
+################################################
+## Declare ROS messages, services and actions ##
+################################################
+
+## To declare and build messages, services or actions from within this
+## package, follow these steps:
+## * Let MSG_DEP_SET be the set of packages whose message types you use in
+##   your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+## * In the file package.xml:
+##   * add a build_depend tag for "message_generation"
+##   * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
+##   * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+##     but can be declared for certainty nonetheless:
+##     * add a exec_depend tag for "message_runtime"
+## * In this file (CMakeLists.txt):
+##   * add "message_generation" and every package in MSG_DEP_SET to
+##     find_package(catkin REQUIRED COMPONENTS ...)
+##   * add "message_runtime" and every package in MSG_DEP_SET to
+##     catkin_package(CATKIN_DEPENDS ...)
+##   * uncomment the add_*_files sections below as needed
+##     and list every .msg/.srv/.action file to be processed
+##   * uncomment the generate_messages entry below
+##   * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+## Generate messages in the 'msg' folder
+# add_message_files(
+#   FILES
+#   Message1.msg
+#   Message2.msg
+# )
+
+## Generate services in the 'srv' folder
+# add_service_files(
+#   FILES
+#   Service1.srv
+#   Service2.srv
+# )
+
+## Generate actions in the 'action' folder
+# add_action_files(
+#   FILES
+#   Action1.action
+#   Action2.action
+# )
+
+## Generate added messages and services with any dependencies listed here
+# generate_messages(
+#   DEPENDENCIES
+#   std_msgs  # Or other packages containing msgs
+# )
+
+################################################
+## Declare ROS dynamic reconfigure parameters ##
+################################################
+
+## To declare and build dynamic reconfigure parameters within this
+## package, follow these steps:
+## * In the file package.xml:
+##   * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
+## * In this file (CMakeLists.txt):
+##   * add "dynamic_reconfigure" to
+##     find_package(catkin REQUIRED COMPONENTS ...)
+##   * uncomment the "generate_dynamic_reconfigure_options" section below
+##     and list every .cfg file to be processed
+
+## Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+#   cfg/DynReconf1.cfg
+#   cfg/DynReconf2.cfg
+# )
+
+###################################
+## catkin specific configuration ##
+###################################
+## The catkin_package macro generates cmake config files for your package
+## Declare things to be passed to dependent projects
+## INCLUDE_DIRS: uncomment this if your package contains header files
+## LIBRARIES: libraries you create in this project that dependent projects also need
+## CATKIN_DEPENDS: catkin_packages dependent projects also need
+## DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+#  INCLUDE_DIRS include
+#  LIBRARIES wolf_demo_gnss2
+#  CATKIN_DEPENDS other_catkin_pkg
+#  DEPENDS system_lib
+)
+
+###########
+## Build ##
+###########
+
+## Specify additional locations of header files
+## Your package locations should be listed before other locations
+include_directories(
+# include
+# ${catkin_INCLUDE_DIRS}
+)
+
+## Declare a C++ library
+# add_library(${PROJECT_NAME}
+#   src/${PROJECT_NAME}/wolf_demo_gnss2.cpp
+# )
+
+## Add cmake target dependencies of the library
+## as an example, code may need to be generated before libraries
+## either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Declare a C++ executable
+## With catkin_make all packages are built within a single CMake context
+## The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/wolf_demo_gnss2_node.cpp)
+
+## Rename C++ executable without prefix
+## The above recommended prefix causes long target names, the following renames the
+## target back to the shorter version for ease of user use
+## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+## Add cmake target dependencies of the executable
+## same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+## Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+#   ${catkin_LIBRARIES}
+# )
+
+#############
+## Install ##
+#############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+## Mark executable scripts (Python etc.) for installation
+## in contrast to setup.py, you can choose the destination
+# catkin_install_python(PROGRAMS
+#   scripts/my_python_script
+#   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark executables for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
+# install(TARGETS ${PROJECT_NAME}_node
+#   RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+## Mark libraries for installation
+## See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
+# install(TARGETS ${PROJECT_NAME}
+#   ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+#   LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+#   RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+# )
+
+## Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+#   DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+#   FILES_MATCHING PATTERN "*.h"
+#   PATTERN ".svn" EXCLUDE
+# )
+
+## Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+#   # myfile1
+#   # myfile2
+#   DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+#############
+## Testing ##
+#############
+
+## Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_wolf_demo_gnss2.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+#   target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+## Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
diff --git a/launch/demo_gnss_raw.launch b/launch/demo_gnss_raw.launch
new file mode 100644
index 0000000000000000000000000000000000000000..c8ed69cce230c058971510f023529f1bf67bd4ca
--- /dev/null
+++ b/launch/demo_gnss_raw.launch
@@ -0,0 +1,49 @@
+<!-- -->
+<launch>
+    <arg name="rviz" default="false" /> 
+    <arg name="speed" default="1" />
+    <arg name="sec" default="0" />
+    <arg name="profiling" default="false" />
+    <arg name="gdb" default="false" />
+    <arg name="launch_pref" default="" unless="$(eval profiling or gdb)"/>
+    <arg name="launch_pref" value="valgrind --tool=callgrind --callgrind-out-file='callgrind.wolf.%p'" if="$(arg profiling)" />
+    <arg name="launch_pref" value="gdb -ex run --args" if="$(arg gdb)" />
+
+    <!-- using "clock" option to use the simulated time. Rosbag launch as the first node  -->
+    <param name="use_sim_time" value="true" />
+    
+	<!--TF-->
+    <node pkg="tf"
+          type="static_transform_publisher"
+          name="odom_base"
+          args="0 0 0 0 0 0 odom base 1000" />
+		  
+    <!--WOLF-->
+    <node type="wolf_ros_node" 
+          name="wolf_ros_node" 
+          pkg="wolf_ros_node"
+          output="screen"
+          required="false"
+          launch-prefix="$(arg launch_pref)">
+        <param name="~yaml_file_path" value="$(find wolf_demo_gnss)/yaml/params_gnss_raw.yaml"/>
+    </node>
+   	
+    <!--VISUALIZATION-->
+    <group if="$(arg rviz)">
+        <node name="rviz"
+             pkg="rviz"
+             type="rviz" 
+             args="-d $(find wolf_demo_gnss)/rviz/gnss.rviz" />
+    </group>
+
+    <!--ROSBAG PLAY-->
+    <node pkg="rosbag" 
+          type="play" 
+          name="player"
+          required="true"
+          args="-r $(arg speed) 
+                -s $(arg sec) 
+                --clock 
+                $(find wolf_demo_gnss)/bag/mini8_2020-09-28-11-28-08.bag"/>
+
+</launch>
diff --git a/launch/demo_imu_gnss_raw.launch b/launch/demo_imu_gnss_raw.launch
new file mode 100644
index 0000000000000000000000000000000000000000..b3167df59d66d4932eea84d49d81e60a2049fcab
--- /dev/null
+++ b/launch/demo_imu_gnss_raw.launch
@@ -0,0 +1,56 @@
+<!-- -->
+<launch>
+    <arg name="rviz" default="false" /> 
+    <arg name="record" default="false" />
+    <arg name="speed" default="1" />
+    <arg name="sec" default="0" />
+    <arg name="profiling" default="false" />
+    <arg name="gdb" default="false" />
+    <arg name="launch_pref" default="" unless="$(eval profiling or gdb)"/>
+    <arg name="launch_pref" value="valgrind --tool=callgrind --callgrind-out-file='callgrind.wolf.%p'" if="$(arg profiling)" />
+    <arg name="launch_pref" value="gdb -ex run --args" if="$(arg gdb)" />
+
+    <!-- using "clock" option to use the simulated time. Rosbag launch as the first node  -->
+    <param name="use_sim_time" value="true" />
+    
+	<!--TF-->
+    <node pkg="tf"
+          type="static_transform_publisher"
+          name="odom_base"
+          args="0 0 0 0 0 0 odom base 1000" />
+		  
+    <!--WOLF-->
+    <node type="wolf_ros_node" 
+          name="wolf_ros_node" 
+          pkg="wolf_ros_node"
+          output="screen"
+          required="false"
+          launch-prefix="$(arg launch_pref)">
+        <param name="~yaml_file_path" value="$(find wolf_demo_gnss)/yaml/params_imu_gnss_raw.yaml"/>
+    </node>
+   	
+    <!--VISUALIZATION-->
+    <group if="$(arg rviz)">
+        <node name="rviz"
+             pkg="rviz"
+             type="rviz" 
+             args="-d $(find wolf_demo_gnss)/rviz/gnss.rviz" />
+    </group>
+
+	<!--<arg name="bag" default="mini8_2020-09-28-11-28-08"/>-->
+	<!--<arg name="bag" default="rpa_sensors_M600b_2021-09-16-12-25-14"/>-->
+	<!--<arg name="bag" default="rpa_sensors_M600b_2021-09-16-14-41-46"/>-->
+	<arg name="bag" default="rpa_sensors_M600b_2021-09-17-11-00-51"/>
+	<!--<arg name="bag" default="rpa_sensors_M600b_2021-09-17-11-31-55"/>-->
+
+    <!--ROSBAG PLAY-->
+    <node pkg="rosbag" 
+          type="play" 
+          name="player"
+          required="true"
+          args="-r $(arg speed) 
+                -s $(arg sec) 
+                --clock 
+                $(find wolf_demo_gnss)/bag/$(arg bag).bag"/>
+
+</launch>
diff --git a/package.xml b/package.xml
new file mode 100644
index 0000000000000000000000000000000000000000..16708654fc231f00b930765e6338312d96bbd591
--- /dev/null
+++ b/package.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0"?>
+<package format="2">
+  <name>wolf_demo_gnss_imu</name>
+  <version>0.0.0</version>
+  <description>The wolf_demo_gnss_imu package</description>
+
+  <!-- One maintainer tag required, multiple allowed, one person per tag -->
+  <!-- Example:  -->
+  <!-- <maintainer email="jane.doe@example.com">Jane Doe</maintainer> -->
+  <maintainer email="jvallve@iri.upc.edu">joanvallve</maintainer>
+
+
+  <!-- One license tag required, multiple allowed, one license per tag -->
+  <!-- Commonly used license strings: -->
+  <!--   BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, LGPLv3 -->
+  <license>TODO</license>
+
+
+  <!-- Url tags are optional, but multiple are allowed, one per tag -->
+  <!-- Optional attribute type can be: website, bugtracker, or repository -->
+  <!-- Example: -->
+  <!-- <url type="website">http://wiki.ros.org/wolf_demo_gnss2</url> -->
+
+
+  <!-- Author tags are optional, multiple are allowed, one per tag -->
+  <!-- Authors do not have to be maintainers, but could be -->
+  <!-- Example: -->
+  <!-- <author email="jane.doe@example.com">Jane Doe</author> -->
+
+
+  <!-- The *depend tags are used to specify dependencies -->
+  <!-- Dependencies can be catkin packages or system dependencies -->
+  <!-- Examples: -->
+  <!-- Use depend as a shortcut for packages that are both build and exec dependencies -->
+  <!--   <depend>roscpp</depend> -->
+  <!--   Note that this is equivalent to the following: -->
+  <!--   <build_depend>roscpp</build_depend> -->
+  <!--   <exec_depend>roscpp</exec_depend> -->
+  <!-- Use build_depend for packages you need at compile time: -->
+  <!--   <build_depend>message_generation</build_depend> -->
+  <build_depend>wolf_ros_gnss</build_depend>
+  <build_depend>wolf_ros_imu</build_depend>
+  <build_depend>wolf_ros_node</build_depend>
+  <!-- Use build_export_depend for packages you need in order to build against this package: -->
+  <!--   <build_export_depend>message_generation</build_export_depend> -->
+  <!-- Use buildtool_depend for build tool packages: -->
+  <!--   <buildtool_depend>catkin</buildtool_depend> -->
+  <!-- Use exec_depend for packages you need at runtime: -->
+  <!--   <exec_depend>message_runtime</exec_depend> -->
+  <!-- Use test_depend for packages you need only for testing: -->
+  <!--   <test_depend>gtest</test_depend> -->
+  <!-- Use doc_depend for packages you need only for building documentation: -->
+  <!--   <doc_depend>doxygen</doc_depend> -->
+  <buildtool_depend>catkin</buildtool_depend>
+
+
+  <!-- The export tag contains other, unspecified, tags -->
+  <export>
+    <!-- Other tools can request additional information be placed here -->
+
+  </export>
+</package>
diff --git a/rviz/gnss.rviz b/rviz/gnss.rviz
new file mode 100644
index 0000000000000000000000000000000000000000..cc8cff0a2e5b968274670005470652f99788d827
--- /dev/null
+++ b/rviz/gnss.rviz
@@ -0,0 +1,399 @@
+Panels:
+  - Class: rviz/Displays
+    Help Height: 108
+    Name: Displays
+    Property Tree Widget:
+      Expanded:
+        - /Global Options1
+        - /TF1/Frames1
+        - /Trajectory1
+        - /Trajectory1/Namespaces1
+        - /Factors1
+        - /Factors1/Namespaces1
+      Splitter Ratio: 0.804034591
+    Tree Height: 715
+  - Class: rviz/Selection
+    Name: Selection
+  - Class: rviz/Tool Properties
+    Expanded:
+      - /2D Pose Estimate1
+      - /2D Nav Goal1
+      - /Publish Point1
+    Name: Tool Properties
+    Splitter Ratio: 0.588679016
+  - Class: rviz/Views
+    Expanded:
+      - /Current View1
+    Name: Views
+    Splitter Ratio: 0.5
+  - Class: rviz/Time
+    Experimental: false
+    Name: Time
+    SyncMode: 0
+    SyncSource: ""
+Toolbars:
+  toolButtonStyle: 2
+Visualization Manager:
+  Class: ""
+  Displays:
+    - Alpha: 0.200000003
+      Cell Size: 1
+      Class: rviz/Grid
+      Color: 111; 111; 111
+      Enabled: true
+      Line Style:
+        Line Width: 0.0299999993
+        Value: Lines
+      Name: Grid
+      Normal Cell Count: 0
+      Offset:
+        X: 0
+        Y: 0
+        Z: 0
+      Plane: XY
+      Plane Cell Count: 1000
+      Reference Frame: <Fixed Frame>
+      Value: true
+    - Class: rviz/TF
+      Enabled: true
+      Frame Timeout: 15
+      Frames:
+        All Enabled: false
+        ECEF:
+          Value: true
+        ENU:
+          Value: true
+        base:
+          Value: true
+        map:
+          Value: true
+        odom:
+          Value: false
+      Marker Scale: 5
+      Name: TF
+      Show Arrows: false
+      Show Axes: true
+      Show Names: true
+      Tree:
+        ECEF:
+          ENU:
+            {}
+        map:
+          odom:
+            base:
+              {}
+      Update Interval: 0
+      Value: true
+    - Class: rviz/MarkerArray
+      Enabled: true
+      Marker Topic: /wolf_ros_node/graph_trajectory
+      Name: Trajectory
+      Namespaces:
+        frames: true
+        frames_text: false
+      Queue Size: 1
+      Value: true
+    - Class: rviz/MarkerArray
+      Enabled: true
+      Marker Topic: /wolf_ros_node/graph_factors
+      Name: Factors
+      Namespaces:
+        factors_processor IMU: true
+        factors_processor gnss: true
+        factors_text_processor IMU: false
+        factors_text_processor gnss: false
+        factors_text_unnamed_processor: false
+        factors_unnamed_processor: true
+      Queue Size: 1
+      Value: true
+    - Alpha: 1
+      Arrow Length: 1
+      Axes Length: 0.300000012
+      Axes Radius: 0.00999999978
+      Class: rviz/PoseArray
+      Color: 255; 25; 0
+      Enabled: false
+      Head Length: 0.400000006
+      Head Radius: 0.25
+      Name: Current Pose
+      Shaft Length: 1
+      Shaft Radius: 0.100000001
+      Shape: Arrow (3D)
+      Topic: /wolf_ros_node/current_pose_pose_array
+      Unreliable: false
+      Value: false
+    - Class: rviz/Marker
+      Enabled: true
+      Marker Topic: /wolf_ros_node/current_pose_marker
+      Name: Current Pose
+      Namespaces:
+        trajectory: true
+      Queue Size: 100
+      Value: true
+    - Alpha: 1
+      Arrow Length: 0.5
+      Axes Length: 0.300000012
+      Axes Radius: 0.00999999978
+      Class: rviz/PoseArray
+      Color: 0; 85; 255
+      Enabled: false
+      Head Length: 0.0700000003
+      Head Radius: 0.0299999993
+      Name: Fix UBlox
+      Shaft Length: 0.230000004
+      Shaft Radius: 0.00999999978
+      Shape: Arrow (Flat)
+      Topic: /ublox_gps/fix_ENU_pose_array
+      Unreliable: false
+      Value: false
+    - Class: rviz/Marker
+      Enabled: false
+      Marker Topic: /ublox_gps/fix_ENU_marker
+      Name: Fix UBlox
+      Namespaces:
+        {}
+      Queue Size: 1
+      Value: false
+    - Alpha: 1
+      Arrow Length: 0.5
+      Axes Length: 0.300000012
+      Axes Radius: 0.00999999978
+      Class: rviz/PoseArray
+      Color: 0; 255; 0
+      Enabled: false
+      Head Length: 0.0700000003
+      Head Radius: 0.0299999993
+      Name: Fix BestPos
+      Shaft Length: 0.230000004
+      Shaft Radius: 0.00999999978
+      Shape: Arrow (Flat)
+      Topic: /novatel/oem7/bestpos_ENU_pose_array
+      Unreliable: false
+      Value: false
+    - Class: rviz/Marker
+      Enabled: false
+      Marker Topic: /novatel/oem7/bestpos_ENU_marker
+      Name: Fix BestPose
+      Namespaces:
+        {}
+      Queue Size: 100
+      Value: false
+    - Class: rviz/Group
+      Displays:
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix000_marker
+          Name: eph BRDC - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix001_marker
+          Name: eph BRDC - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix002_marker
+          Name: eph BRDC - corr IONOFREE
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix010_marker
+          Name: eph SBAS - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: true
+          Marker Topic: /wolf_ros_node/RTKLIB_fix020_marker
+          Name: eph SBAS2 - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: true
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix030_marker
+          Name: eph SBAS3 - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix040_marker
+          Name: eph SBAS4 - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix011_marker
+          Name: eph SBAS - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: true
+          Marker Topic: /wolf_ros_node/RTKLIB_fix021_marker
+          Name: eph SBAS2 - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: true
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix031_marker
+          Name: eph SBAS3 - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix041_marker
+          Name: eph SBAS4 - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix012_marker
+          Name: eph BRDC - corr IONOFREE
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix100_marker
+          Name: RAIM eph BRDC - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix101_marker
+          Name: RAIM eph BRDC - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix102_marker
+          Name: RAIM eph BRDC - corr IONOFREE
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix110_marker
+          Name: RAIM eph SBAS - corr BRDC
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix111_marker
+          Name: RAIM eph SBAS - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+        - Class: rviz/Marker
+          Enabled: true
+          Marker Topic: /wolf_ros_node/RTKLIB_fix121_marker
+          Name: RAIM eph SBAS2 - corr SBAS
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: true
+        - Class: rviz/Marker
+          Enabled: false
+          Marker Topic: /wolf_ros_node/RTKLIB_fix112_marker
+          Name: RAIM eph BRDC - corr IONOFREE
+          Namespaces:
+            {}
+          Queue Size: 1
+          Value: false
+      Enabled: false
+      Name: RTKLIB
+  Enabled: true
+  Global Options:
+    Background Color: 49; 41; 50
+    Default Light: true
+    Fixed Frame: map
+    Frame Rate: 30
+  Name: root
+  Tools:
+    - Class: rviz/Interact
+      Hide Inactive Objects: true
+    - Class: rviz/MoveCamera
+    - Class: rviz/Select
+    - Class: rviz/FocusCamera
+    - Class: rviz/Measure
+    - Class: rviz/SetInitialPose
+      Topic: /initialpose
+    - Class: rviz/SetGoal
+      Topic: /move_base_simple/goal
+    - Class: rviz/PublishPoint
+      Single click: true
+      Topic: /clicked_point
+  Value: true
+  Views:
+    Current:
+      Class: rviz/ThirdPersonFollower
+      Distance: 26.5529099
+      Enable Stereo Rendering:
+        Stereo Eye Separation: 0.0599999987
+        Stereo Focal Distance: 1
+        Swap Stereo Eyes: false
+        Value: false
+      Focal Point:
+        X: 3.37263703
+        Y: 3.45467091
+        Z: 3.1463187e-05
+      Focal Shape Fixed Size: true
+      Focal Shape Size: 0.0500000007
+      Invert Z Axis: false
+      Name: Current View
+      Near Clip Distance: 0.00999999978
+      Pitch: 0.309797317
+      Target Frame: ENU
+      Value: ThirdPersonFollower (rviz)
+      Yaw: 0.71045965
+    Saved: ~
+Window Geometry:
+  Displays:
+    collapsed: false
+  Height: 1026
+  Hide Left Dock: false
+  Hide Right Dock: true
+  QMainWindow State: 000000ff00000000fd00000004000000000000016a00000378fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000002800000378000000d700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f00000378fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000002800000378000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000064f0000003efc0100000002fb0000000800540069006d006501000000000000064f0000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000004df0000037800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+  Selection:
+    collapsed: false
+  Time:
+    collapsed: false
+  Tool Properties:
+    collapsed: false
+  Views:
+    collapsed: true
+  Width: 1615
+  X: 65
+  Y: 24
diff --git a/yaml/params_gnss_raw.yaml b/yaml/params_gnss_raw.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2b9dd47b7062fa05ab896dd7f69ef51704d16936
--- /dev/null
+++ b/yaml/params_gnss_raw.yaml
@@ -0,0 +1,171 @@
+config:
+  profiling: 
+    enabled: false
+    file_name: "~/wolf_gnss_raw_profiling.txt"
+    
+  problem:
+    frame_structure: "PO"
+    dimension: 3
+    tree_manager:
+      type: "TreeManagerSlidingWindowDualRate" 
+      n_frames: 10
+      n_frames_recent: 5
+      rate_old_frames: 10
+      fix_first_frame: false
+      viral_remove_empty_parent: true
+    prior:
+      mode: "factor"
+      time_tolerance: 0.1
+      $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]
+      
+  solver:
+    max_num_iterations: 20
+    verbose: 0
+    period: 0.0
+    n_threads: 2
+    update_immediately: true
+    min_num_iterations: 5 #if update immediately
+    compute_cov: false
+    cov_enum: 3
+    cov_period: 1
+    
+  sensors:
+    -
+      type: "SensorGnss"
+      name: "gnss"
+      plugin: "gnss"
+      extrinsic:
+        pose: [0, 0, 0]
+      extrinsics_fixed: true
+      clock_bias_GPS_GLO_dynamic: false
+      clock_bias_GPS_GAL_dynamic: false
+      clock_bias_GPS_CMP_dynamic: false
+      ENU:
+        mode: "auto"
+        roll_fixed: true
+        pitch_fixed: true
+        yaw_fixed: true
+        translation_fixed: true
+        #ENU_latlonalt: [0.7092812341, 0.3998234412, 71.8593953932] # [40.6388212031 deg, 22.9081957302 deg, 71.8593953932 m] 
+
+  processors:
+    -
+      type: "ProcessorTrackerGnss"
+      name: "processor gnss"
+      sensor_name: "gnss"
+      plugin: "gnss"
+      time_tolerance: 0.1
+      apply_loss_function: false
+      min_features_for_keyframe: 0 #4
+      max_new_features: -1 #unlimited
+      remove_outliers: true
+      remove_outliers_with_fix: true
+      outlier_residual_th: 10
+      init_frames: false
+      pseudo_ranges: true
+      enu_map_fix_dist: 5
+      keyframe_vote:
+        voting_active: true
+        voting_aux_active: false
+        max_time_span: 0.01
+      gnss:
+        sateph: 6    # satellite ephemeris/clock: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_SBAS2), EPHOPT_SBAS4(8):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_BRDC)
+        ionoopt: 9   # ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode, IONOOPT_SBAS2(9):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), IONOOPT_SBAS3(10):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_SBAS2), IONOOPT_SBAS4(8):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_BRDC)
+        tropopt: 2   # troposphere option: (0:correction off,1:Saastamoinen model,2:SBAS model,3:troposphere option: ZTD estimation,4:ZTD+grad estimation,5:ZTD correction,6:ZTD+grad correction)
+        sbascorr: 15 # SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging)
+        raim: 1      # apply RAIM
+        elmin: 0.26  # elevation min (rad) = 15 degrees
+        maxgdop: 30  # reject threshold of gdop (ground dilusion of precision)
+        min_sbas_sats: 5 # used in case of EPHOPT_SBAS3, EPHOPT_SBAS4, IONOOPT_SBAS3, IONOOPT_SBAS4
+        constellations:
+          GPS: true
+          SBS: false
+          GLO: true
+          GAL: true
+          QZS: false
+          CMP: false
+          IRN: false
+          LEO: false
+        tdcp:
+          enabled: true
+          corr_iono: false
+          corr_tropo: false
+          loss_function: false
+          time_window: 10      # s
+          sigma_atm: 0.3       # m/sqrt(s)
+          sigma_carrier: 0.1   # m
+          multi_freq: false
+          remove_outliers: false
+          batch: false
+      
+  ROS subscriber:
+    -
+      #type: "SubscriberGnssNovatel"
+      #topic: "/novatel/oem7/oem7raw"
+      type: "SubscriberGnssUblox"
+      topic: "/ublox_gps/raw_data_stream"
+      sensor_name: "gnss"
+      package: "wolf_ros_gnss"
+      process_not_available: false
+      publish_fix: 
+        enabled: true
+        topic: "RTKLIB_fix"
+      gnss_options:
+        sateph: 6    # satellite ephemeris/clock (0:broadcast ephemeris,1:precise ephemeris,2:broadcast + SBAS,3:ephemeris option: broadcast + SSR_APC,4:broadcast + SSR_COM,5: QZSS LEX ephemeris
+        ionoopt: 9   # ionosphere option (0:correction off,1:broadcast mode,2:SBAS model,3:L1/L2 or L1/L5,4:estimation,5:IONEX TEC model,6:QZSS broadcast,7:QZSS LEX ionosphere,8:SLANT TEC mode)
+        tropopt: 2   # troposphere option: (0:correction off,1:Saastamoinen model,2:SBAS model,3:troposphere option: ZTD estimation,4:ZTD+grad estimation,5:ZTD correction,6:ZTD+grad correction)
+        sbascorr: 15 # SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging)
+        raim: 1      # apply RAIM n times
+        elmin: 0.26  # elevation min (rad) = 15 degrees
+        maxgdop: 30  # reject threshold of gdop (ground dilusion of precision)
+        constellations:
+          GPS: true
+          SBS: false
+          GLO: true
+          GAL: true
+          QZS: false
+          CMP: false
+          IRN: false
+          LEO: false
+    -
+      type: "SubscriberGnssFixPublisherEcef"
+      topic: "/ublox_gps/fix" 
+      sensor_name: "gnss"
+      package: "wolf_ros_gnss"
+      marker_color: [0,0,1,1]
+      period: 0.1
+    -
+      type: "SubscriberGnssFixNovatelPublisherEcef"
+      topic: "/novatel/oem7/bestpos" 
+      sensor_name: "gnss"
+      package: "wolf_ros_gnss"
+      marker_color: [0,1,0,1]
+      period: 0.1
+      
+  ROS publisher:
+    -
+      type: "PublisherPose"
+      topic: "current_pose"
+      package: "wolf_ros_node"
+      marker_color: [1,0,0,1]
+      period: 0.01
+      extrinsics: true
+      sensor: "gnss"
+      frame_id: "ENU"
+    -
+      type: "PublisherGnssTf"
+      topic: "whatever"
+      package: "wolf_ros_gnss"
+      period: 0.01
+      sensor_gnss_name: "gnss"
+    -
+      type: "PublisherGraph"
+      topic: "graph"
+      package: "wolf_ros_node"
+      period: 0.1
+      
diff --git a/yaml/params_imu_gnss_raw.yaml b/yaml/params_imu_gnss_raw.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..e8b301c6079e76bb84842a97b06af811dc46d1b5
--- /dev/null
+++ b/yaml/params_imu_gnss_raw.yaml
@@ -0,0 +1,260 @@
+config:
+  debug: 
+    profiling: false
+    profiling_file: "~/wolf_gauss_profiling.txt"
+    print_problem: false
+    print_depth: 4
+    print_constr_by: false
+    print_metric: false
+    print_state_blocks: false
+    print_period: 1
+    
+  problem:
+    frame_structure: "POV"
+    dimension: 3
+    node_rate: 100
+    tree_manager:
+      type: "TreeManagerSlidingWindow"#"TreeManagerSlidingWindowDualRate" 
+      n_frames: 10
+      n_frames_recent: 10
+      rate_old_frames: 10
+      fix_first_frame: false
+      viral_remove_empty_parent: true
+      n_fix_first_frames: 0
+    prior:
+      mode: "factor"
+      time_tolerance: 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]
+      
+  solver:
+    minimizer: LEVENBERG_MARQUARDT
+    max_num_iterations: 20
+    verbose: 0
+    period: 0.0
+    n_threads: 2
+    update_immediately: false
+    min_num_iterations: 5 #if update immediately
+    compute_cov: false
+    cov_enum: 3
+    cov_period: 1
+    function_tolerance: 1e-8
+    gradient_tolerance: 1e-9
+    use_nonmonotonic_steps: false
+    
+  sensors:
+    ## MICROSTRAIN
+    - 
+      type: "SensorImu"
+      name: "IMU_odometer"
+      plugin: "imu"
+      extrinsic:
+        pose: [0,0,0,0,0,0,1]
+      a_noise:                0.053  #0.098     # standard deviation of Acceleration noise (same for all the axis) in m/s2 (1/1000 max value)
+      w_noise:                0.0011 #0.0012    # standard deviation of Gyroscope noise (same for all the axis) in rad/sec (1/1000 max value)
+      prior_bias:             true
+      ab_initial_stdev:       0.05     # m/s2    - initial bias 
+      wb_initial_stdev:       0.01     # rad/sec - initial bias 
+      bias_dynamic:           false
+      ab_rate_stdev:          0.00001    # m/s2/sqrt(s)           
+      wb_rate_stdev:          0.00001    # rad/s/sqrt(s)
+      
+    ## BNO055
+#    -
+#      type: "SensorImu"
+#      name: "IMU_odometer"
+#      plugin: "imu"
+#      extrinsic:
+#        pose: [0,0,0,0,0,0,1]
+#      a_noise:                0.53     # standard deviation of Acceleration noise (same for all the axis) in m/s2 (1/1000 max value)
+#      w_noise:                0.011    # standard deviation of Gyroscope noise (same for all the axis) in rad/sec (1/1000 max value)
+#      prior_bias:             true
+#      ab_initial_stdev:       0.05     # m/s2    - initial bias 
+#      wb_initial_stdev:       0.01     # rad/sec - initial bias 
+#      bias_dynamic:           false
+#      #ab_rate_stdev:          0.00001    # m/s2/sqrt(s)           
+#      #wb_rate_stdev:          0.00001    # rad/s/sqrt(s)
+    -
+      type: "SensorGnss"
+      name: "gnss"
+      plugin: "gnss"
+      extrinsic:
+         pose: [0, 0, 0]
+        #pose: [-0.135, -0.145, 0.230] # microstrain M600
+        #pose: [0.1, 1.36, 0.260] # MICROSTRAIN
+        #pose: [1.36, -0.04, 0.280] # BNO055
+      extrinsics_fixed: true
+      clock_bias_GPS_GLO_dynamic: false
+      clock_bias_GPS_GAL_dynamic: false
+      clock_bias_GPS_CMP_dynamic: false
+      ENU:
+        mode: "auto"
+        roll_fixed: true
+        pitch_fixed: true
+        yaw_fixed: true
+        translation_fixed: true
+        #ENU_latlonalt: [0.7092812341, 0.3998234412, 71.8593953932] # [40.6388212031 deg, 22.9081957302 deg, 71.8593953932 m] 
+
+  processors:
+    -
+      type: "ProcessorImu"
+      name: "processor IMU"
+      sensor_name: "IMU_odometer"
+      plugin: "imu"
+      time_tolerance: 0.005         # Time tolerance for joining KFs
+      unmeasured_perturbation_std: 0.001
+      keyframe_vote:
+         voting_active:      false
+         max_time_span:    99999   # seconds
+         max_buff_length:  99999   # motion deltas
+         dist_traveled:    99999   # meters
+         angle_turned:     99999   # radians (1 rad approx 57 deg, approx 60 deg)
+         cov_det:          99999
+      apply_loss_function: false
+      state_getter: true
+      state_priority: 1
+    -
+      type: "ProcessorTrackerGnss"
+      name: "processor gnss"
+      sensor_name: "gnss"
+      plugin: "gnss"
+      time_tolerance: 0.1
+      apply_loss_function: false
+      min_features_for_keyframe: 0 #4
+      max_new_features: -1 #unlimited
+      remove_outliers: true
+      remove_outliers_with_fix: true
+      outlier_residual_th: 10
+      init_frames: false
+      pseudo_ranges: true
+      enu_map_fix_dist: 5
+      fix: false
+      keyframe_vote:
+        voting_active: true
+        max_time_span: 0.5
+        min_features_for_keyframe: 4
+      gnss:
+        sateph: 6    # satellite ephemeris/clock: EPHOPT_BRDC(0):broadcast ephemeris, EPHOPT_PREC(1): precise ephemeris, EPHOPT_SBAS(2): broadcast + SBAS, EPHOPT_SSRAPC(3): broadcast + SSR_APC, EPHOPT_SSRCOM(4): broadcast + SSR_COM, EPHOPT_LEX(5): QZSS LEX ephemeris, EPHOPT_SBAS2(6):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), EPHOPT_SBAS3(7):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_SBAS2), EPHOPT_SBAS4(8):broadcast + SBAS(EPHOPT_SBAS if possible, otherwise EPHOPT_BRDC)
+        ionoopt: 9   # ionosphere option: IONOOPT_OFF(0):correction off, IONOOPT_BRDC(1):broadcast mode, IONOOPT_SBAS(2):SBAS model, IONOOPT_IFLC(3):L1/L2 or L1/L5, IONOOPT_EST(4):estimation, IONOOPT_TEC(5):IONEX TEC model, IONOOPT_QZS(6):QZSS broadcast, IONOOPT_LEX(7):QZSS LEX ionosphere, IONOOPT_STEC(8):SLANT TEC mode, IONOOPT_SBAS2(9):broadcast + SBAS(sats with SBAS corr and sats with BRDC eph), IONOOPT_SBAS3(10):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_SBAS2), IONOOPT_SBAS4(8):broadcast + SBAS(IONOOPT_SBAS if possible, otherwise IONOOPT_BRDC)
+        tropopt: 2   # troposphere option: (0:correction off,1:Saastamoinen model,2:SBAS model,3:troposphere option: ZTD estimation,4:ZTD+grad estimation,5:ZTD correction,6:ZTD+grad correction)
+        sbascorr: 15 # SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging)
+        raim: 1      # apply RAIM
+        elmin: 0.26  # elevation min (rad) = 15 degrees
+        maxgdop: 30  # reject threshold of gdop (ground dilusion of precision)
+        min_sbas_sats: 5 # used in case of EPHOPT_SBAS3, EPHOPT_SBAS4, IONOOPT_SBAS3, IONOOPT_SBAS4
+        constellations:
+          GPS: true
+          SBS: false
+          GLO: false
+          GAL: true
+          QZS: false
+          CMP: false
+          IRN: false
+          LEO: false
+        tdcp:
+          enabled: true
+          corr_iono: true
+          corr_tropo: true
+          corr_clock: false
+          loss_function: false
+          time_window: 10      # s
+          sigma_atm: 0.0016       # m/sqrt(s)
+          sigma_carrier: 0.0011   # m
+          multi_freq: false
+          remove_outliers: false
+          batch: false
+          structure: first-all
+      
+  ROS subscriber:
+    -
+      #type: "SubscriberGnssNovatel"
+      #topic: "/novatel/oem7/oem7raw"
+      type: "SubscriberGnssUblox"
+      topic: "/ublox_gps/raw_data_stream"
+      sensor_name: "gnss"
+      package: "wolf_ros_gnss"
+      process_not_available: false
+      reset_receiver: false
+      publish_fix: 
+        enabled: true
+        topic: "RTKLIB_fix"
+      gnss_options:
+        sateph: 6    # satellite ephemeris/clock (0:broadcast ephemeris,1:precise ephemeris,2:broadcast + SBAS,3:ephemeris option: broadcast + SSR_APC,4:broadcast + SSR_COM,5: QZSS LEX ephemeris
+        ionoopt: 9   # ionosphere option (0:correction off,1:broadcast mode,2:SBAS model,3:L1/L2 or L1/L5,4:estimation,5:IONEX TEC model,6:QZSS broadcast,7:QZSS LEX ionosphere,8:SLANT TEC mode)
+        tropopt: 2   # troposphere option: (0:correction off,1:Saastamoinen model,2:SBAS model,3:troposphere option: ZTD estimation,4:ZTD+grad estimation,5:ZTD correction,6:ZTD+grad correction)
+        sbascorr: 15 # SBAS option (1:long term correction,2:fast correction,4:ionosphere correction,8:ranging)
+        raim: 1      # apply RAIM n times
+        elmin: 0.26  # elevation min (rad) = 15 degrees
+        maxgdop: 30  # reject threshold of gdop (ground dilusion of precision)
+        constellations:
+          GPS: true
+          SBS: false
+          GLO: true
+          GAL: true
+          QZS: false
+          CMP: false
+          IRN: false
+          LEO: false
+    -
+      type: "SubscriberImuEnableable"
+      topic: "/bno055_imu/imu" #/imu/data
+      sensor_name: "IMU_odometer"
+      package: "wolf_ros_imu"
+      topic_enable: "gnss_available"
+      #imu_x_axis: 1
+      #imu_y_axis: -2
+      #imu_z_axis: -3
+      imu_x_axis: 1
+      imu_y_axis: 2
+      imu_z_axis: 3
+      cov_source: "msg"
+      in_degrees: true
+      static_init_duration: 30.0
+      lowpass_filter: true
+      lowpass_cutoff_freq: 10
+      dt: 0.01
+
+    #-
+      #type: "SubscriberGnssFixNovatelPublisherEcef"
+      #topic: "/novatel/oem7/bestpos" 
+      #sensor_name: "gnss"
+      #package: "wolf_ros_gnss"
+      #marker_color: [0,1,0,1]
+      #period: 0.1
+      
+  ROS publisher:
+    -
+      type: "PublisherPose"
+      topic: "current_pose"
+      package: "wolf_ros_node"
+      marker_color: [1,0,0,1]
+      period: 0.1
+      extrinsics: true
+      sensor: "gnss"
+      frame_id: "ENU"
+    -
+      type: "PublisherTf"
+      topic: " "
+      package: "wolf_ros_node"
+      period: 0.1
+      map_frame_id: "map"
+      odom_frame_id: "odom"
+      base_frame_id: "base"
+      publish_odom_tf: false
+    -
+      type: "PublisherGnssTf"
+      topic: " "
+      package: "wolf_ros_gnss"
+      period: 0.1
+      sensor_gnss_name: "gnss"
+    -
+      type: "PublisherGraph"
+      topic: "graph"
+      package: "wolf_ros_node"
+      period: 0.2