Keywords

1 Introduction

The Global Navigation Satellite System (GNSS) plays an important role in the attitude determination, ranging from terrestrial to maritime (guidance of land vehicles, precise docking of vessels, and automatic pilot), and from air to space (landing assistance, unmanned air vehicles (UAVs), and satellites) [1,2,3,4,5,6,7,8]. High-precision attitude estimation usually requires carrier phase observations, which have higher accuracy than code observations that rely on successful resolution of unknown integer ambiguities. After ambiguity resolution, the attitude of a multi-antenna platform can be derived via quaternions.

The key to integer ambiguities resolution (IAR) is the accuracy of the float ambiguity. Current approaches utilize differenced carrier phases to obtain precise baselines between antennas and then deduce the attitude matrix via solving the Wahba’s problem [9, 10]. Within this method, the ambiguity resolution and the attitude matrix extraction are regarded as two individual parts, and the geometry information of the antenna configuration is only involved in the latter process.

Numerous studies have been conducted to investigate the feasibility of the GNSS-based attitude determination in which the geometry information also assists the ambiguity resolution and attitude estimation. Several researchers exploit the known baseline length to improve the accuracy of the float ambiguity by solving the constrained least-squares problem [11,12,13]. The known baseline length is also used to modify Least-squares AMBiguity Decorrelation Adjustment (LAMBDA) method, in which the baseline length is integrated into the ambiguity objective function with mixed integer parameters to improve the success rate of ambiguity resolution [5, 14,15,16]. Several researchers improve the accuracy of the baseline vector or attitude solution with the known integer ambiguity and the prior information [17, 18].

Recall that the double-differenced GNSS code and carrier phase observations contain autocorrelated noise. An augmented state space model can be formulated and a full-order Kalman filter can be used to estimate all the state variables. However, we do not really care about the colored noise. In addition, the first-order Gauss–Markov process model for the higher-order residual errors is only an approximation and is not rigorous. Thus a full-order filter may not be the best choice. The Schmidt-Kalman filter (SKF) is a reduced-order filter dealing with dynamic estimation of systems in which the subsets of state variables are decoupled from each other. The attitude determination problem in this study happens to be such a case, where the attitude parameters and the colored observation noise are decoupled in the state equation and are regarded as “solve-for” and “consider” variables, respectively.

In this study, we focus on float ambiguity resolution using SKF. The geometrical information, i.e., the baseline length and orientation, is not used as additional constraints but essential parameters to reconstruct the measurement model to improve the accuracy of the float ambiguities. The SKF algorithm is utilized to estimate float ambiguities and attitude quaternions simultaneously. The LAMBDA method is then used to fix the ambiguities and to further correct the attitude solutions. A static BDS experiment is carried out to test the performance.

2 GNSS-Attitude Model

In this section, we present the underlying model for GNSS-based attitude solution. The double-differenced carrier phase observation model for a multi-antenna system is firstly introduced. The antenna configuration, the definition of the body reference system, as well as the attitude model is then described.

2.1 Functional Model for GNSS Observations

The single-frequency GNSS carrier phase measurements used for receiver A tracking satellite j at time k are given as follows:

$$ P_{A}^{j} = \rho_{A}^{j} + c (\delta t_{A} - \delta t_{{}}^{j} )+ I_{A}^{j} + T_{A}^{j} + v_{P}^{j} $$
(1)
$$ \Phi _{A}^{j} = \rho_{A}^{j} + \lambda_{L1} N_{A}^{j} + c (\delta t_{A} - \delta t_{{}}^{j} )- I_{A}^{j} + T_{A}^{j} + v_{\varPhi }^{j} $$
(2)

where the superscript j indicates the GNSS satellite, the subscript A indicates the receiver, \( P_{A}^{j} ,\,\Phi _{A}^{j} \) represent the carrier phase observations and pseudorange (m), \( \rho_{A}^{j} \) the geometrical distance between the receiver and the satellite (m), c the vacuum speed of light (m/s), \( \delta t_{A} \) and \( \delta t^{j} \) the receiver and satellite clock offsets (s), \( I_{A}^{j} \) and \( T_{A}^{j} \) the ionospheric and troposphere error terms (m), \( v_{\Phi }^{j} \) the thermal noise (m), \( N_{A}^{j} \) the ambiguity (cycles), and \( \lambda_{L1} \) is the nominal L1 carrier phase wavelength (m).

Suppose that the receivers A and B track m common GNSS satellites. The double-differenced (DD) carrier phase observations are constructed with differences between measurements collected by the two receivers from two different satellites as follows:

$$ P_{BA}^{j\vartheta } = \rho_{BA}^{j\vartheta } + v_{{\Phi _{BA} }}^{j\vartheta } $$
(3)
$$ \Phi _{BA}^{j\vartheta } = \rho_{BA}^{j\vartheta } + \lambda_{L1} N_{BA}^{j\vartheta } + v_{{\Phi _{BA} }}^{j\vartheta } $$
(4)

where \( ( * )_{BA}^{j\vartheta } = \left[ {( * )_{B}^{j} - ( * )_{B}^{\vartheta } } \right] - \left[ {( * )_{A}^{j} - ( * )_{A}^{\vartheta } } \right] \) is the double-differenced operator, \( \vartheta \) is the reference satellite and is selected according to the maximum elevation. The clock offsets are eliminated in the equation and the number of unknown parameters to be determined is thus reduced. Moreover, the atmospheric errors become negligible in case of short baselines, since that the signals travel approximately along the same path from the satellites to the closely separated antennas.

For full attitude determination, at least three antennas are required. Therefore, model (4) needs to be extended to a multi-antenna system. Consider a set of m + 1 antennas tracking the same n + 1 GNSS satellites. Let M be the master antenna and i be the slave antenna \( (i = 1,2, \ldots ,m) \). The GNSS DD carrier phase observations formed with the m independent baselines are given as follows:

$$ \left( {\begin{array}{*{20}c} {\Phi _{1M}^{j\vartheta } } \\ \vdots \\ {\Phi _{mM}^{j\vartheta } } \\ \end{array} } \right) \otimes \left( {\begin{array}{*{20}c} 1 \\ \vdots \\ 1 \\ \end{array} } \right)_{n \times 1} = \left( {\begin{array}{*{20}c} {\rho_{1M}^{j\vartheta } + \lambda_{L1} N_{1M}^{j\vartheta } } \\ \vdots \\ {\rho_{mM}^{j\kappa } + \lambda_{L1} N_{mM}^{j\vartheta } } \\ \end{array} } \right) \otimes \left( {\begin{array}{*{20}c} 1 \\ \vdots \\ 1 \\ \end{array} } \right)_{n \times 1} + \varvec{v}_{mn \times 1} $$
(5)

where \( \otimes \) indicates the Kronecker product, \( \varvec{v}_{mn \times 1} \) is DD observation noise vector.

2.2 Attitude Model

Suppose that there are \( m + 1 \) antennas firmly mounted on a rigid platform. The lengths and the orientations of the baselines are known beforehand. The body reference frame of the platform is defined as follows: the first axis \( \varvec{e}_{1} \) is aligned with the first baseline, the second axis \( \varvec{e}_{2} \) is perpendicular to \( \varvec{e}_{1} \) lying in the plane formed by the first two baselines, and the third axis \( \varvec{e}_{3} \) together with \( \varvec{e}_{1} \) and \( \varvec{e}_{2} \) forms a right-handed orthonormal frame. The attitude matrix A (ATA = I) is defined as the transformation matrix from the local East-North-Up (ENU) frame to the body frame. Let B and D denote the matrices consisting of the n baseline vectors in the body frame and in the ENU frame, respectively. Based on the above definitions, we have see Giorgi et al. [5].

$$ \begin{aligned} & m = 1,\;\varvec{D} = \varvec{AB} = \varvec{A}\left[ {\begin{array}{*{20}c} {B_{11} } \\ 0 \\ 0 \\ \end{array} } \right] \\ & m = 2,\;\varvec{D} = \varvec{AB} = \varvec{A}\left[ {\begin{array}{*{20}c} {B_{{{\mathbf{11}}}} } & {B_{{{\mathbf{21}}}} } \\ 0 & {B_{{{\mathbf{22}}}} } \\ 0 & 0 \\ \end{array} } \right] \\ & m \ge 3,\;\varvec{D} = \varvec{AB} = \varvec{A}\left[ {\begin{array}{*{20}c} {B_{11} } & {B_{21} } & {\begin{array}{*{20}c} {B_{31} } & \cdots & {B_{m1} } \\ \end{array} } \\ 0 & {B_{22} } & {\begin{array}{*{20}c} {B_{32} } & \cdots & {B_{m2} } \\ \end{array} } \\ 0 & 0 & {\begin{array}{*{20}c} {B_{33} } & \cdots & {B_{m3} } \\ \end{array} } \\ \end{array} } \right] \\ \end{aligned} $$
(6)

The quaternion representation is of common use to attitude estimation and control applications, since that it guarantees high numerical robustness. In addition, the estimation of the orthonormal matrix A has low computational loads and no singularities with the quaternion parameterization. The attitude matrix A is parameterized in terms of quaternions as follows:

$$ \varvec{A}(\bar{\varvec{q}}) = \left[ {\begin{array}{*{20}c} {q_{1}^{2} - q_{2}^{2} - q_{3}^{2} + q_{4}^{2} } & {2\left( {q_{1} q_{2} + q_{3} q_{4} } \right)} & {2\left( {q_{1} q_{3} - q_{2} q_{4} } \right)} \\ {2\left( {q_{1} q_{2} - q_{3} q_{4} } \right)} & { - q_{1}^{2} + q_{2}^{2} - q_{3}^{2} + q_{4}^{2} } & {2\left( {q_{2} q_{3} + q_{1} q_{4} } \right)} \\ {2\left( {q_{1} q_{3} + q_{2} q_{4} } \right)} & {2\left( {q_{2} q_{3} - q_{1} q_{4} } \right)} & { - q_{1}^{2} - q_{2}^{2} + q_{3}^{2} + q_{4}^{2} } \\ \end{array} } \right] $$
(7)

where \( \bar{\varvec{q}} = \left( {\varvec{q},\;q_{4} } \right),\;\varvec{q} = \left( {q_{1} ,\;q_{2} ,\;q_{3} } \right),\;\overline{{\varvec{qq}}}^{\text{T}} = 1 \).

The three Euler angles can be extracted from the attitude matrix A by

$$ \psi = \arctan \left( { - a_{21} /a_{22} } \right);\;\theta = \arctan \left( { - a_{13} /a_{33} } \right);\;\varphi = \arcsin \left( {a_{23} } \right) $$
(8)

with \( a_{ij} \) the elements of A.

3 SKF for GNSS-Attitude Determination

The DD carrier phase model and the attitude model described above are combined to formulate the direct quaternion parameterized observation equation. The state equation for kinematic attitude determination is also given. Then we utilize the SKF to deal with this recursive estimation problem.

3.1 The Quaternion Parameterized Observation Equation

The quaternion parameterized observation equation is formulated by fully exploiting the baseline length and orientation information. For ultra-short baselines, the double-differenced geometric distance \( \varvec{\rho}_{iM}^{\kappa j} \) in Eq. (4) can be linearized as

$$ \rho_{iM}^{j\kappa } = \left[ {\rho_{i}^{j} - \rho_{i}^{\kappa } } \right] - \left[ {\rho_{M}^{j} - \rho_{M}^{\kappa } } \right] = \varvec{L}_{i}^{T} \varvec{u}_{j} $$
(9)

With

$$ \varvec{u}_{j} = \frac{{\varvec{r}^{j} - \varvec{r}_{M} }}{{\rho_{M}^{j} }} - \frac{{\varvec{r}^{\kappa } - \varvec{r}_{M} }}{{\rho_{M}^{\kappa } }} $$
(10)

where \( \varvec{r}_{M} \) is the known position vector of the master antenna, \( \varvec{r}^{j} \) and \( \varvec{r}^{\kappa } \) are the position vectors of the jth and reference satellites, and \( \varvec{L}_{i} \) is the unknown baseline vector between the ith antenna and the master antenna. All the vectors in Eq. (9) are expressed in the Earth-centered Earth-fixed (ECEF) frame. Combine the m baselines vector into a 3 × m matrix.

$$ \varvec{L} = \left[ {\begin{array}{*{20}c} {\varvec{L}_{1} } & {\varvec{L}_{2} } & \cdots & {\varvec{L}_{m} } \\ \end{array} } \right] $$
(11)

According to the definitions of coordinate systems in Sect. 2, we have

$$ \varvec{L} = \varvec{TD} = \varvec{TA}(\bar{\varvec{q}})\varvec{B} $$
(12)

where T is the rotation matrix from ENU to ECEF. Substituting Eqs. (9) and (11) into Eq. (4), then we obtain the direct functional relationship between the DD phases and the quaternions.

$$ {\Delta \nabla }\varvec{\varPhi}= \left( {\left( {\varvec{TA}(\bar{\varvec{q}})\varvec{B}} \right)^{T} \varvec{u}_{j} + \lambda_{L1} \varvec{N}_{j} } \right) \otimes \left( {\begin{array}{*{20}c} 1 \\ \vdots \\ 1 \\ \end{array} } \right)_{n \times 1} + \varvec{v}_{mn \times 1} $$
(13)

where \( {\Delta \nabla }\varvec{\varPhi} \) is the DD carrier phase vector, \( \varvec{N}_{j} = \left[ {\begin{array}{*{20}c} {N_{1M}^{j\vartheta } } & {N_{2M}^{j\vartheta } } & \cdots & {N_{mM}^{j\vartheta } } \\ \end{array} } \right] \) the DD ambiguity vector for the jth satellite. The unknown parameters in Eq. (13) include the 4-dimensional quaternion \( \bar{\varvec{q}} \) and a total m × n dimensional DD ambiguity vector \( \varvec{N} = \left[ {\begin{array}{*{20}c} {\varvec{N}_{1}^{T} } & {\varvec{N}_{2}^{T} } & \cdots & {\varvec{N}_{n}^{T} } \\ \end{array} } \right]^{T} \).

The norm of \( \bar{\varvec{q}} \) always equals 1. This provides a nonlinear constraint for the quaternion estimation. In this study, the norm constraint is regarded as a virtual observation. The final observation equation can be written as

$$ \varvec{z} \equiv \left[ {\begin{array}{*{20}c} {{\Delta \nabla }\varvec{\varPhi}} \\ 1 \\ \end{array} } \right] = \varvec{h}({\varvec{x}}) + \tilde{\varvec{v}} $$
(14)

with

$$ \varvec{h}(x) = \left[ {\begin{array}{*{20}c} {\left( {\left( {\varvec{TA}(\bar{\varvec{q}})\varvec{B}} \right)^{T} \varvec{u}_{j} + \lambda_{L1} \varvec{N}_{j} } \right) \otimes \left( {\begin{array}{*{20}c} 1 \\ \vdots \\ 1 \\ \end{array} } \right)_{n \times 1} } \\ {\bar{\varvec{q}}^{T} \bar{\varvec{q}}} \\ \end{array} } \right],\;\tilde{\varvec{v}} = \left[ {\begin{array}{*{20}c} {\varvec{v}_{mn \times 1} } \\ 0 \\ \end{array} } \right] $$
(15)

where \( \varvec{x} = \left[ {\begin{array}{*{20}c} {\bar{\varvec{q}}} & \varvec{N} \\ \end{array} } \right]^{T} \) is the state vector, \( \varvec{h}\left( \cdot \right) \) is the nonlinear measurement function, \( \tilde{\varvec{v}} \) is the observation error and is assumed to be zero-mean Gaussian noise. The variance-covariance (V-C) matrix of the observations is constructed as [5]

$$ \varvec{R} = \left[ {\begin{array}{*{20}c} {\varvec{R}_{{{\Delta \nabla }\varvec{\varPhi}}} } & {} \\ {} & 0 \\ \end{array} } \right] $$
(16)

with

$$ \varvec{R}_{{{\Delta \nabla }\varvec{\varPhi}}} = \sigma_{\varvec{\varPhi}}^{2} \varvec{I}_{m \times m} \otimes \left[ {\begin{array}{*{20}c} 4 & 2 & \cdots & 2 \\ 2 & 4 & \cdots & 2 \\ \vdots & \vdots & \ddots & \vdots \\ 2 & 2 & \cdots & 4 \\ \end{array} } \right]_{n \times n} $$
(17)

where \( \sigma_{\varvec{\varPhi}} \) is the standard deviation of the undifferenced carrier phase noise.

3.2 The Kinematic State Equation

The kinematic motion of the attitude quaternion and the ambiguities can be represented as a first-order differential equation.

$$ \begin{aligned} {\dot{\bar{\varvec{q}}}} & = \frac{1}{2}\varvec{\varOmega}{\bar{\varvec{q}}} \\ \dot{\varvec{N}} & = \varvec{0} \\ \end{aligned} $$
(18)

where Ω is the angular velocity matrix. In order to propagate the state vector to the next measurement epoch, the discrete form of the kinematic equation is used as follows:

$$ \begin{aligned} \bar{\varvec{q}}_{k} & = \varvec{e}^{{\frac{1}{2}\varvec{\varOmega}\Delta t_{k} }} \bar{\varvec{q}}_{k - 1} \\ \varvec{N}_{k} & = \varvec{N}_{k - 1} \\ \end{aligned} $$
(19)

where, the subscript k denotes the epoch number.

The generalized state equation can be obtained as

$$ \varvec{x}_{k} = \varvec{F}_{k,k - 1} \varvec{x}_{k - 1} + \varvec{w}_{k - 1} $$
(20)

with

$$ \varvec{F}_{k,k - 1} = \left[ {\begin{array}{*{20}c} {\varvec{e}^{{\frac{1}{2}\varvec{\varOmega}\varDelta t_{k} }} } & {} \\ {} & {\varvec{I}_{mn \times mn} } \\ \end{array} } \right],\;\varvec{w}_{k - 1} = \left[ {\begin{array}{*{20}c} {\varvec{w}_{\omega } } \\ {\varvec{0}_{mn \times 1} } \\ \end{array} } \right] $$
(21)

where \( \varvec{F}_{k/k - 1} \) is the state transition matrix, \( \varvec{w}_{\omega } \) is the fictitious process noise due to the angular velocity uncertainty, and its standard deviation is denoted by \( \sigma_{\omega } \). For the static case, \( \varvec{\varOmega}= \varvec{0} \). Then we have

$$ \varvec{F}_{k,k - 1} = \left[ {\begin{array}{*{20}c} {\varvec{I}_{4 \times 4} } & {} \\ {} & {\varvec{I}_{mn \times mn} } \\ \end{array} } \right] $$
(22)

The process noise matrix \( \varvec{Q}_{k - 1} \) is defined as

$$ \varvec{Q}_{k,k - 1} = \left[ {\begin{array}{*{20}c} {\sigma_{\omega }^{2}\Delta t \cdot \varvec{I}_{4 \times 4} } & {} \\ {} & {\varvec{0}_{mn \times mn} } \\ \end{array} } \right] $$
(23)

3.3 Schmidt-Kalman Filter Design

The DD carrier phase model and the attitude model described above are combined to formulate the direct quaternion parameterized observation equation. The state equation for kinematic attitude determination is also given. Then we utilize the SKF to deal with this recursive estimation problem. The double-differenced GNSS code and carrier phase observations contain autocorrelated noise. An augmented state space model can be formulated and a full-order Kalman filter can be used to estimate all the state variables. However, we do not really care about the colored noise. In addition, the first-order Gauss–Markov process model for the higher-order residual errors is only an approximation and is not rigorous. Thus a full-order filter may not be the best choice.

The Schmidt-Kalman filter (SKF) is a reduced-order filter dealing with dynamic estimation of systems in which the subsets of state variables are decoupled from each other [19, 20]. The attitude determination problem in this study happens to be such a case, where the attitude parameters and the colored observation noise are decoupled in the state equation and are regarded as “solve-for” and “consider” variables, respectively. The solve-for states are updated at each time step, whereas the considered states are always set to zero. The update process also involves the covariances of the states. The detailed algorithm of the Schmidt-Kalman filter for linear system estimation is given in Simon [19], and its superior performance over the standard reduced-order Kalman filter.

This section presents the overall Schmidt-Kalman filter design for the single-frequency GNSS attitude determination. The solve-for state vector comprises the quaternion and the DD ambiguities.

$$ \tilde{\varvec{x}}^{T} = \left[ {\begin{array}{*{20}c} {\bar{\varvec{q}}} & {\widehat{\varvec{N}}} \\ \end{array} } \right] $$
(24)

The estimate of \( \tilde{\varvec{x}} \) is denoted by \( {\hat{\tilde{\varvec{x}}}} \) and the accompanying covariance is denoted by \( \widetilde{\varvec{P}} \). Suppose there are n tracked GNSS satellites at the current epoch and the reference satellite is placed at the \( \vartheta \)th position in the visible satellites array. The DD ambiguity vector \( \widehat{\varvec{N}} \), thus contains M − 1 unknowns baseline DD ambiguity vector \( \widehat{\varvec{N}}_{iM} \,(i = 1,2, \ldots ,{\text{M}} - 1) \).

