temperature_dependent_alignment_estimator¶
- giant.calibration.estimators.alignment.temperature_dependent.temperature_dependent_alignment_estimator(frame_1_rotations, frame_2_rotations, temperatures, order='xyz')[source]¶
This function 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.
Internally, we take each provided pair of rotations, compute the difference (r2*r1.inv()), convert the difference to Euler/Tait-Bryan angles, and then perform the linear regression on the results (which yes, is somewhat a case of castcading estimators…).
In general a user should not use this function and instead the
Calibration.estimate_temperature_dependent_alignment()
should be used which handles the proper setup.- Parameters:
frame_1_rotations (Iterable[Rotation]) – the base frame rotations (normally common to base frame)
frame_2_rotations (Iterable[Rotation]) – the target frame rotations (normally common to target frame)
temperatures (Iterable[float]) – the temperature of the image for each corresponding rotation
order (Literal['xyz', 'xzy', 'xyx', 'xzx', 'yxz', 'yzx', 'yxy', 'yzy', 'zxy', 'zyx', 'zyz', 'zxz']) – the order of the Euler/Tait-Bryan angles you want to use
- Return type: