mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-26 21:19:35 +00:00
* aruco_map: Improve parser * aruco_map: Use marker id for map visualization * aruco_pose: Add parser pass test * aruco_map: Code style * aruco_pose: Add more test cases * aruco_map: Better message handling * aruco_map: Be more informative about bad lines * aruco_map: Add failure mode tests * aruco_map: Be less strict about map contents * aruco_pose: Restructure tests * aruco_map: Don't use marker id in visualization * aruco_map: Check for marker uniqueness * aruco_pose: Use board data to reject duplicate markers * aruco_pose/test: Spelling fixes
76 lines
3.5 KiB
Python
Executable File
76 lines
3.5 KiB
Python
Executable File
#!/usr/bin/env python
|
|
import sys
|
|
import unittest
|
|
import json
|
|
import rospy
|
|
import rostest
|
|
|
|
from geometry_msgs.msg import PoseWithCovarianceStamped
|
|
from sensor_msgs.msg import Image
|
|
from aruco_pose.msg import MarkerArray
|
|
from visualization_msgs.msg import MarkerArray as VisMarkerArray
|
|
|
|
|
|
class TestArucoMapPass(unittest.TestCase):
|
|
def setUp(self):
|
|
rospy.init_node('test_parser_pass', anonymous=True)
|
|
|
|
def test_markers(self):
|
|
markers = rospy.wait_for_message('aruco_map/visualization', VisMarkerArray, timeout=5)
|
|
|
|
self.assertEqual(len(markers.markers), 6)
|
|
# FIXME: visual marker id is not ArUco marker id
|
|
# self.assertEqual(markers.markers[0].id, 1)
|
|
# self.assertEqual(markers.markers[1].id, 2)
|
|
# self.assertEqual(markers.markers[2].id, 3)
|
|
# self.assertEqual(markers.markers[3].id, 4)
|
|
|
|
self.assertAlmostEqual(markers.markers[0].pose.position.x, 0, places=7)
|
|
self.assertAlmostEqual(markers.markers[0].pose.position.y, 0, places=7)
|
|
self.assertAlmostEqual(markers.markers[0].pose.position.z, 0, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[1].pose.position.x, 1, places=7)
|
|
self.assertAlmostEqual(markers.markers[1].pose.position.y, 1, places=7)
|
|
self.assertAlmostEqual(markers.markers[1].pose.position.z, 1, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[2].pose.position.x, 1, places=7)
|
|
self.assertAlmostEqual(markers.markers[2].pose.position.y, 0, places=7)
|
|
self.assertAlmostEqual(markers.markers[2].pose.position.z, 0.5, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[3].pose.position.x, 0, places=7)
|
|
self.assertAlmostEqual(markers.markers[3].pose.position.y, 1, places=7)
|
|
self.assertAlmostEqual(markers.markers[3].pose.position.z, 0, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[4].pose.position.x, 1, places=7)
|
|
self.assertAlmostEqual(markers.markers[4].pose.position.y, 0.5, places=7)
|
|
self.assertAlmostEqual(markers.markers[4].pose.position.z, 0, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[5].pose.position.x, 2.2, places=7)
|
|
self.assertAlmostEqual(markers.markers[5].pose.position.y, 0.2, places=7)
|
|
self.assertAlmostEqual(markers.markers[5].pose.position.z, 0, places=7)
|
|
|
|
self.assertAlmostEqual(markers.markers[0].scale.x, 0.33, places=7)
|
|
self.assertAlmostEqual(markers.markers[0].scale.y, 0.33, places=7)
|
|
self.assertAlmostEqual(markers.markers[1].scale.x, 0.225, places=7)
|
|
self.assertAlmostEqual(markers.markers[1].scale.y, 0.225, places=7)
|
|
self.assertAlmostEqual(markers.markers[2].scale.x, 0.45, places=7)
|
|
self.assertAlmostEqual(markers.markers[2].scale.y, 0.45, places=7)
|
|
self.assertAlmostEqual(markers.markers[3].scale.x, 0.15, places=7)
|
|
self.assertAlmostEqual(markers.markers[3].scale.y, 0.15, places=7)
|
|
self.assertAlmostEqual(markers.markers[4].scale.x, 0.25, places=7)
|
|
self.assertAlmostEqual(markers.markers[4].scale.y, 0.25, places=7)
|
|
self.assertAlmostEqual(markers.markers[5].scale.x, 0.35, places=7)
|
|
self.assertAlmostEqual(markers.markers[5].scale.y, 0.35, places=7)
|
|
|
|
def test_map_image(self):
|
|
img = rospy.wait_for_message('aruco_map/image', Image, timeout=5)
|
|
self.assertEqual(img.width, 2000)
|
|
self.assertEqual(img.height, 2000)
|
|
self.assertEqual(img.encoding, 'mono8')
|
|
|
|
# def test_transforms(self):
|
|
# pass
|
|
|
|
|
|
rostest.rosrun('aruco_pose', 'test_aruco_map', TestArucoMapPass, sys.argv)
|