Added a config template parameter for ProjectionFactors
							parent
							
								
									af9f45ff24
								
							
						
					
					
						commit
						bb74b5c882
					
				| 
						 | 
				
			
			@ -18,17 +18,17 @@ namespace gtsam {
 | 
			
		|||
 | 
			
		||||
  namespace visualSLAM {
 | 
			
		||||
 | 
			
		||||
    /* ************************************************************************* */
 | 
			
		||||
    void ProjectionFactor::print(const std::string& s) const {
 | 
			
		||||
      Base::print(s);
 | 
			
		||||
      z_.print(s + ".z");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* ************************************************************************* */
 | 
			
		||||
    bool ProjectionFactor::equals(const ProjectionFactor& p, double tol) const {
 | 
			
		||||
      return Base::equals(p, tol) && z_.equals(p.z_, tol)
 | 
			
		||||
                && K_->equals(*p.K_, tol);
 | 
			
		||||
    }
 | 
			
		||||
//    /* ************************************************************************* */
 | 
			
		||||
//    void ProjectionFactor::print(const std::string& s) const {
 | 
			
		||||
//      Base::print(s);
 | 
			
		||||
//      z_.print(s + ".z");
 | 
			
		||||
//    }
 | 
			
		||||
//
 | 
			
		||||
//    /* ************************************************************************* */
 | 
			
		||||
//    bool ProjectionFactor::equals(const ProjectionFactor& p, double tol) const {
 | 
			
		||||
//      return Base::equals(p, tol) && z_.equals(p.z_, tol)
 | 
			
		||||
//                && K_->equals(*p.K_, tol);
 | 
			
		||||
//    }
 | 
			
		||||
 | 
			
		||||
    //  /* ************************************************************************* */
 | 
			
		||||
    //  bool compareLandmark(const std::string& key,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,7 +34,8 @@ namespace gtsam { namespace visualSLAM {
 | 
			
		|||
   * Non-linear factor for a constraint derived from a 2D measurement,
 | 
			
		||||
   * i.e. the main building block for visual SLAM.
 | 
			
		||||
   */
 | 
			
		||||
  class ProjectionFactor: public NonlinearFactor2<Config, PoseKey, Pose3, PointKey, Point3>, Testable<ProjectionFactor> {
 | 
			
		||||
  template <class Cfg=Config>
 | 
			
		||||
  class GenericProjectionFactor : public NonlinearFactor2<Cfg, PoseKey, Pose3, PointKey, Point3>, Testable<GenericProjectionFactor<Cfg> > {
 | 
			
		||||
  private:
 | 
			
		||||
 | 
			
		||||
    // Keep a copy of measurement and calibration for I/O
 | 
			
		||||
| 
						 | 
				
			
			@ -44,15 +45,15 @@ namespace gtsam { namespace visualSLAM {
 | 
			
		|||
  public:
 | 
			
		||||
 | 
			
		||||
    // shorthand for base class type
 | 
			
		||||
    typedef NonlinearFactor2<Config, PoseKey, Pose3, PointKey, Point3> Base;
 | 
			
		||||
    typedef NonlinearFactor2<Cfg, PoseKey, Pose3, PointKey, Point3> Base;
 | 
			
		||||
 | 
			
		||||
    // shorthand for a smart pointer to a factor
 | 
			
		||||
    typedef boost::shared_ptr<ProjectionFactor> shared_ptr;
 | 
			
		||||
    typedef boost::shared_ptr<GenericProjectionFactor> shared_ptr;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Default constructor
 | 
			
		||||
     */
 | 
			
		||||
    ProjectionFactor() : K_(new Cal3_S2(444, 555, 666, 777, 888)) {}
 | 
			
		||||
    GenericProjectionFactor() : K_(new Cal3_S2(444, 555, 666, 777, 888)) {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Constructor
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +63,7 @@ namespace gtsam { namespace visualSLAM {
 | 
			
		|||
     * @param landmarkNumber is the index of the landmark
 | 
			
		||||
     * @param K the constant calibration
 | 
			
		||||
     */
 | 
			
		||||
    ProjectionFactor(const Point2& z,
 | 
			
		||||
    GenericProjectionFactor(const Point2& z,
 | 
			
		||||
					const SharedGaussian& model, PoseKey j_pose,
 | 
			
		||||
					PointKey j_landmark, const shared_ptrK& K) :
 | 
			
		||||
				z_(z), K_(K), Base(model, j_pose, j_landmark) {
 | 
			
		||||
| 
						 | 
				
			
			@ -72,12 +73,18 @@ namespace gtsam { namespace visualSLAM {
 | 
			
		|||
     * print
 | 
			
		||||
     * @param s optional string naming the factor
 | 
			
		||||
     */
 | 
			
		||||
    void print(const std::string& s = "ProjectionFactor") const;
 | 
			
		||||
    void print(const std::string& s = "ProjectionFactor") const {
 | 
			
		||||
        Base::print(s);
 | 
			
		||||
        z_.print(s + ".z");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * equals
 | 
			
		||||
     */
 | 
			
		||||
    bool equals(const ProjectionFactor&, double tol = 1e-9) const;
 | 
			
		||||
    bool equals(const GenericProjectionFactor<Cfg>& p, double tol = 1e-9) const {
 | 
			
		||||
        return Base::equals(p, tol) && z_.equals(p.z_, tol)
 | 
			
		||||
                  && K_->equals(*p.K_, tol);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //    /** h(x) */
 | 
			
		||||
    //    Point2 predict(const Pose3& pose, const Point3& point) const {
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +113,10 @@ namespace gtsam { namespace visualSLAM {
 | 
			
		|||
    }
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  typedef GenericProjectionFactor<Config> ProjectionFactor;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  //  /**
 | 
			
		||||
  //   * Non-linear factor graph for visual SLAM
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue