Homepage Demos Overview Downloads Tutorials Reference
Credits

clik.h

Go to the documentation of this file.
00001 /*
00002 Copyright (C) 2002-2004  Etienne Lachance
00003 
00004 This library is free software; you can redistribute it and/or modify
00005 it under the terms of the GNU Lesser General Public License as
00006 published by the Free Software Foundation; either version 2.1 of the
00007 License, or (at your option) any later version.
00008 
00009 This library is distributed in the hope that it will be useful,
00010 but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 GNU Lesser General Public License for more details.
00013 
00014 You should have received a copy of the GNU Lesser General Public
00015 License along with this library; if not, write to the Free Software
00016 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017 
00018 
00019 Report problems and direct all questions to:
00020 
00021 email: etienne.lachance@polymtl.ca or richard.gourdeau@polymtl.ca
00022 
00023 Reference:
00024 
00025 CLIK: closed loop inverse kinematics
00026 
00027 [1] S. Chiaverini, B. Siciliano, "The Unit Quaternion: A Useful Tool for
00028     Inverse Kinematics of Robot Manipulators", Systems Analysis, Modelling
00029     and Simulation, vol. 35, pp.45-60, 1999.
00030 
00031 [2] F. Caccavale, S. Chiaverini, B. Siciliano, "Second-Order Kinematic Control 
00032     of Robot Manipulators with Jacobian Damped Least-Squares Inverse: Theory
00033     and Experiments", IEEE/ASME Trans on Mechatronics, vol 2, no. 3, 
00034     pp. 188-194, 1997.
00035 
00036 [3] S. Chiaverini, B. Siciliano, "Review of the Damped Least-Squares Inverse 
00037     Kinematics with Experiments on an Industrial Robot Manipulator" IEEE Trans
00038     on Control Systems Technology, vol 2, no 2, june 1994
00039 
00040 [4] C. Natale, "Quaternion-Based Representation of Rigid Bodies Orientation",
00041     PRISMA LAB, PRISMA Technical Report no. 97-05, Oct 1997.
00042 
00043 The algorithme is based on [1], which is of first order.     
00044 
00045 -------------------------------------------------------------------------------
00046 Revision_history:
00047 
00048 2004/07/01: Etienne Lachance
00049    -Added doxygen documentation.
00050 
00051 2004/07/01: Ethan Tira-Thompson
00052     -Added support for newmat's use_namespace #define, using ROBOOP namespace
00053 */
00054 
00055 
00056 #ifndef CLIK_H
00057 #define CLIK_H
00058 
00059 /*!
00060   @file clik.h
00061   @brief Header file for Clik class definitions.
00062 */
00063 
00064 #include "robot.h"
00065 #include "quaternion.h"
00066 
00067 #ifdef use_namespace
00068 namespace ROBOOP {
00069   using namespace NEWMAT;
00070 #endif
00071   //! @brief RCS/CVS version.
00072   static const char header_clik_rcsid[] __UNUSED__ = "$Id: clik.h,v 1.5 2005/07/26 03:22:09 ejt Exp $";
00073 
00074 //! @brief Using Clik under DH notation.
00075 #define CLICK_DH           1
00076 //! @brief Using Clik under modified DH notation.
00077 #define CLICK_mDH          2
00078 //! @brief Using Clik under modified DH notation with minimum intertial parameters
00079 #define CLICK_mDH_min_para 3
00080 
00081 
00082 //! @brief Handle Closed Loop Inverse Kinematics scheme.
00083 class Clik {
00084 public:
00085    Clik(){}
00086    Clik(const Robot & robot_, const DiagonalMatrix & Kp_, const DiagonalMatrix & Ko_,
00087         const Real eps_=0.04, const Real lambda_max_=0.04, const Real dt=1.0);
00088    Clik(const mRobot & mrobot_, const DiagonalMatrix & Kp_, const DiagonalMatrix & Ko_,
00089         const Real eps_=0.04, const Real lambda_max_=0.04, const Real dt=1.0);
00090    Clik(const mRobot_min_para & mrobot_min_para_, const DiagonalMatrix & Kp_,
00091         const DiagonalMatrix & Ko_, const Real eps_=0.04, const Real lambda_max_=0.04,
00092         const Real dt=1.0);
00093    Clik(const Clik & x);
00094    ~Clik(){}
00095    Clik & operator=(const Clik & x);
00096    void q_qdot(const Quaternion & qd, const ColumnVector & pd,
00097                const ColumnVector & pddot, const ColumnVector & wd,
00098                ColumnVector & q, ColumnVector & qp);
00099 private:
00100    int endeff_pos_ori_err(const ColumnVector & pd, const ColumnVector & pddot,
00101                           const Quaternion & qd, const ColumnVector & wd);
00102 
00103    Real 
00104      dt,                //!< Time frame.
00105      eps,               //!< Range of singular region in Jacobian DLS inverse.
00106      lambda_max;        //!< Damping factor in Jacobian DLS inverse.
00107    short  robot_type;   //!< Robot type used.
00108    Robot robot;         //!< Robot instance.
00109    mRobot mrobot;       //!< mRobot instance.
00110    mRobot_min_para mrobot_min_para; //!< mRobot_min_para instance.
00111    DiagonalMatrix Kp,   //!< Position error gain.
00112                   Ko;   //!< Orientation error gain.
00113 
00114    ColumnVector q ,       //!< Clik joint position.
00115                 qp,       //!< Clik joint velocity.
00116                 qp_prev,  //!< Clik previous joint velocity.
00117                 Kpep,     //!< Kp times position error.
00118                 Koe0Quat, //!< Ko times orientation error (quaternion vector part).
00119                 v;        //!< Quaternion vector part.
00120 };
00121 
00122 #ifdef use_namespace
00123 }
00124 #endif
00125 
00126 #endif

ROBOOP v1.21a
Generated Tue Aug 16 16:32:14 2005 by Doxygen 1.4.4