From 65cce288dca0bff2068e4438ec494eb3ddfb1cd8 Mon Sep 17 00:00:00 2001 From: Jan Kowalczyk Date: Fri, 7 Mar 2025 11:37:50 +0100 Subject: [PATCH] more data chapter text and one figure --- thesis/Main.tex | 39 +++++++++++++++++++++++------ thesis/figures/data_points_pie.png | Bin 0 -> 45910 bytes tools/poetry.lock | 16 +++++++++++- 3 files changed, 47 insertions(+), 8 deletions(-) create mode 100644 thesis/figures/data_points_pie.png diff --git a/thesis/Main.tex b/thesis/Main.tex index 81ee574..f8af2d5 100755 --- a/thesis/Main.tex +++ b/thesis/Main.tex @@ -328,8 +328,11 @@ For training, explicit labels are generally not required because the semi-superv \newsubsubsectionNoTOC{Chosen Dataset} -Based on the previously discussed requirements and labeling difficulties we decided to train and evaluate the methods on \emph{Multimodal Dataset from Harsh Sub-Terranean Environment with Aerosol Particles for Frontier Exploration}~\cite{subter}. The dataset is comprised of data from multiple sensors on a moving sensor platform which was driven through tunnels and rooms in a subterranean setting. What makes it especially fitting for our use case is that during some of the experiments where data was captured, an artifical smoke machine was employed to simulate aerosol particles. -The sensors employed during capture of the dataset include: + %\todo[inline, color=green!40]{list sensors on the platform} +%Based on the previously discussed requirements and labeling difficulties we decided to train and evaluate the methods on \emph{Multimodal Dataset from Harsh Sub-Terranean Environment with Aerosol Particles for Frontier Exploration}~\cite{subter}. The dataset is comprised of data from multiple sensors on a moving sensor platform which was driven through tunnels and rooms in a subterranean setting. What makes it especially fitting for our use case is that during some of the experiments, an artifical smoke machine was employed to simulate aerosol particles. +%The sensors employed during capture of the dataset include: +Based on the previously discussed requirements and the challenges of obtaining reliable labels, we selected the \emph{Multimodal Dataset from Harsh Sub-Terranean Environment with Aerosol Particles for Frontier Exploration}~\cite{subter} for training and evaluation. This dataset comprises multimodal sensor data collected from a moving platform navigating tunnels and rooms in a subterranean environment. Notably, some experiments incorporated an artificial smoke machine to simulate aerosol particles, making the dataset particularly well-suited to our use case. The sensors used during data capture include: + \begin{itemize} \item Lidar - Ouster OS1-32 \item mmWave RADARs - 4 IWR6843AoP ES2.0 based radar models @@ -337,11 +340,33 @@ The sensors employed during capture of the dataset include: \item IR-enabled RBG-D Camera - OAK-D Pro \item IMU - Pixhawk 2.1 Cube Orange, \end{itemize} -We mainly utilize the data from the \emph{Ouster OS1-32} lidar sensor, which produces 10 frames per second with a resolution of 32 vertical channels by 2048 measurements per channel, both equiangularly spaced over the vertical and horizontal fields of view of 42.4° and 360° respectively. + %\todo[inline, color=green!40]{lidar data of 360° sensor is captured at 10 frames per second. each sensor output consists of pointcloud which resulted from measurement of 32 vertical channels for each of which 2048 measurement points are taken during each measurement equiangular distributed around the whole horizontal 360°, so the sensor measures 32 * 2048 = 65536 measurements 10 times a second for which ideally every one produces a point in the pointcloud consisting of x,y,z coordinates (relative to sensor platform) as well as some other values per measurement (reflectivity, intensity originally measured range value)} - \todo[inline, color=green!40]{list sensors on the platform} - \todo[inline, color=green!40]{talk about how much data is available (maybe a plot about data?), number of experiments with/without degradation, other factors in these experiments which do not concern our use-case of them} - \todo[inline, color=green!40]{lidar data of 360° sensor is captured at 10 frames per second. each sensor output consists of pointcloud which resulted from measurement of 32 vertical channels for each of which 2048 measurement points are taken during each measurement equiangular distributed around the whole horizontal 360°, so the sensor measures 32 * 2048 = 65536 measurements 10 times a second for which ideally every one produces a point in the pointcloud consisting of x,y,z coordinates (relative to sensor platform) as well as some other values per measurement (reflectivity, intensity originally measured range value)} +%We mainly utilize the data from the \emph{Ouster OS1-32} lidar sensor, which produces 10 frames per second with a resolution of 32 vertical channels by 2048 measurements per channel, both equiangularly spaced over the vertical and horizontal fields of view of 42.4° and 360° respectively. Every measurement of the lidar therefore results in a pointcloud with a maximum of 65536 points. Every point contains the \emph{X}, \emph{Y} and \emph{Z} coordinates in meters with the sensor location as origin, as well as values for the \emph{range}, \emph{intensity} and \emph{reflectivity} which are typical data measured by lidar sensors. The data is dense, meaning missing measurements are still present in the data of each pointcloud with zero values for most fields. + +We use data from the \emph{Ouster OS1-32} LiDAR sensor, which was configured to capture 10 frames per second with a resolution of 32 vertical channels and 2048 measurements per channel. These settings yield equiangular measurements across a vertical field of view of 42.4° and a complete 360° horizontal field of view. Consequently, every LiDAR scan can generate up to 65,536 points. Each point contains the \emph{X}, \emph{Y}, and \emph{Z} coordinates (in meters, with the sensor location as the origin) along with values for \emph{range}, \emph{intensity}, and \emph{reflectivity}—typical metrics measured by LiDAR sensors. Although the dataset is considered dense, each point cloud still contains missing measurements, with fields of these missing measurements registering as zero. + +%During the measurement campaign 14 experiments were conducted, of which 10 did not contain the utilization of the artifical smoke machine and 4 which did contain the artifical degradation, henceforth refered to as normal and anomalous experiments respectively. During 13 of the experiments the sensor platform was in near constant movement (sometimes translation - sometimes rotation) with only 1 anomalous experiment having the sensor platform stationary. This means we do not have 2 stationary experiments to directly compare the data from a normal and an anomalous experiment, where the sensor platform was not moved, nonetheless the genereal experiments are similar enough for direct comparisons. During anomalous experiments the artifical smoke machine appears to have been running for some time before data collection, since in camera images and lidar data alike, the water vapor appears to be distributed quite evenly throughout the closer perimeter of the smoke machine. The stationary experiment is also unique in that the smoke machine is quite close to the sensor platform and actively produces new smoke, which is dense enough for the lidar data to see the surface of the newly produced water vapor as a solid object. + +During the measurement campaign, 14 experiments were conducted—10 without the artificial smoke machine (hereafter referred to as normal experiments) and 4 with it (anomalous experiments). In 13 of these experiments, the sensor platform was in near-constant motion (either translating or rotating), with only one anomalous experiment conducted while the platform remained stationary. Although this means we do not have two stationary experiments for a direct comparison between normal and anomalous conditions, the overall experiments are similar enough to allow for meaningful comparisons. + +In the anomalous experiments, the artificial smoke machine appears to have been running for some time before data collection began, as evidenced by both camera images and LiDAR data showing an even distribution of water vapor around the machine. The stationary experiment is particularly unique: the smoke machine was positioned very close to the sensor platform and was actively generating new, dense smoke, to the extent that the LiDAR registered the surface of the fresh water vapor as if it were a solid object. + + +\todo[inline, color=green!40]{shortly mention the differences in conditions for these experiments and why they do not matter for us} +\todo[inline, color=green!40]{include representative image of pointcloud and camera image} + + %\todo[inline, color=green!40]{talk about how much data is available (maybe a plot about data?), number of experiments with/without degradation, other factors in these experiments which do not concern our use-case of them} +%Regarding the amount of data, of the 10 normal experiments the shortest was 88.7 seconds and the longest 363.1 seconds with a mean of 157.65 seconds between all 10 experiments, which results in 15765 non-degraded pointclouds. Of the 4 anomalous experiments, the shortest was the stationary one with 11.7 seconds and the longest was 62.1 seconds, having a mean of 47.325 seconds, resulting in 1893 degraded pointclouds. This gives us 17658 pointclouds alltogether with 89.28\% of them being non-degraded/normal samples and the other 10.72\% of them begin degraded/anomalous samples. + +Regarding the dataset volume, the 10 normal experiments ranged from 88.7 to 363.1 seconds, with an average duration of 157.65 seconds. At a capture rate of 10 frames per second, these experiments yield 15,765 non-degraded point clouds. In contrast, the 4 anomalous experiments, including one stationary experiment lasting 11.7 seconds and another extending to 62.1 seconds, averaged 47.33 seconds, resulting in 1,893 degraded point clouds. In total, the dataset comprises 17,658 point clouds, with approximately 89.28\% classified as non-degraded (normal) and 10.72\% as degraded (anomalous). The distribution of experimental data is visualized in figure~\ref{fig:data_points_pie}. + + \begin{figure} + \begin{center} + \includegraphics[width=0.9\textwidth]{figures/data_points_pie.png} + \end{center} + \caption{Pie chart visualizing the amount and distribution of normal and anomalous pointclouds in \cite{subter}}\label{fig:data_points_pie} + \end{figure} %BEGIN missing points As we can see in figure~\ref{fig:data_missing_points}, the artifical smoke introduced as explicit degradation during some experiments results in more missing measurements during scans, which can be explained by measurement rays hitting airborne particles but not being reflected back to the sensor in a way it can measure. @@ -370,7 +395,7 @@ While the density of these near-sensor returns might be used to estimate data qu \end{figure} %END early returns - \newsection{Preprocessing Steps}{sec:preprocessing} + \newsection{Preprocessing Steps and Labeling}{sec:preprocessing} \todo[inline]{describe how 3d lidar data was preprocessed (2d projection), labeling} \todo[inline]{screenshots of 2d projections?} diff --git a/thesis/figures/data_points_pie.png b/thesis/figures/data_points_pie.png new file mode 100644 index 0000000000000000000000000000000000000000..149d766be7a0d139bc90ed9dc478787fb3e20a63 GIT binary patch literal 45910 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 literal 0 HcmV?d00001 diff --git a/tools/poetry.lock b/tools/poetry.lock index 1fc61b8..2271f0a 100644 --- a/tools/poetry.lock +++ b/tools/poetry.lock @@ -2207,6 +2207,20 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + [[package]] name = "tenacity" version = "8.4.1" @@ -2431,4 +2445,4 @@ cffi = ["cffi (>=1.11)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "cd1f01135a813fbbc06da686dfa67b0981d26ccb3038f7d0e4a17359326f2c8d" +content-hash = "c6a64aff88014d6d08ed4deb5ef116e51e962559656b6cb78c88cd7f5ff50c2d"