$$ \begin{aligned} \widehat{\varvec{N}} & = \left[ {\begin{array}{*{20}c} {\widehat{\varvec{N}}_{1M} } & {\begin{array}{*{20}c} \cdots & {\widehat{\varvec{N}}_{iM} } & \cdots \\ \end{array} } & {\widehat{\varvec{N}}_{M - 1M} } \\ \end{array} } \right]^{T} \\ \widehat{\varvec{N}}_{iM} & = \left[ {\begin{array}{*{20}c} {\widehat{\varvec{N}}_{iM}^{\vartheta 1} } & {\widehat{\varvec{N}}_{iM}^{\vartheta 2} } & \cdots & {\widehat{\varvec{N}}_{iM}^{\vartheta j} } & \cdots & {\widehat{\varvec{N}}_{iM}^{\vartheta m} } \\ \end{array} } \right]^{T} \\ \end{aligned} $$
(25)

where \( j \ne \vartheta . \) The consider state vector comprises the \( M - 1 \times n - 1 \) double-differenced colored noise terms.

$$ \begin{aligned} {\tilde{\tilde{\varvec{x}}}} & = \left[ {\begin{array}{*{20}c} {\varvec{\xi}_{1M} } & \cdots & {\begin{array}{*{20}c} {\varvec{\xi}_{iM} } & \cdots & {\varvec{\xi}_{M - 1M} } \\ \end{array} } \\ \end{array} } \right] \\\varvec{\xi}_{iM} & = \left[ {\begin{array}{*{20}c} {\xi_{iM}^{\vartheta 1} } & {\xi_{iM}^{\vartheta 2} } & \cdots & {\xi_{iM}^{\vartheta j} } & \cdots & {\xi_{iM}^{\vartheta n} } \\ \end{array} } \right]^{T} \\ \end{aligned} $$
(26)

where \( j \ne \vartheta . \) The estimate of \( {\tilde{\tilde{\varvec{x}}}} \) is denoted by \( {\hat{\tilde{\tilde{\varvec{x}}}}} \) and the accompanying covariance is denoted by \( \widetilde{{\widetilde{\varvec{P}}}} \). The covariance between \( {\hat{\tilde{\varvec{x}}}} \) and \( {\hat{\tilde{\tilde{\varvec{x}}}}} \) is denoted by \( \varvec{\varSigma} \).

Given initial values of \( \tilde{\varvec{x}},\widetilde{\varvec{P}},\varvec{\varSigma} \), and \( \widetilde{{\widetilde{\varvec{P}}}} \), the filter processes the double-differenced carrier phase measurements at consecutive epochs and recursively updates the solve-for states and all the covariances. The initial values of q is obtained by body attitude angles. The initial value of \( \varvec{\varSigma} \) is set to zero. The initial value of \( \widetilde{{\widetilde{\varvec{P}}}} \) is set to

$$ \widetilde{{\widetilde{\varvec{P}}}} = \sigma_{\xi }^{2} \left[ {\begin{array}{*{20}c} 2 & 1 & \cdots & 1 \\ 1 & 2 & \cdots & 1 \\ \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & \cdots & 2 \\ \end{array} } \right]_{(n - 1) \times (n - 1)} $$
(27)

The recursive estimation at each step consists of time-update and measurement-update stages. At the time-update stage, the solve-for states are propagated from previous epoch k − 1 to current epoch k, see Eqs. (1923).

The covariance \( \widetilde{\varvec{P}} \) is propagated as follows:

$$ \widetilde{\varvec{P}}_{k}^{ - } = \varvec{F}_{k,k - 1} \widetilde{\varvec{P}}_{k - 1}^{ + } \varvec{F}_{k,k - 1}^{T} + \varvec{Q}_{k,k - 1} $$
(28)

The covariances, \( \varvec{\varSigma} \) and \( \widetilde{{\widetilde{\varvec{P}}}} \), are also propagated as follows:

$$ \varvec{\varSigma}_{k}^{ - } =\varvec{\varPhi}_{k,k - 1}\varvec{\varSigma}_{k - 1}^{ + } \varvec{M}_{k,k - 1}^{T} $$
(29)
$$ \widetilde{{\widetilde{\varvec{P}}}}_{k}^{ - } = \varvec{M}_{k,k - 1} \widetilde{{\widetilde{\varvec{P}}}}_{k - 1}^{ + } \varvec{M}_{k,k - 1}^{T} + \varvec{Q}_{\xi ,k,k - 1} $$
(30)

where \( \varvec{M}_{k,k - 1} \) and \( \varvec{Q}_{\xi ,k,k - 1} \) are the mapping matrix and process noise matrix of \( {\tilde{\tilde{\varvec{x}}}} \)

$$ \varvec{M}_{k,k - 1} = e^{{ - \left( {t_{k} - t_{k - 1} } \right)/\tau }} \varvec{I}_{(n - 1) \times (n - 1)} $$
(31)
$$ \varvec{Q}_{\xi ,k,k - 1} = \sigma_{\xi }^{2} \left[ {1 - e^{{ - 2\left( {t_{k} - t_{k - 1} } \right)/\tau }} } \right]\left[ {\begin{array}{*{20}c} 2 & 1 & \cdots & 1 \\ 1 & 2 & \cdots & 1 \\ \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & \cdots & 2 \\ \end{array} } \right]_{(m - 1) \times (m - 1)} $$
(32)

At the measurement-update stage, the solve-for state vector and its accompanying covariance are updated as follows:

