Added flags in ProjectionFactor to allow optional verbosity in printing during Cheirality exceptions, as well as optional re-throwing of the exception. By default, Cheriality exceptions will be silent.
							parent
							
								
									b4f5413989
								
							
						
					
					
						commit
						6e026959ac
					
				
							
								
								
									
										9
									
								
								gtsam.h
								
								
								
								
							
							
						
						
									
										9
									
								
								gtsam.h
								
								
								
								
							| 
						 | 
					@ -1972,8 +1972,17 @@ virtual class GenericProjectionFactor : gtsam::NonlinearFactor {
 | 
				
			||||||
    size_t poseKey, size_t pointKey, const CALIBRATION* k);
 | 
					    size_t poseKey, size_t pointKey, const CALIBRATION* k);
 | 
				
			||||||
  GenericProjectionFactor(const gtsam::Point2& measured, const gtsam::noiseModel::Base* noiseModel,
 | 
					  GenericProjectionFactor(const gtsam::Point2& measured, const gtsam::noiseModel::Base* noiseModel,
 | 
				
			||||||
    size_t poseKey, size_t pointKey, const CALIBRATION* k, const POSE& body_P_sensor);
 | 
					    size_t poseKey, size_t pointKey, const CALIBRATION* k, const POSE& body_P_sensor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  GenericProjectionFactor(const gtsam::Point2& measured, const gtsam::noiseModel::Base* noiseModel,
 | 
				
			||||||
 | 
					      size_t poseKey, size_t pointKey, const CALIBRATION* k, bool throwCheirality, bool verboseCheirality);
 | 
				
			||||||
 | 
					    GenericProjectionFactor(const gtsam::Point2& measured, const gtsam::noiseModel::Base* noiseModel,
 | 
				
			||||||
 | 
					      size_t poseKey, size_t pointKey, const CALIBRATION* k, bool throwCheirality, bool verboseCheirality,
 | 
				
			||||||
 | 
					      const POSE& body_P_sensor);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  gtsam::Point2 measured() const;
 | 
					  gtsam::Point2 measured() const;
 | 
				
			||||||
  CALIBRATION* calibration() const;
 | 
					  CALIBRATION* calibration() const;
 | 
				
			||||||
 | 
					  bool verboseCheirality() const;
 | 
				
			||||||
 | 
					  bool throwCheirality() const;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
typedef gtsam::GenericProjectionFactor<gtsam::Pose3, gtsam::Point3, gtsam::Cal3_S2> GenericProjectionFactorCal3_S2;
 | 
					typedef gtsam::GenericProjectionFactor<gtsam::Pose3, gtsam::Point3, gtsam::Cal3_S2> GenericProjectionFactorCal3_S2;
 | 
				
			||||||
typedef gtsam::GenericProjectionFactor<gtsam::Pose3, gtsam::Point3, gtsam::Cal3DS2> GenericProjectionFactorCal3DS2;
 | 
					typedef gtsam::GenericProjectionFactor<gtsam::Pose3, gtsam::Point3, gtsam::Cal3DS2> GenericProjectionFactorCal3DS2;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -40,6 +40,10 @@ namespace gtsam {
 | 
				
			||||||
    boost::shared_ptr<CALIBRATION> K_;  ///< shared pointer to calibration object
 | 
					    boost::shared_ptr<CALIBRATION> K_;  ///< shared pointer to calibration object
 | 
				
			||||||
    boost::optional<POSE> body_P_sensor_; ///< The pose of the sensor in the body frame
 | 
					    boost::optional<POSE> body_P_sensor_; ///< The pose of the sensor in the body frame
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // verbosity handling for Cheirality Exceptions
 | 
				
			||||||
 | 
					    bool throwCheirality_; ///< If true, rethrows Cheirality exceptions (default: false)
 | 
				
			||||||
 | 
					    bool verboseCheirality_; ///< If true, prints text for Cheirality exceptions (default: false)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// shorthand for base class type
 | 
					    /// shorthand for base class type
 | 
				
			||||||
| 
						 | 
					@ -52,8 +56,7 @@ namespace gtsam {
 | 
				
			||||||
    typedef boost::shared_ptr<This> shared_ptr;
 | 
					    typedef boost::shared_ptr<This> shared_ptr;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Default constructor
 | 
					    /// Default constructor
 | 
				
			||||||
    GenericProjectionFactor() {
 | 
					    GenericProjectionFactor() : throwCheirality_(false), verboseCheirality_(false) {}
 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Constructor
 | 
					     * Constructor
 | 
				
			||||||
| 
						 | 
					@ -63,12 +66,32 @@ namespace gtsam {
 | 
				
			||||||
     * @param poseKey is the index of the camera
 | 
					     * @param poseKey is the index of the camera
 | 
				
			||||||
     * @param pointKey is the index of the landmark
 | 
					     * @param pointKey is the index of the landmark
 | 
				
			||||||
     * @param K shared pointer to the constant calibration
 | 
					     * @param K shared pointer to the constant calibration
 | 
				
			||||||
 | 
					     * @param body_P_sensor is the transform from body to sensor frame (default identity)
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    GenericProjectionFactor(const Point2& measured, const SharedNoiseModel& model,
 | 
					    GenericProjectionFactor(const Point2& measured, const SharedNoiseModel& model,
 | 
				
			||||||
        Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
 | 
					        Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
 | 
				
			||||||
        boost::optional<POSE> body_P_sensor = boost::none) :
 | 
					        boost::optional<POSE> body_P_sensor = boost::none) :
 | 
				
			||||||
          Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor) {
 | 
					          Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
 | 
				
			||||||
    }
 | 
					          throwCheirality_(false), verboseCheirality_(false) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Constructor with exception-handling flags
 | 
				
			||||||
 | 
					     * TODO: Mark argument order standard (keys, measurement, parameters)
 | 
				
			||||||
 | 
					     * @param measured is the 2 dimensional location of point in image (the measurement)
 | 
				
			||||||
 | 
					     * @param model is the standard deviation
 | 
				
			||||||
 | 
					     * @param poseKey is the index of the camera
 | 
				
			||||||
 | 
					     * @param pointKey is the index of the landmark
 | 
				
			||||||
 | 
					     * @param K shared pointer to the constant calibration
 | 
				
			||||||
 | 
					     * @param throwCheirality determines whether exceptions are caught for Cheirality
 | 
				
			||||||
 | 
					     * @param verboseCheirality determines whether exceptions are printed for Cheirality
 | 
				
			||||||
 | 
					     * @param body_P_sensor is the transform from body to sensor frame  (default identity)
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    GenericProjectionFactor(const Point2& measured, const SharedNoiseModel& model,
 | 
				
			||||||
 | 
					        Key poseKey, Key pointKey, const boost::shared_ptr<CALIBRATION>& K,
 | 
				
			||||||
 | 
					        bool throwCheirality, bool verboseCheirality,
 | 
				
			||||||
 | 
					        boost::optional<POSE> body_P_sensor = boost::none) :
 | 
				
			||||||
 | 
					          Base(model, poseKey, pointKey), measured_(measured), K_(K), body_P_sensor_(body_P_sensor),
 | 
				
			||||||
 | 
					          throwCheirality_(throwCheirality), verboseCheirality_(verboseCheirality) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** Virtual destructor */
 | 
					    /** Virtual destructor */
 | 
				
			||||||
    virtual ~GenericProjectionFactor() {}
 | 
					    virtual ~GenericProjectionFactor() {}
 | 
				
			||||||
| 
						 | 
					@ -125,8 +148,11 @@ namespace gtsam {
 | 
				
			||||||
      } catch( CheiralityException& e) {
 | 
					      } catch( CheiralityException& e) {
 | 
				
			||||||
        if (H1) *H1 = zeros(2,6);
 | 
					        if (H1) *H1 = zeros(2,6);
 | 
				
			||||||
        if (H2) *H2 = zeros(2,3);
 | 
					        if (H2) *H2 = zeros(2,3);
 | 
				
			||||||
        std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
 | 
					        if (verboseCheirality_)
 | 
				
			||||||
            " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
 | 
					          std::cout << e.what() << ": Landmark "<< DefaultKeyFormatter(this->key2()) <<
 | 
				
			||||||
 | 
					              " moved behind camera " << DefaultKeyFormatter(this->key1()) << std::endl;
 | 
				
			||||||
 | 
					        if (throwCheirality_)
 | 
				
			||||||
 | 
					          throw e;
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      return ones(2) * 2.0 * K_->fx();
 | 
					      return ones(2) * 2.0 * K_->fx();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -141,6 +167,12 @@ namespace gtsam {
 | 
				
			||||||
      return K_;
 | 
					      return K_;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** return verbosity */
 | 
				
			||||||
 | 
					    inline bool verboseCheirality() const { return verboseCheirality_; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /** return flag for throwing cheirality exceptions */
 | 
				
			||||||
 | 
					    inline bool throwCheirality() const { return throwCheirality_; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /// Serialization function
 | 
					    /// Serialization function
 | 
				
			||||||
| 
						 | 
					@ -151,6 +183,8 @@ namespace gtsam {
 | 
				
			||||||
      ar & BOOST_SERIALIZATION_NVP(measured_);
 | 
					      ar & BOOST_SERIALIZATION_NVP(measured_);
 | 
				
			||||||
      ar & BOOST_SERIALIZATION_NVP(K_);
 | 
					      ar & BOOST_SERIALIZATION_NVP(K_);
 | 
				
			||||||
      ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
 | 
					      ar & BOOST_SERIALIZATION_NVP(body_P_sensor_);
 | 
				
			||||||
 | 
					      ar & BOOST_SERIALIZATION_NVP(throwCheirality_);
 | 
				
			||||||
 | 
					      ar & BOOST_SERIALIZATION_NVP(verboseCheirality_);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
} // \ namespace gtsam
 | 
					} // \ namespace gtsam
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue