project_pattern.py
Go to the documentation of this file.
1 #!/usr/bin/env python
2 import unittest
3 
4 import ensenso_camera.ros2 as ros2py
5 
6 from ensenso_camera_test.helper import ImagePoint
7 import ensenso_camera_test.ros2_testing as ros2py_testing
8 
9 LocatePattern = ros2py.import_action("ensenso_camera_msgs", "LocatePattern")
10 ProjectPattern = ros2py.import_action("ensenso_camera_msgs", "ProjectPattern")
11 
12 
13 class TestProjectPattern(unittest.TestCase):
14  def setUp(self):
15  self.node = ros2py.create_node("test_project_pattern")
16  self.locate_pattern_client = ros2py.create_action_client(self.node, "locate_pattern", LocatePattern)
17  self.project_pattern_client = ros2py.create_action_client(self.node, "project_pattern", ProjectPattern)
18 
19  clients = [self.locate_pattern_client, self.project_pattern_client]
20  ros2py.wait_for_servers(self.node, clients)
21 
23  response = ros2py.send_action_goal(self.node, self.locate_pattern_client, LocatePattern.Goal())
24  location_result = response.get_result()
25 
26  self.assertTrue(response.successful())
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  goal = ProjectPattern.Goal()
39  goal.grid_spacing = detected_pattern.grid_spacing
40  goal.grid_size_x = detected_pattern.grid_size_x
41  goal.grid_size_y = detected_pattern.grid_size_y
42  goal.pattern_pose = detected_pattern_pose
43 
44  response = ros2py.send_action_goal(self.node, self.project_pattern_client, goal)
45  projection_result = response.get_result()
46 
47  self.assertTrue(response.successful())
48  self.assertEqual(projection_result.error.code, 0)
49 
50  self.assertEqual(projection_result.pattern_is_visible, True)
51  self.assertEqual(len(detected_pattern.left_points), len(projection_result.left_points))
52  self.assertEqual(len(detected_pattern.right_points), len(projection_result.right_points))
53 
54  reference_points = map(
55  lambda p: ImagePoint.from_message(p), detected_pattern.left_points + detected_pattern.right_points
56  )
57  projected_points = map(
58  lambda p: ImagePoint.from_message(p), projection_result.left_points + projection_result.right_points
59  )
60  for reference_point, projected_point in zip(reference_points, projected_points):
61  self.assertTrue(reference_point.equals(projected_point))
62 
63 
64 def main():
65  ros2py_testing.run_ros1_test("test_project_pattern", TestProjectPattern)
66 
67 
68 if __name__ == "__main__":
69  main()
ensenso_camera_test.project_pattern.TestProjectPattern.test_project_pattern
def test_project_pattern(self)
Definition: project_pattern.py:22
ensenso_camera_test.project_pattern.TestProjectPattern.locate_pattern_client
locate_pattern_client
Definition: project_pattern.py:16
ensenso_camera_test.helper
Definition: helper.py:1
ensenso_camera_test.project_pattern.TestProjectPattern.project_pattern_client
project_pattern_client
Definition: project_pattern.py:17
ensenso_camera_test.project_pattern.TestProjectPattern.setUp
def setUp(self)
Definition: project_pattern.py:14
ensenso_camera_test.project_pattern.TestProjectPattern.node
node
Definition: project_pattern.py:15
ensenso_camera_test.project_pattern.TestProjectPattern
Definition: project_pattern.py:13
ensenso_camera_test.ros2_testing
Definition: ros2_testing.py:1
ensenso_camera_test.project_pattern.main
def main()
Definition: project_pattern.py:64


ensenso_camera_test
Author(s): Ensenso
autogenerated on Wed Apr 2 2025 02:37:52