Introduction

GPS-based attitude determination is a rich field of current studies, with a wide variety of challenging applications on land, sea, air, and space. Carrier phase integer ambiguity resolution is the key to fast and high-precision attitude determination. Once this has been done successfully, the carrier phase data will act as very precise pseudorange data, thus making very precise attitude determination possible.

Recent attitude determination methods make use of the LAMBDA method (Lin et al. 2004; Monikes et al. 2005; Hide et al. 2007; Wang et al. 2009), as this method is known to be efficient and optimal (Teunissen 1995, 1999; Verhagen 2004). Continuous carrier phases at enough epochs should be observed to obtain an accurate float solution. However, due to the loss of lock and noise disturbance, cycle slips often occur in the land vehicle application. Any incorrect reparation of cycle slips will affect all subsequent observations. Attitude determination in single epoch is insensitive to cycle slips, because this technique uses only the fractional value of carrier phase measurement. Also, single frequency GPS receivers are widely used because of lower cost. Therefore, the challenge is to perform successful and efficient integer ambiguity resolution for the unaided, single frequency, single epoch case (Teunissen 2010a).

However, single frequency, single epoch ambiguity resolution is generally not possible with LAMBDA, unless the number of tracked satellites is high and the code precision is very good (Teunissen 2010a). In fact, the standard LAMBDA method has been developed for unconstrained and/or linearly constrained GNSS models; it is therefore not necessarily optimal for the GNSS attitude determination problem, for which often the baseline length is known as well (Teunissen et al. 2010b). In order to integrate the nonlinear baseline constraint into the ambiguity objective function, the constrained (C-) LAMBDA method has been presented for any GNSS compass model (Teunissen 2006). The C-LAMBDA method is first applied for single epoch, single frequency attitude determination applications in Buist (2007). This method leads to a strong reduction in the time to fix (Giorgi and Teunissen 2009).The constrained integer least-squares theory has been described in detail in Teunissen (2010a).

By the GNSS model strength theory, high GPS ambiguity success rates require very high carrier phase and code measurement precision for the single frequency single epoch case (Teunissen 2010a). Because the carrier phase and code measurement precision are both very low for low-end GPS receivers, the success rates are too low for practical applications. In this contribution, we focus on single frequency single epoch land vehicle attitude determination using low-end GPS receivers. For land vehicle applications, the baseline vector approximately lies in the plane of the local geodetic horizon. With this constraint, our method improves the quality of the float solution, thus it has a high success rate for land vehicle attitude determination.

We first introduce briefly the GPS attitude determination and GNSS compass model. Next, we describe the single frequency, single epoch attitude determination using double-differenced (DD) phase and code. We then describe our method for single frequency, single epoch land vehicle attitude determination and discuss the empirical success rates and average computing time obtained from static and dynamic experiments. Comparisons with the DD method are also included.

Attitude determination and GNSS compass model

For land vehicle applications, a two-antenna system can be used to provide observability of the heading and pitch. If the baseline vector is parameterized with respect to the local North-East-Up frame, the heading H and pitch P can be computed from the baseline coordinates b N , b E , and b U as

$$ H = \arctan \frac{{b_{E} }}{{b_{N} }},\quad P = \arctan \frac{{b_{U} }}{{\sqrt {b_{N}^{2} + b_{E}^{2} } }} $$
(1)

For single baseline, the GNSS model is given by the linear observation equations (Teunissen 1997):

$$ E\left( \user2{Y} \right) = \user2{Aa} + \user2{Bb},\quad D\left( \user2{Y} \right) = \user2{Q}_{Y} ,\;\user2{a} \in Z^{n} ,\;\user2{b} \in R^{3} $$
(2)

where Y is the given GNSS data vector, and a and b are the ambiguity vector and baseline vector of order n and 3, respectively. E(·) and D(·) denote the expectation and dispersion operators, respectively, and A and B are the given design matrices that link the data vector to the unknown parameters. The variance matrix of Y is given by the positive definite matrix Q Y . After observing enough epochs, the float solution \( \hat{\user2{a}} \) and its variance–covariance matrix \( \user2{Q}_{{\hat{\user2{a}}}} \) can be obtained by the least-squares method. Thus, integer ambiguity estimation reduces to be solving an optimal quadratic equation:

$$ \min \left\| {\hat{\user2{a}} - \user2{a}} \right\|_{{\user2{Q}_{{\hat{\user2{a}}}} }}^{2} ,\quad \user2{a} \in Z^{n} $$
(3)

This problem can be solved by the LAMBDA method with high efficiency. Assuming that a is known, the least-squares solution for b can be written as (Teunissen 2006)

$$ \hat{\user2{b}}\left( \user2{a} \right) = \left( {\user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \user2{B}} \right)^{ - 1} \user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \left( {\user2{Y} - \user2{Aa}} \right) $$
(4)

The variance–covariance matrix is given by

$$ \user2{Q}_{{\hat{\user2{b}}\left( \user2{a} \right)}} = \left( {\user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \user2{B}} \right)^{ - 1} $$
(5)

If the baseline length is assumed to be constant, the resulting model reads as

$$ E\left( \user2{Y} \right) = \user2{Aa} + \user2{Bb},\quad D\left( \user2{Y} \right) = \user2{Q}_{Y} ,\;\user2{a} \in Z^{n} ,\;\user2{b} \in R^{3} ,\;\left\| \user2{b} \right\| = l $$
(6)

