9 #include <gtest/gtest.h> 18 namespace grid_map_pcl_test {
20 TEST(GridMapPclLoaderTest, FlatGroundRealDataset)
31 const auto& gridMap = gridMapPclLoader.
getGridMap();
34 EXPECT_TRUE(!elevationValues.empty());
38 double referenceElevation = elevationValues.front();
39 for (
const auto& elevation : elevationValues) {
40 EXPECT_NEAR(elevation, referenceElevation, 3e-2);
44 TEST(GridMapPclLoaderTest, PerfectPlane)
47 const auto seed = rand();
50 const int numTests = 10;
51 for (
int i = 0; i < numTests; ++i) {
58 EXPECT_TRUE(!elevationValues.empty());
60 const double tolerance = 1e-5;
61 for (
const auto& elevation : elevationValues) {
62 EXPECT_NEAR(elevation, height, tolerance);
66 if (::testing::Test::HasFailure()) {
67 std::cout <<
"\n Test PerfectPlane failed with seed: " << seed << std::endl;
71 TEST(GridMapPclLoaderTest, NoisyPlane)
74 const auto seed = rand();
77 const int numTests = 10;
78 for (
int i = 0; i < numTests; ++i) {
86 EXPECT_TRUE(!elevationValues.empty());
87 for (
const auto& elevation : elevationValues) {
88 EXPECT_NEAR(elevation, height, 3 * stdDevZ);
92 if (::testing::Test::HasFailure()) {
93 std::cout <<
"\n Test NoisyPlane failed with seed: " << seed << std::endl;
97 TEST(GridMapPclLoaderTest, NoisyDoublePlane)
100 const auto seed = rand();
103 double minZ, stdDevZ;
109 EXPECT_TRUE(!elevationValues.empty());
110 for (
const auto& elevation : elevationValues) {
111 EXPECT_NEAR(elevation, minZ, 3 * stdDevZ);
114 if (::testing::Test::HasFailure()) {
115 std::cout <<
"\n Test NoisyDoublePlane failed with seed: " << seed << std::endl;
119 TEST(GridMapPclLoaderTest, InitializeGeometry)
122 const auto seed = rand();
125 const unsigned int numTests = 1000;
126 for (
unsigned int i = 0; i < numTests; ++i) {
127 double xLocation, yLocation;
136 const double tolerance = 1e-5;
137 EXPECT_NEAR(center.x(), 0.0, tolerance);
138 EXPECT_NEAR(center.y(), 0.0, tolerance);
139 auto length = gridMap.getLength();
140 EXPECT_NEAR(length.x(), std::round(2 * xLocation), tolerance);
141 EXPECT_NEAR(length.y(), std::round(2 * yLocation), tolerance);
146 if (::testing::Test::HasFailure()) {
147 std::cout <<
"\n Test InitializeGeometry failed with seed: " << seed << std::endl;
151 TEST(GridMapPclLoaderTest, NoisyStepTerrain)
154 const auto seed = rand();
157 const int numTests = 10;
158 for (
int i = 0; i < numTests; ++i) {
159 double stepLocationX, zHigh, zLow, stdDevZ;
165 EXPECT_TRUE(!coordinates.empty());
166 for (
const auto& coordinate : coordinates) {
167 if (coordinate.x() > stepLocationX) {
168 EXPECT_NEAR(coordinate.z(), zHigh, 3 * stdDevZ);
170 if (coordinate.x() < stepLocationX) {
171 EXPECT_NEAR(coordinate.z(), zLow, 3 * stdDevZ);
176 if (::testing::Test::HasFailure()) {
177 std::cout <<
"\n Test NoisyStepTerrain failed with seed: " << seed << std::endl;
182 TEST(GridMapPclLoaderTest, CalculateElevation)
185 const auto seed = rand();
188 const unsigned int numTests = 10;
189 for (
unsigned int i = 0; i < numTests; ++i) {
190 double minZ, stdDevZ;
197 std::vector<float> clusterHeights;
199 const float elevation = *std::min_element(clusterHeights.begin(), clusterHeights.end());
200 EXPECT_NEAR(elevation, minZ, 3 * stdDevZ);
203 if (::testing::Test::HasFailure()) {
204 std::cout <<
"\n Test CalculateElevation failed with seed: " << seed << std::endl;
208 TEST(GridMapPclLoaderTest, SavePointclouds)
215 const auto seed = rand();
218 double dummyDouble1, dummyDouble2, dummyDouble3, dummyDouble4;
static Pointcloud::Ptr createNoisyPlane(double *height, double *stdDevZ)
std::vector< Eigen::Vector3d > getNonNanElevationValuesWithCoordinates(const grid_map::GridMap &gridMap)
void loadParameters(const std::string &filename)
std::string getConfigFilePath()
void initializeGridMapGeometryFromInputCloud()
static Pointcloud::Ptr createNBlobsAboveEachOther(double *minZ, double *stdDevZ, int *nBlobs)
void runGridMapPclLoaderOnInputCloud(Pointcloud::ConstPtr inputCloud, grid_map::GridMapPclLoader *gridMapPclLoader)
void loadCloudFromPcdFile(const std::string &filename)
TEST(GridMapPclLoaderTest, FlatGroundRealDataset)
static Pointcloud::Ptr createNoisyPointcloudOfStepTerrain(double *stepLocation, double *zHigh, double *zLow, double *stdDev)
std::vector< double > getNonNanElevationValues(const grid_map::GridMap &gridMap)
const grid_map::GridMap & getGridMap() const
static Pointcloud::Ptr createNoisyDoublePlane(double *minZ, double *stdDevZ)
void addLayerFromInputCloud(const std::string &layer)
void setInputCloud(Pointcloud::ConstPtr inputCloud)
void setVerbosityLevel(ros::console::levels::Level level)
std::mt19937 rndGenerator
void preProcessInputCloud()
static const bool savePointclouds
static const std::string layerName
static Pointcloud::Ptr createPerfectPlane(double *height)
static Pointcloud::Ptr createVerticesOfASquare(double *x, double *y)
static Pointcloud::Ptr createBlobOfPoints(double *mean, double *stdDev)
std::string getTestDataFolderPath()
void calculateElevationFromPointsInsideGridMapCell(Pointcloud::ConstPtr cloud, std::vector< float > &heights) const
TFSIMD_FORCE_INLINE tfScalar length(const Quaternion &q)
void savePointCloudAsPcdFile(const std::string &filename) const
std::string getTestPcdFilePath()
bool getPosition(const Index &index, Position &position) const