* builder: Build against Buster * builder: Use correct repository specifications * builder: Move ld.so.preload to have less errors * builder: Use coex repo to install Monkey * builder: Search for buster ROS packages * aruco_pose: Vendor in aruco library from OpenCV 3.4.6 * builder: Move to ROS Melodic * builder: Update kernel version * aruco_pose, clever: Remove opencv3 ROS dependency * builder: Update rosdep * travis: Disable eclint for vendored aruco library * tests: Don't try to locate opencv in ros * roscore: Use melodic distribution * Revert "aruco_pose: Vendor in aruco library from OpenCV 3.4.6" This reverts commit 9c14a8c002bb3396f9a7d9b2ba39969207f066ba. * aruco_pose: Vendor opencv_contrib/aruco again * builder: Add led packages * builder: Remove unused builder code * travis: Add native tests * builder: Set permissions for standalone-install * builder: Use -y for package installation * builder: Add repo for standalone build * builder: Use correct file types for standalone install * aruco_pose: Accept rgb8 map images * builder: Disable mjpg_streamer test * aruco_pose: Allow rgb8 map images (again) * builder: Re-add mjpgstreamer * builder: Install tornado==4.2.1 for rosbridge_suite * builder: Use more recent base image * builder: Use default kernel * builder: Move ld.so.preload back after tests * builder: Disable catkin tests These tests fail on a remote machine but seem to pass just fine on real hardware. Something must have changed between Kinetic and Melodic, and we must investigate more, but for now we just need a working image. * aruco_pose: Remove unused vendored code * selfcheck: Update systemd-analyze regex * builder: Add opencv repository * rosdep: Update package definitions for Melodic * rosdep: Use proper yaml formatting * travis: Remove unnecessary space * docs: Reference Melodic wherever possible
Positioning with ArUco markers
aruco_pose package consists of two nodelets: aruco_detect detects individual ArUco-markers and estimates their poses, aruco_map detects maps of markers using aruco_detect output.
Quick start
To run a camera nodelet, markers and maps detector:
roslaunch aruco_pose sample.launch
You're going to need cv_camera package installed.
aruco_detect nodelet
aruco_detect detects ArUco markers on the image, publishes list of them (with poses), TF transformations, visualization markers and processed image for debugging.
It's recommended to run it within the same nodelet manager with the camera nodelet (e. g. cv_camera).
Parameters
~dictionary(int) – ArUco dictionary (default: 2)- 0 = DICT_4X4_50
- 1 = DICT_4X4_100,
- 2 = DICT_4X4_250,
- 3 = DICT_4X4_1000,
- 4 = DICT_5X5_50,
- 5 = DICT_5X5_100,
- 6 = DICT_5X5_250,
- 7 = DICT_5X5_1000,
- 8 = DICT_6X6_50,
- 9 = DICT_6X6_100,
- 10 = DICT_6X6_250,
- 11 = DICT_6X6_1000,
- 12 = DICT_7X7_50,
- 13 = DICT_7X7_100,
- 14 = DICT_7X7_250,
- 15 = DICT_7X7_1000,
- 16 = DICT_ARUCO_ORIGINAL
~estimate_poses(bool) – estimate single markers' poses (default: true)~send_tf(bool) – send TF transforms (default: true)~frame_id_prefix(string) – prefix for TF transforms names, marker's ID is appended (default:aruco_)~length(double) – markers' sides length~length_override(map) – lengths of markers with specified ids~known_tilt(string) – known tilt (pitch and roll) of all the markers as a frame
Topics
Subscribed
image_raw(sensor_msgs/Image) – camera imagecamera_info(sensor_msgs/CameraInfo) – camera calibration info
Published
~markers(aruco_pose/MarkerArray) – list of detected markers with their corners and poses~visualization(visualization_msgs/MarkerArray) – visualization markers for rviz~debug(sensor_msgs/Image) – debug image with detected markers
Published transforms
<camera_frame>=><frame_id_prefix><id>– markers' poses
aruco_map nodelet
aruco_map nodelet estimates position of markers map.
Parameters
~map– path to text file with markers list~frame_id– published frame id (default:aruco_map)~known_tilt– debug image width~image_width– debug image width (default: 2000)~image_height– debug image height (default: 2000)~image_margin– debug image margin (default: 200)~dictionary(int) – ArUco dictionary (default: 2) - should be the same asdictionaryparameter ofaruco_detectnodelet
Map file has one marker per line with the following line format:
marker_id marker_length x y z yaw pitch roll
Where yaw, pitch and roll are extrinsic rotation around Z, Y, X axis, respectively.
See examples in map directory.
Topics
Subscribed
image_raw(sensor_msgs/Image) – camera image (used for debug image)camera_info(sensor_msgs/CameraInfo) – camera calibration info (used for debug image)markers(aruco_pose/MarkerArray) – list of markers detected byaruco_posenodelet
Published
~pose(geometry_msgs/PoseWithCovarianceStamped) – estimated map pose~image(sensor_msgs/Image) – planarized map image~visualization(visualization_msgs/MarkerArray) – markers map visualization for rviz~debug(sensor_msgs/Image) – debug image with detected markers and map axis
Published transforms
<camera_frame>=><map_name>– markers map pose
Running tests
Command for running tests:
catkin_make run_tests && catkin_test_results
Copyright
Copyright © 2018 Copter Express Technologies. Author: Oleg Kalachev.
Distributed under MIT License (https://opensource.org/licenses/MIT).