diff --git a/gtsam/nonlinear/GaussNewtonOptimizer.h b/gtsam/nonlinear/GaussNewtonOptimizer.h index 3b1e69481..e445a4e00 100644 --- a/gtsam/nonlinear/GaussNewtonOptimizer.h +++ b/gtsam/nonlinear/GaussNewtonOptimizer.h @@ -90,7 +90,7 @@ public: * @param params The optimization parameters */ GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& values, - const GaussNewtonParams& params = GaussNewtonParams(), + const GaussNewtonParams& params, const Ordering& ordering = Ordering()) : NonlinearOptimizer( SharedGraph(new NonlinearFactorGraph(graph)), @@ -101,6 +101,25 @@ public: ordering_(colamdOrdering_ ? graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))) {} + /** Standard constructor, requires a nonlinear factor graph, initial + * variable assignments, and optimization parameters. For convenience this + * version takes plain objects instead of shared pointers, but internally + * copies the objects. + * @param graph The nonlinear factor graph to optimize + * @param values The initial variable assignments + * @param params The optimization parameters + */ + GaussNewtonOptimizer(const NonlinearFactorGraph& graph, const Values& values, + const Ordering& ordering = Ordering()) : + NonlinearOptimizer( + SharedGraph(new NonlinearFactorGraph(graph)), + SharedValues(new Values(values)), + SharedGNParams(new GaussNewtonParams())), + gnParams_(boost::static_pointer_cast(params_)), + colamdOrdering_(ordering.size() == 0), + ordering_(colamdOrdering_ ? + graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))) {} + /** Standard constructor, requires a nonlinear factor graph, initial * variable assignments, and optimization parameters. * @param graph The nonlinear factor graph to optimize diff --git a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h index b2605b968..48a7fd532 100644 --- a/gtsam/nonlinear/LevenbergMarquardtOptimizer.h +++ b/gtsam/nonlinear/LevenbergMarquardtOptimizer.h @@ -124,6 +124,27 @@ public: dimensions_(new vector(values_->dims(*ordering_))), lambda_(lmParams_->lambdaInitial) {} + /** Standard constructor, requires a nonlinear factor graph, initial + * variable assignments, and optimization parameters. For convenience this + * version takes plain objects instead of shared pointers, but internally + * copies the objects. + * @param graph The nonlinear factor graph to optimize + * @param values The initial variable assignments + * @param params The optimization parameters + */ + LevenbergMarquardtOptimizer(const NonlinearFactorGraph& graph, const Values& values, + const Ordering& ordering) : + NonlinearOptimizer( + SharedGraph(new NonlinearFactorGraph(graph)), + SharedValues(new Values(values)), + SharedLMParams(new LevenbergMarquardtParams())), + lmParams_(boost::static_pointer_cast(params_)), + colamdOrdering_(ordering.size() == 0), + ordering_(colamdOrdering_ ? + graph_->orderingCOLAMD(*values_) : Ordering::shared_ptr(new Ordering(ordering))), + dimensions_(new vector(values_->dims(*ordering_))), + lambda_(lmParams_->lambdaInitial) {} + /** Standard constructor, requires a nonlinear factor graph, initial * variable assignments, and optimization parameters. * @param graph The nonlinear factor graph to optimize