GNSS融合策略

文章目录

  • 一、背景
  • 二、松耦合融合策略
    • 1. 信息有效性判断
    • 2. 坐标系对齐
    • 3. 观测方程
      • a.杆臂补偿
      • b.速度融合
      • c.位置融合
        • 1) 置信度设置
      • d. 航向yaw融合
    • 4.观测性分析
        • 1)状态表示在VIO坐标系下的观测性分析
        • 2)状态表示在GPS ENU坐标系下的观测性分析
  • 三、紧耦合融合
    • 1. 系统状态向量
    • 2.基础知识
    • 3.观测方程
      • a. 伪距观测噪声
      • b.伪距观测方程
      • c.伪距Jacobian 计算
      • d.多普勒测速噪声
      • e.观测方程
      • f. Jacobian推导
      • g. Receiver Clock观测
      • h.高精RTK定位(载波相位观测)
      • i.初始化
      • i.实验效果

一、背景

前面介绍了GNSS的定位原理,那么正常的GNSS模组可以解算出位置 ( G x , G y , G z ) (^Gx, ^Gy,^Gz) (Gx,Gy,Gz)以及三维速度 ( G v x , G v y , G v z ) (^Gv_x,^G v_y, ^Gv_z) (Gvx,Gvy,Gvz)以及航向角度yaw,同时也可以输出原始的GNSS测量,本文主要介绍滤波系统如何融合这些观测。

直接融合原始测量我们叫做紧耦合融合,而融合解算位姿速度结果的叫做松耦合融合。

二、松耦合融合策略

我们将坐标系转到GPS坐标系,我们这里将GPS坐标系标记为G. 变换前VIO的世界坐标系为VIO坐标系,并不是ENU,和GPS存在4 dof外参。

1. 信息有效性判断

RTK和GPS主要就是通过是否进入固定解,以及位置速度的置信度参数决定;双天线yaw的置信度也是一样,此外双天线可以判断一下解算的base_line和已知测量的baseline做个比较,或者求解的roll角度和当前飞机估计的角度作比较,去掉一些错误观测,相近才认为yaw准确。

2. 坐标系对齐

这里其实就是求解一个SE(3)的变换,求解 T w g p s T^{gps}_{w} Twgps坐标系变换,然后把w坐标系转成GPS坐标系即可。
求解方式很多,简单点可以直接建立一个小的优化问题,求解偏差即可,快一点的话就建立一个滤波器,滤波坐标变换偏差,cov收敛即为完成收敛。此外,初始化时,建议先初始化yaw(可以直接通过双天线,也可以通过速度对齐计算yaw),再计算位置。

3. 观测方程

a.杆臂补偿

GPS/IMU融合中的杆臂补偿是为了将IMU测量的姿态和加速度数据与GPS测量的位置数据进行一致性对齐。由于IMU和GPS通常安装在移动平台上的不同位置,导致IMU和GPS测量的参考点存在一定的偏移,因此需要进行杆臂补偿。主要是转弯时,刚体速度需要补偿。
在这里插入图片描述
v g p s = v i m u + b × w v_{gps} = v_{imu}+b\times w vgps=vimu+b×w,后文用到的杆臂为 t g p s i m u t_{gps}^{imu} tgpsimu

杆臂补偿的原理是通过将IMU测量数据转换到与GPS天线在同一位置的参考点上,实现IMU和GPS数据的对齐。具体步骤如下:

  • 确定杆臂向量:通过测量或者通过精确的安装参数来获取IMU测量点与GPS天线之间的距离和方向差异,得到杆臂向量b = [b_x, b_y, b_z]。

  • 转换IMU测量数据:将IMU测量的加速度和角速度数据转换到与GPS天线在同一位置的参考点上。这可以通过将IMU测量数据与杆臂向量进行叉乘来实现。

    • 加速度补偿:将IMU测量的加速度数据a_imu = [a_x_imu, a_y_imu, a_z_imu]转换为a_gps = [a_x_gps, a_y_gps, a_z_gps],其中a_gps = a_imu + b × w_imu,w_imu为IMU测量的角速度数据。
    • 角速度补偿:将IMU测量的角速度数据w_imu = [w_x_imu, w_y_imu, w_z_imu]转换为w_gps = [w_x_gps, w_y_gps, w_z_gps],其中w_gps = w_imu。
  • 融合IMU和GPS数据:将补偿后的IMU数据与GPS数据进行融合

