# 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. 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