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