diff --git a/aruco_pose/package.xml b/aruco_pose/package.xml
index 833b9f34..ecd2ef9b 100644
--- a/aruco_pose/package.xml
+++ b/aruco_pose/package.xml
@@ -27,6 +27,7 @@
geometry_msgs
visualization_msgs
sensor_msgs
+ rostest
diff --git a/aruco_pose/test/basic.py b/aruco_pose/test/basic.py
new file mode 100755
index 00000000..e0885dd4
--- /dev/null
+++ b/aruco_pose/test/basic.py
@@ -0,0 +1,70 @@
+#!/usr/bin/env python
+import sys
+import unittest
+import json
+from pytest import approx
+import rospy
+import rostest
+
+from sensor_msgs.msg import Image
+from aruco_pose.msg import MarkerArray
+from visualization_msgs.msg import MarkerArray as VisMarkerArray
+
+
+def to_dict(msg):
+ return {s: getattr(msg, s) for s in msg.__slots__}
+
+
+class TestArucoDetect(unittest.TestCase):
+ def setUp(self):
+ rospy.init_node('test_aruco_detect', anonymous=True)
+
+ def test_markers(self):
+ markers = rospy.wait_for_message('/aruco_detect/markers', MarkerArray, timeout=5)
+ assert len(markers.markers) == 4
+ assert markers.header.frame_id == 'main_camera_optical'
+
+ assert markers.markers[0].id == 2
+ assert markers.markers[0].pose.pose.position.x == approx(0.36706567854)
+ assert markers.markers[0].pose.pose.position.y == approx(0.290484516644)
+ assert markers.markers[0].pose.pose.position.z == approx(2.18787602301)
+ assert markers.markers[0].pose.pose.orientation.x == approx(0.993997406299)
+ assert markers.markers[0].pose.pose.orientation.y == approx(-0.00532003481626)
+ assert markers.markers[0].pose.pose.orientation.z == approx(-0.107390951553)
+ assert markers.markers[0].pose.pose.orientation.w == approx(0.0201999263402)
+ assert markers.markers[0].c1.x == approx(415.557739258)
+ assert markers.markers[0].c1.y == approx(335.557739258)
+ assert markers.markers[0].c2.x == approx(509.442260742)
+ assert markers.markers[0].c2.y == approx(335.557739258)
+ assert markers.markers[0].c3.x == approx(509.442260742)
+ assert markers.markers[0].c3.y == approx(429.442260742)
+ assert markers.markers[0].c4.x == approx(415.557739258)
+ assert markers.markers[0].c4.y == approx(429.442260742)
+
+ assert markers.markers[3].id == 3
+ assert markers.markers[3].pose.pose.position.x == approx(-0.1805169666)
+ assert markers.markers[3].pose.pose.position.y == approx(-0.200697302327)
+ assert markers.markers[3].pose.pose.position.z == approx(0.585767514823)
+ assert markers.markers[3].pose.pose.orientation.x == approx(-0.961738074009)
+ assert markers.markers[3].pose.pose.orientation.y == approx(-0.0375180244707)
+ assert markers.markers[3].pose.pose.orientation.z == approx(-0.0115387773672)
+ assert markers.markers[3].pose.pose.orientation.w == approx(0.271144115664)
+ assert markers.markers[3].c1.x == approx(129.557723999)
+ assert markers.markers[3].c1.y == approx(49.557723999)
+ assert markers.markers[3].c2.x == approx(223.442276001)
+ assert markers.markers[3].c2.y == approx(49.557723999)
+ assert markers.markers[3].c3.x == approx(223.442276001)
+ assert markers.markers[3].c3.y == approx(143.442276001)
+ assert markers.markers[3].c4.x == approx(129.557723999)
+ assert markers.markers[3].c4.y == approx(143.442276001)
+
+ assert markers.markers[1].id == 1
+ assert markers.markers[2].id == 4
+
+ def test_visualization(self):
+ vis = rospy.wait_for_message('aruco_detect/visualization', VisMarkerArray, timeout=5)
+
+ # def test_transforms(self):
+ # pass
+
+rostest.rosrun('aruco_pose', 'test_aruco_detect', TestArucoDetect, sys.argv)
diff --git a/aruco_pose/test/basic.test b/aruco_pose/test/basic.test
new file mode 100644
index 00000000..ff5fb948
--- /dev/null
+++ b/aruco_pose/test/basic.test
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/aruco_pose/test/camera_info.yaml b/aruco_pose/test/camera_info.yaml
new file mode 100644
index 00000000..4e95a1e4
--- /dev/null
+++ b/aruco_pose/test/camera_info.yaml
@@ -0,0 +1,21 @@
+# some random camera calibration for testing
+image_width: 640
+image_height: 480
+camera_name: test_camera
+camera_matrix:
+ rows: 3
+ cols: 3
+ data: [643.229809, 0.000000, 356.811289, 0.000000, 644.318982, 299.150067, 0.000000, 0.000000, 1.000000]
+distortion_model: plumb_bob
+distortion_coefficients:
+ rows: 1
+ cols: 5
+ data: [-0.422907, 0.202567, 0.000781, 0.000447, 0.000000]
+rectification_matrix:
+ rows: 3
+ cols: 3
+ data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000]
+projection_matrix:
+ rows: 3
+ cols: 4
+ data: [567.010193, 0.000000, 366.677428, 0.000000, 0.000000, 594.591980, 307.043423, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]
diff --git a/aruco_pose/test/map.png b/aruco_pose/test/map.png
new file mode 100644
index 00000000..2f3ae2c1
Binary files /dev/null and b/aruco_pose/test/map.png differ