b.速度融合

坐标系对齐之后W世界坐标系和GPSbase坐标系E对齐,我们后续都用W表示。观测方程如下:
r = w v g p s m e a s − w v g p s = w v m e a s − ( R i w s k e w ( w m e a s − b g ) t g p s i m u + w v ) r = ^wv_{gps_{meas}}- ^wv_{gps}=^wv_{meas}-(R_i^wskew(w_{meas} - b_g)t_{gps}^{imu}+^wv) r=wvgpsmeaswvgps=wvmeasRiwskew(wmeasbg)tgpsimu+wv

c.位置融合

r = w p g p s m e a s − w p g p s = w p m e a s − ( R i w t g p s i + w t i ) r = ^wp_{gps_{meas}}- ^wp_{gps} =^wp_{meas}-(R_i^wt_{gps}^{i}+^wt_i) r=wpgpsmeaswpgps=wpmeasRiwtgpsi+wti

1) 置信度设置

前面提到,GNSS的本质是求解以下一个四元非线性方程组
在这里插入图片描述
观测:

  • 接收机伪距
  • 卫星位置
    待求量:
  • 接收机位置
  • 接收机时钟钟差

至少需要4个卫星观测才能求解。首先原始的伪距测量我们可以根据视角、卫星和接收机噪声设置其观测噪音,那么也可以将其转化为xyz的噪音,基本思想就是将上述非线性方程线性化,计算出线性变换矩阵,然后根据这个矩阵转换计算xyz的噪声即可。
y m = f ( x ) = f ( x 0 ) + G δ x + n y^m=f(x)=f(x_0)+G\delta x+n ym=f(x)=f(x0)+Gδx+n
b = y m − f ( x 0 ) = G δ x + n b=y^m-f(x_0)=G\delta x+n b=ymf(x0)=Gδx+n
设:
在这里插入图片描述
这里r对接收机位置x轴求解:
在这里插入图片描述
这个结果是一个单位观测方向矢量的x轴分量。
在这里插入图片描述
类似的, r n r^n rn相对于xyz的导数为:
在这里插入图片描述
线性化之后:
在这里插入图片描述
其中:
在这里插入图片描述
在这里插入图片描述
上式考虑噪声:
在这里插入图片描述
求逆变换得到:
在这里插入图片描述
进而得到噪声传播关系:
在这里插入图片描述
这样得到cov的转换关系:
在这里插入图片描述
这里xyz还是经纬高,需要转化为ENU坐标系下,变换矩阵为S:
在这里插入图片描述
所以最终ENU坐标系下的位置测量方差为:
在这里插入图片描述
这样我们就可以得到xyz的置信度了,作为松耦合融合的置信度参数。可以看到,这个参数和下面两个因素有关:
1、测量误差:伪距测量误差的方差越大,则定位误差的方差也就越大;
2、卫星的几何分布:矩阵G和H取决于可见卫星的个数及其相对于用户的几何分布,所以卫星的个数和分布直接影响最终xyz的解算精度。

d. 航向yaw融合