where l denotes the known baseline length. Then, the integer least-squares principle with quadratic equality constraints is used to formulate the following cost function (Park and Teunissen 2009)

$$ \mathop {\min }\limits_{{\user2{a} \in Z^{n} }} \left( {\left\| {\hat{\user2{a}} - \user2{a}} \right\|_{{\user2{Q}_{{\hat{\user2{a}}}} }}^{2} + \mathop {\min }\limits_{{\user2{b} \in R^{3} ,\;\left\| \user2{b} \right\| = l}} \left\| {\hat{\user2{b}}\left( \user2{a} \right) - \user2{b}} \right\|_{{\user2{Q}_{{\hat{\user2{b}}\left( \user2{a} \right)}} }}^{2} } \right) $$
(7)

In order to do proper justice to the priori information, the nonlinear baseline constraint should be considered as observable, thus a more realistic extended GNSS compass model is presented (Teunissen 2010a):

$$ \begin{aligned} E\left( \user2{Y} \right) & = \user2{Aa} + \user2{Bb},\quad D\left( \user2{Y} \right) = \user2{Q}_{Y} ,\quad \quad \user2{a} \in Z^{n} \\ E(l) & = \left\| \user2{b} \right\|,\quad D\left( l \right) = \sigma_{l}^{2} ,\quad \quad \user2{b} \in R^{3} \\ \end{aligned} $$
(8)

The nonlinear baseline constraint receives a proper weighting in its minimization as

$$ \mathop {\min }\limits_{{\user2{a} \in Z^{n} }} \left( {\left\| {\hat{\user2{a}} - \user2{a}} \right\|_{{\user2{Q}_{{\hat{\user2{a}}}} }}^{2} + \mathop {\min }\limits_{{\user2{b} \in R^{3} }} H\left( {\user2{a},\user2{b}} \right)} \right)\quad {\text{with}}\quad H\left( {\user2{a},\user2{b}} \right) = \left\| {\hat{\user2{b}}\left( \user2{a} \right) - \user2{b}} \right\|_{{\user2{Q}_{{\hat{\user2{b}}\left( \user2{a} \right)}} }}^{2} + \sigma_{l}^{ - 2} \left( {l - \left\| \user2{b} \right\|} \right)^{2} $$
(9)

This minimization problem can be resolved with the weighted constrained (WC-) LAMBDA method, which has been described in detail in Teunissen (2010a).

Double-differenced method for single frequency and single epoch

For two nearby antennas A and B, the single-differenced carrier phase observation equation can be expressed as

$$ \lambda_{1} \left( {\phi^{i} + N^{i} } \right) = r^{i} + c\left( {\delta t_{\text{A}} - \delta t_{\text{B}} } \right) + v^{i} $$
(10)

where λ 1 is the wavelength of L1 carrier; r i is the single-differenced geometric range of two receivers for satellite i; \( \phi^{i} \) and N i denote the single-differenced fractional phase and integer ambiguity, respectively; v i denotes the single-differenced observable noise; δt A and δt B are clock biases of receiver A and B; c is the velocity of light.

Since the altitude of a satellite is about 20,200 km above sea level and the baseline length for land vehicle attitude determination is only several meters, the lines of sight (LOS) of two antennas to the same satellite are approximately parallel. Thus, r i can be treated as the projection of the baseline vector b in the direction of LOS and expressed as s i·b where s i is the unit vector heading to the GPS satellite i (Misra and Enge 2006). The double-differenced equations are attained through another difference between two single-differenced equations that are referring to satellite i and satellite j, respectively, so the double-differenced equations are given by

$$ \lambda_{1} \left( {\phi^{ij} + N^{ij} } \right) = \left( {\user2{s}^{i} - \user2{s}^{j} } \right) \cdot \user2{b} + \user2{v}^{ij} .$$
(11)

For m = n + 1 satellites in view, there are n independent double-differenced phase measurement equations, and without loss of generality, we have chosen satellite 1 as the “reference” satellite. With \( \sigma_{\phi }^{2} \) being the variance of the observed phase, all of the equations can be expressed in compact vector and matrix notation as

$$ \user2{y}_{D}^{\phi } = \left[ {\begin{array}{*{20}c} \user2{H} & { - \user2{I}} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} \user2{b} \\ {\user2{N}_{\user2{D}} } \\ \end{array} } \right] + \user2{v}_{D}^{\phi } ,\quad \user2{v}_{D}^{\phi } \sim N\left( {\user2{0},2\sigma_{\phi }^{2} \user2{Q}} \right) $$
(12)

where

$$ \user2{y}_{D}^{\phi } = \left[ {\begin{array}{*{20}c} {\phi^{21} } \\ {\phi^{31} } \\ \vdots \\ {\phi^{m1} } \\ \end{array} } \right],\quad \user2{N}_{D} = \left[ {\begin{array}{*{20}c} {N^{21} } \\ {N^{31} } \\ \vdots \\ {N^{m1} } \\ \end{array} } \right],\quad \user2{v}_{D}^{\phi } = \left[ {\begin{array}{*{20}c} {v^{21} } \\ {v^{31} } \\ \vdots \\ {v^{m1} } \\ \end{array} } \right],\quad \user2{H} = \frac{1}{{\lambda_{1} }}\left[ {\begin{array}{*{20}c} {\left( {\user2{s}^{2} } \right)^{T} - \left( {\user2{s}^{1} } \right)^{T} } \\ {\left( {\user2{s}^{3} } \right)^{T} - \left( {\user2{s}^{1} } \right)^{T} } \\ \vdots \\ {\left( {\user2{s}^{m} } \right)^{T} - \left( {\user2{s}^{1} } \right)^{T} } \\ \end{array} } \right] $$
(13)

In this model, the matrix Q has 2s on the main diagonal and 1s in all off-diagonal positions due to the double differencing (Misra and Enge 2006). However, because of rank deficiency, the float solution cannot be determined by (12). This can be solved with the combination of carrier phase and code observations. Similarly, with \( \sigma_{\rho }^{2} \) being the variance of code, all the code equations can be expressed as

$$ \user2{y}_{D}^{\rho } = \user2{H} \cdot \user2{b} + \varvec{\mu}_{D}^{\rho } ,\quad \varvec{\mu}_{D}^{\rho } \sim N\left( {\user2{0},2\sigma_{\rho }^{2} \user2{Q}} \right) $$
(14)

Note that both phase and code are expressed in units of cycles. Then, the combination expression of carrier phase and code equations is given by

$$ \left[ {\begin{array}{*{20}c} {\user2{y}_{D}^{\phi } } \\ {\user2{y}_{D}^{\rho } } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} \user2{H} & { - \user2{I}} \\ \user2{H} & \user2{0} \\ \end{array} } \right]\left[ {\begin{array}{*{20}c} \user2{b} \\ {\user2{N}_{D} } \\ \end{array} } \right] + \left[ {\begin{array}{*{20}c} {\user2{v}_{D}^{\phi } } \\{{\user2{\mu}}_{D}^{\rho } } \\ \end{array} } \right] $$
(15)

This expression can be considered as the GNSS model if each term is expressed as follows:

$$ \user2{Y} = \left[ {\begin{array}{*{20}c} {\user2{y}_{D}^{\phi } } \\ {\user2{y}_{D}^{\rho } } \\ \end{array} } \right],\quad \user2{A} = \left[ {\begin{array}{*{20}c} { - \user2{I}} \\ \user2{0} \\ \end{array} } \right],\quad \user2{B} = \left[ {\begin{array}{*{20}c} \user2{H} \\ \user2{H} \\ \end{array} } \right],\quad \user2{Q}_{\user2{Y}} = \left[ {\begin{array}{*{20}c} {2\sigma_{\phi }^{2} \user2{Q}} & {} \\ {} & {2\sigma_{\rho }^{2} \user2{Q}} \\ \end{array} } \right] $$
(16)

For attitude determination, the difficulty of estimating the integer ambiguities depends very much on the strength of the underlying model. If the measurement precision of carrier phase and code are both very low, the model strength is too weak to obtain the correct integer solution for the single frequency and single epoch case. In order to quantify this, simulation experiments were carried out by means of the method used in Teunissen et al. (2010b). We focus on the low-end receivers; thus, we assumed different noise levels, ranging from 0.015 to 0.1 cycles for the undifferenced phase data and from 1.5 to 10 cycles for the undifferenced code data. For each simulation scenario, a set of 5000 Gaussian distributed data vectors was generated. Table 1 shows the 1.6 m baseline, WC-LAMBDA, single frequency, single epoch (SF/SE) success rates. The ambiguity success rates of actual data are generally lower than the given digits because they are often disturbed by multipath.

Table 1 Simulation-based SF/SE success rates for WC-LAMBDA for different measurement precision and different number of tracked satellites (σ l  = 0.02 m)

New method for single frequency and single epoch

The phase and code noise levels of low-end receivers are too large to achieve very high success rates. However, for land vehicle applications, the baseline approximately lies in the plane of the local geodetic horizon. This constraint can also be exploited to aid the ambiguity resolution process. Our method is based on an orthogonal transformation of single differences, which is a numerically stable approach (Chang and Paige 2003). Here, the main steps are re-derived and then our scheme is described in detail. For m = n + 1 satellites in view, the single-differenced phase measurement equations can be expressed as

$$ \user2{y}_{S}^{\phi } = \user2{E} \cdot \user2{b} - \user2{N}_{S} + \user2{e}\beta + \user2{v}_{S}^{\phi } ,\quad \user2{v}_{S}^{\phi } \sim N\left( {\user2{0},2\sigma_{\phi }^{2} \user2{I}_{m} } \right) $$
(17)

where \( \user2{e} = \left( {1,1, \ldots ,1} \right)^{T} \)of order m and \( \beta = c \cdot {{\left( {\delta t_{A} - \delta t_{B} } \right)} \mathord{\left/ {\vphantom {{\left( {\delta t_{A} - \delta t_{B} } \right)} {\lambda_{1} }}} \right. \kern-\nulldelimiterspace} {\lambda_{1} }} \) and

