estimator-1.1.0.0: State-space estimation algorithms such as Kalman Filters

Safe HaskellNone
LanguageHaskell2010

Numeric.Estimator.Model.Coordinate

Contents

Description

The Linear module provides basic fixed-dimensional vector types such as V3, for three-element vectors. However, it does not help with identifying which coordinate system a vector was measured in.

The types in this module are trivial newtype wrappers around V3 to tag vectors with an appropriate coordinate system. The systems used here follow a common convention used in navigation problems.

Synopsis

Navigation frame

newtype NED a Source

Navigation occurs in a right-hand coordinate system with respect to a "local tangent plane". The origin of this plane is chosen to be some convenient point on the Earth's surface--perhaps the location where navigation began. The plane is oriented such that it is tangent to the Earth's surface at that origin point. The basis vectors point northward, eastward, and downward from the origin. Notice that the further you travel from the origin, the further the tangent plane separates from the surface of the Earth, so this approach is of limited use over long distances.

Constructors

NED 

Fields

nedToVec3 :: V3 a
 

ned :: a -> a -> a -> NED a Source

Construct a navigation frame coordinate from (north, east, down).

Body frame

newtype XYZ a Source

Most sensor measurements are taken with respect to the sensor platform in the vehicle. We assume the sensors are perfectly orthogonally arranged in a right-hand Cartesian coordinate system, which is usually close enough to the truth, although more sophisticated approaches exist to calibrate out non-orthogonal alignment and other errors. This coordinate system is only meaningful with respect to the current position and orientation of the sensor platform, as of the instant that the measurement was taken.

Constructors

XYZ 

Fields

xyzToVec3 :: V3 a
 

xyz :: a -> a -> a -> XYZ a Source

Construct a body frame coordinate from (x, y, z).

Coordinate frame conversion

convertFrames :: Num a => Quaternion a -> (XYZ a -> NED a, NED a -> XYZ a) Source

Most practical problems involving inertial sensors (such as accelerometers and gyroscopes) require keeping track of the relationship between these two coordinate systems.

If you maintain a quaternion representing the rotation from navigation frame to body frame, then you can use this function to get functions that will convert coordinates between frames in either direction.