相对位置和速度融合,航线融合有一定的技巧,主要是一般状态变量中不会维护yaw,而是维护3dof的so(3)。
当前状态的R转成欧拉角Euler,观测方程为:
r = y a w m e a s − E u l e r [ 0 ] r = yaw_{meas} - Euler[0] r=yawmeasEuler[0]
下面主要介绍解析求解Jacobian矩阵时如何计算。即欧拉角关于so(3)的Jacobian矩阵。
四元数转旋转矩阵公式:
在这里插入图片描述
此外,一些基础公式,主这里使用JPL左手系四元数表示(Global到Local)
在这里插入图片描述
在这里插入图片描述
带入四元数转旋转公式得到
在这里插入图片描述
因此
在这里插入图片描述
此外还会用到反对称矩阵这个公式:
在这里插入图片描述

旋转矩阵转欧拉角如下:
在这里插入图片描述
<相对于固定坐标系,旋转矩阵按旋转顺序左乘,右乘是相对动坐标系>
忽略二阶项得到:
在这里插入图片描述
进而可以得到扰动项为
在这里插入图片描述
这里H就是R关于欧拉角求导的Jacobian矩阵,这样就可以进行covariance的转换:
在这里插入图片描述
要求解的 J = ∂ E u l e r ∂ R = ∂ R ∂ E u l e r . i n v e r s e ( ) = H T J=\frac{\partial Euler}{\partial R} = \frac{\partial R}{\partial Euler} .inverse()=H^T J=REuler=EulerR.inverse()=HT的第三行;关于roll,pitch求导也是一样,取第一和第二行即可。

4.观测性分析

观测性分析是滤波系统中常用的问题分析方式,如常见的VIO系统4自由度不可观等,都可以通过观测性分析得到,我们简单介绍一下融合GPS之后系统的观测性(虽然结论显而易见,全部可观,这里就是理论推导一下)。后面有时间单独写一个如何进行观测性推导的内容,这里一些基础概念就不多做介绍了。
系统的可观性(observability)是指能否通过系统的输出来完全确定系统的内部状态。一个可观性良好的控制系统意味着系统的所有状态变量都可以通过测量系统的输出来准确地估计或恢复出来。

1)状态表示在VIO坐标系下的观测性分析

IMU的error state transition matrix为:
在这里插入图片描述
我们使用transition matrix去propagate covariance matrix。
在这里插入图片描述
这里V表示正常VIO系统的世界坐标系,E表示GPS的世界坐标系,第一种我们假设状态都表示在VIO的世界坐标系V,状态向量为:
在这里插入图片描述
注:这里VIO坐标系也是水平的,所以 V E R ^E_VR VER只有1个自由度。
视觉重投影和GPS观测的*观测方程**为:
在这里插入图片描述
线性化之后的预测和观测方程可以表示为
在这里插入图片描述
这里的state transition matrix为:
在这里插入图片描述
视觉观测方程对状态求解H矩阵为:
在这里插入图片描述
GPS观测对应H矩阵为:
在这里插入图片描述
合并在一起的观测矩阵为:
在这里插入图片描述
进而可以得到观测性矩阵为:
在这里插入图片描述
可以看到这个矩阵的零空间为:
在这里插入图片描述
一般这种零空间都比较显而易见,很容易就能拼凑出来,但是,也可以通过下面的方法判断是哪个状态的零空间。
V x + x ~ = V ′ x ^Vx + \tilde x = ^{V'}x Vx+x~=Vx
这里求出 x ~ \tilde x x~,然后看是不是零空间,是的话,就是这个方向不可观。以绕g重力旋转为例,我们增加扰动 V V ′ R = I + ⌊ α g × ⌋ ^{V'}_VR = I+\left \lfloor \alpha g\times \right \rfloor VVR=I+αg×,求出 x ~ \tilde x x~即可。
在这里插入图片描述

以外参项 V E R ^E_V\textbf{R} VER为例,得到其 x ~ \tilde x x~
在这里插入图片描述
特征位置对应扰动为
在这里插入图片描述
因此,初始条件的扰动 V V ′ R = I + ⌊ α g × ⌋ ^{V'}_VR = I+\left \lfloor \alpha g\times \right \rfloor VVR=I+αg×能够变成状态的扰动,而这个扰动就是我们的零空间,所以说明绕重力旋转不可观
在这里插入图片描述

2)状态表示在GPS ENU坐标系下的观测性分析

此时系统坐标系为ENU坐标系,我们标志为E
在这里插入图片描述
此时观测性矩阵为:
在这里插入图片描述
对比前面的观测性矩阵:
在这里插入图片描述
很明显前面的零空间 n u l l ( v M ) null(^vM) null(vM)不再是 E M ^EM EM的零空间,但他有新的零空间,还是4个自由度,主要是因为我们把GPS到VIO的4dof外参放在了状态变量中,边缘化这4dof状态,就会发现状态完全可观了。

三、紧耦合融合

1. 系统状态向量

在这里插入图片描述
在VINS的基础上增加了几个变量:
1) Ψ \Psi Ψ:local world(yaw未和ENU对齐)和ENU系之间的偏航角。
2) δ t \delta \textbf{t} δt:接收机时钟钟差。因为GVINS支持四个导航系统——GPS、GLONASS、Galileo和北斗卫星,不同的导航系统相应的接收机钟差是不同的。
3) δ t ˙ \delta \dot{t} δt˙:接收机时钟钟差变化率只有一个,不同导航系统是相同的。

