Method and system for sensor-assisted GNSS walking positioning
Through the sensor-assisted GNSS walking positioning method, the horizontal speed is calculated using step length and walking speed. As the observation quantity of the Kalman filter, the GNSS speed is calibrated, which solves the problem of low GNSS positioning quality and improves the GNSS positioning capability and fusion effect.
Patent Information
- Application Number
- CN202510711927.4
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2025-05-29
- Publication Date
- 2025-09-30
AI Technical Summary
In complex environments, the quality of GNSS positioning is not high, which affects the positioning performance of wearable devices. Existing technologies cannot effectively improve the positioning quality of GNSS.
The user status is determined through sensor information, and the GNSS environment is classified into different levels. In moderate or severe occlusion environments, the horizontal velocity is calculated using step length and pace, which is used as the observation value of the Kalman filter to calibrate the GNSS velocity.
In complex scenarios, the GNSS positioning capability is improved, resulting in better final fusion effects and a 30%-50% reduction in positioning errors. In particular, the horizontal positioning drift is reduced by more than 60% in single/double occlusion scenarios.
Smart Images

Figure FT_1 
Figure SMS_1 
Figure SMS_4
Abstract
Description
Technical Field
[0001] The present invention relates to the field of GNSS positioning, and in particular to a method and system for sensor-assisted GNSS walking positioning. Background Art
[0002] As more and more wearable devices place increasing demands on GNSS positioning performance, the positioning performance of GNSS receivers in walking scenarios is becoming increasingly important. Wearable devices, such as watches, face significant challenges in GNSS positioning due to factors such as antenna size and placement, arm swing during walking, human occlusion of the watch, and their increased susceptibility to single-, double-, and triple-obstruction environments.
[0003] The existing solution calculates the step length based on the number of steps calculated by the sensor when the GNSS positioning quality is good. When the GNSS positioning quality is poor, the step speed 1 is calculated based on the step length and the number of steps. The step speed 1 is then compared with the step speed 2 calculated by the GNSS solution, and the final step speed 3 is obtained by weighting.
[0004] This method fuses sensor results with GNSS downstream of GNSS to obtain the best positioning and speed determination results at the terminal. However, it cannot help improve the positioning quality of GNSS itself. In complex environments, GNSS diverges quickly, which will also affect the final fusion result. Summary of the Invention
[0005] The main purpose of the present invention is to solve the technical problem of low positioning quality of GNSS in the prior art. A method for sensor-assisted GNSS walking positioning includes the following steps: Determine whether the user is in walking mode based on sensor information; Based on the CN0 and sky map distribution information of the GNSS tracking satellites, the GNSS environment is divided into open, slightly blocked, moderately blocked, and severely blocked; If walking mode is determined and the GNSS environment is in moderate or severe occlusion, the horizontal velocity is calculated using the step length and pace. The horizontal velocity is used as an observation in the Kalman filter to calibrate the GNSS velocity.
[0006] The step length is updated by the following steps: if it is determined to be a walking mode and the GNSS environment is in an open or slightly blocked environment, the step length is updated according to the GNSS positioning information and the number of steps, and the step length is used to calculate the horizontal speed.
[0007] The method for updating the step length information is as follows: record the GNSS positioning position pos1 at time k and the GNSS positioning position pos2 at time k+1, calculate the horizontal distance deltaPosH from pos1 to pos2, record the number of steps stepCnt from time k to time k+1, and calculate the step length stepLen_k from time k to time k+1 = deltaPosH / stepCnt, and calculate the average step length stepLen_mean over the past 10 seconds.
[0008] The user state also includes a static mode, and the static mode is determined as follows: if the accelerometer statistical variance within 1 second is less than the threshold TH1 for n consecutive seconds, and the gyroscope statistical mean within 1 second is less than the threshold TH2, and the gyroscope statistical variance within 1 second is less than the threshold TH3, then it is determined to be a static mode.
[0009] If the static mode is currently determined by sensor information and the GNSS environment is in a severe obstruction state, the behavior state mode maintained internally by the GNSS is calibrated to the static mode, and the speed is calibrated to 0.
[0010] The user status also includes a hand-raising watch mode, and the method for determining the hand-raising watch mode is: define the 12 o'clock direction of the dial as the front axis, the 3 o'clock direction as the right axis, and the upward direction of the surface as the upper axis; if within 1 second, it is detected that the arm is no longer swinging regularly, and the watch state is converted from the average left axis facing upward to the upper axis facing upward, and the statistical variance of the accelerometer within 1 second is greater than the threshold TH4, then it is determined to be a hand-raising watch mode.
[0011] If the sensor information is used to determine that the watch is in hand-up mode, the GNSS will not update the speed information in the current second and will continue to use the speed information from the previous second.
[0012] The method for determining the walking mode is as follows: Set the current peak-valley state PFlag to 0, set the previous peak time lastPTime to 0, set the previous peak value lastHValue to 0, and set the previous valley value lastLowValue to 0; Calculate the value An of the three-axis acceleration modulus at each moment, and cache five moments An-2, An-1, An, An+1, and An+2; A peak is recorded if the following five conditions are met: a. Current An> peak threshold TH5; b. The current peak-valley state PFlag is 0, or the current peak-valley state PFlag is -1; c.An - lastLowValue>peak-to-peak threshold TH6; d. Current time curTime – previous peak time lastPTime > lowest step frequency interval TH7; e.An>An-1>An-2, An>An+1>An+2; If the moment An is a peak, the current peak-valley state PFlag is updated to 1, the last peak moment lastHValue is updated to An, and the recording step interval deltaT = curTime - lastPTime; the last peak moment lastPTime is updated to curTime; if the moment An is not a peak, no other operations are performed; A trough is recorded if the following five conditions are met: a.An<trough threshold TH8; b. PFlag is 0, or PFlag is 1; c.lastHValue – An>peak-to-peak threshold TH6; d.curTime – lastPTime > minimum step frequency interval TH7; e.An <An-1<An-2, An<An+1<An+2; If An is a trough, PFlag is updated to -1, lastLowValue is updated to An, and lastPTime is updated to curTime; if An is not a trough, no other operations are performed; If the statistical variance of deltaT recorded for N consecutive times is less than the threshold TH9, and deltaT is greater than the minimum step interval threshold TH10, and deltaT is less than the maximum step interval threshold TH11, then it is determined to be walking.
[0013] The method for calibrating GNSS velocity is: Calculate the horizontal speed v_sensor_h using the average step length stepLen_mean and the current number of steps per second step_cnt: v_sensor_h = stepLen_mean * step_cnt The state vector X of the Kalman filter is [pos_3, vel_3, clkErr_sys, clkDrift]; pos_3 represents the GNSS position x, y, z in the ecef coordinate system; vel_3 represents the GNSS velocity vel_x, vel_y, vel_z in the ecef coordinate system; clkErr_sys represents the GNSS clock error, sys is the number of systems involved in the solution, and clkDrift represents the GNSS clock drift. Set the observation vector of the added observation to be: Z = v_sensor_h* v_sensor_h; Then we can deduce that H is [03*1 Hvel3*1 0sys*1 0]; Set Hvel3*1 = [H1 H2 H3], then H1 = 2*A*(-sinλ) + 2*B*(-sinΦ * cosλ) H2 = 2*A*cosλ + 2*B*(-sinΦ * sinλ) H3 = 2*B*cosΦ in, A = -sinλ * vel_x+cosλ*vel_y B = -sinΦ*cosλ*vel_x – sinΦ*sinλ*vel_y + cosΦ*vel_z Where λ is the GNSS latitude and Φ is the GNSS longitude; Then, through the three equations of the Kalman filter correction process, v_sensor_h can be used to correct the GNSS speed;
[0014]
[0015]
[0016] Where P is the state error covariance, and R is the error variance. R needs to be set based on the time of entering the occlusion environment and the time of convergence before entering the occlusion environment. It can also be set based on GNSS environmental information. In this state, the GNSS speed is detected every second. If the speed is greater than the maximum walking speed threshold TH12 or less than the minimum walking speed threshold TH13, the GNSS speed error is considered too large and the speed calculated by the sensor is directly assigned to the GNSS speed.
[0017] The method to assign the speed calculated by the sensor to the GNSS speed is: Calculate the velocity of sensor in the enu coordinate system v_sensor_enu = [v_sensor_e, v_sensor_n, v_sensor_u]; v_sensor_e = v_sensor_h * sin(heading) v_sensor_n = v_sensor_h * cos(heading) v_sensor_u = 0 Then convert v_sensor_enu into the velocity v_sensor_ecef in the ecef coordinate system and directly assign it to the GNSS velocity vel_x, vel_y, vel_z.
[0018] The present invention has the following beneficial effects: In complex scenarios, the present invention uses sensor information to assist GNSS itself in improving the positioning and speed determination quality, thereby improving the positioning capability of GNSS itself, thereby achieving a better fusion effect with the sensor. BRIEF DESCRIPTION OF THE DRAWINGS
[0019] Figure 1 This is a flow chart of the sensor-assisted GNSS walking positioning of the present invention. DETAILED DESCRIPTION
[0020] The terms "first," "second," "third," "fourth," and so on (if any) in the description and claims of the present invention and in the accompanying drawings are used to distinguish similar items and are not necessarily used to describe a particular order or sequential sequence. It should be understood that the terms used in this manner are interchangeable under appropriate circumstances, so that the embodiments described herein can be implemented in an order other than that shown or described herein. In addition, the terms "including," "comprising," "having," and any variations thereof are intended to cover non-exclusive inclusions. For example, a process, method, system, product, or apparatus that includes a series of steps or elements is not necessarily limited to those steps or elements expressly listed, but may include other steps or elements not expressly listed or inherent to such process, method, product, or apparatus.
[0021] For ease of understanding, the specific process of the embodiment of the present invention is described below. Figure 1 A first embodiment of the sensor-assisted GNSS walking positioning method in an embodiment of the present invention includes: Determine whether the user is in walking mode based on sensor information; Based on the CN0 and sky map distribution information of the GNSS tracking satellites, the GNSS environment is divided into open, slightly blocked, moderately blocked, and severely blocked; If walking mode is determined and the GNSS environment is in moderate or severe occlusion, the horizontal velocity is calculated using the step length and pace. The horizontal velocity is used as an observation in the Kalman filter to calibrate the GNSS velocity.
[0022] Specific embodiments are as follows: 1. Behavioral pattern recognition First, based on the information from the accelerometer and gyroscope, the behavioral state is discriminated every second, such as stationary, walking, raising the hand to look at the watch, others, etc. There are many methods for behavioral state recognition, and only a simple example is listed here.
[0023] 1.1 Determine stationary: If the statistical variance of the accelerometer within 1 second is < TH1 for consecutive n seconds, the statistical mean of the gyroscope within 1 second is < TH2, and the statistical variance of the gyroscope within 1 second is < TH3, then it is determined to be stationary.
[0024] 1.2 Determine raising the hand to look at the watch: Define the 12 o'clock direction of the dial as the front axis, the 3 o'clock direction as the right axis, and the surface-up direction as the upper axis. If within 1 second, it is detected that the arm swing is no longer regular, and the watch state changes from the average left axis facing up to the upper axis facing up, and the statistical variance of the accelerometer within 1 second is > TH4, then it is determined to be raising the hand to look at the watch. Similarly, if the hand is released after looking at the watch, it can be equivalently determined to be raising the hand to look at the watch, and the same operation is performed for GNSS.
[0025] 1.3 Determine walking: 1) Set the "current peak-valley state PFlag" to 0, set the "previous peak time lastPTime" to 0, set the "previous peak value lastHValue" to 0, and set the "previous valley value lastLowValue" to 0. 2) Calculate the magnitude value An of the three-axis acceleration at each moment, and cache five moments An-2, An-1, An, An+1, An+2 3) If the following five conditions are met, then record a wave peak.
[0026] a. The current An > the peak threshold TH5 b. PFlag is 0, or PFlag is -1 c. An - lastLowValue > the peak-to-peak threshold TH-6 d. The current time curTime – lastPTime > the minimum step frequency interval TH7 <00S0116>e. An > An-1 > An-2, An > An+1 > An+2 If the moment of An is a wave peak, PFlag is updated to 1, lastHValue is updated to An, record the step length interval deltaT = curTime – lastPTime. lastPTime is updated to curTime.
[0027] If the moment of An is not a wave peak, then no other operations are performed.
[0028] 4) If the following five conditions are met, then record a wave valley. <000S123>a. An < the valley threshold TH8 b. The PFlag is 0, or the PFlag is 1 c. lastHValue – An > the peak-to-peak threshold TH6 d. curTime – lastPTime > the minimum step frequency interval TH7 e. An < An-1 < An-2, An < An+1 < An+2 If the moment of An is a wave trough, the PFlag is updated to -1, the lastLowValue is updated to An, and the lastPTime is updated to curTime.
[0030] If An is not a wave trough, no other operations are performed 5) If the statistical variance of the continuously recorded deltaT for N times < TH9, and deltaT > the minimum step interval threshold TH10, and deltaT < the maximum step interval threshold TH11, then it is determined as walking. Record the number of wave peaks and wave troughs per second as the step count StepCnt.
[0031] 2. GNSS environment discrimination According to information such as the CN0 of the GNSS tracking satellite and the sky map distribution, the GNSS environment is divided into open, slightly blocked, moderately blocked, and severely blocked.
[0032] 3. GNSS calibration in the static mode If the current static mode is determined through sensor information and the GNSS environment is in a severely blocked state, then the behavior state mode maintained inside the GNSS is calibrated to the static mode, and the speed is calibrated to 0. 4. GNSS calibration in the mode of raising the hand to look at the watch If the current mode of raising the hand to look at the watch is determined through sensor information, then the GNSS does not update the speed information per second and still uses the speed information of the previous second to avoid the non-walking speed calculated from being updated to the GNSS position.
[0033] 5. Update the step length in the walking mode in an open or slightly blocked environment If the current walking mode is determined through sensor information and the GNSS environment is in an open or slightly blocked environment, then the step length information is updated through the GNSS positioning information and the step count. The specific method is to record the GNSS positioning position pos1 at the k moment and the GNSS positioning position pos2 at the k+1 moment. Calculate the horizontal distance deltaPosH from pos1 to pos2. Record the step count stepCnt from the k moment to the k+1 moment. Then the step length stepLen_k from the k moment to the k+1 moment = deltaPosH / stepCnt. Statistically calculate the average step length stepLen_mean in the recent 10s.
[0034] 6. Calibrate GNSS speed in walking mode in moderate or severe occlusion environments If the walking mode is currently determined by sensor information and the GNSS environment is in a moderate or severe occlusion environment, the horizontal speed calculated by the step length and pace is used as an observation of the Kalman filter to calibrate the GNSS speed. The specific method is: First, calculate the horizontal speed v_sensor_h using stepLen_mean and the current number of steps per second, step_cnt.
[0035] v_sensor_h = stepLen_mean * step_cnt GNSS usually uses Kalman filter for positioning and velocity calculation. Its common state vector X is [pos_3,vel_3, clkErr_sys, clkDrift]. Among them, pos_3 represents the position x,y,z of GNSS in the ecef coordinate system, vel_3 represents the velocity vel_x, vel_y, vel_z of GNSS in the ecef coordinate system, clkErr_sys represents the GNSS clock error, sys is the number of systems involved in the solution, and clkDrift represents the GNSS clock drift. Set the observation vector of the additional observation quantity to Z = v_sensor_h* v_sensor_h. Then it can be calculated that H is [03*1 Hvel3*1 0sys*1 0]. Set Hvel3*1 = [H1 H2 H3], then H1 = 2*A*(-sinλ) + 2*B*(-sinΦ * cosλ) H2 = 2*A*cosλ + 2*B*(-sinΦ * sinλ) H3 = 2*B*cosΦ in, A = -sinλ * vel_x+cosλ*vel_y B = -sinΦ*cosλ*vel_x – sinΦ*sinλ*vel_y + cosΦ*vel_z Where λ is the GNSS latitude and Φ is the GNSS longitude.
[0036] Then, through the three equations of the Kalman filter correction process, v_sensor_h can be used to correct the GNSS velocity:
[0037]
[0038]
[0039] Where P is the state error covariance, and R is the error variance. R needs to be set based on information such as the time of entering the occlusion environment and the time to converge before entering the occlusion environment. It can even be flexibly set based on GNSS environmental information.
[0040] In this state, the GNSS speed is detected every second. If the speed is greater than the maximum walking speed threshold TH12 or less than the minimum walking speed threshold TH13, the GNSS speed error is considered too large and the speed calculated by the sensor is directly assigned to the GNSS speed. The specific method is to first calculate the speed of the sensor in the enu coordinate system v_sensor_enu = [v_sensor_e, v_sensor_n, v_sensor_u]. v_sensor_e = v_sensor_h * sin(heading) v_sensor_n = v_sensor_h * cos(heading) v_sensor_u = 0 Then convert v_sensor_enu into the velocity v_sensor_ecef in the ecef coordinate system and directly assign it to the GNSS velocity vel_x, vel_y, vel_z.
[0041] In moderate / severe obstruction scenarios, the sensor's pace (v_sensor_h) is used as a Kalman filter observation to directly correct the GNSS internal velocity state (vel_3), suppressing error divergence caused by satellite signal loss. Compared to traditional downstream fusion solutions (which only correct the final positioning result), this method intervenes in the underlying GNSS state (velocity and clock error), reducing positioning error by 30%-50%. In particular, horizontal positioning drift is reduced by over 60% in single / double obstruction scenarios. This demonstrates the significant technical advantages of this solution.
[0042] As described above, the above embodiments are only used to illustrate the technical solutions of the present invention, rather than to limit the same. Although the present invention has been described in detail with reference to the above embodiments, those skilled in the art should understand that the technical solutions described in the above embodiments can still be modified, or some of the technical features thereof can be replaced by equivalents. However, these modifications or replacements do not deviate the essence of the corresponding technical solutions from the spirit and scope of the technical solutions of the embodiments of the present invention.
Claims
1. A sensor-assisted GNSS walking positioning method, characterized in that: The following steps are involved: Determine whether the user is in walking mode based on sensor information; Based on the CN0 and sky map distribution information of the GNSS tracking satellites, the GNSS environment is divided into open, slightly blocked, moderately blocked, and severely blocked; If walking mode is determined and the GNSS environment is in moderate or severe occlusion, the horizontal velocity is calculated using the step length and pace. The horizontal velocity is used as an observation in the Kalman filter to calibrate the GNSS velocity.
2. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The step size is updated by the following steps: If walking mode is determined and the GNSS environment is in an open or slightly blocked environment, the step length is updated using the GNSS positioning information and the number of steps, and the step length is used to calculate the horizontal speed.
3. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The method for updating the step length information is as follows: record the GNSS positioning position pos1 at time k and the GNSS positioning position pos2 at time k+1, calculate the horizontal distance deltaPosH from pos1 to pos2, record the number of steps stepCnt from time k to time k+1, and calculate the step length stepLen_k from time k to time k+1 = deltaPosH / stepCnt, and calculate the average step length stepLen_mean over the past 10 seconds.
4. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The user state also includes a static mode, and the static mode is determined as follows: if the accelerometer statistical variance within 1 second is less than the threshold TH1 for n consecutive seconds, and the gyroscope statistical mean within 1 second is less than the threshold TH2, and the gyroscope statistical variance within 1 second is less than the threshold TH3, then it is determined to be a static mode.
5. The sensor-assisted GNSS walking positioning method according to claim 4, characterized in that: If the static mode is currently determined by sensor information and the GNSS environment is in a severe obstruction state, the behavior state mode maintained internally by the GNSS is calibrated to the static mode, and the speed is calibrated to 0.
6. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The user status also includes a hand-raising watch mode, and the method for determining the hand-raising watch mode is: define the 12 o'clock direction of the dial as the front axis, the 3 o'clock direction as the right axis, and the upward direction of the surface as the upper axis; if within 1 second, it is detected that the arm is no longer swinging regularly, and the watch state is converted from the average left axis facing upward to the upper axis facing upward, and the statistical variance of the accelerometer within 1 second is greater than the threshold TH4, then it is determined to be a hand-raising watch mode.
7. The sensor-assisted GNSS walking positioning method according to claim 6, characterized in that: If the sensor information is used to determine that the watch is in hand-up mode, the GNSS will not update the speed information in the current second and will continue to use the speed information from the previous second.
8. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The method for determining the walking mode is as follows: Set the current peak-valley state PFlag to 0, set the previous peak time lastPTime to 0, set the previous peak value lastHValue to 0, and set the previous valley value lastLowValue to 0; Calculate the value An of the three-axis acceleration modulus at each moment, and cache five moments An-2, An-1, An, An+1, and An+2; A peak is recorded if the following five conditions are met: a. Current An > peak threshold TH5; b. The current peak-valley state PFlag is 0, or the current peak-valley state PFlag is -1; c.An - lastLowValue > peak-to-peak threshold TH6; d. Current time curTime – previous peak time lastPTime > lowest cadence interval TH7; e.An>An-1>An-2, An>An+1>An+2; If the moment An is a peak, the current peak-valley state PFlag is updated to 1, the last peak moment lastHValue is updated to An, and the recording step interval deltaT = curTime - lastPTime; the last peak moment lastPTime is updated to curTime; if the moment An is not a peak, no other operations are performed; A trough is recorded if the following five conditions are met: a.An < trough threshold TH8; b. PFlag is 0, or PFlag is 1; c.lastHValue – An > peak-to-peak threshold TH6; d.curTime – lastPTime > minimum cadence interval TH7; e.An If An is a trough, PFlag is updated to -1, lastLowValue is updated to An, and lastPTime is updated to curTime; if An is not a trough, no other operations are performed; If the statistical variance of deltaT recorded for N consecutive times is less than the threshold TH9, and deltaT is greater than the minimum step interval threshold TH10, and deltaT is less than the maximum step interval threshold TH11, then it is determined to be walking.
9. The sensor-assisted GNSS walking positioning method according to claim 1, characterized in that: The method for calibrating GNSS velocity is: Calculate the horizontal speed v_sensor_h using the average step length stepLen_mean and the current number of steps per second step_cnt: v_sensor_h = stepLen_mean * step_cnt The state vector X of the Kalman filter is [pos_3, vel_3, clkErr_sys, clkDrift]; pos_3 represents the GNSS position x, y, z in the ecef coordinate system; vel_3 represents the GNSS velocity vel_x, vel_y, vel_z in the ecef coordinate system; clkErr_sys represents the GNSS clock error, sys is the number of systems involved in the solution, and clkDrift represents the GNSS clock drift. Set the observation vector of the added observation to be: Z = v_sensor_h* v_sensor_h; Then we can deduce that H is [03*1 Hvel3*1 0sys*1 0]; Set Hvel3*1 = [H1 H2 H3], then H1 = 2*A*(-sinλ) + 2*B*(-sinΦ * cosλ) H2 = 2*A*cosλ + 2*B*(-sinΦ * sinλ) H3 = 2*B*cosΦ in, A = -sinλ * vel_x+cosλ*vel_y B = -sinΦ*cosλ*vel_x – sinΦ*sinλ*vel_y + cosΦ*vel_z Where λ is the GNSS latitude and Φ is the GNSS longitude; Then, through the three equations of the Kalman filter correction process, v_sensor_h can be used to correct the GNSS speed; Where P is the state error covariance, and R is the error variance. R needs to be set based on the time of entering the occlusion environment and the time of convergence before entering the occlusion environment. It can also be set based on GNSS environmental information. In this state, the GNSS speed is detected every second. If the speed is greater than the maximum walking speed threshold TH12 or less than the minimum walking speed threshold TH13, the GNSS speed error is considered too large and the speed calculated by the sensor is directly assigned to the GNSS speed.
10. The sensor-assisted GNSS walking positioning method according to claim 9, characterized in that: The method to assign the speed calculated by the sensor to the GNSS speed is: Calculate the velocity of sensor in the enu coordinate system v_sensor_enu = [v_sensor_e, v_sensor_n, v_sensor_u]; v_sensor_e = v_sensor_h * sin(heading) v_sensor_n = v_sensor_h * cos(heading) v_sensor_u = 0 Then convert v_sensor_enu into the velocity v_sensor_ecef in the ecef coordinate system and directly assign it to the GNSS velocity vel_x, vel_y, vel_z.