diff --git a/gtsam/nonlinear/NonlinearFactor.h b/gtsam/nonlinear/NonlinearFactor.h index 3df049268..c3cd41e2a 100644 --- a/gtsam/nonlinear/NonlinearFactor.h +++ b/gtsam/nonlinear/NonlinearFactor.h @@ -238,7 +238,9 @@ public: /** Check if two factors are equal */ virtual bool equals(const NonlinearFactor& f, double tol = 1e-9) const { const NoiseModelFactor* e = dynamic_cast(&f); - return e && Base::equals(f, tol) && noiseModel_->equals(*e->noiseModel_, tol); + return e && Base::equals(f, tol) && + ((!noiseModel_ && !e->noiseModel_) || + (noiseModel_ && e->noiseModel_ && noiseModel_->equals(*e->noiseModel_, tol))); } /** get the dimension of the factor (number of rows on linearization) */