basic.py
Go to the documentation of this file.
1 import rospy
2 import pytest
3 
4 import tf2_ros
5 import tf2_geometry_msgs
6 from geometry_msgs.msg import PoseWithCovarianceStamped
7 from sensor_msgs.msg import Image
8 from aruco_pose.msg import MarkerArray
9 from visualization_msgs.msg import MarkerArray as VisMarkerArray
10 
11 
12 @pytest.fixture
13 def node():
14  return rospy.init_node('aruco_pose_test', anonymous=True)
15 
16 @pytest.fixture
17 def tf_buffer():
18  buf = tf2_ros.Buffer()
20  return buf
21 
22 def approx(expected):
23  return pytest.approx(expected, abs=1e-4) # compare floats more roughly
24 
25 def test_markers(node):
26  markers = rospy.wait_for_message('aruco_detect/markers', MarkerArray, timeout=5)
27  assert len(markers.markers) == 5
28  assert markers.header.frame_id == 'main_camera_optical'
29 
30  assert markers.markers[0].id == 2
31  assert markers.markers[0].length == approx(0.33)
32  assert markers.markers[0].pose.position.x == approx(0.36706567854)
33  assert markers.markers[0].pose.position.y == approx(0.290484516644)
34  assert markers.markers[0].pose.position.z == approx(2.18787602301)
35  assert markers.markers[0].pose.orientation.x == approx(0.993997406299)
36  assert markers.markers[0].pose.orientation.y == approx(-0.00532003481626)
37  assert markers.markers[0].pose.orientation.z == approx(-0.107390951553)
38  assert markers.markers[0].pose.orientation.w == approx(0.0201999263402)
39  assert markers.markers[0].c1.x == approx(415.557739258)
40  assert markers.markers[0].c1.y == approx(335.557739258)
41  assert markers.markers[0].c2.x == approx(509.442260742)
42  assert markers.markers[0].c2.y == approx(335.557739258)
43  assert markers.markers[0].c3.x == approx(509.442260742)
44  assert markers.markers[0].c3.y == approx(429.442260742)
45  assert markers.markers[0].c4.x == approx(415.557739258)
46  assert markers.markers[0].c4.y == approx(429.442260742)
47 
48  assert markers.markers[4].id == 3
49  assert markers.markers[4].length == approx(0.1)
50  assert markers.markers[4].pose.position.x == approx(-0.1805169666)
51  assert markers.markers[4].pose.position.y == approx(-0.200697302327)
52  assert markers.markers[4].pose.position.z == approx(0.585767514823)
53  assert markers.markers[4].pose.orientation.x == approx(-0.961738074009)
54  assert markers.markers[4].pose.orientation.y == approx(-0.0375180244707)
55  assert markers.markers[4].pose.orientation.z == approx(-0.0115387773672)
56  assert markers.markers[4].pose.orientation.w == approx(0.271144115664)
57  assert markers.markers[4].c1.x == approx(129.557723999)
58  assert markers.markers[4].c1.y == approx(49.557723999)
59  assert markers.markers[4].c2.x == approx(223.442276001)
60  assert markers.markers[4].c2.y == approx(49.557723999)
61  assert markers.markers[4].c3.x == approx(223.442276001)
62  assert markers.markers[4].c3.y == approx(143.442276001)
63  assert markers.markers[4].c4.x == approx(129.557723999)
64  assert markers.markers[4].c4.y == approx(143.442276001)
65 
66  assert markers.markers[1].id == 1
67  assert markers.markers[1].length == approx(0.33)
68  assert markers.markers[3].id == 4
69  assert markers.markers[3].length == approx(0.33)
70 
71  assert markers.markers[2].id == 100
72  assert markers.markers[2].length == approx(0.33)
73  assert markers.markers[2].pose.position.x == approx(-1.37600105389)
74  assert markers.markers[2].pose.position.y == approx(-0.323028530991)
75  assert markers.markers[2].pose.position.z == approx(2.94611272668)
76  assert markers.markers[2].pose.orientation.x == approx(-0.955543925678)
77  assert markers.markers[2].pose.orientation.y == approx(0.0458801909197)
78  assert markers.markers[2].pose.orientation.z == approx(-0.249604946264)
79  assert markers.markers[2].pose.orientation.w == approx(-0.150093920537)
80  assert markers.markers[2].c1.x == approx(52.557723999)
81  assert markers.markers[2].c1.y == approx(205.557723999)
82  assert markers.markers[2].c2.x == approx(113.442276001)
83  assert markers.markers[2].c2.y == approx(205.557723999)
84  assert markers.markers[2].c3.x == approx(113.442276001)
85  assert markers.markers[2].c3.y == approx(265.442260742)
86  assert markers.markers[2].c4.x == approx(52.557723999)
87  assert markers.markers[2].c4.y == approx(265.442260742)
88 
89 def test_markers_frames(node, tf_buffer):
90  marker_2 = tf_buffer.lookup_transform('main_camera_optical', 'aruco_2', rospy.Time(), rospy.Duration(5))
91  assert marker_2.transform.translation.x == approx(0.36706567854)
92  assert marker_2.transform.translation.y == approx(0.290484516644)
93  assert marker_2.transform.translation.z == approx(2.18787602301)
94  assert marker_2.transform.rotation.x == approx(0.993997406299)
95  assert marker_2.transform.rotation.y == approx(-0.00532003481626)
96  assert marker_2.transform.rotation.z == approx(-0.107390951553)
97  assert marker_2.transform.rotation.w == approx(0.0201999263402)
98 
99 def test_map_markers_frames(node, tf_buffer):
100  stamp = rospy.get_rostime()
101  timeout = rospy.Duration(5)
102 
103  marker_1 = tf_buffer.lookup_transform('aruco_map', 'aruco_in_map_1', stamp, timeout)
104  assert marker_1.transform.translation.x == approx(0)
105  assert marker_1.transform.translation.y == approx(0)
106  assert marker_1.transform.translation.z == approx(0)
107 
108  marker_4 = tf_buffer.lookup_transform('aruco_map', 'aruco_in_map_4', stamp, timeout)
109  assert marker_4.transform.translation.x == approx(1)
110  assert marker_4.transform.translation.y == approx(1)
111  assert marker_4.transform.translation.z == approx(0)
112 
113  marker_12 = tf_buffer.lookup_transform('aruco_map', 'aruco_in_map_12', stamp, timeout)
114  assert marker_12.transform.translation.x == approx(0.2)
115  assert marker_12.transform.translation.y == approx(0.5)
116  assert marker_12.transform.translation.z == approx(0)
117 
119  vis = rospy.wait_for_message('aruco_detect/visualization', VisMarkerArray, timeout=5)
120  assert len(vis.markers) == 11
121 
122 def test_debug(node):
123  img = rospy.wait_for_message('aruco_detect/debug', Image, timeout=5)
124  assert img.width == 640
125  assert img.height == 480
126  assert img.header.frame_id == 'main_camera_optical'
127 
128 def test_map(node):
129  pose = rospy.wait_for_message('aruco_map/pose', PoseWithCovarianceStamped, timeout=5)
130  assert pose.header.frame_id == 'main_camera_optical'
131  assert pose.pose.pose.position.x == approx(-0.629167753342)
132  assert pose.pose.pose.position.y == approx(0.293822650809)
133  assert pose.pose.pose.position.z == approx(2.12641343155)
134  assert pose.pose.pose.orientation.x == approx(-0.998383794799)
135  assert pose.pose.pose.orientation.y == approx(-5.20919098575e-06)
136  assert pose.pose.pose.orientation.z == approx(-0.0300861070302)
137  assert pose.pose.pose.orientation.w == approx(0.0482143590507)
138 
139 def test_map_image(node):
140  img = rospy.wait_for_message('aruco_map/image', Image, timeout=5)
141  assert img.width == 2000
142  assert img.height == 2000
143  assert img.encoding in ('mono8', 'rgb8')
144 
146  markers = rospy.wait_for_message('aruco_map/markers', MarkerArray, timeout=5)
147  assert markers.markers[0].id == 1
148  assert markers.markers[1].id == 2
149  assert markers.markers[2].id == 3
150  assert markers.markers[3].id == 4
151  assert markers.markers[4].id == 10
152  assert markers.markers[5].id == 11
153  assert markers.markers[6].id == 12
154 
155  assert markers.markers[0].pose.position.x == 0
156  assert markers.markers[0].pose.position.y == 0
157  assert markers.markers[0].pose.position.z == 0
158  assert markers.markers[0].pose.orientation.x == 0
159  assert markers.markers[0].pose.orientation.y == 0
160  assert markers.markers[0].pose.orientation.z == 0
161  assert markers.markers[0].pose.orientation.w == 1
162  assert markers.markers[0].length == approx(0.33)
163 
164  assert markers.markers[1].pose.position.x == 1
165  assert markers.markers[1].pose.position.y == 0
166  assert markers.markers[1].pose.position.z == 0
167  assert markers.markers[1].pose.orientation.x == 0
168  assert markers.markers[1].pose.orientation.y == 0
169  assert markers.markers[1].pose.orientation.z == 0
170  assert markers.markers[1].pose.orientation.w == 1
171  assert markers.markers[1].length == approx(0.33)
172 
173  assert markers.markers[2].pose.position.x == 0
174  assert markers.markers[2].pose.position.y == 1
175  assert markers.markers[2].pose.position.z == 0
176  assert markers.markers[2].pose.orientation.x == 0
177  assert markers.markers[2].pose.orientation.y == 0
178  assert markers.markers[2].pose.orientation.z == 0
179  assert markers.markers[2].pose.orientation.w == 1
180  assert markers.markers[2].length == approx(0.33)
181 
182  assert markers.markers[3].pose.position.x == 1
183  assert markers.markers[3].pose.position.y == 1
184  assert markers.markers[3].pose.position.z == 0
185  assert markers.markers[3].pose.orientation.x == 0
186  assert markers.markers[3].pose.orientation.y == 0
187  assert markers.markers[3].pose.orientation.z == 0
188  assert markers.markers[3].pose.orientation.w == 1
189  assert markers.markers[3].length == approx(0.33)
190 
191  assert markers.markers[4].pose.position.x == approx(0.5)
192  assert markers.markers[4].pose.position.y == 2
193  assert markers.markers[4].pose.position.z == 0
194  assert markers.markers[4].pose.orientation.x == 0
195  assert markers.markers[4].pose.orientation.y == 0
196  assert markers.markers[4].pose.orientation.z == approx(0.5646424733950354)
197  assert markers.markers[4].pose.orientation.w == approx(0.8253356149096783)
198  assert markers.markers[4].length == approx(0.5)
199 
201  vis = rospy.wait_for_message('aruco_map/visualization', VisMarkerArray, timeout=5)
202 
203 def test_map_debug(node):
204  img = rospy.wait_for_message('aruco_map/debug', Image, timeout=5)
def test_markers(node)
Definition: basic.py:25
def node()
Definition: basic.py:13
def test_map_debug(node)
Definition: basic.py:203
def test_map_markers(node)
Definition: basic.py:145
def test_visualization(node)
Definition: basic.py:118
def approx(expected)
Definition: basic.py:22
def test_map_visualization(node)
Definition: basic.py:200
def tf_buffer()
Definition: basic.py:17
def test_map(node)
Definition: basic.py:128
def test_map_markers_frames(node, tf_buffer)
Definition: basic.py:99
def test_debug(node)
Definition: basic.py:122
def test_map_image(node)
Definition: basic.py:139
def test_markers_frames(node, tf_buffer)
Definition: basic.py:89


aruco_pose
Author(s): Oleg Kalachev
autogenerated on Mon Feb 28 2022 22:08:24