test_map.cpp
Go to the documentation of this file.
1 /*
2  * test_map.cpp
3  *
4  * Created on: July 21, 2014
5  * Author: Markus Bader
6  */
7 
8 #include <gtest/gtest.h>
9 #include <mrpt/ros1bridge/map.h>
10 #define __STDC_FORMAT_MACROS
11 #include <inttypes.h>
12 
13 #include <nav_msgs/OccupancyGrid.h>
14 #include <ros/console.h>
15 
16 #include <mrpt/version.h>
17 #include <mrpt/maps/COccupancyGridMap2D.h>
18 using mrpt::maps::COccupancyGridMap2D;
19 
20 void getEmptyRosMsg(nav_msgs::OccupancyGrid& msg)
21 {
22  msg.info.width = 300;
23  msg.info.height = 500;
24  msg.info.resolution = 0.1;
25  msg.info.origin.position.x = rand() % 10 - 5;
26  msg.info.origin.position.y = rand() % 10 - 5;
27  msg.info.origin.position.z = 0;
28 
29  msg.info.origin.orientation.x = 0;
30  msg.info.origin.orientation.y = 0;
31  msg.info.origin.orientation.z = 0;
32  msg.info.origin.orientation.w = 1;
33 
34  msg.data.resize(msg.info.width * msg.info.height, -1);
35 }
36 
37 TEST(Map, basicTestHeader)
38 {
39  nav_msgs::OccupancyGrid srcRos;
40  COccupancyGridMap2D desMrpt;
41 
42  getEmptyRosMsg(srcRos);
43 
44  srcRos.info.origin.orientation.x = 1; // roated maps are not supported
45  EXPECT_FALSE(mrpt::ros1bridge::fromROS(srcRos, desMrpt));
46 
47  srcRos.info.origin.orientation.x = 0; // fix rotation
48  EXPECT_TRUE(mrpt::ros1bridge::fromROS(srcRos, desMrpt));
49 
50  EXPECT_EQ(srcRos.info.width, desMrpt.getSizeX());
51  EXPECT_EQ(srcRos.info.height, desMrpt.getSizeY());
52  EXPECT_EQ(srcRos.info.resolution, desMrpt.getResolution());
53  for (uint32_t h = 0; h < srcRos.info.width; h++)
54  {
55  for (uint32_t w = 0; w < srcRos.info.width; w++)
56  {
57  // all -1 entries should map to 0.5
58  EXPECT_EQ(desMrpt.getPos(w, h), 0.5);
59  }
60  }
61 }
62 
63 TEST(Map, check_ros2mrpt_and_back)
64 {
65  nav_msgs::OccupancyGrid srcRos;
66  COccupancyGridMap2D desMrpt;
67  nav_msgs::OccupancyGrid desRos;
68 
69  getEmptyRosMsg(srcRos);
70 
71  ASSERT_TRUE(mrpt::ros1bridge::fromROS(srcRos, desMrpt));
72  ASSERT_TRUE(mrpt::ros1bridge::toROS(desMrpt, desRos, desRos.header));
73  for (uint32_t h = 0; h < srcRos.info.width; h++)
74  {
75  for (uint32_t w = 0; w < srcRos.info.width; w++)
76  {
77  EXPECT_EQ(
78  desRos.data[h * srcRos.info.width + h],
79  50); // all -1 entreis should map to 50
80  }
81  }
82 
83  for (int i = 0; i <= 100; i++)
84  {
85  srcRos.data[i] = i;
86  }
87  EXPECT_TRUE(mrpt::ros1bridge::fromROS(srcRos, desMrpt));
88  EXPECT_TRUE(mrpt::ros1bridge::toROS(desMrpt, desRos, desRos.header));
89  for (int i = 0; i <= 100; i++)
90  {
91  // printf("%4i, %4.3f = %4.3f,%4i\n", srcRos.data[i],
92  // 1-((float)i)/100.0, desMrpt.getCell(i,0), desRos.data[i]);
93  EXPECT_NEAR(1 - ((float)i) / 100.0, desMrpt.getCell(i, 0), 0.03)
94  << "ros to mprt";
95  EXPECT_NEAR(srcRos.data[i], desRos.data[i], 1) << "ros to mprt to ros";
96  }
97 }
#define EXPECT_NEAR(a, b, prec)
#define EXPECT_FALSE(args)
#define EXPECT_EQ(a, b)
TEST(Map, basicTestHeader)
Definition: test_map.cpp:37
void getEmptyRosMsg(nav_msgs::OccupancyGrid &msg)
Definition: test_map.cpp:20
#define EXPECT_TRUE(args)


mrpt_bridge
Author(s): Markus Bader , Raphael Zack
autogenerated on Thu May 12 2022 02:26:47