test_recognizer_prediction_ism.cpp
Go to the documentation of this file.
1 
18 // Bring in my package's API, which is what I'm testing
19 #include <ros/console.h>
20 #include "asr_recognizer_prediction_ism/pose_prediction/PosePredictionNode.h"
21 #include "asr_recognizer_prediction_ism/SceneRecognizerService.h"
22 // Bring in gtest
23 #include <random>
24 #include <gtest/gtest.h>
25 
26 // Declare a test
28 {
29  class PaperPredictionNORMALIZEDTest : public ::testing::Test
30  {
31  protected:
32 
33  // Per-test-case set-up.
34  // Called before the first test in this test case.
35  // Can be omitted if not needed.
36  static void SetUpTestCase()
37  {
40  node_handle->setParam("dbfilename", "/home/patrick/catkin_ws/src/ilcasRosFull/perception/scene_understanding/recognizer_prediction_ism/test/rsc/smacks_throne.sqlite");
41  node_handle->setParam("foundObjectClientName", "/env/asr_world_model/get_found_object_list");
42  node_handle->setParam("markerPublisherName", "/rp_ism_node/recognition_prediction");
43  node_handle->setParam("PointCloudServerName", "get_point_cloud");
44  node_handle->setParam("toggleVisualizationServerName", "recognizer_prediction_toggle_visualization");
45 
46  node_handle->setParam("sharedMemoryName", "SharedMemory");
47  node_handle->setParam("sharedVectorName", "SharedrecognitionresultVector");
48  node_handle->setParam("mutexName", "resultsMutex");
49  node_handle->setParam("maxPointCloudSize", 0);
50  node_handle->setParam("numberOfSpecifiers", 40);
51 
52  node_handle->setParam("enableVisualization", true);
53 
54  node_handle->setParam("baseFrame", "/map");
55  node_handle->setParam("arrowLifeTime", 0);
56  node_handle->setParam("pointLifeTime", 0);
57  node_handle->setParam("referenceRadius", 0.1);
58  node_handle->setParam("pointRadius", 0.02);
59  node_handle->setParam("arrowScaleX", 0.002);
60  node_handle->setParam("arrowScaleY", 0.05);
61  node_handle->setParam("arrowScaleZ", 0.01);
62  node_handle->setParam("colorStepSize", 20);
63  node_handle->setParam("latched", true);
64  }
65 
66  // Per-test-case tear-down.
67  // Called after the last test in this test case.
68  // Can be omitted if not needed.
69  static void TearDownTestCase()
70  {
71  delete node_handle;
72  }
73 
74  // You can define per-test set-up and tear-down logic as usual.
75  virtual void SetUp()
76  {
77  using namespace boost::interprocess;
78  shared_memory_object::remove("SharedMemory");
79 
80  managed_shared_memory segment
81  (create_only
82  ,"SharedMemory" //segment name
83  ,65536); //segment size in bytes
84 
85  //Initialize shared memory STL-compatible allocator
86  const RecognitionResultAllocator alloc_inst (segment.get_segment_manager());
87 
88  //Construct a shared memory
89  segment.construct<SharedrecognitionresultVector>("SharedrecognitionresultVector") //object name
90  (alloc_inst);//first ctor parameter
91  named_mutex::remove("resultsMutex");
92  named_mutex mutex(open_or_create, "resultsMutex");
93  patternName = "test";
94  referencePose = ISM::PosePtr(new ISM::Pose);
95  referencePose->getQuatPtr()->setW(1);
96  recognizedSet = ISM::ObjectSetPtr(new ISM::ObjectSet());
97  confidence = 1;
98 
99  resultPtr = ISM::RecognitionResultPtr(new ISM::RecognitionResult(patternName,referencePose,
102  recognitionResults.push_back(resultPtr);
103  posePredictionNodePtr = PosePredictionNodePtr(new PosePredictionNode());
104  sceneRecognizer = SceneRecognizerServicePtr(new SceneRecognizerService());
105 
106  }
107  virtual void TearDown()
108  {
109  using namespace boost::interprocess;
110  shared_memory_object::remove("SharedMemory");
111  named_mutex::remove("resultsMutex");
112  }
113 
114  public:
116  std::string patternName;
117 
118  ISM::PosePtr referencePose;
119  ISM::ObjectSetPtr recognizedSet;
120  std::vector<ISM::PointPtr> idealPoints;
121  std::vector<ISM::VotedPointsTypePtr> votedPoints;
122  ISM::RecognitionResultPtr resultPtr;
123  double confidence;
124  std::vector<ISM::RecognitionResultPtr> recognitionResults;
125  asr_recognizer_prediction_ism::GetPointCloud::Request req;
126  asr_recognizer_prediction_ism::GetPointCloud::Response res;
127  PosePredictionNodePtr posePredictionNodePtr;
128  SceneRecognizerServicePtr sceneRecognizer;
129 
130  };
131 
134  {
135  using namespace ISM;
136 
137  PointPtr plateDeepPointPtr(new Point(-0.888345658850255, 0.632926776060424,
138  0.660864250036386));
139  QuaternionPtr plateDeepQuatPtr(new Quaternion(0.651570493634819, -0.643417330721776,
140  -0.27727505130885, 0.2908411529908));
141  PosePtr plateDeepPosePtr(new Pose(plateDeepPointPtr, plateDeepQuatPtr));
142  ObjectPtr objectPtr(new Object("PlateDeep", plateDeepPosePtr));
143  recognizedSet->insert(objectPtr);
144  double confidence = 0.333;
145  RecognitionResult r(patternName, plateDeepPosePtr,recognizedSet,confidence,idealPoints,votedPoints);
146 
147  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
148  posePredictionNodePtr->getSharedMemoryManagerPtr()->addResult(r);
149  EXPECT_EQ(1, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
150 
151 
152  posePredictionNodePtr->getPointCloud(req,res);
153  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
154  PointPtr cupPdVPointPtr(new Point(-0.89555632189646,
155  0.876282245569256,
156  0.675197306649648));
157  QuaternionPtr cupPdVQuatPtr(new Quaternion(0.0437368287079934,
158  -0.00284608589628875,
159  -0.673893495136102,
160  0.737527319373925));
161  bool found = false;
162  for (asr_msgs::AsrAttributedPoint attributedPoint : res.point_cloud.elements)
163  {
164  double x = attributedPoint.pose.position.x;
165  double y = attributedPoint.pose.position.y;
166  double z = attributedPoint.pose.position.z;
167  double qw = attributedPoint.pose.orientation.w;
168  double qx = attributedPoint.pose.orientation.x;
169  double qy = attributedPoint.pose.orientation.y;
170  double qz = attributedPoint.pose.orientation.z;
171 
172  PointPtr currentPointPtr(new Point(x,y,z));
173  QuaternionPtr currentQuaternionPtr(new Quaternion(qw, qx, qy, qz));
174  double distance = GeometryHelper::getDistanceBetweenPoints(currentPointPtr,cupPdVPointPtr);
175  double angle = GeometryHelper::getAngleBetweenQuats(currentQuaternionPtr, cupPdVQuatPtr);
176 
177  if (distance < 0.03 && angle < 5)
178  {
179  //ROS_INFO("distance: %f, angle: %f", distance, angle);
180  found = true;
181  }
182  }
183  EXPECT_TRUE(found);
184  }
185  TEST_F(PaperPredictionNORMALIZEDTest, zeroPoseRecognizerPrediction)
186  {
187  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
188  posePredictionNodePtr->getSharedMemoryManagerPtr()->addResult(*resultPtr);
189  EXPECT_EQ(1, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
190  posePredictionNodePtr->getPointCloud(req,res);
191  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
192  EXPECT_LT(0, res.point_cloud.elements.size());
193 
194  asr_msgs::AsrAttributedPointCloud pointCloud1 = res.point_cloud;
195  posePredictionNodePtr->getSharedMemoryManagerPtr()->addResult(*resultPtr);
196  posePredictionNodePtr->getPointCloud(req,res);
197  asr_msgs::AsrAttributedPointCloud pointCloud2 = res.point_cloud;
198  EXPECT_GE(pointCloud1.elements.size(), pointCloud2.elements.size());
199  }
200 
201  TEST_F(PaperPredictionNORMALIZEDTest, sharedMemSceneRecognizerPrediction)
202  {
203  EXPECT_EQ(0, sceneRecognizer->getResultsNumber());
204  sceneRecognizer->addRecognitionResults(recognitionResults);
205  EXPECT_EQ(1, sceneRecognizer->getResultsNumber());
206  }
207 
209  {
210  EXPECT_EQ(0, sceneRecognizer->getResultsNumber());
211  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
212 
213  sceneRecognizer->addRecognitionResults(recognitionResults);
214 
215  EXPECT_EQ(1, sceneRecognizer->getResultsNumber());
216  EXPECT_EQ(1, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
217  }
219  {
220  EXPECT_EQ(0, sceneRecognizer->getResultsNumber());
221  EXPECT_EQ(0, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
222 
223  unsigned int size = 100;
224  while (recognitionResults.size() < size)
225  {
226  double lower_bound = 0;
227  double upper_bound = 1;
228  std::uniform_real_distribution<double> unif(lower_bound,upper_bound);
229  std::default_random_engine re;
230  double random_confidence = unif(re);
231  ISM::RecognitionResultPtr resultPtr(new ISM::RecognitionResult(patternName,referencePose,
232  recognizedSet,random_confidence,
234  recognitionResults.push_back(resultPtr);
235  }
236 
237  sceneRecognizer->addRecognitionResults(recognitionResults);
238 
239  EXPECT_EQ(size, sceneRecognizer->getResultsNumber());
240  EXPECT_EQ(size, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
241 
242  posePredictionNodePtr->getSharedMemoryManagerPtr()->sortResults();
243 
244  EXPECT_EQ(size, sceneRecognizer->getResultsNumber());
245  EXPECT_EQ(size, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
246 
247  std::vector<ISM::RecognitionResult> sortedResults = posePredictionNodePtr->getSharedMemoryManagerPtr()->getResults();
248 
249  double confidence = 0;
250  for (unsigned int i = 0; i < sortedResults.size(); i++)
251  {
252  EXPECT_LE(confidence, sortedResults.at(i).getConfidence());
253  confidence = sortedResults.at(i).getConfidence();
254  }
255 
256  EXPECT_EQ(size, sceneRecognizer->getResultsNumber());
257  EXPECT_EQ(size, posePredictionNodePtr->getSharedMemoryManagerPtr()->getResultsNumber());
258  ISM::RecognitionResult best = posePredictionNodePtr->getSharedMemoryManagerPtr()->sortListAndgetBest();
259  EXPECT_EQ(1.0, best.getConfidence());
260  }
261  //Please write a percentage_of_records_for_prediction test! We had no time left.
262 }
263 // Run all the tests that were declared with TEST()
264 int main(int argc, char **argv)
265 {
266  ros::init(argc, argv, "test_recognizer_prediction");
267  testing::InitGoogleTest(&argc, argv);
268  return RUN_ALL_TESTS();
269 }
TEST_F(PaperPredictionNormalizedTest, databaseTest)
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
ROSCPP_DECL const std::string & getName()
int main(int argc, char **argv)
asr_recognizer_prediction_ism::GetPointCloud::Response res
ROSCONSOLE_DECL bool set_logger_level(const std::string &name, levels::Level level)
void setParam(const std::string &key, const XmlRpc::XmlRpcValue &v) const
#define ROSCONSOLE_DEFAULT_NAME
asr_recognizer_prediction_ism::GetPointCloud::Request req


asr_recognizer_prediction_ism
Author(s): Aumann Florian, Heller Florian, Hutmacher Robin, Meißner Pascal, Stöckle Patrick, Stroh Daniel
autogenerated on Wed Jan 8 2020 03:18:32