$$ {\hat{\tilde{\varvec{x}}}}_{k}^{ + } = {\hat{\tilde{\varvec{x}}}}_{k}^{ - } + \widetilde{\varvec{K}}_{k} \left[ {\varvec{z}_{k} - \varvec{G}\left( {{\hat{\tilde{\varvec{x}}}}^{ - } } \right)} \right] $$
(33)
$$ \widetilde{\varvec{K}}_{k} = \left( {\widetilde{\varvec{P}}_{k}^{ - } \widetilde{\varvec{H}}_{k}^{T} +\varvec{\varSigma}_{k}^{ - } \widetilde{{\widetilde{\varvec{H}}}}_{k}^{T} } \right)\varvec{\varLambda}_{k}^{ - 1} $$
(34)
$$ \varvec{\varLambda}_{k} = \widetilde{\varvec{H}}_{k} \widetilde{\varvec{P}}_{k}^{ - } \widetilde{\varvec{H}}_{k}^{T} + \widetilde{\varvec{H}}_{k}\varvec{\varSigma}_{k}^{ - } \widetilde{{\widetilde{\varvec{H}}}}_{k}^{T} + \widetilde{{\widetilde{\varvec{H}}}}_{k} \left( {\varvec{\varSigma}_{k}^{ - } } \right)^{T} \widetilde{\varvec{H}}_{k}^{T} + \widetilde{{\widetilde{\varvec{H}}}}_{k} \widetilde{{\widetilde{\varvec{P}}}}_{k}^{ - } \widetilde{{\widetilde{\varvec{H}}}}_{k}^{T} + {\mathbf{R}}_{k} $$
(35)
$$ \begin{aligned} \widetilde{\varvec{P}}_{k}^{ + } & = \left( {{\mathbf{I}} - \widetilde{\varvec{K}}_{k} \widetilde{\varvec{H}}_{k} } \right){\tilde{\mathbf{P}}}_{k}^{ - } \left( {{\mathbf{I}} - \widetilde{\varvec{K}}_{k} \widetilde{\varvec{H}}_{k} } \right)^{T} - \left( {{\mathbf{I}} - \widetilde{\varvec{K}}_{k} \widetilde{\varvec{H}}_{k} } \right)\varvec{\varSigma}_{k}^{ - } \widetilde{{\widetilde{\varvec{H}}}}_{k}^{T} \widetilde{\varvec{K}}_{k}^{T} \\ & \quad - \widetilde{\varvec{K}}_{k} \widetilde{{\widetilde{\varvec{H}}}}_{k} \left( {\varvec{\varSigma}_{k}^{ - } } \right)^{T} \left( {{\mathbf{I}} - \widetilde{\varvec{K}}_{k} \widetilde{\varvec{H}}_{k} } \right)^{T} + \widetilde{\varvec{K}}_{k} {\mathbf{R}}_{k} \widetilde{\varvec{K}}_{k}^{T} \\ \end{aligned} $$
(36)

where \( \widetilde{\varvec{K}}_{k} \) is the filter gain, \( \varvec{z}_{k} \) is the actual measurement vector, \( \varvec{G}\left( {{\hat{\tilde{\varvec{x}}}}^{ - } } \right) \) is the predicted measurement vector, \( \widetilde{\varvec{H}}_{k} \) and \( \widetilde{{\widetilde{\varvec{H}}}}_{k} \) are the design matrices corresponding to \( \tilde{\varvec{x}} \) and \( {\tilde{\tilde{\varvec{x}}}}, \) and \( \varvec{R}_{k} \) is the covariance of the measurement noise vector. In this study, the measurement vector z refers to the DD observations, see Eq. (14).

The design matrix \( \widetilde{\varvec{H}} \) is composed by

$$ \widetilde{\varvec{H}} = \left[ {\begin{array}{*{20}c} {\varvec{H}_{q} } & {\varvec{I}_{(M - 1 \times n - 1) \times (M - 1 \times n - 1)} } \\ \end{array} } \right] $$
(37)

where \( \varvec{H}_{{\mathbf{r}}} \) contains the normalized line-of-sight vectors and single-differences thereof. The design matrix \( \widetilde{{\widetilde{\varvec{H}}}}_{k} \) is an identify matrix. The measurement covariance is given by Eq. (17).

The covariances \( \varvec{\varSigma} \) and \( \widetilde{{\widetilde{\varvec{P}}}} \) are updated as follows:

$$ \varvec{\varSigma}_{k}^{ + } = \left( {\varvec{I} - \widetilde{\varvec{K}}_{k} \widetilde{\varvec{H}}_{k} } \right)\varvec{\varSigma}_{k}^{ - } - \widetilde{\varvec{K}}_{k} \widetilde{{\widetilde{\varvec{H}}}}_{k} \widetilde{{\widetilde{\varvec{P}}}}_{k}^{ - } $$
(38)

The filter starts with the initialization of the solve-for states and all the covariances and then enters cycles of time-update and measurement-update stages. Before the measurement-update stage, an additional check of the change in observed GPS satellites is required. A reordering operation will be implemented on \( \widehat{\varvec{N}},\widetilde{\varvec{P}}_{{\mathbf{A}}} ,\varvec{\varSigma} \), and \( \widetilde{{\widetilde{\varvec{P}}}} \) if new GNSS satellites are available, old satellites disappear, and the reference satellite changes.

3.4 Workflow of Algorithm