$$ \user2{y}_{S}^{\phi } = \left[ {\begin{array}{*{20}c} {\phi^{1} } \\ {\phi^{2} } \\ \vdots \\ {\phi^{m} } \\ \end{array} } \right],\quad \user2{N}_{S} = \left[ {\begin{array}{*{20}c} {N^{1} } \\ {N^{2} } \\ \vdots \\ {N^{m} } \\ \end{array} } \right],\quad \user2{v}_{S}^{\phi } = \left[ {\begin{array}{*{20}c} {v^{1} } \\ {v^{2} } \\ \vdots \\ {v^{m} } \\ \end{array} } \right],\quad \user2{E} = \frac{1}{{\lambda_{1} }}\left[ {\begin{array}{*{20}c} {\left( {\user2{s}^{1} } \right)^{T} } \\ {\left( {\user2{s}^{2} } \right)^{T} } \\ \vdots \\ {\left( {\user2{s}^{m} } \right)^{T} } \\ \end{array} } \right] $$
(18)

Let \( \user2{P} \in R^{m \times m} \) be an orthogonal transformation such that \( \user2{Pe} = \sqrt m \user2{e}_{1} \) and the Householder transformation is used to form P as follows,

$$ \user2{P} = \user2{I} - \frac{{2\user2{uu}^{T} }}{{\user2{u}^{T} \user2{u}}},\quad \quad \user2{u} \equiv \user2{e}_{1} - \frac{1}{\sqrt m }\user2{e}\quad {\text{where}}\,\,\user2{e}_{1} = \left( {1,0, \ldots ,0} \right)^{T} = \left( {\begin{array}{*{20}c} 1 & \user2{0} \\ \end{array} } \right)^{T} $$
(19)

By simple algebraic operations, we obtain for this matrix

$$ \user2{P} = \left[ {\begin{array}{*{20}c} {\frac{1}{\sqrt m }} &\vline & {\frac{{\bar{\user2{e}}^{T} }}{\sqrt m }} \\ \hline {\frac{{\bar{\user2{e}}}}{\sqrt m }} &\vline & {\user2{I}_{m - 1} - \frac{{\bar{\user2{e}} \cdot \bar{\user2{e}}^{T} }}{m - \sqrt m }} \\ \end{array} } \right] \equiv \left[ {\begin{array}{*{20}c} {\user2{p}_{1} } \\ {\bar{\user2{P}}} \\ \end{array} } \right]\quad {\text{where}}\,\,\bar{\user2{P}} = \left[ {\begin{array}{*{20}c} {\frac{{\bar{\user2{e}}}}{\sqrt m }} & {\user2{I}_{m - 1} - \frac{{\bar{\user2{e}} \cdot \bar{\user2{e}}^{T} }}{m - \sqrt m }} \\ \end{array} } \right]\;\bar{\user2{e}} = \left( {1,1, \ldots ,1} \right)^{T} $$
(20)

Note that the order of \( \bar{\user2{e}} \) is n.

In order to eliminate the clock bias, applying P to (17), we obtain the initial orthogonal transformation of (17):

$$ \left[ {\begin{array}{*{20}c} {\user2{p}_{1} \user2{y}_{S}^{\phi } } \\ {\bar{\user2{P}}\user2{y}_{S}^{\phi } } \\ \end{array} } \right] = \left[ {\begin{array}{*{20}c} {\user2{p}_{1} \user2{E}} \\ {\bar{\user2{P}}\user2{E}} \\ \end{array} } \right]\user2{b} - \left[ {\begin{array}{*{20}c} {\user2{p}_{1} \user2{N}_{S} } \\ {\bar{\user2{P}}\user2{N}_{S} } \\ \end{array} } \right] + \left[ {\begin{array}{*{20}c} 1 \\ 0 \\ \end{array} } \right]\sqrt m \beta + \left[ {\begin{array}{*{20}c} {\user2{p}_{1} \user2{v}_{S}^{\phi } } \\ {\bar{\user2{P}}v_{S}^{\phi } } \\ \end{array} } \right] $$
(21)

Note that only the first equation involves the clock bias term, the remaining part can be written as

$$ \bar{\user2{P}}\user2{y}_{S}^{\phi } = \bar{\user2{P}}\user2{Eb} - \bar{\user2{P}}\user2{N}_{S} + \bar{\user2{P}}\user2{v}_{S}^{\phi } $$
(22)

We have not used double differencing, but the double-differenced integer ambiguity vector can also be obtained by the following algebraic operations. Define the matrices F and J as follows:

$$ \user2{F} \equiv \user2{I}_{m - 1} - \frac{{\bar{\user2{e}}{\kern 1pt} \bar{\user2{e}}^{T} }}{m - \sqrt m },\quad \user2{J} \equiv \left[ {\begin{array}{*{20}c} { - \bar{\user2{e}}} & {\user2{I}_{m - 1} } \\ \end{array} } \right] $$
(23)

where F is nonsingular. From (23), it is easy to verify that \( \bar{\user2{P}} = \user2{FJ} \). Note that the double-differenced integer ambiguity vector can be expressed as

$$ \user2{N}_{D} = \left( {N^{2} - N^{1} ,N^{3} - N^{1} , \ldots ,N^{m} - N^{1} } \right)^{T} $$
(24)

Thus, the following formulation can be deduced

$$ \bar{\user2{P}}\user2{N}_{S} = \user2{FJN}_{S} = \user2{FN}_{D} $$
(25)

Replacing \( \bar{\user2{P}}\user2{N}_{S} \) in (22) by (25), we obtain

$$ \bar{\user2{P}}\user2{y}_{S}^{\phi } = \bar{\user2{P}}\user2{Eb} - \user2{FN}_{D} + \bar{\user2{P}}\user2{v}_{S}^{\phi } ,\quad \bar{\user2{P}}\user2{v}_{S}^{\phi } \sim N\left( {\user2{0},2\sigma_{\phi }^{2} \user2{I}_{n} } \right) $$
(26)

