4 import ensenso_camera.ros2
as ros2py
6 from ensenso_camera_msgs.msg
import Primitive
11 FitPrimitive = ros2py.import_action(
"ensenso_camera_msgs",
"FitPrimitive")
12 RequestData = ros2py.import_action(
"ensenso_camera_msgs",
"RequestData")
14 INLIER_THRESHOLD = 0.005
21 primitive = Primitive()
22 primitive.type = Primitive.CYLINDER
23 primitive.inlier_threshold = INLIER_THRESHOLD
25 primitive.inlier_fraction_in = 0.015
26 primitive.min_radius = 0.095
27 primitive.max_radius = 0.105
32 primitive = Primitive()
33 primitive.type = Primitive.SPHERE
34 primitive.inlier_threshold = INLIER_THRESHOLD
36 primitive.inlier_fraction_in = 0.03
37 primitive.min_radius = 0.048
38 primitive.max_radius = 0.055
43 primitive = Primitive()
44 primitive.type = Primitive.PLANE
45 primitive.inlier_threshold = INLIER_THRESHOLD
47 primitive.inlier_fraction_in = 0.015
72 self.
node = ros2py.create_node(
"test_fit_primitive")
77 success = ros2py.wait_for_servers(self.
node, clients, timeout_sec=ros2py_testing.TEST_TIMEOUT, exit=
False)
78 self.assertTrue(success, msg=
"Timeout reached for servers.")
80 request_data_goal = RequestData.Goal()
81 request_data_goal.request_point_cloud =
True
84 result = response.get_result()
85 self.assertEqual(result.error.code, 0)
88 ros2py.shutdown(self.
node)
91 goal = FitPrimitive.Goal()
93 goal.primitives.append(primitive)
98 goal = FitPrimitive.Goal()
100 goal.primitives.append(primitive)
106 goal = FitPrimitive.Goal()
108 goal.primitives.append(primitive)
114 delta = INLIER_THRESHOLD * 2
115 for primitive
in result.primitives:
118 self.assertAlmostEqual(primitive.center.x, sphere.center.x, delta=delta)
119 self.assertAlmostEqual(primitive.center.y, sphere.center.y, delta=delta)
120 self.assertAlmostEqual(primitive.center.z, sphere.center.z, delta=delta)
121 self.assertAlmostEqual(primitive.radius, sphere.radius, delta=delta)
124 self.assertAlmostEqual(primitive.center.y, cylinder.center.y, delta=delta)
125 self.assertAlmostEqual(primitive.center.z, cylinder.center.y, delta=delta)
126 self.assertAlmostEqual(primitive.radius, cylinder.radius, delta=delta)
129 self.assertAlmostEqual(abs(primitive.normal.z), abs(plane.normal.z), delta=delta)
130 self.assertAlmostEqual(primitive.center.z, plane.center.z, delta=delta)
134 self.assertTrue(response.successful(), msg=
"Fit primitive action has not been successful.")
135 error = response.get_result().error
136 self.assertEqual(error.code, 0, msg=ros2py.format_error(error, note=
"Fit primitive action exited with error!"))
137 return response.get_result()
141 ros2py_testing.run_ros1_test(
"test_fit_primitive", TestFitPrimitive)
144 if __name__ ==
"__main__":