The workflow of the GNSS-based attitude determination by the SKF is presented as Fig. 1

Fig. 1
figure 1

The workflow of the proposed method

  • Initialization processing

A reasonable estimate may not be obtained with the SKF, if the initial estimation is not good. First, the install matrix B is calculated by means of the whole observation data. A good choice is to first initialize the quaternion by solving Eq. (12) with the Gauss–Newton method. Then the DD carrier phase and DD C/A code are combined to generate the initialization of DD ambiguities as follows:

$$ \varvec{N}_{iM}^{j\kappa } = \left( {\varvec{\varPhi}_{iM}^{j\kappa } - \varvec{P}_{iM}^{j\kappa } } \right)/\lambda_{L1} + \varepsilon_{{\Delta \varvec{P}}} $$
(39)

where \( \varvec{P}_{iM}^{j\kappa } \) is DD C/A code, \( \varepsilon_{{\Delta \varvec{P}}} \) is the DD code observation error.

Based on the above initialization, we get initialization state vector \( \varvec{x}_{0} \) and \( \varvec{P}_{0} \)

$$ \hat{\varvec{x}}_{0} = E\left[ {\varvec{x}_{0} } \right],\varvec{P}_{0} = E\left[ {\left( {\varvec{x}_{0} - \hat{\varvec{x}}_{0} } \right)\left( {\varvec{x}_{0} - \hat{\varvec{x}}_{0} } \right)^{T} } \right] $$
(40)
  • Constructing the measurement model

At each epoch, the reference satellite and common tracking satellites for the baselines are obtained by Single Point Positioning. Then, the DD carrier phase can be calculated to construct measurement vector by Eq. (14).

  • Cycle slip detection

Once the correct integer ambiguity vector is fixed, it can be used permanently until cycle slip occurrence. Thus the cycle slip detection is of importance to the attitude determination. We use the distance between the time-update DD float ambiguity \( \widehat{\varvec{N}}_{k,k - 1}^{\vartheta i} \) and the \( \varvec{N}_{iM}^{\vartheta j} \) estimated by applying Eq. (41) to detect cycle slip as follows:

$$ \left| {\varvec{N}_{iM}^{\vartheta j} - \widehat{\varvec{N}}_{iM,k/k - 1}^{\vartheta j} } \right| > \zeta $$
(41)

where the \( \zeta \) is the an empirical threshold, which is set to 3 [21]. If the distance value is larger than \( \zeta \), we deduce that a cycle slip occurred to the corresponding satellite and some operation will be implemented to repair it.

  • Float ambiguity resolution by the SKF

When the observation vector and state vector have been constructed, the SKF is utilized to get high accuracy float solutions in which the filter contains time-update and measurement-update stages.

  • Integer ambiguity resolution and validation

To exploit the full accuracy of the carrier phase observations, the filter has furthermore been supplemented with integer ambiguities. The most appropriate integer vector \( \varvec{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} } \) for the integer ambiguities is obtained by solving an ILS (integer least square) problem expressed as

$$ \varvec{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} } = \arg \mathop {\hbox{min} }\limits_{{{\mathbf{N}} \in {\mathbb{Z}}^{n} }} \,\left\| {\varvec{N} - \widehat{\varvec{N}}_{k} } \right\|_{{\varvec{Q}_{{\varvec{NN}}}^{{}} }}^{2} $$
(42)

A well-known efficient search strategy LAMBDA and its extension MLAMBDA are employed to solve the ILS problem. LAMBDA and MLAMBDA offer the combination of a linear transformation to shrink the integer vector search space and a skillful tree-search procedure in the transformed space [22]. Then the ratio test is used to test the reliability of the integer ambiguities [23].

  • Attitude estimation

The correct DD ambiguity will be used to reconstruct the state and the observation equation. Then the high accuracy quaternion can be obtained by restarting SKF. The attitude yaw, pitch, and roll angles will be got via Eqs. (7) and (8).

4 Experimental Testing

In order to assess the performance of the proposed algorithm, a test is carried out for a platform in this section. Three antennas and GNSS receivers with the same performance are installed on the platform at Beihang university. The experimental configuration is depicted in Fig. 2. The single-frequency GNSS data are collected using the GNSS receivers M300, which are manufactured by ComNav company of China, with the sample interval of 1 s.

Fig. 2
figure 2

The BDS measurement experiment

As illustrated in Fig. 2, the antenna A1 is the master antenna, and A2 and A3 are the slave antennas. The install matrix of the three antennas configuration is determined from the whole observation data with 5 mm accuracy and is given as follows:

$$ \varvec{B} = \left[ {\begin{array}{*{20}c} {\begin{array}{*{20}c} {0.5101} \\ 0 \\ 0 \\ \end{array} } & {\begin{array}{*{20}c} {0.2930} \\ {0.4935} \\ 0 \\ \end{array} } \\ \end{array} } \right] $$
(43)

A 1106 s dataset referring to August 29, 2015 starting from 11:28:17.000 UTC to 11:46:42.000 UTC has been provided. 9 BDS satellites and 8 GPS satellites are tracked in our experiment. The number of common tracking satellites ranges from 15 to 17. The BDS, GPS and GNSS (GPS + BDS) data will be used to make an analysis, respectively. After obtaining the float ambiguity by KF or SKF, integer ambiguities are resolved by the LAMBDA algorithm. For analysis of the performance of the proposed methods, we compare the correct integer ambiguity vector (the ‘correct solution’ estimated from post-processing with real data) and the estimated integer ambiguity vector at every epoch.