2.基础知识

全球导航卫星系统(GNSS)有四个独立且完全运行的GNSS系统,即GPS、GLONASS、伽利略和北斗。每个GNSS系统中的导航卫星不断广播无线电信号,接收器可以从中唯一识别卫星并检索导航信息。以GPS L1C信号为例,最终传输的信号由三层组成,如下图所示。导航信息包含轨道参数、时钟误差的校正、电离层延迟的系数以及与卫星状态相关的其他信息。

  • 轨道参数,也称为星历,包含14个变量,用于计算卫星在特定时间的地心地固坐标(ECEF coordinates)。
  • 卫星的时钟误差被建模为二阶多项式,即,有三个参数。
    每颗卫星都被分配一个每1毫秒重复一次的唯一伪随机噪声(PRN)码。首先将50位/秒的导航信息与PRN码进行异或操作,然后用它来调制高频载波信号。接收到信号后,接收器通过测量它和设计信号之间的频率差来获得多普勒偏移。从PRN码偏移(表示传播时间)中推断出伪距测量,最后,通过反向解调过程解析出导航信息。
    在这里插入图片描述

卫星方面的误差源主要由卫星轨道(星历)和卫星钟差组成。轨道误差来自其他天体的影响,这些天体并未被星历精确建模,时钟误差是卫星上不完美的原子钟相对于标准系统时间的结果。轨道和时钟误差由系统控制段进行监控并不断校正。当信号到达时,通过比较由卫星的原子钟标记的信号传输时间和接收器的较不准确的本地时钟时间,计算飞行时间。

  • 伪距测量可以模型化为,前一篇文章详细介绍过:
    在这里插入图片描述
    前面两个 p p p分别是卫星和接收机在ECI coordinates下的位置, ς s \varsigma_s ςs是4*1的向量,用1记录了当前导航系统的是否使用, △ t s \bigtriangleup t^s ts为卫星钟差,随后就是对流层和电力层延迟,多径和噪声(单位×c统一到m).

  • 多普勒测量:多普勒频率偏移是通过接收到的载波信号和设计的信号之间的差异来测量的,它反映了接收器-卫星沿信号传播路径的相对运动。由于GNSS信号结构的特性,多普勒测量的精度通常比伪距的精度高一个数量级。
    在这里插入图片描述
    前面两个 v v v分别是卫星和接收机在ECI coordinates下的速度, λ \lambda λ表示载波信号的波长, κ r s \kappa_r^s κrs为从接收器到卫星的单位向量,表示在ECI coordinates, δ t ˙ \delta \dot{t} δt˙:接收机时钟钟差变化率, △ t ˙ s \bigtriangleup \dot t^s t˙s为卫星的钟差变化率,最后一项是噪音。