where the double-differenced integer ambiguity vector exists. The transformed noise vector still follows the same distribution because orthogonal transformation will not change the statistical properties of white noise (Chang and Paige 2003). The new model (26) can be expressed as GNSS model with the following notations:

$$ \user2{Y} = \bar{\user2{P}}\user2{y}_{S}^{\phi } ,\quad \user2{B} = \bar{\user2{P}}\user2{E},\quad \user2{A} = - \user2{F},\quad \user2{Q}_{\user2{Y}} = 2\sigma_{\phi }^{2} \user2{I}_{n} $$
(27)

With (4), the least-squares solution can be written as

$$ \hat{\user2{b}}\left( {\user2{N}_{D} } \right) = \left( {\user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \user2{B}} \right)^{ - 1} \user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \left( {\user2{Y} + \user2{FN}_{D} } \right),\quad \user2{Q}_{{\hat{\user2{b}}\left( {N_{D} } \right)}} = \left( {\user2{B}^{T} \user2{Q}_{\user2{Y}}^{ - 1} \user2{B}} \right)^{ - 1} $$
(28)

The notation \( \hat{\user2{b}}\left( {\user2{N}_{D} } \right) \) is used to show the dependence on N D and emphasize that we consider \( \hat{\user2{b}}\left( \cdot \right) \) a function. In order to solve (9), the ambiguity float solution and its variance–covariance matrix should also be obtained. Next, we will achieve this by a heading search strategy.

In local coordinate frame with origin at the main antenna A, \( \user2{s}^{i} = \left( {s_{N}^{i} ,s_{E}^{i} ,s_{U}^{i} } \right)^{T} \) consists the three coordinates of the LOS unit vector of satellite i; α i is the elevation angle of satellite i; the vector d is the projection of s i on the plane of the geodetic horizon at station A; the plane S is defined by s i and d. γ i is the angle between vector b and s i; ω i is the angle between vector b and the vector d; the plane Q is defined by b and d; θ γ is the dihedral angle between plane S and plane Q. The detail relationships are given by Fig. 1. We can construct the following equality:

$$ \cos \gamma_{i} = \cos \alpha_{i} \cos \omega_{i} + \sin \alpha_{i} \sin \omega_{i} \cos \theta_{\gamma } $$
(29)

In the following, ψ is the heading angle of vector b and β i is the azimuth angle of satellite i. For land vehicles, b approximately lies in the plane of the local geodetic horizon; thus, we have ω i  ≈ ψ − β i and θ r  ≈ π/2. Then, it follows that

$$ \cos \gamma_{i} \approx \cos \alpha_{i} \cos \left( {\psi - \beta_{i} } \right) $$
(30)

where

$$ \beta_{i} = \arctan \frac{{s_{E}^{i} }}{{s_{N}^{i} }},\quad \cos \alpha_{i} = \sqrt {\left( {s_{E}^{i} } \right)^{2} + \left( {s_{N}^{i} } \right)^{2} } $$
(31)

With \( \user2{s}^{i} \cdot \user2{b} = \left| \user2{b} \right|\cos \gamma_{i} \), Eb of (26) can be given by

$$ \user2{Eb} = \frac{{\left| \user2{b} \right|}}{{\lambda_{1} }}\left[ {\begin{array}{*{20}c} {\cos \alpha_{1} \cos \left( {\psi - \beta_{1} } \right)} \\ {\cos \alpha_{2} \cos \left( {\psi - \beta_{2} } \right)} \\ \vdots \\ {\cos \alpha_{m} \cos \left( {\psi - \beta_{m} } \right)} \\ \end{array} } \right] $$
(32)

The true heading angle exists in the interval of [0, 2π), and if the interval is divided into K parts equally, each part denotes the subinterval [ψ k , ψ k+1) where

$$ \psi_{k} = k\frac{2\pi }{K},\quad k = 0,1,2, \ldots ,K - 1 $$
(33)

There must be some ψ k that is closest to the true heading angle ψ, and the bias of the closest ψ k is smaller than π/K; thus, the partition accuracy is π/K. Larger K can result in higher accuracy. Now, we assume that proper K is determined and then we will construct a vector h k as follows:

$$ \user2{h}_{k} = \frac{l}{{\lambda_{1} }}\left[ {\begin{array}{*{20}c} {\cos \alpha_{1} \cos \left( {\psi_{k} - \beta_{1} } \right)} \\ {\cos \alpha_{2} \cos \left( {\psi_{k} - \beta_{2} } \right)} \\ \vdots \\ {\cos \alpha_{m} \cos \left( {\psi_{k} - \beta_{m} } \right)} \\ \end{array} } \right] $$
(34)

Then, subtract \( \bar{\user2{P}}\user2{h}_{k} \) from both sides of (26) gives

$$ \bar{\user2{P}}\left( {\user2{y}_{S}^{\phi } - \user2{h}_{k} } \right) = - \user2{FN}_{D} + \bar{\user2{P}}\left( {\user2{Eb} - \user2{h}_{k} } \right) + \bar{\user2{P}}\user2{v}_{S}^{\phi } $$
(35)

We can write an equivalent form as