In this test, Time-To-Fix (TTF) is defined as the number of measurement epochs required to firstly fix the ambiguity. We define the empirical success rate as the ratio of the number of epochs with all correctly fixed ambiguity to the total epoch number as follows:

$$ P = n_{cor} /n_{tot} \times 100\% $$
(44)

where \( n_{cor} \) and \( n_{tot} \) are the number of computations with all ambiguities being correctly fixed and the number of total computations.

The summary success rate and TTF of fixed ambiguity for the SKF and KF with the LAMBDA is given as Table 1.

Table 1 The success rate and TTF of fixed ambiguity

Table 1 shows the success rate and TTF of the ambiguity resolution for two baselines with SKF or KF method. With the SKF, the success rate and TTF of the ambiguity resolution present higher performance than the full-order KF for BDS, GPS and GNSS. Note that the success rates and the ratio number for the baseline 2 are higher than those for the baseline 1 when employing the LAMBDA method. This is due to the more tracking GNSS satellites of the baseline 2 than the baseline 1. As expected, the SKF substantially affects the capacity of fixing the correct integer ambiguity vector. A benefit of the SKF is that it decouples the attitude parameters and the colored observation noise to only consider the attitude parameters. Then the accuracy of the float ambiguity is improved and the solutions are stabilized.

Table 1 also shows there is no big difference between BDS and GPS. When combining GPS and BDS, the success rate is much higher than either single constellation and the TTF is much lower than either single constellation. This improvement shows that the GPS + BDS combination provides the higher availability of satellites to improve the accuracy of float ambiguity and therefore increase the success rate of ambiguity resolution.

After getting fixed ambiguity, the state equation and the measurement equation of the SKF will be reconstructed using the fixed correct ambiguity vector. Then high-precision quaternion can be obtained by restarting the SKF filter.

Figure 3 describes the quaternion \( \bar{\varvec{q}} \) with correctly fixed ambiguity. Because there is no big difference for quaternion with different method and constellation, it could not be described in the same figure. Therefore, the statistic characteristics of quaternion are given and listed in Table 2.

Fig. 3
figure 3

The quaternion of the SKF with GPS + BDS

Table 2 The statistic characteristics of quaternion

Table 2 shows the quaternion performance of the correctly fixed solutions for different method and constellation.

As we can see from the Table 2, the accuracy of Quaternion with the SKF is much better than the full-order KF for BDS, GPS and GPS + BDS. Due to decoupling the attitude parameters and the colored observation noise, high accuracy of the quaternion can be also achieved. Some conclusion can be obtained that the SKF can achieve much more efficiency than the full-order KF for integer ambiguity resolution and attitude determination with GNSS.

Then, the Eqs. (7) and (8) are utilized to get yaw \( (\psi ) \), pitch \( (\theta ) \) and roll \( (\varphi ) \) angles. In order to analyze the performance of attitude angles, the epochs of the unfixed ambiguity are replaced by the correct ambiguity. In this case, the three attitude angles are characterized by standard deviations (Std). To assess the accuracy of this method, the QUEST algorithm was used to estimate attitude angles.

Figure 4 demonstrates that the value of yaw \( (\psi ) \), pitch \( (\theta ) \), and roll \( (\varphi ) \) angles with interval of 1 s. Because there is no bigger difference of the accuracy between SKF and full order KF for BDS, GPS and GPS + BDS, we cannot make difference use the same figure. So the Fig. 4 just concludes the attitude estimate with SKF and QUEST algorithm for GPS + BDS. The angles estimated with QUEST and SKF are described with the dotted line and solid line, respectively. The accuracy of the total attitude solutions is provided in Table 3.

Fig. 4
figure 4

The performance of yaw, pitch and roll angles with GPS + BDS

Table 3 The standard deviations of the attitude angle

From the Std in Table 3, the yaw angle is estimated with the highest precision, whereas the pitch estimation is characterized by the highest noise levels for both the SKF and the QUEST for BDS, GPS and GPS + BDS. According to the achieved performance of quaternion, the SKF can be got more accuracy of attitude angles than the full order KF. Moreover, the SKF and the full order KF have more superior performance than the QUEST for per-axis attitude angles. The higher precision of the yaw angle is due to the intrinsic characteristic of the GNSS working principle: the satellites cover, with respect to the receiver, only a hemisphere, causing higher dilution of precision in the vertical plane than in the horizontal plane.

5 Conclusions

In this paper, the SKF for GNSS-based attitude determination has been presented to float ambiguity resolution and attitude estimation. The geometry information of the antenna configuration is fully exploited for ambiguity resolution via formulating the direct functional relationship between double-differenced carrier phase measurements and attitude quaternions. By using the SKF, the attitude parameters and the colored observation noise can be decoupled in the state equation. The higher accuracy of attitude angles and float ambiguity vector with only considering attitude parameters can be achieved than the full order KF. The performance of the proposed method has been assessed by an actual GNSS experiment test. Results demonstrated that the higher success rate and the less Time-to-Fix ambiguity resolution are achievable than the current method for BDS, GPS and GPS + BDS. The distribution of the available GNSS satellites has an influence on the accuracy of attitude angles. The proposed method has better accuracy than the full order KF and the QUEST algorithm for BDS, GPS and GPS + BDS. The GPS + BDS combination have better performance than single BDS or GPS constellation, and there is no big difference between GPS and BDS for attitude resolution.