This code is the companion to the IROS2015 paper "Parameterizations for Reducing Camera Reprojection Error for Robot-World Hand-Eye Calibration"
       authors Amy Tabb and Khalil M. Ahmad Yousef.  
       
Date September 2015.
       
Bibtek  
@INPROCEEDINGS{Tabb2015RWHE,
  author = {Tabb, Amy and Ahmad Yousef, Khalil},
  title = {Parameterizations for Reducing Camera Reprojection Error for Robot-World
	Hand-Eye Calibration},
  booktitle = {Intelligent Robots and Systems (IROS 2015), 2015 IEEE/RSJ International
	Conference on},
  year = {2015},
  organization = {IEEE}
}
       
       
       
       No warranties are expressed or implied.
       Correspondence to amy.tabb@ars.usda.gov
 
 This code may be used in a publication provided the authors cite the above-named paper.
 
 This code was written in C/C++ and has been tested on Ubuntu 12.04 and 14.04.  
 
 Requirements:
1. levmar http://users.ics.forth.gr/~lourakis/levmar/
[Needs lapack]
2. newmat http://www.robertnz.net/nm_intro.htm newmat11  
Installation instructions are under section 2.2 of the documentation
3. OpenCV We use version 2.4.9 but other versions should work fine.

In order to compute the Jacobian matrices, we use some output that is not simplified.  
Consequently to improve runtime drastically please select the highest optimization "-O3"
as a compiler flag.

Includes:
levmar
newmat
OpenCV

Libraries:
 -llevmar -lblas -lf2c -llapack -lm -lopencv_core -lnewmat -lopencv_highgui -lopencv_imgproc -lopencv_calib3d

 
Running:
We have included a test directory called DS4_Nov17_relase, which corresponds to dataset 4 from our paper.  The argument to the
program is the directory where the images and robot information is stored.  To run, type

./project_name path-to-dir/DS4_Nov17_release

This should create 4 new directories, corresponding to the four methods we propose.  These directories show the X and Z computed by the 
methods (in transformations.txt) as well as the images such as those on page 7 of our paper.  To test with a data of your own, it is 
necessary to create a file that describes the calibration object, you can alter the calibration_object.txt file appropriately.

