Skip to content

Setup ArUco Mapping package

Balaji-Gorantla edited this page Jul 5, 2017 · 7 revisions

Introduction

This package allows user to create a map of Aruco markers in 2D or 3D space and estimate full 6 DOF pose of the camera. Using Markers to estimate full 6 DOF position only by means of single calibrated camera is well known approach. This package leverages basic aruco_ros functionality and provides tools to create a map of detected markers in 2D/3D space. It is designed for static markers - moving camera scenario and can be used for various navigation tasks for UAVs, UGVs, etc.

Installation

cd ~/catkin_ws/src
git clone https://github.com/SmartRoboticSystems/aruco_mapping.git
cd ..
catkin_make

Setup

  1. Proper camera calibration strongly affects overall system accuracy. Aruco mapping expects calibration file in INI format.

Copy the camera calibration file in the INI format to aruco_mapping/data and name the calibration file ardrone_front.ini(since we are using front camera. You can change it to ardrone_bottom.ini if you are using bottom camera)

In order to calibrate your camera and get results in INI format, you can do it through camera_calibrator package.

  1. Edit the launch file aruco_mapping.lauch to remap to the camera of the AR drone and to point to your camera's calibration file.
<?xml version="1.0"?>
<launch> 

  <!-- RVIZ -->
  <!-- <node name="rviz" pkg="rviz" type="rviz" args="-d $(find aruco_mapping)/launch/aruco_config.rviz" /> -->

  <node pkg="aruco_mapping" type="aruco_mapping" name="aruco_mapping" output="screen">
    <remap from="/image_raw" to="/ardrone/front/image_raw"/>
    <param name="calibration_file" type="string" value="$(find aruco_mapping)/data/ardrone_front.ini" /> 
    <param name="num_of_markers" type="int" value="7" />
    <param name="marker_size" type="double" value="0.14"/>
    <param name="space_type" type="string" value="3D" />
    <param name="roi_allowed" type="bool" value="false" /> -->
    <param name="roi_x" type="int" value="0" /> -->
    <param name="roi_y" type="int" value="0" /> -->
    <param name="roi_width" type="int" value="640" /> -->
    <param name="roi_height" type="int" value="480" /> --> 

  </node>  
</launch>  

Change the parameter values according to the requirement.

Here,

value of num_of_markers is the total number of markers used

value of marker_size is the size of the markers(in meters)

value of space_type will specify whether the space_type is plane or 3D

roi is Region of Intrest.
A region of interest is a specified part of a camera view that is highlighted and broadcast to a separate stream from a camera. Since we don't need this feature value is false.

Marker placement

First marker is identified with world´s origin

Second marker's position is computed with respect to first one

Third's marker position is computed with respect to second one and so on..

In order to achieve successful mapping, every time when a new marker is detected, previous marker needs to be visible in the actual image to allow computing new marker's position. So, don't overdo the mutual distance between the markers

Problems

Since this package uses OpenCV, which is a huge library and it also runs ros visualiser, aruco-mapping and image_view, it is computationally expensive. Because of that you might face the problems like there will be delay in detecting the markers.

We used aruco markers to guide the drone to move from one place to another and we used PID controller for that. The derivative term in PID requires continuous function for the computation. But the detection is not continuous using this package. Because of that motion with PID controller won't be much smooth using this package.

3D Space type is not working using this package.

Refer to Aruco_mapping ROS wiki for more information.

Video Tutorials:

Go through the video tutorials on setting up and working with aruco_mapping package.