ScanClustering.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @author Fabian Reister ( fabian dot reister at kit dot edu )
17 * @date 2021
18 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19 * GNU General Public License
20 */
21
22#pragma once
23
24#include <vector>
25
26#include <RobotAPI/interface/units/LaserScannerUnit.h>
27
29{
30 namespace detail
31 {
33 {
34 // Clustering options to decide whether a point belongs to the cluster
35 float distanceThreshold; // [mm]
36 float angleThreshold; // [rad]
37
38 /// Range filter: only consider points that are closer than maxDistance
39 float maxDistance; // [mm]
40 };
41 } // namespace detail
42
44 {
45 public:
47 using Clusters = std::vector<LaserScan>;
48
49 ScanClustering(const Params& params);
50
51 /**
52 * @brief Performs cluster detection on a full laser scan.
53 *
54 * @param scan A full scan
55 * @return The input scan split into clusters.
56 */
57 Clusters detectClusters(const LaserScan& scan);
58
59 protected:
60 const LaserScan& cluster() const;
61
62 bool add(const LaserScanStep& scanStep);
63 bool supports(const LaserScanStep& scanStep);
64
65 void clear();
66
67 private:
68 LaserScan scan;
69
70 const Params params;
71 };
72
73} // namespace armarx::navigation::components::laser_scanner_feature_extraction
Clusters detectClusters(const LaserScan &scan)
Performs cluster detection on a full laser scan.
float maxDistance
Range filter: only consider points that are closer than maxDistance.