giant.calibration.estimators.TemperatureDependentAlignmentEstimator

class giant.calibration.estimators.TemperatureDependentAlignmentEstimator(frame_1_rotations=None, frame_2_rotations=None, temperatures=None, order='xyz')[source]

This class estimates a temperature dependent attitude alignment between one frame and another.

The temperature dependent alignment is found by fitting linear temperature dependent euler angles (or Tait-Bryan angles) to transform from the first frame to the second. That is

\[\mathbf{T}_B=\mathbf{R}_m(\theta_m(t))\mathbf{R}_n(\theta_n(t))\mathbf{R}_p(\theta_p(t))\mathbf{T}_A\]

where \(\mathbf{T}_B\) is the target frame, \(\mathbf{R}_i\) is the rotation matrix about the \(i^{th}\) axis, \(\mathbf{T}_A\) is the base frame, and \(\theta_i(t)\) are the linear angles.

This fit is done in a least squares sense by computing the values for \(\theta_i(t)\) across a range of temperatures (by estimating the attitude for multiple single images) and then solving the system

\[\begin{split}\left[\begin{array}{cc} 1 & t_1 \\ 1 & t_2 \\ \vdots & \vdots \\ 1 & t_n \end{array}\right] \left[\begin{array}{ccc} \theta_{m0} & \theta_{n0} & \theta_{p0} \\ \theta_{m1} & \theta_{n1} & \theta_{p1}\end{array}\right] = \left[\begin{array}{ccc}\vphantom{\theta}^0\theta_m &\vphantom{\theta}^0\theta_n &\vphantom{\theta}^0\theta_p\\ \vdots & \vdots & \vdots \\ \vphantom{\theta}^k\theta_m &\vphantom{\theta}^k\theta_n &\vphantom{\theta}^k\theta_p\end{array}\right]\end{split}\]

where \(\vphantom{\theta}^k\theta_i\) is the measured Euler/Tait-Bryan angle for the \(k^{th}\) image.

In general a user should not use this class and instead the Calibration.estimate_temperature_dependent_alignment() should be used which handles the proper setup.

Parameters:
  • frame_1_rotations (Iterable[Rotation] | None) – The rotation objects from the inertial frame to the base frame

  • frame_2_rotations (Iterable[Rotation] | None) – The rotation objects from the inertial frame to the target frame

  • temperatures (List[Real] | None) – The temperature of the camera corresponding to the times the input rotations were estimated.

  • order (str) – The order of the rotations to perform according to the convention in quaternion_to_euler()

frame_1_rotations: Iterable[Rotation] | None

An iterable containing the rotations from the inertial frame to the base frame for each image under consideration.

frame_2_rotations: Iterable[Rotation] | None

An iterable containing the rotations from the inertial frame to the target frame for each image under consideration.

temperatures: List[Real] | None

A list containing the temperatures of the camera for each image under consideration

order: str

The order of the Euler angles according to the convention in quaternion_to_euler()

angle_m_offset: float | None

The estimated constant angle offset for the m rotation axis in radians.

This will be None until estimate() is called.

angle_m_slope: float | None

The estimated angle temperature slope for the m rotation axis in radians.

This will be None until estimate() is called.

angle_n_offset: float | None

The estimated constant angle offset for the n rotation axis in radians.

This will be None until estimate() is called.

angle_n_slope: float | None

The estimated angle temperature slope for the n rotation axis in radians.

This will be None until estimate() is called.

angle_p_offset: float | None

The estimated constant angle offset for the p rotation axis in radians.

This will be None until estimate() is called.

angle_p_slope: float | None

The estimated angle temperature slope for the p rotation axis in radians.

This will be None until estimate() is called.

Summary of Methods

estimate

This method estimates the linear temperature dependent alignment as 3 linear temperature dependent euler angles according to order.