Homepage | Demos | Overview | Downloads | Tutorials | Reference | Credits |
clik.hGo 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 |