From 07d3f4462f44beefb392941566c2e507d54d1726 Mon Sep 17 00:00:00 2001
From: idelpino <telecosg@gmail.com>
Date: Thu, 18 Apr 2024 12:53:35 +0200
Subject: [PATCH] Update Readme.md

---
 .gitmodules                         |  1 +
 README.md                           | 33 +++++++++++++++++++++--------
 kf_based_terrain_analysis           |  2 +-
 params/iri_ground_segmentation.yaml |  2 +-
 4 files changed, 27 insertions(+), 11 deletions(-)

diff --git a/.gitmodules b/.gitmodules
index 40da8b2..d001770 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,4 @@
 [submodule "kf_based_terrain_analysis"]
 	path = kf_based_terrain_analysis
 	url = https://gitlab.iri.upc.edu/idelpino/kf_based_terrain_analysis
+        branch = main
diff --git a/README.md b/README.md
index 6f5abc7..223ec8f 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,36 @@
-We are pleased to share the code repository associated with our paper, “Probabilistic Graph-based Real-Time Ground Segmentation for Urban Robotics.” This paper has been accepted for publication in the IEEE Transactions on Intelligent Vehicles. You can access the Early Access Version of the paper here: https://ieeexplore.ieee.org/document/10487036
+We are pleased to share the code repository associated with our paper, “Probabilistic Graph-based Real-Time Ground Segmentation for Urban Robotics.”
+This paper has been accepted for publication in the IEEE Transactions on Intelligent Vehicles. 
+
+You can access the Early Access Version of the paper here: https://ieeexplore.ieee.org/document/10487036
 
 Currently, our team is diligently working on cleaning and documenting the repository. In just a few days, it will be fully prepared and ready for exploration!
 
 ---
 
-This package implements a ROS node for traversable ground / non-traversable ground / obstacle and overhanging obstacle segmentation. It provides the interface to the library kf_based_terrain_analysis, which angularly exploring a poincloud from the origin to the limits, generates a graph of ground references containing their 2D coordinates (XY) and three Gaussian variables (Z, slope in X (tan(pitch)) and slope in Y (tan(roll))) with means and variances. These three variables are estimated by means of a Kalman Filter.
+ROS Node for Ground Segmentation and Obstacle Detection
+
+This package contains a ROS node designed for ground segmentation and obstacle detection. It interfaces with the kf_based_terrain_analysis library, which generates a probabilistic ground model. Let’s dive into the details:
+Features:
 
-Dependences: 
+    Ground Model Generation:
+        The ground model consists of nodes with 2D coordinates (XY) and three Gaussian variables: Z (height), slope in X (tan(pitch)), and slope in Y (tan(roll)).
+        These Gaussian variables are described by means and variances.
+        The model predicts a Gaussian distribution in the Z-axis for any desired XY coordinate, allowing us to treat obstacle detection as an outlier rejection problem.
 
-1) gnss_lidar_navigation_preprocessing (https://gitlab.iri.upc.edu/idelpino/gnss_lidar_navigation_preprocessing):
+    Traversable vs. Non-Traversable Ground:
+        To distinguish between traversable and non-traversable ground, we employ a shallow neural network.
+        The neural network operates on features extracted from the ground model.
+        We provide two pre-trained neural networks:
+            ROAD Detection: This network identifies ROAD areas (which are considered traversable).
+            TERRAIN and VEGETATION Classification: This network classifies TERRAIN and VEGETATION as non-traversable classes.
+        The neural networks were trained in Matlab, and their weights were exported in .csv files.
 
-Regarding the ground segmentation algorithm it provides:
-- A node to adapt the input point cloud to the format internally used by the kf_based_terrain_analysis. 
-- And a node for fusing two pointclouds into one (for the ADD robot).
+Usage:
 
-2) the kf_based_terrain_analysis library (https://gitlab.iri.upc.edu/idelpino/kf_based_terrain_analysis)
+    Input Point Clouds:
+        The ROS node accepts two types of input point clouds:
+            XYZI Point Cloud (Topic: “lidar_points”): Use this for interfacing with LiDAR sensors.
+            XYZIRGBL Point Cloud: Use this for training. To generate this input, follow the instructions in the semantickitti2bag repository.
 
-To launch the whole ground segmentation pipeline for the ADD robot just roslaunch the iri_ground_segmentation add_ground_segmentation_pipeline.launch 
 
 
diff --git a/kf_based_terrain_analysis b/kf_based_terrain_analysis
index c1be17b..61c1886 160000
--- a/kf_based_terrain_analysis
+++ b/kf_based_terrain_analysis
@@ -1 +1 @@
-Subproject commit c1be17b68e5a1af56cdb1a050b45374b1bce963c
+Subproject commit 61c1886b8227e98ec5315dfb2f8f05d011f982ff
diff --git a/params/iri_ground_segmentation.yaml b/params/iri_ground_segmentation.yaml
index 6403f9c..613c87a 100644
--- a/params/iri_ground_segmentation.yaml
+++ b/params/iri_ground_segmentation.yaml
@@ -37,7 +37,7 @@ iri_ground_segmentation: {
 
   # Neural Network related parameters
   use_neural_network: true,
-  extract_data_to_external_training_of_the_network: false,
+  extract_data_to_external_training_of_the_network: true,
   dataset_filename_with_global_path: '/home/idelpino/Documentos/dataset.csv', # This is the filename with path where the data for neural net training is dumped
   neural_net_filename_with_global_path: '/home/idelpino/iri-lab/ground_segmentation_ws/src/iri_ground_segmentation/shallow_neural_nets/veg_terrain_and_obs_13_features_39_neurons.csv',
   neural_net_number_of_features: 13,
-- 
GitLab