3.观测方程

a. 伪距观测噪声

伪距测量的噪声模型符合均值为0的高斯分布:
在这里插入图片描述
其中标准差为:
在这里插入图片描述
其中 n s n_s ns 是广播卫星空间精度指标; n p r n_{pr} npr接收机上报的伪码测量噪声指标; θ e l \theta_{el} θel卫星在接收机视野中的仰角。这个分母项有两个原因。首先,它可以抑制由GNSS多径效应引起的噪声,这种效应通常出现在低仰角的卫星上。其次,由导航系统广泛采用的Klobuchar模型得到的电离层延迟,仍然包含高达50%的误差, 由于低仰角的卫星会受到显著的电离层延迟,分母项也可以减少电离层补偿带来的误差。

b.伪距观测方程

ENU系到ECEF系的转换:纬度 λ \lambda λ,经度 ϕ \phi ϕ
在这里插入图片描述
local world系和ENU系只差一个偏航角 ψ \psi ψ ,那么local world系到ENU系的转换为
在这里插入图片描述
则接收机在local world下的坐标和ECEF下的坐标关系转换为
n: ENU坐标系
e:ECEF坐标系
在这里插入图片描述
这里涉及先选择一个anchor point的问题,可以通过SPP粗糙的估计anchor point位置,选定anchor point的LLA,作为ECEF和ENU坐标系之间的转换原点(因此也可以求出锚点处ENU转ECEF的旋转),并在初始化的时候调整local frame的轨迹和ECEF系下的对齐。这样anchor point从之前ENU系的原点变为local frame系的原点。对应松耦合的坐标系对齐过程。

p r w − p a n c w \textbf{p}_r^w-\textbf{p}_{anc}^w prwpancw是在local world系下接收机位置到anchor point点的向量差,其中,设置local world系的坐标系原点是anchor point,又因为ENU的中心和local world的中心重合,所以 p a n c w \textbf{p}_{anc}^w pancw是0。 R n e R w n ( p r w − p a n c w ) \textbf{R}^e_n\textbf{R}^n_w(\textbf{p}_r^w-\textbf{p}_{anc}^w) RneRwn(prwpancw)将向量差变换到了ECEF系下;即:
在这里插入图片描述
移项变换,即可得到公式(14)中接收机在ECEF下的位置坐标 p r e \textbf{p}_r^e pre.
接收机天线和机体坐标系的变换为:
在这里插入图片描述
定义E坐标系与接受到信号时间的ECEF一致,那么:
在这里插入图片描述
这里信号离开时的卫星位置和接受时候的卫星位置不一样,需要考虑信号传输时间 t f t_f tf和地球转速进行补偿。
在这里插入图片描述
最终,伪距测量误差因子可以建模为:
在这里插入图片描述
为避免混淆,接受时刻ECI我们不用E,也用e表示:
在这里插入图片描述
再将(14)(15)带入,得到:
注:这里为了方便推导,近似机体b和接收机r重合:
在这里插入图片描述
因此:
在这里插入图片描述

这里卫星位置,卫星的钟差、电离层误差​可以计算得到,对流层误差也可通过建立适当的模型进行估计。anchor point在ECI系下的位置可以计算出来,因相关联的状态变量只有:
在这里插入图片描述
我们近似机体b和接收机r重合,那么 q b w \textbf{q}_b^w qbw就也没有了。

c.伪距Jacobian 计算

伪距测量误差对 p b t k w \textbf{p}^w_{b_{t_k}} pbtkw的导数
设:
在这里插入图片描述
在这里插入图片描述
伪距测量误差对 ψ \psi ψ的导数
在这里插入图片描述
其中 R w n \textbf{R}^n_w Rwn为:
在这里插入图片描述

