gtsam
Loading...
Searching...
No Matches
gtsam::noiseModel::mEstimator Namespace Reference

The mEstimator name space contains all robust error functions. More...

Classes

class  Base
 Pure virtual class for all robust error function classes. More...
class  Null
 "Null" robust loss function, equivalent to a Gaussian pdf noise model, or plain least-squares (non-robust). More...
class  Fair
 Implementation of the "Fair" robust error model (Zhang97ivc). More...
class  Huber
 The "Huber" robust error model (Zhang97ivc). More...
class  Cauchy
 Implementation of the "Cauchy" robust error model (Lee2013IROS). More...
class  Tukey
 Implementation of the "Tukey" robust error model (Zhang97ivc). More...
class  Welsch
 Implementation of the "Welsch" robust error model (Zhang97ivc). More...
class  GemanMcClure
 Implementation of the "Geman-McClure" robust error model (Zhang97ivc). More...
class  TruncatedLeastSquares
 Truncated Least Squares (TLS) robust error model. More...
class  DCS
 DCS implements the Dynamic Covariance Scaling robust error model from the paper Robust Map Optimization (Agarwal13icra). More...
class  L2WithDeadZone
 L2WithDeadZone implements a standard L2 penalty, but with a dead zone of width 2*k, centered at the origin. More...
class  AsymmetricTukey
 Implementation of the "AsymmetricTukey" robust error model. More...
class  AsymmetricCauchy
 Implementation of the "AsymmetricCauchy" robust error model. More...
class  Custom
 Implementation of the "Custom" robust error model. More...

Typedefs

using CustomLossFunction = std::function<double(double)>
using CustomWeightFunction = std::function<double(double)>
using CustomGraduatedLossFunction
using CustomGraduatedWeightFunction

Detailed Description

The mEstimator name space contains all robust error functions.

It mirrors the exposition at https://members.loria.fr/MOBerger/Enseignement/Master2/Documents/ZhangIVC-97-01.pdf which talks about minimizing \sum \rho(r_i), where \rho is a loss function of choice.

To illustrate, let's consider the least-squares (L2), L1, and Huber estimators as examples:

Name Symbol Least-Squares L1-norm Huber Loss \rho(x) 0.5*x^2 |x| 0.5*x^2 if |x|<k, 0.5*k^2 + k|x-k| otherwise Derivative \phi(x) x sgn(x) x if |x|<k, k sgn(x) otherwise Weight w(x)=\phi(x)/x 1 1/|x| 1 if |x|<k, k/|x| otherwise

With these definitions, D(\rho(x), p) = \phi(x) D(x,p) = w(x) x D(x,p) = w(x) D(L2(x), p), and hence we can solve the equivalent weighted least squares problem \sum w(r_i) \rho(r_i)

Each M-estimator in the mEstimator name space simply implements the above functions.

Each M-estimator additionally implements "graduated" versions of these functions. Name Symbol Graduated Loss \rho(x,\mu) Graduated Weight \w(x,\mu) The control parameter \mu in [0, 1] transitions the loss from convex (\mu=0) to its original robust form (\mu=1). This is used by continuation-style algorithms (GNC, riSAM) to modify the underlying problem structure.

GTSAM convention for graduated robust losses: \mu in [0, 1] \mu = 0: most convex / least-squares-like initialization \mu = 1: final target robust loss Increasing \mu always increases non-convexity, and both endpoints are exact rather than approached asymptotically.

Typedef Documentation

◆ CustomGraduatedLossFunction

using gtsam::noiseModel::mEstimator::CustomGraduatedLossFunction
Initial value:
std::optional<std::function<double(double, double)>>

◆ CustomGraduatedWeightFunction

using gtsam::noiseModel::mEstimator::CustomGraduatedWeightFunction
Initial value:
std::optional<std::function<double(double, double)>>