当前位置:网站首页>GNSS速度解算的三种方法
GNSS速度解算的三种方法
2022-06-23 03:53:00 【奔跑的橘子】
位置差分
位置差分是速度估计的最简单粗暴的方法,我们只需要知道两个历元的位置估计 r u ⃗ \vec{r_u} ru和历元间隔 t k − t k − 1 t_k-t_{k-1} tk−tk−1就可以通过下边的公式估计出接收机的速度。
v u ⃗ = r u ⃗ ( t k ) − r u ⃗ ( t k − 1 ) t k − t k − 1 \vec{v_u}=\frac{\vec{r_u}(t_k)-\vec{r_u}(t_{k-1})}{t_k-t_{k-1}} vu=tk−tk−1ru(tk)−ru(tk−1)
如下图,我们通过 P 2 P_2 P2点和 P 1 P_1 P1点的位置可以对速度估计,但这种方法的缺点也显而易见,
- 我们需要知道两个历元的位置信息
- 计算结果并不是事实的速度,而是从 P 1 P_1 P1到 P 2 P_2 P2的平均速度,所以说这个速度是有一定滞后的
- 所以这种方法要考虑的是载体的动态和位置输出的频率,是否满足应用场景
- 还有一个问题,这种方法得到的速度估计和位置估计不是独立不相关的

