ros2_testing.py
Go to the documentation of this file.
1 from ensenso_camera.ros2 import import_from_module
2 from ensenso_camera.ros2 import is_ros2
3 
4 TEST_PACKAGE_NAME = "ensenso_camera_test"
5 TEST_TIMEOUT = 20
6 
7 
8 # ----------------------------------------------------------------------------------------------------------------------
9 # ROS2
10 # ----------------------------------------------------------------------------------------------------------------------
11 if is_ros2():
12 
14  return import_from_module("ensenso_camera_test", "ros2_point_cloud2")
15 
17  # requires: sudo apt-get install ros-galactic-tf-transformations
18  # requires: sudo pip3 install transforms3d
19  # In this order !!!
20  # See (1) https://github.com/ros/geometry_tutorials/issues/67
21  # See (2) https://github.com/DLu/tf_transformations
22  return import_from_module("tf_transformations", function_name)
23 
24  def get_test_data_path(path):
25  import os
26  from ament_index_python import get_package_share_directory
27 
28  return os.path.join(get_package_share_directory("ensenso_camera_test"), "data", path)
29 
31  from tf2_ros import TransformBroadcaster
32 
33  return TransformBroadcaster(node)
34 
36  from tf2_ros.buffer import Buffer
37 
38  return Buffer()
39 
40  def create_tf_listener(buffer, node):
41  from tf2_ros.transform_listener import TransformListener
42 
43  return TransformListener(buffer, node)
44 
45  def create_tf_transform(pose, timestamp, child_frame, parent_frame):
46  from geometry_msgs.msg import TransformStamped
47 
48  t = TransformStamped()
49  t.header.stamp = timestamp.to_msg()
50  t.header.frame_id = parent_frame
51  t.child_frame_id = child_frame
52 
53  t.transform.translation.x = pose.position[0]
54  t.transform.translation.y = pose.position[1]
55  t.transform.translation.z = pose.position[2]
56 
57  t.transform.rotation.x = pose.orientation[0]
58  t.transform.rotation.y = pose.orientation[1]
59  t.transform.rotation.z = pose.orientation[2]
60  t.transform.rotation.w = pose.orientation[3]
61 
62  return t
63 
64  def send_tf_transform(broadcaster, pose, timestamp, child_frame, parent_frame):
65  broadcaster.sendTransform(create_tf_transform(pose, timestamp, child_frame, parent_frame))
66 
67  def to_sec(t):
68  from builtin_interfaces.msg import Time as MsgTime
69  from rclpy.time import Time as RclTime
70 
71  if isinstance(t, MsgTime):
72  return t.sec
73  elif isinstance(t, RclTime):
74  return t.seconds_nanoseconds()[0]
75  raise TypeError("Cannot convert type {} to seconds".format(type(t)))
76 
77  def feedback_callback(func):
78  def wrapper(feedback):
79  func(feedback.feedback)
80 
81  return wrapper
82 
83 
84 # ----------------------------------------------------------------------------------------------------------------------
85 # ROS1
86 # ----------------------------------------------------------------------------------------------------------------------
87 else:
88 
89  def import_point_cloud2():
90  return import_from_module("sensor_msgs", "point_cloud2")
91 
92  def import_tf_transformation_function(function_name):
93  return import_from_module("tf.transformations", function_name)
94 
95  def get_test_data_path(path):
96  return "../../data/" + path.lstrip("/")
97 
98  def create_tf_broadcaster(_):
99  from tf import TransformBroadcaster
100 
101  return TransformBroadcaster()
102 
103  def create_tf_buffer():
104  from tf2_ros.buffer import Buffer
105 
106  return Buffer()
107 
108  def create_tf_listener(buffer, _):
109  from tf2_ros.transform_listener import TransformListener
110 
111  return TransformListener(buffer)
112 
113  def send_tf_transform(broadcaster, pose, timestamp, child_frame, parent_frame):
114  broadcaster.sendTransform(pose.position, pose.orientation, timestamp, child_frame, parent_frame)
115 
116  def to_sec(t):
117  try:
118  return t.to_sec()
119  except TypeError:
120  raise TypeError("Cannot convert type {} to seconds".format(type(t)))
121 
122  def feedback_callback(func):
123  def wrapper(feedback):
124  func(feedback)
125 
126  return wrapper
127 
128 
129 def run_ros1_test(test_name, test):
130  import rospy
131  import rostest
132 
133  try:
134  rostest.rosrun(TEST_PACKAGE_NAME, test_name, test)
135  except rospy.ROSInterruptException:
136  pass
ensenso_camera_test.ros2_testing.create_tf_buffer
def create_tf_buffer()
Definition: ros2_testing.py:35
ensenso_camera_test.ros2_testing.create_tf_broadcaster
def create_tf_broadcaster(node)
Definition: ros2_testing.py:30
ensenso_camera_test.ros2_testing.create_tf_transform
def create_tf_transform(pose, timestamp, child_frame, parent_frame)
Definition: ros2_testing.py:45
ensenso_camera_test.ros2_testing.feedback_callback
def feedback_callback(func)
Definition: ros2_testing.py:77
ensenso_camera_test.ros2_testing.get_test_data_path
def get_test_data_path(path)
Definition: ros2_testing.py:24
ensenso_camera_test.ros2_testing.create_tf_listener
def create_tf_listener(buffer, node)
Definition: ros2_testing.py:40
ensenso_camera_test.ros2_testing.to_sec
def to_sec(t)
Definition: ros2_testing.py:67
ensenso_camera_test.ros2_testing.run_ros1_test
def run_ros1_test(test_name, test)
Definition: ros2_testing.py:129
ensenso_camera_test.ros2_testing.send_tf_transform
def send_tf_transform(broadcaster, pose, timestamp, child_frame, parent_frame)
Definition: ros2_testing.py:64
ensenso_camera_test.ros2_testing.import_point_cloud2
def import_point_cloud2()
Definition: ros2_testing.py:13
ensenso_camera_test.ros2_testing.import_tf_transformation_function
def import_tf_transformation_function(function_name)
Definition: ros2_testing.py:16


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