导数为:
在这里插入图片描述
**伪距测量误差对 δ t k \delta \textbf{t}_k δtk**的导数为:
在这里插入图片描述

d.多普勒测速噪声

η r s \eta_r^s ηrs是多普勒频移噪声,服从均值为0的高斯分布,其均方差建模为:
在这里插入图片描述

其中 n s n_s ns 是广播卫星空间精度指标; n d p n_{dp} ndp为接收机的测量噪声; θ e l \theta_{el} θel卫星在接收机视野中的仰角。

e.观测方程

前面提到,多普勒频率偏移为:
在这里插入图片描述
同样,这里e为接收时刻的ECEF坐标系,是一个ECI坐标系, v s e \textbf{v}^e_s vse v r e \textbf{v}^e_r vre分别是卫星和接收机在ECEF系下的速度, λ \lambda λ表示载波信号的波长, κ r s \kappa_r^s κrs是在ECEF下接收器到卫星的单位观测向量:
在这里插入图片描述
其实就是为了计算速度差在伪距方向的投影。残差为:
在这里插入图片描述
接收机在接受时刻ECEF系下的速度和在local world中的速度之间的转换为:
在这里插入图片描述
在这里插入图片描述
同样假设机体b和接收机r重合,则相关联的系统状态为:
在这里插入图片描述

f. Jacobian推导

多普勒频移误差对 v b t k w \textbf{v}^w_{b_{t_k}} vbtkw的导数
在这里插入图片描述

多普勒频移误差对 ψ \psi ψ的导数
在这里插入图片描述
多普勒频移误差对 δ t ˙ k \delta{\dot{t}}_k δt˙k
在这里插入图片描述
多普勒频移误差对 p b t k w \textbf{p}^w_{b_{t_k}} pbtkw的导数
根据链式求导法则:
在这里插入图片描述
第二项比较简单:
在这里插入图片描述
第一项比较复杂,但也不涉及很复杂的公式,就是链式求导流程长了点,建议直接用Matlab或者SymPy求导,这里直接给出结论:
在这里插入图片描述
其中:
在这里插入图片描述

g. Receiver Clock观测

t k − 1 t_{k-1} tk1 t k t_k tk接收机时钟钟差的变化为
在这里插入图片描述
离散化之后:
在这里插入图片描述

接收机时钟钟差变化率可以建模为:
在这里插入图片描述

h.高精RTK定位(载波相位观测)

前面都是单点定位,属于非差观测,是绝对定位。
如果是高精定位,那么需要使用前文提到的双差观测,这里属于相对定位(相对于参考站的位置),下述公式是双差观测方程
在这里插入图片描述
类似正常求导即可。此时融合结果可以达到RTK定位精度

i.初始化

参考GVINS的初始化流程,其实也和松耦合类似,分为三步:

  1. 通过SPP算法得到一个粗糙的anchor point的粗糙位置

  2. 偏航角yaw校正:使用精度更高的多普勒速度测量校正local world和ENU系之间的偏航角 ψ \psi ψ和接收机钟差漂移率
    在这里插入图片描述

  3. anchor point重优化:结合伪距和多普勒测量联合优化,优化接收机钟偏和anchor point的经纬高原点。
    在这里插入图片描述

i.实验效果

  1. 融合原始多普勒平移测量比直接松耦合融合接收机解算的GPS速度的精度更高一些
  2. 融合伪距测量相当于融合单点GPS位置,融合后局部位置精度可能会下降,但是相比不融合的全局位置精度会提高,相对松耦合来说,由于融合了原始测量,因此效果会比直接融合解算的位置要好。在卫星数小于4颗时,接收机无法求解出GPS位置和速度,但紧耦合不受影响,卫星少也能融合。
  3. 融合载波相位也是同样的道理,就相当于松耦合融合接收机解算的RTK位置了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75698.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议

