Template Class CovarianceEllipsoid< double, 2 >

Class Documentation

template<>
class CovarianceEllipsoid<double, 2>

Specialisation of covariance ellipsoids in two dimensions.

This creates ellipsoids for 2x2 covariance matrices, i.e. the usual sort for mobile robot navigation. It uses lovely dirty c-style code to work out the underlying eigen properties rather than Eigen’s solver - tends to be a bit faster in only two dimensions.

Usage:

This class is also more conveniently typedef’d as CovarianceEllipsoid2d.

You can either instantiate directly through the constructor or by hand via the compute() method. Recomputing is also possible without having to construct an entirely new instance.

CovarianceEllipsoid2d ellipsoid(M); // OR
CovarianceEllipsoid2d ellipsoid_hand;
ellipsoid_hand.compute(M);

Once generated, the ellipse properties can easily be extracted.

Vector2d lengths = ellipsoid.lengths(); // axis lengths.
double angle = ellipsoid.rotation(); // angle of rotation to the major axis

There are a couple more methods that can be accessed for more detailed information about the ellipse, but the above two are usually sufficient for drawing your own ellipses.

Public Functions

CovarianceEllipsoid()

Default constructor, use with compute().

This constructor does not do anything - you must use it together with the compute() function. Sometimes useful when using this class with containers.

CovarianceEllipsoid(const ecl::linear_algebra::Matrix2d &M)

Automatically generates ellipsoid information at construction.

Using the specified input covariance matrix, this constructor automatically generates (indirectly calls compute()) the full ellipse information, making it instantly ready for use.

Parameters

M – : the input covariance matrix (must be symmetric positive definite).

inline virtual ~CovarianceEllipsoid()
void compute(const ecl::linear_algebra::Matrix2d &M)

Computes the covariance ellipsoid for the specified matrix.

This can either be called indirectly via the constructor or directly via this function. In either case, it resets the object and generates/computes the resulting ellipse from the specified input covariance matrix.

Parameters

M – : the input covariance matrix (must be symmetric positive definite).

inline const ecl::linear_algebra::Vector2d &lengths()

Returns the precomputed ellipsoid minor/major axis lengths.

Returns the precomputed ellipsoid minor/major axis lengths.

Returns

Vector2d : the minor/major axis lengths.

inline const ecl::linear_algebra::Matrix2d &axes()

Returns the ellipse axes/covariance eigen vectors.

This returns the ellipse axes (aka covariance eigen vectors) as columns of a matrix.

Returns

Matrix2d : the set of eigenvectors as column vectors in a matrix.

double rotation()

Calculates the rotation of the ellipse.

This determines the angle between the x axis and the major axis of the ellipse.

Returns

double : the rotation angle.

ecl::linear_algebra::Vector2d intercepts()

Specifies the intercepts of the ellipse with the cartesian axes.

This determines the distance from the origin to the ellipse boundary in the directions of the usual cartesian axes. Note that the intercepts here are given as a two dimensional vector and this is not the (x,y) pair of an intercept itself.

Rather this is both the x and y magnitudes for which the full set of four intercepts can be generated. These magnitudes are the distances from the centre of the ellipse to the boundary of the ellipse in both the x and y directions.

Returns

Vector2d : x and y-axis intercept distances from the origin.