project_pattern.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 import rospy
3 import rostest
4 
5 import unittest
6 
7 import actionlib
8 from actionlib_msgs.msg import GoalStatus
9 from ensenso_camera_msgs.msg import LocatePatternAction, LocatePatternGoal
10 from ensenso_camera_msgs.msg import ProjectPatternAction, ProjectPatternGoal
11 
12 from helper import ImagePoint
13 
14 
15 class TestProjectPattern(unittest.TestCase):
16  def setUp(self):
17  self.locate_pattern_client = actionlib.SimpleActionClient("locate_pattern", LocatePatternAction)
18  self.locate_pattern_client.wait_for_server()
19  self.project_pattern_client = actionlib.SimpleActionClient("project_pattern", ProjectPatternAction)
20  self.project_pattern_client.wait_for_server()
21 
23  self.locate_pattern_client.send_goal(LocatePatternGoal())
24  self.locate_pattern_client.wait_for_result()
25  self.assertEqual(self.locate_pattern_client.get_state(), GoalStatus.SUCCEEDED)
26  location_result = self.locate_pattern_client.get_result()
27  self.assertEqual(location_result.error.code, 0)
28 
29  self.assertTrue(location_result.found_pattern)
30  self.assertEqual(len(location_result.patterns), 1)
31  self.assertEqual(len(location_result.pattern_poses), 1)
32 
33  detected_pattern = location_result.patterns[0]
34  detected_pattern_pose = location_result.pattern_poses[0].pose
35 
36  # Project the located pattern back into the camera. The result should be
37  # the points that were detected in the image.
38 
39  goal = ProjectPatternGoal()
40  goal.grid_spacing = detected_pattern.grid_spacing
41  goal.grid_size_x = detected_pattern.grid_size_x
42  goal.grid_size_y = detected_pattern.grid_size_y
43  goal.pattern_pose = detected_pattern_pose
44 
45  self.project_pattern_client.send_goal(goal)
46  self.project_pattern_client.wait_for_result()
47 
48  self.assertEqual(self.project_pattern_client.get_state(), GoalStatus.SUCCEEDED)
49  projection_result = self.project_pattern_client.get_result()
50  self.assertEqual(projection_result.error.code, 0)
51 
52  self.assertEqual(projection_result.pattern_is_visible, True)
53  self.assertEqual(len(detected_pattern.left_points), len(projection_result.left_points))
54  self.assertEqual(len(detected_pattern.right_points), len(projection_result.right_points))
55 
56  reference_points = map(lambda p: ImagePoint.from_message(p),
57  detected_pattern.left_points + detected_pattern.right_points)
58  projected_points = map(lambda p: ImagePoint.from_message(p),
59  projection_result.left_points + projection_result.right_points)
60  for reference_point, projected_point in zip(reference_points, projected_points):
61  self.assertTrue(reference_point.equals(projected_point))
62 
63 
64 if __name__ == "__main__":
65  try:
66  rospy.init_node("test_project_pattern")
67  rostest.rosrun("ensenso_camera_test", "test_project_pattern", TestProjectPattern)
68  except rospy.ROSInterruptException:
69  pass


ensenso_camera_test
Author(s): Ensenso
autogenerated on Thu May 6 2021 02:50:10