1 /**************************************************************************** 2 * 3 * ViSP, open source Visual Servoing Platform software. 4 * Copyright (C) 2005 - 2019 by Inria. All rights reserved. 5 * 6 * This software is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * See the file LICENSE.txt at the root directory of this source 11 * distribution for additional information about the GNU GPL. 12 * 13 * For using ViSP with software that can not be combined with the GNU 14 * GPL, please contact Inria about acquiring a ViSP Professional 15 * Edition License. 16 * 17 * See http://visp.inria.fr for more information. 18 * 19 * This software was developed at: 20 * Inria Rennes - Bretagne Atlantique 21 * Campus Universitaire de Beaulieu 22 * 35042 Rennes Cedex 23 * France 24 * 25 * If you have questions regarding the use of this file, please contact 26 * Inria at visp@inria.fr 27 * 28 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 29 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 30 * 31 * Description: 32 * Hand-eye calibration. 33 * 34 * Authors: 35 * Francois Chaumette 36 * Fabien Spindler 37 * 38 *****************************************************************************/ 39 40 /*! 41 \file vpHandEyeCalibration.h 42 \brief Tools for hand-eye calibration. 43 44 \sa The example in calibrate-hand-eye.cpp 45 */ 46 #ifndef _vpHandEyeCalibration_h_ 47 #define _vpHandEyeCalibration_h_ 48 49 #include <vector> 50 #include <visp3/core/vpExponentialMap.h> 51 #include <visp3/core/vpHomogeneousMatrix.h> 52 #include <visp3/core/vpMath.h> 53 #include <visp3/core/vpMatrix.h> 54 55 /*! 56 \class vpHandEyeCalibration 57 58 \ingroup group_vision_calib 59 60 \brief Tool for hand-eye calibration. 61 62 */ 63 class VISP_EXPORT vpHandEyeCalibration 64 { 65 public: 66 67 static int calibrate(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 68 vpHomogeneousMatrix &eMc); 69 70 private: 71 static void calibrationVerifrMo(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 72 const vpHomogeneousMatrix &eMc); 73 static int calibrationRotationTsai(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 74 vpRotationMatrix &eRc); 75 static int calibrationRotationTsaiOld(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 76 vpRotationMatrix &eRc); 77 static int calibrationRotationProcrustes(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 78 vpRotationMatrix &eRc); 79 static int calibrationTranslation(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 80 vpRotationMatrix &eRc, vpTranslationVector &eTc); 81 static int calibrationTranslationOld(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 82 vpRotationMatrix &eRc, vpTranslationVector &eTc); 83 static double calibrationErrVVS(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 84 const vpHomogeneousMatrix &eMc, vpColVector &errVVS); 85 static int calibrationVVS(const std::vector<vpHomogeneousMatrix> &cMo, const std::vector<vpHomogeneousMatrix> &rMe, 86 vpHomogeneousMatrix &eMc); 87 }; 88 89 #endif 90