Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
standard_deviation_validator_test.cpp
Go to the documentation of this file.
1#include <gtest/gtest.h>
2
5
6// Non-owning deleter: does nothing.
7template <typename T>
8struct NonOwningDeleter {
9 void operator()(T*) const {}
10};
11
15class StandardDeviationTest : public ::testing::Test {
16public:
20 void SetUp() override { _point_cloud_ptr_ = nullptr; }
21 // We will create stack instances in each test.
22 pcl::PointCloud<pcl::PointXYZI>* _point_cloud_ptr_;
24};
25
29TEST_F(StandardDeviationTest, ZeroZDeviation) {
30 // Create a stack-allocated point cloud.
31 pcl::PointCloud<pcl::PointXYZI> cloud;
32 (void)cloud.emplace_back(1.0, 2.0, 10, 0.1);
33 (void)cloud.emplace_back(4.0, 5.0, 10, 0.2);
34 (void)cloud.emplace_back(7.0, 8.0, 10, 0.3);
35 // Wrap the stack object with a non-owning shared pointer.
36 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
37 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
38
39 // Create cluster using the wrapped point cloud.
40 auto cluster = Cluster(cloud_ptr);
41 const auto deviation_validator = DeviationValidator(-1, 100, 0.1, 100);
42
43 auto result = deviation_validator.coneValidator(&cluster, _plane_);
44 EXPECT_EQ(result.size(), 2);
45 ASSERT_NEAR(result[0], 1.0, 1e-6);
46 ASSERT_LT(result[1], 1.0);
47 ASSERT_GE(result[1], 0.0);
48}
49
53TEST_F(StandardDeviationTest, NonZeroZDeviation) {
54 pcl::PointCloud<pcl::PointXYZI> cloud;
55 (void)cloud.emplace_back(0.0, 0.0, 0.8, 0.8);
56 (void)cloud.emplace_back(0.0, 0.0, 0.1, 0.1);
57 (void)cloud.emplace_back(0.0, 0.0, 0.3, 0.3);
58 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
59 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
60
61 auto cluster = Cluster(cloud_ptr);
62 const auto deviation_validator = DeviationValidator(-1, 100, 0.1, 100);
63
64 auto result = deviation_validator.coneValidator(&cluster, _plane_);
65 EXPECT_EQ(result.size(), 2);
66 ASSERT_NEAR(result[0], 1.0, 1e-6);
67 ASSERT_NEAR(result[1], 1.0, 1e-6);
68}
69
73TEST_F(StandardDeviationTest, ZeroXoYDeviation) {
74 pcl::PointCloud<pcl::PointXYZI> cloud;
75 (void)cloud.emplace_back(1.0, 2.0, 10, 0.1);
76 (void)cloud.emplace_back(1.0, 2.0, 100, 0.2);
77 (void)cloud.emplace_back(1.0, 2.0, 100, 0.3);
78 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
79 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
80
81 auto cluster = Cluster(cloud_ptr);
82 const auto deviation_validator = DeviationValidator(0.1, 100, -1, 100);
83
84 auto result = deviation_validator.coneValidator(&cluster, _plane_);
85 EXPECT_EQ(result.size(), 2);
86 ASSERT_LT(result[0], 1.0);
87 ASSERT_GE(result[0], 0.0);
88 ASSERT_NEAR(result[1], 1.0, 1e-6);
89}
90
94TEST_F(StandardDeviationTest, NonZeroXoYDeviation) {
95 pcl::PointCloud<pcl::PointXYZI> cloud;
96 (void)cloud.emplace_back(1.0, 2.0, 10, 0.1);
97 (void)cloud.emplace_back(3.0, 5.0, 100, 0.2);
98 (void)cloud.emplace_back(10.0, -6.0, 100, 0.3);
99 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
100 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
101
102 auto cluster = Cluster(cloud_ptr);
103 const auto deviation_validator = DeviationValidator(0.1, 100, -1, 100);
104
105 auto result = deviation_validator.coneValidator(&cluster, _plane_);
106 EXPECT_EQ(result.size(), 2);
107 ASSERT_NEAR(result[0], 1.0, 1e-6);
108 ASSERT_NEAR(result[1], 1.0, 1e-6);
109}
110
114TEST_F(StandardDeviationTest, ZeroXoYAndZDeviation) {
115 pcl::PointCloud<pcl::PointXYZI> cloud;
116 (void)cloud.emplace_back(1.0, 2.0, 10, 0.1);
117 (void)cloud.emplace_back(1.0, 2.0, 10, 0.2);
118 (void)cloud.emplace_back(1.0, 2.0, 10, 0.3);
119 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
120 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
121
122 auto cluster = Cluster(cloud_ptr);
123 const auto deviation_validator = DeviationValidator(0.1, 100, 0.1, 100);
124
125 auto result = deviation_validator.coneValidator(&cluster, _plane_);
126 ASSERT_LT(result[0], 1.0);
127 ASSERT_GE(result[0], 0.0);
128 ASSERT_LT(result[1], 1.0);
129 ASSERT_GE(result[1], 0.0);
130}
131
135TEST_F(StandardDeviationTest, NonZeroXoYAndZDeviation) {
136 pcl::PointCloud<pcl::PointXYZI> cloud;
137 (void)cloud.emplace_back(1.0, 2.0, 0.8, 0.1);
138 (void)cloud.emplace_back(3.0, 5.0, 0.1, 0.2);
139 (void)cloud.emplace_back(10.0, -6.0, 0.3, 0.3);
140 const pcl::PointCloud<pcl::PointXYZI>::Ptr cloud_ptr(
141 &cloud, NonOwningDeleter<pcl::PointCloud<pcl::PointXYZI>>());
142
143 auto cluster = Cluster(cloud_ptr);
144 const auto deviation_validator = DeviationValidator(0.1, 100, 0.1, 100);
145
146 auto result = deviation_validator.coneValidator(&cluster, _plane_);
147 ASSERT_NEAR(result[0], 1.0, 1e-6);
148 ASSERT_NEAR(result[1], 1.0, 1e-6);
149}
Represents a cluster of 3D points using PCL (Point Cloud Library).
Definition cluster.hpp:14
Validates clusters using the standard deviation on xOy plane and on the z axis.
The Plane class represents a 3D plane defined by its equation ax + by + cz + d = 0.
Definition plane.hpp:12
Fixture for testing the DeviationValidator class.
void SetUp() override
Set up the test fixtures.
pcl::PointCloud< pcl::PointXYZI > * _point_cloud_ptr_
TEST_F(StandardDeviationTest, ZeroZDeviation)
Test case to validate a cluster with zero Z standard deviation.