$$ \bar{\user2{P}}\left( {\user2{y}_{S}^{\phi } - \user2{h}_{k} } \right) = - \user2{FN}_{D} + \bar{\user2{P}}\user2{w}_{k} $$
(36)

where \( \user2{w}_{k} = \user2{p}_{k} + \user2{v}_{S}^{\phi } \) with p k  = (Eb − h k). If σ l is very small, then the baseline length |b| is nearly equal to l, p k can be expressed as the following approximation:

$$ \user2{p}_{k} \approx \frac{ - 2l}{{\lambda_{1} }}\left[ {\begin{array}{*{20}c} {\cos \alpha_{1} \sin \left( {\frac{{\psi + \psi_{k} - 2\beta_{1} }}{2}} \right)\sin \left( {\frac{{\psi - \psi_{k} }}{2}} \right)} \\ \vdots \\ {\cos \alpha_{m} \sin \left( {\frac{{\psi + \psi_{k} - 2\beta_{m} }}{2}} \right)\sin \left( {\frac{{\psi - \psi_{k} }}{2}} \right)} \\ \end{array} } \right] $$
(37)

Hence, if ψ k is close enough to the true heading angle ψ, we can treat the noise term of (36) as approximately normal. It is given as

$$ \bar{\user2{P}}\user2{w}_{k} \to N\left( {\user2{0},2\sigma_{\phi }^{2} \user2{I}_{n} } \right)\quad {\text{with}}\quad \psi_{k} \to \psi $$
(38)

Thus, the float solution can be obtained as follows:

$$ \hat{\user2{N}}_{D} = - \user2{F}^{ - 1} \bar{\user2{P}}\left( {\user2{y}_{S}^{\phi } - \user2{h}_{k} } \right) $$
(39)

With the law of variance–covariance propagation, the ambiguity variance matrix is given by

$$ \user2{Q}_{{\hat{\user2{N}}_{D} }} = 2\sigma_{\phi }^{2} \left( {\user2{F}^{T} \user2{F}} \right)^{ - 1} $$
(40)

We can treat \( \bar{\user2{P}}\left( {\user2{y}_{S}^{\varphi } - \user2{h}_{k} } \right) \) as a new set of observations that are only related to ambiguities. With (28), (39), and (40), the minimization of (9) can be resolved with WC-LAMBDA (Teunissen 2010a).The fixed solution can generally be obtained in this case.

Fig. 1
figure 1

Baseline vector and the LOS unit vector of satellite i

If ψ k is far from the true heading angle ψ, then the noise term cannot be treated as normal and the data vector Y will mismatch the GNSS model above. Thus, if the mismatched data are used as input, bad results will be given as output. In other words, we will obtain incorrect integer ambiguity vectors and baseline vectors in these cases.

No matter whether data Y matches the model, the float solution \( \hat{\user2{N}}_{k} \) and \( \user2{Q}_{{\hat{\user2{N}}_{\user2{k}} }} \)can be computed with (39) and (40). For each ψ k , an integer ambiguity vector \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} \) and a baseline vector \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{k} \) that are assumed “optimal” are given by global integer minimizer of ambiguity objective function

$$ \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} = \arg \mathop {\min }\limits_{{N_{k} \in Z^{n} }} F\left( {\user2{N}_{k} } \right),\quad \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{k} = \arg \mathop {\min }\limits_{{b \in R^{3} }} G\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} ,\user2{b}_{k} } \right) $$
(41)

with the ambiguity objective function F(N k ) and the conditional baseline objective function G(N k , b k ) given as

$$ \begin{aligned} & F\left( {\user2{N}_{k} } \right) = \left\| {\hat{\user2{N}}_{k} - \user2{N}_{k} } \right\|_{{Q_{{\hat{N}_{k} }} }}^{2} + \mathop {\min }\limits_{{\user2{b}_{k} \in R^{3} }} G\left( {\user2{N}_{k} ,\user2{b}_{k} } \right) \\ & G\left( {\user2{N}_{k} ,\user2{b}_{k} } \right) = \left\| {\hat{\user2{b}}\left( {\user2{N}_{k} } \right) - \user2{b}_{k} } \right\|_{{\user2{Q}_{{\hat{b}\left( {N_{k} } \right)}} }}^{2} +\,\sigma_{l}^{ - 2} \left( {l - \left\| {\user2{b}_{k} } \right\|} \right)^{2} \\ \end{aligned} $$
(42)

In fact, most of the “optimal” integer ambiguity candidates are incorrect because they are obtained using the mismatched data. Only one is correct, which is given by one or several ψ k s that are close enough to the true heading angle. In this process, we obtained the fixed \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} \), \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{k} \) and the minimum \( F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) \). We should also compute the heading H k that is used for the subsequent validation process. Next, we put each k into the set Ω1:

$$ \Upomega_{1} = \left\{ {\left. {k \in Z} \right|0 \le k \le K - 1} \right\} $$
(43)

In order to identify the most likely correct candidate, we need the validation procedure. The following algorithm is thus divided in three consecutive steps: Kolmogorov–Smirnov residual test (K–S test), heading verification, and global minimizer of the fixed ambiguity objective function. In the K–S test, we put each candidate back into (26) and compute the residual term r k as follows:

