scipy.spatial.transform.Rotation.match_vectors¶
-
classmethod
Rotation.
match_vectors
(a, b, weights=None, normalized=False)[source]¶ Estimate a rotation to match two sets of vectors.
Find a rotation between frames A and B which best matches a set of unit vectors a and b observed in these frames. The following loss function is minimized to solve for the direction cosine matrix \(C\):
\[L(C) = \frac{1}{2} \sum_{i = 1}^{n} w_i \lVert \mathbf{a}_i - C \mathbf{b}_i \rVert^2 ,\]where \(w_i\)‘s are the weights corresponding to each vector.
The rotation is estimated using Markley’s SVD method [1].
Parameters: - a : array_like, shape (N, 3)
Vector components observed in initial frame A. Each row of a denotes a vector.
- b : array_like, shape (N, 3)
Vector components observed in another frame B. Each row of b denotes a vector.
- weights : array_like shape (N,), optional
Weights describing the relative importance of the vectors in a. If None (default), then all values in weights are assumed to be equal.
- normalized : boolean, optional
If True, assume input vectors a and b to have unit norm. If False, normalize a and b before estimating rotation. Default is False.
Returns: - estimated_rotation :
Rotation
instance Best estimate of the rotation that transforms b to a.
- sensitivity_matrix :
numpy.ndarray
, shape (3, 3) Scaled covariance of the attitude errors expressed as the small rotation vector of frame A. Multiply with harmonic mean [3] of variance in each observation to get true covariance matrix. The error model is detailed in [2].
References
[1] (1, 2) F. Landis Markley, “Attitude determination using vector observations: a fast optimal matrix algorithm”, Journal of Astronautical Sciences, Vol. 41, No.2, 1993, pp. 261-280. [2] (1, 2) F. Landis Markley, “Attitude determination using vector observations and the Singular Value Decomposition”, Journal of Astronautical Sciences, Vol. 38, No.3, 1988, pp. 245-258. [3] (1, 2) Harmonic Mean