Formula Student Autonomous Systems
The code for the main driverless system
Loading...
Searching...
No Matches
ransac_test.cpp
Go to the documentation of this file.
1
#include "
ground_removal/ransac.hpp
"
2
3
#include <gtest/gtest.h>
4
5
#include <memory>
6
#include <
test_utils/pointcloud2_helper.hpp
>
7
#include <
utils/plane.hpp
>
8
13
class
RANSACTest
:
public
::testing::Test {
14
protected
:
15
void
SetUp
()
override
{
16
cloud_pts
= {{1.0, 0.0, 0.0, 0.5, 0},
17
{0.0, 1.0, 0.0, 1.0, 0},
18
{0.0, 0.0, 1.0, 1.5, 0},
19
{0.0060, 0.0060, 0.0060, 2.0, 0},
20
{10, 10, 10, 2.5, 0}};
21
empty_cloud_pts
= {};
22
cloud_3_pts
= {{1.0, 0.0, 0.0, 0.5, 0}, {0.0, 1.0, 0.0, 1.0, 0}, {0.0, 0.0, 1.0, 1.5, 0}};
23
}
24
25
std::vector<std::array<float, 5>>
cloud_pts
;
26
std::vector<std::array<float, 5>>
empty_cloud_pts
;
27
std::vector<std::array<float, 5>>
cloud_3_pts
;
28
29
GroundGrid
default_grid
{30.0, 0.1, 0.5, 10.0, 0.1, 3.14};
30
};
31
36
TEST_F
(
RANSACTest
, TestBigEpsilon) {
37
const
RANSAC
ground_removal(10'000, 1);
38
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
39
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
40
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
41
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
42
}
43
48
TEST_F
(
RANSACTest
, TestCommonScenario) {
49
const
RANSAC
ground_removal(0.05, 100);
50
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
51
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
52
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
53
ASSERT_EQ(ground_removed_cloud_ptr->width, 2);
54
}
55
60
TEST_F
(
RANSACTest
, TestCommonScenario2) {
61
const
RANSAC
ground_removal(0.5, 100);
62
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
63
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
64
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
65
ASSERT_EQ(ground_removed_cloud_ptr->width, 1);
66
}
67
72
TEST_F
(
RANSACTest
, TestThresholdZero) {
73
const
RANSAC
ground_removal(0, 10);
74
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
75
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
76
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
77
ASSERT_EQ(ground_removed_cloud_ptr->width, 5);
78
}
79
84
TEST_F
(
RANSACTest
, TestZeroRepetitions) {
85
const
RANSAC
ground_removal(100, 0);
86
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
87
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
88
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
89
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
90
}
91
97
TEST_F
(
RANSACTest
, TestSmallEpsilon) {
98
const
RANSAC
ground_removal(0.000'000'000'000'000'01, 40);
99
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
100
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
101
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
102
ASSERT_EQ(ground_removed_cloud_ptr->width, 2);
103
}
104
109
TEST_F
(
RANSACTest
, TestBigEpsilon2) {
110
const
RANSAC
ground_removal(1'000'000, 1);
111
auto
cloud_ptr =
test_utils::make_lidar_pointcloud2
(cloud_pts);
112
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
113
ground_removal.
ground_removal
(cloud_ptr, ground_removed_cloud_ptr, default_grid);
114
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
115
}
116
122
TEST_F
(
RANSACTest
, TestCommonScenario3Points) {
123
const
RANSAC
ground_removal(100, 100);
124
auto
cloud3_ptr =
test_utils::make_lidar_pointcloud2
(cloud_3_pts);
125
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
126
ground_removal.
ground_removal
(cloud3_ptr, ground_removed_cloud_ptr, default_grid);
127
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
128
}
129
135
TEST_F
(
RANSACTest
, Test3PointsThresholdZero) {
136
const
RANSAC
ground_removal(0, 100);
137
auto
cloud3_ptr =
test_utils::make_lidar_pointcloud2
(cloud_3_pts);
138
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
139
ground_removal.
ground_removal
(cloud3_ptr, ground_removed_cloud_ptr, default_grid);
140
ASSERT_EQ(ground_removed_cloud_ptr->width, 3);
141
}
142
147
TEST_F
(
RANSACTest
, TestEmptyPointCloud) {
148
const
RANSAC
ground_removal(100, 100);
149
auto
empty_ptr =
test_utils::make_lidar_pointcloud2
(empty_cloud_pts);
150
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
151
ground_removal.
ground_removal
(empty_ptr, ground_removed_cloud_ptr, default_grid);
152
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
153
}
154
160
TEST_F
(
RANSACTest
, TestEmptyPointCloud2) {
161
const
RANSAC
ground_removal(0, 0);
162
auto
empty_ptr =
test_utils::make_lidar_pointcloud2
(empty_cloud_pts);
163
auto
ground_removed_cloud_ptr =
test_utils::make_lidar_pointcloud2
({});
164
ground_removal.
ground_removal
(empty_ptr, ground_removed_cloud_ptr, default_grid);
165
ASSERT_EQ(ground_removed_cloud_ptr->width, 0);
166
}
GroundGrid
Class to represent a ground height grid for ground proximity checks.
Definition
ground_grid.hpp:16
RANSAC
Ground removal using the RANSAC algorithm.
Definition
ransac.hpp:12
RANSAC::ground_removal
void ground_removal(const sensor_msgs::msg::PointCloud2::SharedPtr &trimmed_point_cloud, sensor_msgs::msg::PointCloud2::SharedPtr &ground_removed_point_cloud, GroundGrid &ground_grid) const override
Perform ground removal using the RANSAC algorithm.
Definition
ransac.cpp:8
RANSACTest
Test class for setting up data and testing RANSAC algorithm.
Definition
ransac_test.cpp:13
RANSACTest::SetUp
void SetUp() override
Definition
ransac_test.cpp:15
RANSACTest::cloud_pts
std::vector< std::array< float, 5 > > cloud_pts
Definition
ransac_test.cpp:25
RANSACTest::default_grid
GroundGrid default_grid
Definition
ransac_test.cpp:29
RANSACTest::empty_cloud_pts
std::vector< std::array< float, 5 > > empty_cloud_pts
Definition
ransac_test.cpp:26
RANSACTest::cloud_3_pts
std::vector< std::array< float, 5 > > cloud_3_pts
Definition
ransac_test.cpp:27
test_utils::make_lidar_pointcloud2
sensor_msgs::msg::PointCloud2::SharedPtr make_lidar_pointcloud2(const std::vector< std::array< float, 5 > > &pts)
Definition
pointcloud2_helper.hpp:6
plane.hpp
pointcloud2_helper.hpp
ransac.hpp
TEST_F
TEST_F(RANSACTest, TestBigEpsilon)
Test Scenario: All points fit in the model.
Definition
ransac_test.cpp:36
src
perception
test
ground_removal
ransac_test.cpp
Generated by
1.9.8