$$ \user2{r}_{k} = \bar{\user2{P}}\user2{y}_{S}^{\phi } + \user2{F\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} - \user2{\bar{P}E\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{k} $$
(44)

For the correct candidate, the normality of residual term will remain. The K–S test can be used to compare a sample with a reference normal probability distribution. The K–S statistic quantifies a distance between the empirical distribution function of the sample and the cumulative distribution function of the reference distribution (Marsaglia et al. 2003). Here, the null hypothesis for the K–S test is that r k has a normal distribution \( N\left( {\user2{0},2\sigma_{\phi }^{2} \user2{I}_{n} } \right) \). The alternative hypothesis is that r k does not have that distribution. If one cannot reject the null hypothesis, the integer ambiguity vector and the baseline vector may be correct. There are generally several candidates that accept the null hypothesis, and we put them into the set Ω2:

$$ \Upomega_{2} = \left\{ {\left. k \right|KS\left( {\user2{r}_{k} } \right) = H_{0} ,k \in \Upomega_{1} } \right\} $$
(45)

The second step is heading verification. For the ψ k , which is very close to ψ, the heading H k should not be far from ψ k . Thus, if \( \left| {H_{k} - \psi_{k} } \right| \) is smaller than the threshold Th, the candidate k will be put into the set Ω3 for further validation:

$$ \Upomega_{3} = \left\{ {\left| {\left. k \right\|H_{k} - \psi_{k} } \right| < Th,k \in \Upomega_{2} } \right\} $$
(46)

It is our experience that Th is set to π/K for practical applications. In above, we have obtained the fixed integer ambiguity vector \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} \), which makes the ambiguity objective function \( F\left( {\user2{N}_{k} } \right) \) reach the minimum \( F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) \) for each ψ k . In the third step, we will search for the global minimum of fixed ambiguity objective function. That is, for each k of Ω3, compare \( F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) \) and find out the optimal candidate that makes \( F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) \) be global minimum. It is given as

$$ k_{0} = \arg \mathop {\min }\limits_{{k \in \Upomega_{3} }} F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) $$
(47)

Then, we obtain the true ambiguity vector N T , the baseline vector b T , the heading and pitch angle as follows:

$$ \user2{N}_{T} = \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{{k_{0} }} ,\quad \user2{b}_{T} = \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{{k_{0} }} ,\quad H = H_{{k_{0} }} ,\quad P = P_{{k_{0} }} $$
(48)

The implementation of the proposed scheme can be summarized as follows:

  • Step 1: Determine each ψ k and then obtain h k from (34).

  • Step 2: Compute the float solution from (39) and (40) for each ψ k .

  • Step 3: Estimate the fixed solutions \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} \) and \( \user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{b} }_{k} \) with (41).

  • Step 4: Obtain the set Ω1, \( F\left( {\user2{\overset{\lower0.5em\hbox{$\smash{\scriptscriptstyle\smile}$}}{N} }_{k} } \right) \) and H k from (43), (42) and (1), respectively.

  • Step 5: Compute the residual term r k with (44) and then obtain the set Ω2 by K–S test.

  • Step 6: Heading verification for all the candidates in Ω2 and then obtain the set Ω3 from (46).

  • Step 7: Find the candidate that satisfies (47) and denoted as k 0 .

  • Step 8: Obtain the heading H and pitch P from (48).

If Step 5 or 6 is removed, the success rates will decrease. With the two steps, the correct solution can be obtained with the largest probability. The key of this method is to make sure that the correct solution must exist in the candidates while k is tried from 0 to K − 1. This requires the float solution to be accurate enough; thus, we can fix it to the correct solution. In principle, the smaller the component value of p k , the smaller its impact on the distribution of w k and the more accurate is the float solution. In order to reduce the impact of p k , we should make sure that some ψ k is close enough to ψ; thus, larger K must be used for the finer partition. If the ψ k closest to ψ is denoted as ψ k0 and (ψ − ψ k 0 ) is close to zero, the largest element of p k has the following relationship with K:

$$ \left| {\user2{p}_{k0} (i)} \right|_{\max } \approx \frac{2l \cdot \tau }{{\lambda_{1} }}\sin \left( {\frac{{\psi - \psi_{k0} }}{2}} \right) \approx \frac{l \cdot \tau }{{\lambda_{1} }}\left( {\psi - \psi_{k0} } \right) < \frac{l\tau \cdot \pi }{{\lambda_{1} K}},\quad i = 1,2, \ldots ,m\quad {\text{where}}\;\tau = \max \left| {\cos \alpha_{i} \sin \left( {\psi - \beta_{i} } \right)} \right|. $$
(49)

In general, the absolute values of the other elements are much smaller than the largest one. Because of the geometry of satellites, the elevation α i may not be too low for each satellite and only one or two satellite azimuth angles can make (ψ − β i ) close to π/2. Hence, if the largest element is small enough, the other elements of p k can make little impact on the normality of the model. With (49), choosing a shorter baseline and a larger K can reduce the impact of p k0. However, if K is too large, the search procedure will be too time-consuming. In order to determine a proper K for a length known short baseline, several experiments with different K should be performed for comparing the success rates and performance. Then, the proper K can be chosen by the expected success rate and the acceptable computational time.