基于伪距率的速度估计
有没有更好的方法呢?接收机接收到的多普勒频移可以表示为以下公式。
D o p p l e r = f r − f t = − f t c [ ( v s − v u ) ∙ r s − r u ∣ ∣ r s − r u ∣ ∣ ] Doppler=f_r-f_t=-\frac{f_t}{c}[(v_s-v_u)\bullet\frac{r_s-r_u}{||r_s-r_u||}] Doppler=fr−ft=−cft[(vs−vu)∙∣∣rs−ru∣∣rs−ru]
其中 ∙ \bullet ∙为点乘,我们把上述公式两边都乘以载波的波长 λ \lambda λ,于是上边的公式变为,
ρ ˙ = ( v s − v u ) ∙ E \dot{\rho}=(v_s-v_u)\bullet E ρ˙=(vs−vu)∙E
其中 E E E为视线向量 r s − r u ∣ ∣ r s − r u ∣ ∣ \frac{r_s-r_u}{||r_s-r_u||} ∣∣rs−ru∣∣rs−ru,考虑接收机的钟漂 δ t u ˙ \delta \dot{t_u} δtu˙和测量噪声$\xi
$,上边的式子可以完整的写为,
ρ ˙ = ( v s − v u ) ∙ E + c δ t u ˙ + ξ \dot{\rho}=(v_s-v_u)\bullet E+c \delta \dot{t_u}+\xi ρ˙=(vs−vu)∙E+cδtu˙+ξ
写到这里我们就可以进行接收机速度的估计了,我们简单看一下rtklib的源代码,关键的一行为vs[j]=rs[j+3+i*6]-x[j];,从这我们大致可以看出rtklib就是用的这种方法了。
// 以下代码位于pntpos.c 中的resdop 函数
/* LOS (line-of-sight) vector in ECEF */
cosel=cos(azel[1+i*2]);
a[0]=sin(azel[i*2])*cosel;
a[1]=cos(azel[i*2])*cosel;
a[2]=sin(azel[1+i*2]);
matmul("TN",3,1,3,1.0,E,a,0.0,e);
/* satellite velocity relative to receiver in ECEF */
for (j=0;j<3;j++) {
vs[j]=rs[j+3+i*6]-x[j];
}
这个方法也有一个问题,使用这一行代码vs[j]=rs[j+3+i*6]-x[j];求伪距率的时候,其中的x为未知数,所以必然这个方法同求解位置一样,是需要迭代的。我们可以看一下求解速度的函数验证一下。
// 以下代码来自pntpos.c estvel 函数
for (i=0;i<MAXITR;i++) {
/* range rate residuals (m/s) */
if ((nv=resdop(obs,n,rs,dts,nav,sol->rr,x,azel,vsat,err,v,H))<4) {
break;
}
这个for循环就是用来迭代求解速度的,MAXITR就是最大迭代次数。
基于多普勒频移的速度估计
可不可以不迭代呢?答案是肯定的。
首先,某卫星的多普勒频移可以写成以下形式,
d s = ρ s ˙ − v s ∙ E d_s=\dot{\rho_s}-v_s\bullet E ds=ρs˙−vs∙E
我们将其带入伪距率公式,
d s = − E ∙ v u + c δ t u ˙ + ξ d_s=-E\bullet v_u+c \delta \dot{t_u}+\xi ds=−E∙vu+cδtu˙+ξ
我们已经通过位置解算得到卫星和接收机的位置,所以 E E E为已知量,而 d s d_s ds为观测量,那么我们将每颗卫星的观测方程放到一起,就得到了一个线性定常方程,直接可以通过最小二乘或者卡尔曼滤波求解了。
d s 1 = − E 1 ∙ v u + c δ t u ˙ + ξ d s 2 = − E 2 ∙ v u + c δ t u ˙ + ξ . . . d s m = − E m ∙ v u + c δ t u ˙ + ξ d_{s1}=-E_1\bullet v_u+c \delta \dot{t_u}+\xi \\ d_{s2}=-E_2\bullet v_u+c \delta \dot{t_u}+\xi \\ ... \\ d_{sm}=-E_m\bullet v_u+c \delta \dot{t_u}+\xi ds1=−E1∙vu+cδtu˙+ξds2=−E2∙vu+cδtu˙+ξ...dsm=−Em∙vu+cδtu˙+ξ
使用rtklib进行速度解算
首先,我们下载rtklib的可执行文件,
运行rtkpost并输入星历文件和观测文件,点击Execute
好了,解算完成!
边栏推荐
- 接收传来得文件并下载(简单用法)a标签
- Receive incoming files and download (simple usage) a tag
- 静态双位置继电器 XJLS-84/440/DC220V
- Experience of Tencent cloud installed by Kali
- TabControl style of WPF basic control
- ICER skills 03design compile
- 美团好文:从预编译的角度理解Swift与Objective-C及混编机制
- How to use data to tell a wonderful story?
- A mvc5+easyui enterprise rapid development framework source code BS framework source code
- Current relay hdl-a/1-110vdc-1
猜你喜欢

apache atlas 快速入门

Abnova actn4 purified rabbit polyclonal antibody instructions

A mvc5+easyui enterprise rapid development framework source code BS framework source code

Metadata management Apache Atlas Compilation (embedded) deployment and various error records encountered

元数据管理Apache Atlas编译(内嵌式)部署及遇到各种错误记录

Static two position relay gls-3004k/dc220v

ApiPost接口测试的用法之------Get

Abnova fluorescent dye 555-c3 maleimide scheme

How can mushrooms survive a five-year loss of 4.2 billion yuan?

Dolphin scheduler 2.0.5 spark task test summary (source code optimization)
随机推荐
Pads and flash symbols in cadence
An understanding of free() (an error in C Primer Plus)
Banner banner
Precautions for running high-frequency and high-speed signal lines near PCB board - basic principles for high-frequency and high-speed signal design
Dpr-34v/v two position relay
DSP7 环境
Win10 view my Ini path
MySQL import large files (can be millions or hundreds)
ICer技能02makefile脚本自跑vcs仿真
Chrome debugging tips
Do280openshift command and troubleshooting -- common troubleshooting and chapter experiments
ApiPost接口测试的用法之------Get
1183. electricity
Separate use of alertmanager alarms and use of Prometheus configuration alarm rules
prometheus、influxdb2.2安装及flume_export下载编译使用
mysql json
Dolphin scheduler 2.0.5 task test (spark task) reported an error: container exited with a non zero exit code 1
Thinkphp6 solving jump problems
Kail infiltration basic literacy basic command
Thinkphp6 linked table query without associated ID (2 tables) is mainly the application of select