Bytebase 和 GitLab 签署技术合作伙伴协议&#xff0c;携手为开发者提供流畅的数据库协作开发和管理体验。 GitLab 是世界领先的开源 AI 驱动 DevSecOps 平台&#xff0c;旨在帮助开发者团队更好协作、更高效交付软件。Bytebase 是一款为 DevOps 团队准备的数据库 CI/CD 工具&a…

drone的简单使用

&#xff08;一&#xff09;简介 Drone 是一个基于Docker容器技术的可扩展的持续集成引擎&#xff0c;用于自动化测试、构建、发布。每个构建都在一个临时的Docker容器中执行&#xff0c;使开发人员能够完全控制其构建环境并保证隔离。开发者只需在项目中包含 .drone.yml文件&…

数据结构和算法(2):向量

抽象数据类型 数组到向量 C/C 中&#xff0c;数组A[]中的元素与[0,n)内的编号一一对应&#xff0c;A[0],A[1],...,A[n-1]&#xff1b;反之&#xff0c;每个元素均由&#xff08;非负&#xff09;编号唯一指代&#xff0c;并可直接访问A[i] 的物理地址 Ai s&#xff0c;s 为单…

docker系列(2) - 常用命令篇

文章目录 2. docker常用命令2.1 参数说明(tomcat案例)2.2 基本命令2.3 高级命令2.4 其他 2. docker常用命令 2.1 参数说明(tomcat案例) 注意如果分成多行&#xff0c;\后面不能有空格 # 拉取运行 docker run \ -d \ -p 8080:8080 \ --privilegedtrue \ --restartalways \ -m…

系统架构设计师(第二版)学习笔记----嵌入式系统及软件

【原文链接】系统架构设计师&#xff08;第二版&#xff09;学习笔记----嵌入式系统及软件 文章目录 一、嵌入式系统1.1 嵌入式系统的组成1.2 嵌入式系统的特点1.3 嵌入式系统的分类 二、嵌入式软件2.1 嵌入式系统软件分层2.2 嵌入式软件的主要特点 三、安全攸关软件的安全性设…

自己的碎碎念集合

自己的碎碎念集合 2023-09-11 C语言定义 `int *p,q;` p, q类型是否一样2023-09-07 c++叠加三目运算符闰年计算法2023-08-13 一个小题目 A+B problem一、问题及解答关碍总结2023-07-26 C的2至36进制转换函数一、itoa()函数的示例代码总结2023-07-19 平面坐标下判断三角形以及输出…

十八、MySQL添加外键?

1、外键 外键是用来让两张表的数据之间建立联系&#xff0c;从而保证数据的一致性和完整性。 注意&#xff0c;父表被关联的字段类型&#xff0c;必须和子表被关联的字段类型一致。 2、实际操作 &#xff08;1&#xff09;初始化两张表格&#xff1a; 子表&#xff1a; 父…

哪个矩阵系统管理最好用?如何同时管理1000个账号和发布视频?

软件图片素材来自于公众号&#xff1a;生财风暴 关注进行领取价值1000元的采集软件&#xff0c;和呆头鹅批量剪辑和矩阵管理系统演示 实体店老板如何用抖音进行推广&#xff1f; 【方式一&#xff1a;找网红达人拍视频帮忙推广店铺&#xff0c;但是成本收费相对于比较高 ​【方…

PHP 排序函数使用方法,按照字母排序等操作

详解PHP排序方法使用 一、sort() 函数 用于对数组单元从低到高进行排序。 //数组 $data array(D,F,A,C,B); //排序 sort($data); //输出排版标签 echo "<pre>"; //打印数据 print_r($data);die;输出结果&#xff1a; 二、rsort() 函数 用于对数组单元从高到…

保姆级-微信小程序开发教程

一&#xff0c;注册微信小程序 如果你还没有微信公众平台的账号&#xff0c;请先进入微信公众平台首页&#xff0c;点击 “立即注册” 按钮进行注册。注册的账号类型可以是订阅号、服务号、小程序以及企业微信&#xff0c;我们选择 “小程序” 即可。 接着填写账号信息&#x…