Figure 2 demonstrates the validation steps at one epoch. The static baseline is placed on the roof from north to south and its length is 0.4 m. The K = 72 was chosen; thus, the bias of the closest ψ k to the true ψ is less than 2.5°, and it will improve the quality of float solution greatly. We compute H k for each k, and the results are shown in subfigure H k of Ω1. As is shown, for several ψ k s, which are close enough, the same heading will be obtained because of the same fixed ambiguity vector. However, the minimums of their ambiguity objective functions are different, because they also depend on the ambiguity float solutions as in (42), which are not the same. The candidates that accept the K–S test are shown in subfigure H k of Ω2, and the ones pass the heading verification are given in subfigure H k of Ω3 (Th is set to π/K). Finally, the optimal k is determined at 36. The heading is 178.7274° and the pitch is −0.8927°, which are both consistent with the truth.

Fig. 2
figure 2

Validation steps and results for 0.4 m static baseline (K = 72)

Experimental results

We have implemented our method and the double-differenced method with Matlab 7.0 and applied them to the real measurements from two NovAtel 12 channels single frequency C/A code GPS receivers with 1 Hz output. The type is SUPERSTAR II, with code measurement precision of 75 cm RMS and the carrier phase measurement precision of 1 cm RMS (differential channel). The integer ambiguity estimators of both methods utilize the WC-LAMBDA method and σ l is set to 0.02 m.

Six static experiments with different baseline lengths were performed, and all the data were collected on the roof. Table 2 summarizes the experimental success rates for both methods. DD means the float solution is obtained from double-differenced method using least-squares principle. During the experiments, data were collected with a 20 cutoff elevation angle, because the phase and code of low-elevation satellites may not fit the normal distribution (Tiberius and Borre 1999). The number of available satellites equals seven most of the time with a few drops to six satellites. The average computing time are given in Table 3. The elapsed times are measured at every epoch using Matlab functions “tic” and “toc” at a PC with Intel® Pentium(R) 4 CPU 2.40 GHz and 1,024 MB RAM.

Table 2 Comparison of ambiguity success rates
Table 3 Comparison of average computing time (s)

As is shown in Table 2, the success rates of DD method drop when larger baseline lengths are used. In fact, the actual data are often disturbed by multipath and multipath changes as baseline length increases; thus, the success rates may drop (Park and Teunissen 2009). Another possible reason is the size of ambiguity space. There are fewer candidates in the ambiguity search space for the shorter baseline, which may increase the probability of finding the correct candidate in the large noise case. In particular, if the baseline is close to one wavelength, the elements of ambiguity vector simply equal to zero most of the time. The success rates of our method are much higher if the baseline length is less than 2 m. The success rates can be improved further in some cases if K is set to 144. The geodetic horizon plane constraint results in quite an increase in robustness against multipath. However, for 3.024 m baseline, the success rate decreases so strongly that the one with K = 72 is even lower than that of the DD method. Because a longer baseline will make the data mismatch the model, as is shown in (37) and (49), and the extent of mismatch is too large to provide a success rate that is higher than the DD method. The value K = 144 can improve the success rate, and more results are given in Table 4, which demonstrates that higher success rates can be achieved by enlarging K. The partition accuracy, which is given by π/K, can also be improved. It indicates that a larger K can result in a finer partition, and if it is fine enough, there must be some ψ k , which makes ψ k  − ψ close enough to zero; thus, the extent of mismatch can be reduced and a higher success rate can be achieved, see also (37) and (38).

Table 4 Experimental results of 3.204 m baseline for new method with different K

As is shown in Tables 3 and 4, a longer baseline and a larger K can both increase the computing time; thus, K should be carefully defined and a shorter baseline is recommended for practical applications.

The proposed method has also been tested processing actual data collected during a dynamic experiment. In this experiment, a car was equipped with two antennas and the baseline length is 1.4 m. The car is moving along a narrow rectangle block about 5 laps and both ends of the rectangle block are arc-shaped. In the first lap, we drove slowly, and then we accelerated for testing the performance of algorithm with the higher velocity and acceleration. The positioning results are shown in Fig. 3 and the attitude results are shown in Fig. 4 (K is set to 144). In Fig. 4, the lines approximately vertical to the angle axis represent the movement along a straight line and the dramatically changing parts of the curve clearly show the 180° turn of the car. Because the block is narrow and the two arcs are short, the turn is sharp and only takes several seconds. The PDOP and number of satellites are also given in Fig. 5. In this experiment, the epochs 224s, 384s, 385s, and 386s failed.

Fig. 3
figure 3

Positioning results of dynamic experiment

Fig. 4
figure 4

Attitude results of dynamic experiment

Fig. 5
figure 5

PDOP and number of satellites

It is worth to note that the success rate may vary by the grade of receiver. However, once K is enlarged to a certain extent, the success rate cannot be improved any further, since the maximum success rate depends on the precision of carrier phase measurement.

Conclusions

On the basis of the GNSS compass model, a single frequency and single epoch GPS attitude determination method for land vehicle applications is presented. This method aims to perform high success rates using low-end receivers for which the carrier phase and code precision are both too low. For land vehicle applications, the baseline vector approximately lies in the plane of the local geodetic horizon. With this constraint and applying orthogonal transformation, we construct a new set of observations that are only related to the ambiguities. Thus, the high-quality float solution can be acquired during the heading searching process. Then, we estimate the integer ambiguities by weighted constrained integer least-squares theory for each possible heading. The correct solution is identified and validated with three consecutive steps: K–S test, heading verification, and global minimizer of the fixed ambiguity objective function. Experimental results demonstrate that our scheme can improve the ambiguity success rate for very short baseline.