Jafar
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
lineTools.hpp
Go to the documentation of this file.
00001 /* $Id: lineTools.hpp 2059 2006-10-24 06:52:21Z tlemaire $ */
00002 
00011 #ifndef SLAM_PLUCKER_TOOLS_HPP
00012 #define SLAM_PLUCKER_TOOLS_HPP
00013 
00014 #include "kernel/jafarException.hpp"
00015 #include "jmath/jblas.hpp"
00016 #include "boost/tuple/tuple.hpp"
00017 #include "slam/eulerTools.hpp"
00018 
00019 namespace jafar {
00020   namespace slam {
00025     namespace lineTools { 
00026       
00033       template<class Mat>
00034       void pluckerIntrinsicMatrix(double u0, double v0, double au, double av, 
00035                     Mat& K);
00036       
00040       template<class Vec, class Mat>
00041       void pluckerIntrinsicMatrix(Vec const& k, 
00042                     Mat& K);
00043       
00044       
00045       
00052       void pluckerInverseIntrinsicMatrix(double u0, double v0, double au, double av, 
00053                          jblas::mat& iK);
00054       
00055       
00059       void pluckerInverseIntrinsicMatrix(jblas::vec4 const& k, 
00060                          jblas::mat& iK);
00061       
00062       
00063       
00067       jblas::vec2 homogeneousToRhoTheta(jblas::vec3 const& l);
00068       
00069       
00074       void homogeneousToRhoTheta(jblas::vec3 const& l, 
00075                      jblas::vec2& rt,
00076                      jblas::mat& RT_l) ;
00077       
00078       
00079       
00083       jblas::vec3 rhoThetaToHomogeneous(jblas::vec2 const& rt);
00084       
00085       
00090       void rhoThetaToHomogeneous(jblas::vec2 const& rt, 
00091                      jblas::vec3& l, 
00092                      jblas::mat&  L_rt);
00093       
00094       
00095       
00100       jblas::vec3 projectPlucker(jblas::mat33 const& K, 
00101                      jblas::vec6 const& L);
00102       
00103       
00109       void projectPlucker(jblas::mat33 const& K, 
00110                 jblas::vec6 const& L, 
00111                 jblas::vec3& l, 
00112                 jblas::mat& L_l);
00113       
00114       
00115       
00120       jblas::vec3 retroProjectPluckerPlaneNormal(jblas::mat33 const& iK, 
00121                              jblas::vec3  const& l);
00122       
00123       
00129       void retroProjectPluckerPlaneNormal(jblas::mat33  const& iK, 
00130                         jblas::vec3   const& l,
00131                         jblas::vec3&  n,
00132                         jblas::mat33& N_l);
00133       
00134       
00140       jblas::vec6 retroProjectPlucker(jblas::mat33  const& iK, 
00141                       jblas::vec3 const& l, 
00142                       jblas::vec3 const& v);
00143       
00144       
00152       void retroProjectPlucker(jblas::mat33  const& iK, 
00153                    jblas::vec3 const& l, 
00154                    jblas::vec3 const& v, 
00155                    jblas::vec6& L, 
00156                    jblas::mat& L_l, 
00157                    jblas::mat& L_v);
00158       
00159       
00160       
00161       
00167       jblas::vec6 retroProjectPluckerFromBase(jblas::mat33 const& iK,
00168                           jblas::vec3 const& l,
00169                           jblas::vec2 const& beta);
00170       
00171       
00179       void retroProjectPluckerFromBase(jblas::mat33 const& iK,
00180                        jblas::vec3 const& l,
00181                        jblas::vec2 const& beta,
00182                        jblas::vec6& L,
00183                        jblas::mat&  L_l,
00184                        jblas::mat&  L_beta);
00185       
00186       
00187       
00188       
00192       jblas::mat planeVecToBaseMatrix(jblas::vec3 const& n);
00193       
00194       
00195       
00196       
00201       jblas::vec3 planeBaseToDirVector(jblas::vec3 const& n, 
00202                        jblas::vec2 const& beta);
00203       
00210       void planeBaseToDirVector(jblas::vec3 const& n, 
00211                     jblas::vec2 const& beta, 
00212                     jblas::vec3& v, 
00213                     jblas::mat33& V_n, 
00214                     jblas::mat& V_beta);
00215       
00222       void planeBaseToDirVector(jblas::vec_range const& n, 
00223                     jblas::vec2 const& beta, 
00224                     jblas::vec_range& v, 
00225                     jblas::mat33& V_n, 
00226                     jblas::mat& V_beta);
00227       
00228       
00229       
00233       jblas::vec3 normVec3(jblas::vec3 const& v);
00234       
00239       void normVec3(jblas::vec3 const& v, 
00240               jblas::vec3& vn, 
00241               jblas::mat33& VN_v);
00242       
00243       
00248       void normVec3(jblas::vec3 const& v, 
00249               jblas::vec_range& vn, 
00250               jblas::mat33& VN_v);
00251       
00252       
00257       jblas::vec3 adjustVec3(jblas::vec3 const& v,
00258                    jblas::vec3 const& n);
00259       
00265       void adjustVec3(jblas::vec3 const& v,
00266               jblas::vec3 const& n,
00267               jblas::vec3& w,
00268               jblas::mat33& W_v);
00269       
00270       
00271       
00277       jblas::vec3 pluckerOrigin(jblas::vec6 const& L);
00278       
00279       
00289       void pluckerOrigin(jblas::vec6 const& L, 
00290                  jblas::vec3& p0, 
00291                  jblas::mat& P0_l);
00292       
00293       
00297       jblas::mat33 skewSymmMat33(jblas::vec3 const& v);
00298       
00299       
00304       jblas::vec3 pluckerEndpoint(jblas::vec6 const& L, 
00305                 double const s);
00306       
00313       void pluckerEndpoint(jblas::vec6 const& L, // Plucker line
00314                double const s, // Abscissa
00315                jblas::vec3& e, // Endpoint
00316                jblas::mat& E_l,  // Jac wrt the line
00317                jblas::mat& E_s); // Jac. wrt abscissa
00318       
00319       
00324       jblas::vec6 pluckerRay(jblas::mat33 const& K, 
00325                    jblas::vec2 const& p);
00326       
00327       
00333       void pluckerRay(jblas::mat33 const& K, 
00334               jblas::vec2 const& p,
00335               jblas::vec6 r,
00336               jblas::mat R_p);
00337       
00338       
00339       
00347       boost::tuple<double,double,double> pluckerSoftIntersectionAbscissa(jblas::vec6 const& line1, 
00348                                          jblas::vec6 const& line2);
00349       
00350       
00354       jblas::vec6 pluckerToEuclideanPlucker(jblas::vec6 const& L);
00355       
00360       void pluckerToEuclideanPlucker(jblas::vec6 const& L, 
00361                        jblas::vec6& eL, 
00362                        jblas::mat66& EL_l);
00363       
00364       
00365       
00367       jblas::vec3 extToHomogeneous(jblas::vec2 const& p, jblas::vec2 const& q);
00368       
00369       
00371       void extToHomogeneous(jblas::vec2 const& p, 
00372                   jblas::vec2 const& q,
00373                   jblas::vec3& hm,
00374                   jblas::mat& HM_p, 
00375                   jblas::mat& HM_q);
00376  
00377 
00379              void points3plane(jblas::vec3 const& a, jblas::vec3 const& b, jblas::vec3 const& c, jblas::vec6& plane);
00380 
00381             
00383       jblas::vec6 hmPointsToPlucker(jblas::vec4& A, jblas::vec4& B);
00384             
00386             void hmPointsToPlucker(jblas::vec4& A, jblas::vec4& B, jblas::vec6& L,jblas::mat& L_a,jblas::mat& L_b);
00387 
00389             jblas::vec4 uvdToHmPoint(jblas::vec3 const& uvd, jblas::vec4& k, double const alpha);
00390 
00392             void uvdToHmPoint(jblas::vec3 const& uvd, jblas::vec4& k, double const alpha, jblas::vec4& hmP, jblas::mat& HmPu);
00393       
00394         
00395       
00401       /*template <class IntrVec, class PlkVec>
00402         jblas::vec6 projectPluckerToStereo(IntrVec const& k,
00403                            double alpha, 
00404                            PlkVec const& L)
00405         {
00406           
00407           // right camera frame
00408           jblas::vec6 rightFrame;
00409           rightFrame.clear();
00410           rightFrame(0) = -alpha/k(2);
00411           
00412           
00413           jblas::vec6 LR;
00414           jafar::slam::EulerTools::lineToFrame(rightFrame, L, LR);
00415           
00416           jblas::mat33 K;
00417           pluckerIntrinsicMatrix(k, K);
00418           
00419           jblas::vec6 stLine;
00420           
00421           jblas::vec3 hm;
00422           
00423           hm = projectPlucker(K, L);
00424           subrange(stLine, 0, 3) = hm;
00425           
00426           hm = projectPlucker(K, LR);
00427           subrange(stLine, 3, 6) = hm;
00428           
00429           return stLine;
00430           
00431         }*/
00432       jblas::vec6 projectPluckerToStereo(jblas::vec4 const& k,
00433                          double alpha, 
00434                          jblas::vec6 const& L);
00435       
00436       
00437       
00438       
00445       //template <class StereoLineObs, class IntrVec, class PlkVec, class JacMat>
00446       //  void projectPluckerToStereo(IntrVec const&  k, 
00447       //                double          alpha,
00448       //                PlkVec const&   L,
00449       //                StereoLineObs&  stLine,
00450       //                JacMat&         StLine_l);
00451       void projectPluckerToStereo(jblas::vec4 const&   k, 
00452                     double               alpha,
00453                     jblas::vec6 const&   L,
00454                     jblas::vec6&         stLine,
00455                     jblas::mat66&        StLine_l);
00456       
00457       
00462       jblas::vec2 extToRhoTheta(const jblas::vec2& ext1, const jblas::vec2& ext2);
00463       
00469       void extToRhoTheta(const jblas::vec2& ext1, const jblas::vec2& ext2, jblas::vec2& rt, jblas::mat& RT_ee);     
00470       
00471       
00472       
00476       jblas::vec4 uvdsToStereoRhoTheta(jblas::vec6 const& uvduvd);
00477       
00482       void uvdsToStereoRhoTheta(jblas::vec6 const& uvduvd, jblas::vec4& rtrt, jblas::mat& RR_uu);
00483       
00487       void uvdsToStereoRhoTheta(jblas::vec6 const& uvduvd, jblas::mat& RR_uu);
00488       
00493       void homogenousToExtDistances( const jblas::vec3& _hm, const jblas::vec2& ext1, const jblas::vec2& ext2, jblas::vec2& dd, jblas::mat& DD_hm, jblas::mat& DD_ext1, jblas::mat& DD_ext2 );
00494       
00495       void homogenousToPointDistance( const jblas::vec3& _hm, const jblas::vec2& _ext, double& d, jblas::mat_range& D_hm, jblas::mat_range& D_ext );
00496       
00497       void homogenousToExtDistances( const jblas::vec3& _hm, const jblas::vec2& ext1, const jblas::vec2& ext2, jblas::vec2& dd, jblas::mat& DD_hm);
00498       
00499       void homogenousToPointDistance( const jblas::vec3& _hm, const jblas::vec2& _ext, double& d, jblas::mat_range& D_hm );
00500 
00502       jblas::vec6 points3DToPointVecLine(const jblas::vec3& p, const jblas::vec3& q);
00503 
00505       void points3DToPointVecLine(const jblas::vec3& p, const jblas::vec3& q, jblas::vec6& m, jblas::mat66& M_l);
00506 
00508       jblas::vec2 intersectPointVecLines(const jblas::vec6& l1, const jblas::vec6& l2);
00509 
00511       double cosVecsAngle(const jblas::vec3& v1, const jblas::vec3& v2);
00512 
00513     } 
00514   }
00515   
00516 }
00517 
00518 #endif
00519 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on Wed Oct 15 2014 00:37:27 for Jafar by doxygen 1.7.6.1
LAAS-CNRS