怎样获取字符串数组的长度_使用sizeof(array) / sizeof(array[0])

使用sizeof() C、C中没有提供直接获取数组长度的函数&#xff0c;对于存放字符串的字符数组提供了一个strlen函数获取长度&#xff0c;那么对于其他类型的数组如何获取他们的长度呢&#xff1f; 其中一种方法是使用sizeof(array) / sizeof(array[0]), 在C语言中习惯上在使用时…

如何将两台Mac显示器设置为单个屏幕配置

​能够在扩展模式下将两个或多个外部显示器连接到Mac是一种解放的屏幕体验&#xff0c;但当每个显示器仍然像独立显示器一样工作时&#xff0c;会导致沮丧。 在这里&#xff0c;我们向你展示如何通过对系统设置进行一些简单的更改&#xff0c;使两个扩展屏幕看起来像一个屏幕。…

【代码随想录day24】不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xf…

数据结构与算法基础-学习-32-选择排序之简单选择排序、堆排序

目录 一、简单选择排序基本思路 二、简单选择排序基本操作 三、简单选择排序算法思路 四、简单选择排序代码 1、SimpleSelectSortSentrySqQueue 五、简单选择排序算法分析 1、记录移动次数 2、记录比较次数 六、简单选择排序Linux环境编译测试 七、堆的定义 八、堆调…

A6120 Emerson 机箱地震振动监测器

A6120 Emerson 机箱地震振动监测器 艾默生过程管理公司宣布&#xff0c;PlantWeb数字工厂架构已经安装在化学工业CATCH(技术能力评估中心)培训中心&#xff0c;该中心位于北林肯郡格里姆斯比附近的Stallingborough。这座价值820万英镑的设施是为了满足行业对培训中心的需求而开…

教师如何私密发布成绩查询?

随着科技的不断发展&#xff0c;教育领域也逐渐引入了各种在线工具来提高教学效果和管理效率。其中&#xff0c;易查分作为一款功能强大的在线查询工具&#xff0c;帮助老师们更好的利用该工具进行成绩查询。 好消息&#xff01;博主给大家争取到的易查分福利&#xff0c;只需要…

C++中的红黑树

红黑树 搜索二叉树搜索二叉树的模拟实现平衡搜索二叉树(AVL Tree)平衡搜索二叉树的模拟实现红黑树(Red Black Tree)红黑树的模拟实现 红黑树的应用(Map 和 Set)Map和Set的封装 搜索二叉树 搜索二叉树的概念&#xff1a;二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

电脑文件批量重命名:高效操作技巧

随着时间的推移&#xff0c;我们积累的文件和文件夹数量越来越多&#xff0c;需要对它们进行合理的命名和管理&#xff0c;以便更方便地查找和利用。而文件批量重命名功能可以帮助我们更高效地管理文件夹。下面介绍五种方式&#xff0c;帮助你更好地利用文件批量重命名工具&…

leetcode刷题--栈与递归

文章目录 1. 682 棒球比赛2. 71 简化路径3. 388 文件的最长绝对路径4. 150 逆波兰表达式求值5. 227. 基本计算器II6. 224. 基本计算器7. 20. 有效的括号8. 636. 函数的独占时间9. 591. 标签验证器10. 32.最长有效括号12. 341. 扁平化嵌套列表迭代器13. 394.字符串解码 1. 682 棒…

算法之双指针题型:

双指针例题小总结&#xff1a; 力扣27&#xff1a; 移除元素 力扣题目链接 双指针分为&#xff1a; 快慢双指针&#xff1a;同一个起点&#xff0c;同向出发 相向双指针&#xff1a;从两端出发&#xff0c;方向相反&#xff0c;终会相遇 经典的双指针&#xff08;快慢双指…