论文阅读《Feature-based visual navigation integrity monitoring for urban autonomous platforms》

本文研究了基于特征的视觉导航系统中的完好性监测框架,提出了一个双层故障检测方案,结合RANSAC和多假设解分离(MHSS)方法,以高效和高可靠地检测异常值。通过实时协方差估计,计算了位姿估计的不确定性,并建立了保护水平,确保了在存在故障时的导航安全性。通过仿真验证,该算法在单故障和多故障场景下表现出良好的性能。
摘要由CSDN通过智能技术生成

1 摘要

视觉导航系统已越来越多地应用于许多城市安全至关重要的应用,如城市空中交通和高度自动化的车辆,它们必须不断地提供精确和安全的位姿估计。对于如何提供复杂环境下的视觉导航精度和鲁棒性,已有大量的研究,但对于如何在异常值存在的情况下保证导航安全的研究不足。从安全的角度来看,完好性是最重要的导航性能指标,因为它度量了对导航输出正确性的信任。通过利用完好性的概念,本文开发了一个完好性监测框架,以保护视觉导航系统不受误导性测量的影响,并量化导航输出的可靠性。首先,提出了基于迭代最小二乘(LS)的位姿估计算法,并推导了相关协方差的估计方法。然后,将随机采样一致性(RANSAC)与多假设解分离(MHSS)相结合,提出了一种双层故障检测方案,以实现高效性和可靠性。最后,该框架确定了导航输出的概率误差界,并严格捕获了未检测到的故障和测量不确定度。通过各种仿真验证了所提出算法的有效性,结果表明该算法具有良好的性能。

2 介绍

基于视觉或视觉辅助的导航系统因其在城市环境下的优异性能而受到人们的广泛关注,而城市环境是全球导航卫星(GNSS)严重脆弱的环境。因此,在城市空中交通(UAM)和高度自动化车辆(HAV)等城市安全关键应用中,视觉导航是实现定位的另一种选择,有望给社会带来巨大的利益。

对于这些应用,在设计导航算法时,确保视觉定位的安全性是重中之重。这是因为,一方面,视觉导航对操作和环境条件非常敏感,比如纹理、模糊的存在和光照变化。因此,导航系统可能在某些条件下性能良好,但在其它环境中,它可能变得不可靠。另一方面,如果定位任务执行不正确,可能会对车辆、乘客和附近的人造成灾难性的损害。

因此,不仅要提高导航精度和鲁棒性,而且要对导航输出的正确性进行量化。到目前为止,之前的工作主要是通过优化算法和开发一些外点剔除技术来解决前一项任务。虽然这些算法大大降低了故障率,但通过执行后一项任务,仍有可能进一步提高导航安全性,这正是本文研究的目标。

为此,本文提出了一种新的实现视觉导航自主完好性监测的方法,这在文献中鲜有提及。我们利用航空开发的完好性概念来评估UAM和HAV部署中视觉导航的安全性。完好性度量了对导航输出正确性的信任程度,而完好性风险则描述了导航系统在没有警告用户的情况下提供有害误导信息的概率。显然,完好性从导航的角度提供了一种直接量化安全水平的方法,因此,它被用于衡量城市自主系统的定位安全。此外,该指标和相关的分析方法完美地补充了基于测试的车辆安全演示方法。

完好性监测是保证导航完好性的重要手段:它涉及两个基本功能,一是检测故障测量,二是量化安全风险。建立了多种完好性监测方法,以确保基于GNSS的导航在民航应用中的完好性。最具代表性的方法包括接收机自主完好性监测(RAIM)和先进的接收机自主完好性监测(ARAIM),这两种方法都是基于冗余距离测量的一致性检验。

将这些技术引入到其它导航系统和其它应用中越来越有吸引力,并作出了一些显著的努力。然而,据我们所知,关于视觉导航完好性监测的研究还很少。Joerger等人提出了一种基于激光雷达导航的完好性监测方法,着重于特征提取和数据关联。此外,Bhamidipati等人为GNSS/视觉组合导航系统开发了基于同时定位与建图(SLAM)的完好性监测方案。Li等人提出了一种基于RAIM的视觉导航完好性监测方案,假设在外点剔除之后,最多存在一个故障测量(即特征)。但是,这些现有方法并不代表一般情况,也不能解决以下所述的挑战。

由于无线电导航与视觉导航的显著差异,使得在GNSS领域发展起来的算法很难引入到视觉导航环境中。在城市场景中,由于环境中有丰富的纹理,基于特征的视觉导航通常比其它方法,如光流法和模板匹配法效果更好。一幅图像的特征数目通常接近甚至超过100个,远远大于GNSS应用中使用的伪距数目。此外,故障率可能超过10%,严重超过了传统完好性监测算法的能力。并且,在视觉导航中,测量故障的空间相关性不可忽略,因此RAIM和ARAIM所采用的故障无关假设在此不成立。还有,在视觉导航中,位姿估计通常采用基于优化的方法来实现,而现有完好性监测算法主要针对基于最小二乘(LS)或滤波的导航系统。

为了解决上述问题,本文提出了一种实现视觉导航完好性监测的新方法。在本工作中,我们首先描述了基于特征的视觉导航的一般流程,重点介绍了已匹配特征的导航状态估计。然后,提出了基于迭代最小二乘的位姿估计算法,并推导了相关的实时协方差估计方法,在此基础上开发了完好性监测框架。该框架采用随机采样一致性(RANSAC)和多假设解分离(MHSS)两种方法,实现了高效和高可靠的故障检测。在该方案中,我们还利用故障分组技术来降低计算复杂度,并处理故障的空间相关性。为了评估导航完好性,该框架确定了捕获未检测故障的概率误差界和测量不确定度。

本文的布局安排如下。第三部分介绍了视觉导航的基本原理,明确了研究的范围。第四节给出了位姿估计算法和相关协方差估计方法。完好性监测框架的细节将在第五节中讨论。在第六节中,我们通过仿真来验证所提出的算法。最后,在第7节中得出结论。

3 视觉导航的基本原理

视觉导航是一种利用相机或激光雷达传感器的输出来估计自我运动(平移和旋转)的精确而鲁棒的技术。自20世纪80年代早期以来,已经开发了许多方法,它们可以大致分为表1所示的类别。

表1 典型视觉导航方法的分类

在这里插入图片描述
由于不同的方法在实现上存在明显的差异,因此本文不打算提供一个涵盖所有方法的完好性监测框架。对于在城市环境中运行的自主平台,基于特征的方法长期以来一直是主导的视觉导航解决方案。在城市场景下,图像中可以提取出丰富的独特特征,因此基于特征的方法在效率、准确性和鲁棒性方面都比其它方法表现出更好的性能。在传感器方面,由于单目视觉系统存在尺度不确定性,在没有外部传感器辅助的情况下,首选双目相机。因此,本文主要研究基于特征的双目视觉导航系统。我们将扩大这项工作,以支持未来的基于激光的导航。

如表1所示,基于特征的视觉导航系统有三种操作模式:视觉里程计、SLAM和基于地图的定位(文献中也称为重定位)。图1展示了这些模式下所需的程序。VO通过分析相机捕获的图像序列,提供了车辆位姿的增量在线估计。这是一种有效和方便的方法,不依赖于任何关于环境的先验知识,但定位误差会随着时间的推移而累积。SLAM是一种技术,它允许车辆在未知环境中进行自我定位,并逐步生成地图。如图1所示,VO是SLAM中必不可少的一部分,SLAM还包含后端优化、回环和建图。这些额外的程序有助于提高定位精度,但同时也使SLAM比VO复杂得多。通过使用预先建立的地图,基于地图的定位允许车辆估计其相对于该地图的位姿。实际上,在SLAM中,地图通常是通过地图提供者或者过去时间的建图程序来访问。
在这里插入图片描述

图1 基于特征的视觉导航系统所需步骤流程图

在基于特征的方法中,特征提取是一个关键的步骤,它从图像中提取明显的特征(如直线、曲线和角点)。这个步骤可以用不同的方法实现,性能也不同。本文提出的方法普遍适用于各种特征,并以ORB特征为例验证了算法的有效性。作为一种广泛使用的特征,ORB对旋转、平移和缩放具有不变性,而且它还对相机设置和光照变化具有很强的鲁棒性。对于从当前图像中提取的特征,数据关联尝试在前一帧(VO模式)或局部地图(基于地图的定位模式)中找到对应的点。使用一组匹配的特征点,VO估计相机在不同历元之间的运动,而基于地图的定位计算主体相对于地图的位姿。本文主要研究基于地图的定位模式下的定位安全问题,但由于两者具有很大的相似性,该方法很容易推广到VO模式中。

对于基于地图的定位,位姿估计模块的直接输入是已匹配的三维点。在安全关键应用中,对视觉测量(即点对)中的潜在故障给予足够的重视是非常重要的。造成这些故障的原因主要有两个方面:一是由于环境条件不利导致数据关联失败,二是由于真实世界场景在地图构建后发生了变化。这些故障有可能导致较大的导航误差,并可能是车辆处于危险的情形中。为了确保操作安全,导航系统必须不断提供准确可靠的位姿估计。为此,本文旨在开发一个针对测量故障的完好性监测框架,以提供安全可靠的导航输出。

本节定义了这项工作的范围,并描述了在有代表性的可视化导航方法中所涉及到的必要过程。本文在不丧失一般性的情况下,假设从双目相机的输出中提取了一些显著特征,并将它们与预先建立的三维地图中的点进行匹配。为了清晰起见,这里不提供此流程的详细实现,它们不会影响以下派生。

4 位姿确定和协方差估计

4.1 测量方程

基于地图的定位的目的是确定主体的位姿,即相对于局部地图的位置和方向。位姿通常定义成 x = [ φ T , t T ] T \pmb{x}=[\pmb{\varphi}^T,\pmb{t}^T]^T xxx=[φφφT,tttT]T,其中 φ = [ α   β   γ ] T \pmb{\varphi}=[\alpha\ \beta\ \gamma]^T φφφ=[α β γ]T t = [ t x   t y   t z ] T \pmb{t}=[t_x \ t_y \ t_z]^T ttt=[tx ty tz]T,它们分别表示旋转和平移。状态向量 x \pmb{x} xxx,指的是4×4的变换矩阵 T \pmb{T} TTT
T = [ R t 0 1 ] (1) \pmb{T}=\begin{bmatrix} \pmb{R} & \pmb{t} \\ \pmb{0} & 1 \end{bmatrix} \tag{1} TTT=[RRR000ttt1](1)
其中旋转矩阵 R \pmb{R} RRR是由滚转角 α \alpha α、俯仰角 β \beta β和偏航角 γ \gamma γ计算而来的,
R ( α ,   β ,   γ ) = [ c β c γ − c α s γ + s α s β c γ s α s γ + c α s β c γ c β s γ c α c γ + s α s β s γ − s α c γ + c α s β s γ − s β s α c β c α c β ] (2) \pmb{R}(\alpha,\ \beta, \ \gamma)=\begin{bmatrix} c\beta c \gamma & -c\alpha s \gamma+s\alpha s\beta c\gamma & s\alpha s\gamma+c\alpha s\beta c\gamma \\ c\beta s\gamma & c\alpha c\gamma+s\alpha s\beta s\gamma & -s\alpha c \gamma+c\alpha s\beta s\gamma \\ -s\beta & s\alpha c\beta & c\alpha c\beta \end{bmatrix}\tag{2} RRR(α, β, γ)=cβcγcβsγsβcαsγ+sαsβcγcαcγ+sαsβsγsαcβsαsγ+cαsβcγsαcγ+cαsβsγcαcβ(2)
其中 s s s c c c分别指 s i n ( ⋅ ) sin(\cdot) sin()函数和 c o s ( ⋅ ) cos(\cdot) cos()函数。

为了估计位姿,我们假设有 N N N对匹配的特征点,如下:
P = { p 1 , p 2 , ⋯   , p N } ,    Q = { q 1 , q 2 , ⋯   , q N } (3) \pmb{P}=\{\pmb{p}_1,\pmb{p}_2,\cdots,\pmb{p}_N\},\ \ Q=\{\pmb{q}_1,\pmb{q}_2,\cdots,\pmb{q}_N\}\tag{3} PPP={ppp1,ppp2,,pppN},  Q={qqq1,qqq2,,qqqN}(3)
其中 p i \pmb{p}_i pppi q i \pmb{q}_i qqqi分别表示在第 i i i个特征点在相机系和导航系中的三维坐标。这两个坐标系通过 R \pmb{R} RRR t \pmb{t} ttt联系,因此我们可以得到如下的测量方程,
∀ i ,   R ⋅ ( p i − ϵ p i ) + t = q i − ϵ q i (4) \forall i, \ \pmb{R}\cdot(\pmb{p}_i-\epsilon_{pi})+t=\pmb{q}_i-\epsilon_{qi} \tag{4} i, RRR(pppiϵpi)+t=qqqiϵqi(4)
ϵ p i ∼ N ( 0 , C p i ) (5) \epsilon_{pi}\sim \mathbb{N}(0,\pmb{C}_{pi})\tag{5} ϵpiN(0,CCCpi)(5)
ϵ q i ∼ N ( 0 , C q i ) (6) \epsilon_{qi}\sim \mathbb{N}(0,\pmb{C}_{qi}) \tag{6} ϵqiN(0,CCCqi)(6)
其中 ϵ p i \epsilon_{pi} ϵpi ϵ q i \epsilon_{qi} ϵqi是零均值的噪声项,它们的协方差分别是 C p i \pmb{C}_{pi} CCCpi C q i \pmb{C}_{qi} CCCqi。注意,在以往的研究中,特征点的误差通常假设为零均值高斯噪声。这项工作也是在这种假设下进行的,我们将在今后的工作中对误差模型进行检验。

然后,我们用非线性优化的方法来表示位姿估计。具体来说,导航状态, α \alpha α β \beta β γ \gamma γ t x t_x tx t y t_y ty t z t_z tz通过最小化特征的重投影误差估计为:
{ R ∗ , t ∗ } = a r g m i n R , t ∑ i = 1 N ∣ ∣ R ⋅ p i + t − q i ∣ ∣ 2 2 (7) \{\pmb{R}^*,\pmb{t}^*\}=\underset{R,t}{argmin}\sum_{i=1}^{N}||\pmb{R}\cdot\pmb{p}_i+\pmb{t}-\pmb{q}_i||^2_2 \tag{7} {RRR,ttt}=R,targmini=1NRRRpppi+tttqqqi22(7)
公式(7)本质上是一个最小二乘优化问题。但由于 α \alpha α β \beta β γ \gamma γ是旋转矩阵 R \pmb{R} RRR中非线性三角函数的参数,不能直接应用线性最小二乘估计方法求解。在下一节中,我们将介绍如何修改这个优化问题,使其可以通过线性最小二乘方法解决。

4.2 基于迭代最小二乘的位姿确定

线性求解公式(7)的主要困难是由于旋转矩阵而产生的强非线性。幸运的是,小角度近似(例如 s θ ≈ θ s\theta \approx \theta sθθ c θ ≈ 1 c\theta \approx 1 cθ1,当 θ ≈ 0 \theta \approx 0 θ0时)是消除非线性的有效方法。当 Δ α \Delta \alpha Δα Δ β \Delta \beta Δβ Δ γ \Delta \gamma Δγ约等于0时,有,
Δ R ≈ [ 1 − Δ γ Δ β Δ γ 1 − Δ α − Δ β Δ α 1 ] ≜ I − ( Δ φ × ) (8) \Delta \pmb{R} \approx \begin{bmatrix} 1 & -\Delta \gamma & \Delta \beta \\ \Delta \gamma & 1 & -\Delta \alpha \\ -\Delta \beta & \Delta \alpha & 1 \end{bmatrix} \triangleq \pmb{I}-(\Delta \pmb{\varphi}\times) \tag{8} ΔRRR1ΔγΔβΔγ1ΔαΔβΔα1III(Δφφφ×)(8)
其中 ( Δ φ × ) (\Delta \pmb{\varphi} \times) (Δφφφ×)是叉乘矩阵, I \pmb{I} III表示3×3单位矩阵。通过这个近似,我们可以在工作点 { R l , t l } \{\pmb{R}_l,\pmb{t}_l\} {RRRl,tttl}线性化测量方程,
∀ i ,    ( p i ∣ l × ) ⋅ Δ φ + Δ t = Δ p i (9) \forall i, \ \ (\pmb{p}_i|_l\times)\cdot \Delta \pmb{\varphi} + \Delta \pmb{t}=\Delta \pmb{p}_i \tag{9} i,  (pppil×)Δφφφ+Δttt=Δpppi(9)
∀ i ,    p i ∣ l = R l ⋅ p i + t l (10) \forall i, \ \ \pmb{p}_i|_l=\pmb{R}_l\cdot\pmb{p}_i+\pmb{t}_l \tag{10} i,  pppil=RRRlpppi+tttl(10)
因此,原非线性优化问题可通过迭代求解,如下所示。在每次迭代时,我们将测量方程线性化,并将其堆叠为,
Δ y = G ⋅ Δ x + ϵ (11) \Delta \pmb{y} = \pmb{G}\cdot \Delta\pmb{x}+\pmb{\epsilon} \tag{11} Δyyy=GGGΔxxx+ϵϵϵ(11)
其中几何矩阵 G \pmb{G} GGG,重投影误差向量 Δ y \Delta \pmb{y} Δyyy和测量噪声 ϵ \pmb{\epsilon} ϵϵϵ由下式给出,
G = [ p 1 ′ × I ⋮ ⋮ p N ′ I ] (12) \pmb{G}=\begin{bmatrix} \pmb{p}_1' \times & \pmb{I} \\ \vdots & \vdots \\ \pmb{p}_N' & \pmb{I} \end{bmatrix} \tag{12} GGG=ppp1×pppNIIIIII(12)
Δ y = [ q 1 − p 1 ′ ⋮ q N − p N ′ ] (13) \Delta \pmb{y}=\begin{bmatrix} \pmb{q}_1-\pmb{p}_1' \\ \vdots \\ \pmb{q}_N-\pmb{p}_N' \end{bmatrix} \tag{13} Δyyy=qqq1ppp1qqqNpppN(13)
p i ′ = R ^ ′ ⋅ p i + t ^ ′ (14) \pmb{p}_i'=\hat{\pmb{R}}'\cdot \pmb{p}_i+\hat{\pmb{t}}' \tag{14} pppi=RRR^pppi+ttt^(14)
ϵ = [ R ^ ′ ⋅ ϵ p 1 − ϵ q 1 ⋮ R ^ ′ ⋅ ϵ p N − ϵ q N ] (15) \pmb{\epsilon}=\begin{bmatrix} \hat{\pmb{R}}'\cdot \pmb{\epsilon}_{p1}-\pmb{\epsilon}_{q1} \\ \vdots \\ \hat{\pmb{R}}'\cdot \pmb{\epsilon}_{pN}-\pmb{\epsilon}_{qN} \end{bmatrix} \tag{15} ϵϵϵ=RRR^ϵϵϵp1ϵϵϵq1RRR^ϵϵϵpNϵϵϵqN(15)
其中 R ^ ′ \hat{\pmb{R}}' RRR^ t ^ ′ \hat{\pmb{t}}' ttt^表示由之前迭代给出的估计的变换参数。

其次,执行最小二乘估计,状态更新量 Δ x ^ \Delta \hat{\pmb{x}} Δxxx^计算如下,
Δ x ^ = ( G T G ) − 1 G T ⋅ Δ y (16) \Delta \hat{\pmb{x}}=(\pmb{G}^T\pmb{G})^{-1}\pmb{G}^T\cdot \Delta \pmb{y} \tag{16} Δxxx^=(GGGTGGG)1GGGTΔyyy(16)
然后,我们用 Δ x ^ \Delta \hat{\pmb{x}} Δxxx^来更新变换矩阵,
[ R ^ t ^ 0 1 ] = [ Δ R ^ Δ t ^ 0 1 ] ⋅ [ R ^ ′ t ^ ′ 0 1 ] (17) \begin{bmatrix} \hat{\pmb{R}} & \hat{\pmb{t}} \\ \pmb{0} & 1 \end{bmatrix} = \begin{bmatrix} \Delta \hat{\pmb{R}} & \Delta \hat{\pmb{t}} \\ \pmb{0} & 1 \end{bmatrix} \cdot \begin{bmatrix} \hat{\pmb{R}}' & \hat{\pmb{t}}' \\ \pmb{0} & 1 \end{bmatrix} \tag{17} [RRR^000ttt^1]=[ΔRRR^000Δttt^1][RRR^000ttt^1](17)
最后,当解收敛时,我们输出估计的位姿 x ^ \hat{\pmb{x}} xxx^,最后的 Δ y \Delta \pmb{y} Δyyy被定义为残差向量 y \pmb{y} yyy

4.3 协方差计算

在导航系统中,协方差矩阵常被用来衡量状态估计的不确定性,协方差估计是精度评估和完好性监测的基础。位姿不确定是由测量误差引起的,协方差估计的关键是推导误差传播公式。依据公式(15),第 i i i个特征对应的测量噪声协方差矩阵 C i C_i Ci计算为:
C i = R ^ ⋅ C p i ⋅ R ^ T + C q i (18) \pmb{C}_i=\hat{\pmb{R}}\cdot \pmb{C}_{pi}\cdot \hat{\pmb{R}}^T+\pmb{C}_{qi} \tag{18} CCCi=RRR^CCCpiRRR^T+CCCqi(18)
假设不同特征的测量误差不相关,则所有特征的协方差矩阵堆叠为分块对角矩阵,
C = [ C 1 ⋱ C N ] (19) \pmb{C}=\begin{bmatrix} \pmb{C}_1 & & \\ & \ddots & \\ & & \pmb{C}_N \end{bmatrix} \tag{19} CCC=CCC1CCCN(19)
基于公式(16),我们可以直接确定状态扰动 δ x \delta \pmb{x} δxxx如下:
δ x = [ δ φ T ,   δ t T ] T = ( G T G ) − 1 G T ⋅ ϵ (20) \delta \pmb{x} =[\delta \pmb{\varphi}^T, \ \delta \pmb{t}^T]^T=(\pmb{G}^T\pmb{G})^{-1}\pmb{G}^T\cdot \pmb{\epsilon} \tag{20} δxxx=[δφφφT, δtttT]T=(GGGTGGG)1GGGTϵϵϵ(20)
状态扰动 δ x \delta \pmb{x} δxxx的协方差矩阵由下式给出,
C δ = S δ ⋅ C ⋅ S δ T (21) \pmb{C}_{\delta}=\pmb{S}_{\delta}\cdot \pmb{C} \cdot \pmb{S}_{\delta}^T \tag{21} CCCδ=SSSδCCCSSSδT(21)
其中 S δ = ( G T G ) − 1 G T \pmb{S}_{\delta}=(\pmb{G}^T\pmb{G})^{-1}\pmb{G}^T SSSδ=(GGGTGGG)1GGGT

然而, C δ \pmb{C}_{\delta} CCCδ并不是位姿估计的误差协方差矩阵,因为位姿误差 ε x = x ^ − x \pmb{\varepsilon}_x=\hat{\pmb{x}}-\pmb{x} εεεx=xxx^xxx并不等于状态扰动 δ x \delta \pmb{x} δxxx。位姿估计值 x ^ \hat{\pmb{x}} xxx^和状态扰动 δ x \delta \pmb{x} δxxx之间的关系可以通过变换矩阵来建立,
[ R ^ t ^ 0 1 ] = [ δ R δ t 0 1 ] ⋅ [ R t 0 1 ] (22) \begin{bmatrix} \hat{\pmb{R}} & \hat{\pmb{t}} \\ \pmb{0} & 1 \end{bmatrix} = \begin{bmatrix} \delta \pmb{R} & \delta \pmb{t}\\ \pmb{0} & 1 \end{bmatrix} \cdot \begin{bmatrix} \pmb{R} & \pmb{t} \\ \pmb{0} & 1 \end{bmatrix} \tag{22} [RRR^000ttt^1]=[δRRR000δttt1][RRR000ttt1](22)
这个公式可以进一步重写为,
[ R ^ t ^ 0 1 ] = [ δ R ⋅ R δ R ⋅ t + δ t 0 1 ] (23) \begin{bmatrix} \hat{\pmb{R}} & \hat{\pmb{t}} \\ \pmb{0} & 1 \end{bmatrix} = \begin{bmatrix} \delta \pmb{R} \cdot \pmb{R} & \delta \pmb{R}\cdot \pmb{t}+\delta \pmb{t}\\ \pmb{0} & 1 \end{bmatrix} \tag{23} [RRR^000ttt^1]=[δRRRRRR000δRRRttt+δttt1](23)
然后,我们有,
ε φ = φ ^ − φ = [ c γ / c β s γ / c β 0 − s γ c γ 0 c γ s β / c β s γ s β / c β 1 ] ⋅ δ φ ⋅ A φ ⋅ δ x (24) \pmb{\varepsilon}_{\varphi}=\hat{\pmb{\varphi}}-\pmb{\varphi}=\begin{bmatrix} c\gamma/c\beta & s\gamma/c\beta & 0\\ -s\gamma & c\gamma & 0\\ c\gamma s\beta / c\beta & s\gamma s\beta/c\beta & 1 \end{bmatrix}\cdot \delta \pmb{\varphi} \cdot \pmb{A}_{\varphi}\cdot \delta \pmb{x} \tag{24} εεεφ=φφφ^φφφ=cγ/cβsγcγsβ/cβsγ/cβcγsγsβ/cβ001δφφφAAAφδxxx(24)
ε t = t ^ − t = ( t × ) ⋅ δ φ + δ t ≜ A t ⋅ δ x (25) \pmb{\varepsilon}_t=\hat{\pmb{t}}-\pmb{t}=(\pmb{t}\times)\cdot \delta \pmb{\varphi}+\delta \pmb{t} \triangleq \pmb{A}_t \cdot \delta \pmb{x} \tag{25} εεεt=ttt^ttt=(ttt×)δφφφ+δtttAAAtδxxx(25)
公式(24)详细的证明在附件中给出。

因此, ε φ \pmb{\varepsilon}_{\varphi} εεεφ ε t \pmb{\varepsilon}_t εεεt的协方差矩阵由以下两式给出,
C φ = A φ ⋅ C δ ⋅ A φ T (26) \pmb{C}_{\varphi}=\pmb{A}_{\varphi}\cdot \pmb{C}_{\delta} \cdot \pmb{A}_{\varphi}^T \tag{26} CCCφ=AAAφCCCδAAAφT(26)
C t = A t ⋅ C δ ⋅ A t T (27) \pmb{C}_t=\pmb{A}_t\cdot \pmb{C}_{\delta}\cdot \pmb{A}_t^T \tag{27} CCCt=AAAtCCCδAAAtT(27)

5 视觉导航完好性监测框架

5.1 输入参数

如前所述,基于特征的视觉导航系统偶尔会遇到测量故障,这极大地威胁了系统的运行安全。本文将完好性的概念引入到视觉导航环境中,并开发了相应的完好性监测框架。该框架不仅能处理容易引起误解的特征,而且能够确定位姿估计的概率误差包络。该框架需要一些必要的输入来确保其可靠性,包括测量误差模型、先验故障概率和预定义的导航性能要求。

表2给出了每个特征的误差模型和先验故障概率。误差模型来源于对基于KITTI数据集的测量误差的初步分析,该数据集提供了地面真值和双目相机的输出。另外,需要注意的是,这里的故障概率表示的是经过第一层异常值排除(即RANSAC)后,内点发生故障的概率。两层故障检测方案将在第5.2节中详细说明。由于先验故障概率可能会随着RANSAC的设置而变化,本工作还对参数进行了灵敏度分析,其值见表2。

表2 误差模型和先验故障概率

在这里插入图片描述
导航需求参数主要包括目标完好性风险和虚警带来的连续性风险。完好性风险定义为导航系统在没有警告用户的情况下提供危险误导信息(HMI)的概率。误报警是故障检测器在无故障状态下检测到故障状态时发生的事件,是导致导航连续性丧失的主要原因。表3显示了这些参数的初步值,它们代表了安全关键应用的典型要求。由于这些需求实际上依赖于应用,我们将在未来的工作中确定特定车辆应用的导航需求。

表3 导航性能要求列表

在这里插入图片描述

5.2 双层故障检测方案设计

对于城市环境的车辆应用,视觉导航系统可以应用在测量数目大、故障率高的情况下。这种情况超出了传统的GNSS完好性监测方案的能力。为此,我们开发了一种双层故障检测方案,结合了RANSAC和MHSS的优点,提高了检测效率,保证了导航的完好性。

在描述这个方案之前,我们首先澄清基本假设。我们假设在地图生成过程中进行了质量控制。更具体地说,非静态物体是视觉导航系统的一大威胁,我们假设大多数这些不需要的物体都被排除在地图之外。这个排除步骤可以由地图提供者利用地面真实数据和一些物体分类技术来实现。这个步骤的详细实现超出了本文的范围。在这个假设下,不太可能有大量具有强一致性的异常值。

第一层采用RANSAC算法剔除原始视觉测量中的异常值。RANSAC通过重复以下步骤来达到目的:

  1. 随机选择一个特征对应的子集作为初始一致集。
  2. 利用这个子集来估计导航参数。
  3. 然后,所有其它特征都根据估计参数进行测试,那些很好地符合估计参数的点(与预定义的阈值相比)被添加到一致集中。

这个过程重复固定的次数,有最多内点的一致集作为内点集输出。RANSAC是一种在异常值比例较高的情况下仍能有效去除大部分异常值的方法,因此在视觉导航中得到广泛应用。在上述假设下,RANSAC不会被异常值所误导,可以将异常值比例降低到一个足够低的值。迭代次数和外点识别的阈值对RANSAC后的故障率有很大的影响,即内点发生故障的概率。因此,我们需要通过指定RANSAC设置来正确地确定故障概率。这超出了本文的范围,但涉及到我们的另一项工作。

在适当的RANSAC设置下,故障概率预计会非常低(例如 1 0 − 3 10^{-3} 103 1 0 − 4 10^{-4} 104 1 0 − 5 10^{-5} 105)。但是,仅仅使用RANSAC并不能保证视觉导航系统的安全性。这是因为,一方面,在安全关键型应用程序中仍然需要监视低概率事件。另一方面,RANSAC虽然可以大大降低导航误差,但很难推导出完好性监测算法所需的概率误差包络。

因此,我们采用MHSS技术作为第二层,进一步检测故障,更重要的是便于对导航安全进行量化。MHSS在完好性监测算法中得到了广泛的应用,因为它具有两个显著的优点:它能有效地处理多个同时发生的故障,并提供了完好性的直接证明。MHSS的分布步骤详细说明如下。

MHSS通过建立子集列表来实现单故障和多故障的检测,每个子集对应一个故障模式。需要注意的是,RANSAC中子集的确定过程与MHSS中子集的确定过程有明显的区别。RANSAC的目的是找到特征点的一个非常小的子集,使它们都是内点。在MHSS中,每个子集包含了大部分的观测信息,因为它假设在进行RANSAC后只有少量的故障特征。

利用MHSS,可以根据每个特征的先验故障概率确定需要监控的子集。每个故障模式(或子集)的相关概率是通过乘以该模式下假定为故障的特征的故障概率来确定的。对于概率相对较低的故障模式,我们采用一个预定义的阈值 P T H R E S P_{THRES} PTHRES来包络来自这些无监控模式的完好性风险。在此过程中,我们还可以得到需要监控的最大并发故障数 N f , m a x N_{f,max} Nf,max。可以按照ARAIM基线算法中所示的详细步骤来实现子集确定,方法是将每个特征视为“卫星”,并将星座故障概率设置为0。这一步的输出包括:监控子集(索引为 j = 0 , 1 , ⋯   , N s j=0,1,\cdots,N_s j=0,1,,Ns)、 N f , m a x N_{f,max} Nf,max、每个子集的故障概率 p f s ( j ) p_{fs}^{(j)} pfs(j)以及来自未监控模式的总完好性风险 p n m p_{nm} pnm

然后计算检验统计量和相应的阈值。对于子集 j j j,容错解 x ( j ) \pmb{x}^{(j)} xxx(j)和全视图解 x ( 0 ) \pmb{x}^{(0)} xxx(0)之间的差值 Δ x ( j ) \Delta \pmb{x}^{(j)} Δxxx(j)为:
Δ x ( j ) = x ( j ) − x ( 0 ) = ( S ( j ) − S ( 0 ) ) ⋅ y (28) \Delta \pmb{x}^{(j)}=\pmb{x}^{(j)}-\pmb{x}^{(0)}=(\pmb{S}^{(j)}-\pmb{S}^{(0)})\cdot \pmb{y} \tag{28} Δxxx(j)=xxx(j)xxx(0)=(SSS(j)SSS(0))yyy(28)
其中系数矩阵 S ( j ) \pmb{S}^{(j)} SSS(j)计算如下:
S ( j ) = [ A φ A t ] ( G T W ( j ) G ) − 1 G T W ( j ) (29) \pmb{S}^{(j)}=\begin{bmatrix} \pmb{A}_{\varphi} \\ \pmb{A}_t \end{bmatrix}(\pmb{G}^T\pmb{W}^{(j)}\pmb{G})^{-1}\pmb{G}^T\pmb{W}^{(j)} \tag{29} SSS(j)=[AAAφAAAt](GGGTWWW(j)GGG)1GGGTWWW(j)(29)
其中 3 n × 3 n 3n\times 3n 3n×3n维对角矩阵 W ( j ) \pmb{W}^{(j)} WWW(j)可由下式获得:
W ( j ) ( 3 i − 2 : 3 i , 3 i − 2 : 3 i ) = { 0 ,   特 征 i 在 子 集 j 中 被 认 为 是 故 障 1 ,   其 它 (30) \pmb{W}^{(j)}(3i-2:3i,3i-2:3i)=\begin{cases} 0, \ 特征i在子集j中被认为是故障 \\ 1, \ 其它 \end{cases} \tag{30} WWW(j)(3i2:3i,3i2:3i)={0, ij1, (30)
让下标 q = 1 , 2 , 3 q=1,2,3 q=1,2,3分别表示那3个角度分量, q = 4 , 5 , 6 q=4,5,6 q=4,5,6分别表示那3个平移分量。 x ( j ) \pmb{x}^{(j)} xxx(j) Δ x ( j ) \Delta \pmb{x}^{(j)} Δxxx(j)的协方差矩阵分别由以下两式给出,
σ q ( j ) 2 = c o v ( x q ( j ) , x q ( j ) ) = e q T S ( j ) C S ( j ) T e q (31) \sigma_q^{(j)2}=cov(x_q^{(j)},x_q^{(j)})=\pmb{e}_q^T\pmb{S}^{(j)}\pmb{C}\pmb{S}^{(j)T}\pmb{e}_q \tag{31} σq(j)2=cov(xq(j),xq(j))=eeeqTSSS(j)CCCSSS(j)Teeeq(31)
σ s s , q ( j ) 2 = c o v ( Δ x q ( j ) ,   Δ x q ( j ) ) = e q T ( S ( j ) − S ( 0 ) ) C ( S ( j ) − S ( 0 ) ) T e q (32) \sigma_{ss,q}^{(j)2}=cov(\Delta x_q^{(j)},\ \Delta x_q^{(j)})=\pmb{e}^T_q(\pmb{S}^{(j)}-\pmb{S}^{(0)})\pmb{C}(\pmb{S}^{(j)}-\pmb{S}^{(0)})^T\pmb{e}_q \tag{32} σss,q(j)2=cov(Δxq(j), Δxq(j))=eeeqT(SSS(j)SSS(0))CCC(SSS(j)SSS(0))Teeeq(32)
其中 e q \pmb{e}_q eeeq是一个向量,除了第 q q q个元素为1外其余都是0。

对于每种故障模式,有6个解分离测试,每个旋转和平移分量各一个。对应的阈值计算如下:
T q ( j ) = K f a , q ⋅ σ s s , q ( j ) (33) \pmb{T}^{(j)}_q=\pmb{K}_{fa,q}\cdot \sigma_{ss,q}^{(j)} \tag{33} TTTq(j)=KKKfa,qσss,q(j)(33)
其中,
K f a , q = { Q − 1 ( P F A , R 2 N s ) ,    q = 1 , 2 , 3 Q − 1 ( P F A , T 2 N s ) ,    q = 4 , 5 , 6 (34) \pmb{K}_{fa,q}=\begin{cases} \pmb{Q}^{-1}(\frac{P_{FA,R}}{2N_s}), \ \ q=1,2,3 \\ \pmb{Q}^{-1}(\frac{P_{FA,T}}{2N_s}), \ \ q=4,5,6 \end{cases} \tag{34} KKKfa,q={QQQ1(2NsPFA,R),  q=1,2,3QQQ1(2NsPFA,T),  q=4,5,6(34)

Q − 1 ( p ) \pmb{Q}^{-1}(p) QQQ1(p)是零均值单位方差高斯分布的 ( 1 − p ) (1-p) (1p)分位数。系数 K f a , q K_{fa,q} Kfa,q反映了虚警的概率。只有当对所有 j j j q q q有以下条件时,说明导航系统通过第二层故障检测,
τ q ( j ) = ∣ x q ( j ) − x q ( 0 ) ∣ T q ( j ) ≤ 1 (35) \tau_q^{(j)}=\frac{|x^{(j)}_q-x^{(0)}_q|}{\pmb{T}_q^{(j)}} \leq 1 \tag{35} τq(j)=TTTq(j)xq(j)xq(0)1(35)

如果任何测试失败,导航系统将失去连续性。为了提高故障条件下的航行连续性,应尝试排除故障。我们在这里不提供排除方案,但我们将在今后的工作中开发一个准确、高效的排除算法。

对于实时应用,必须考虑算法的复杂性。从这个角度看,由于测量量大,上述方案的计算成本可能很高。为了解决这个问题,我们引入了故障分组技术,它可以大大减少被监控子集的数量。这种技术的基本思想是将图像分成几个不重叠的区域,称为超像素,每个超像素都包含一组特征。图2用一个2D示例说明了超像素的生成。

在这里插入图片描述

图2 二维图像分割示例(每个矩形都是单个超像素)

在引入故障分组技术后,我们可以按照与传统MHSS方法相同的过程确定监测子集。但在这种情况下,我们需要将每个超像素视为单独的“特征”。超像素的先验故障概率表示超像素中任何特征发生故障的概率:
p s p = 1 − ( 1 − p f ) n p (36) p_{sp}=1-(1-p_f)^{n_p} \tag{36} psp=1(1pf)np(36)
其中 p f p_f pf p s p p_{sp} psp分别表示每个特征和每个超像素的先验故障概率; n p n_p np是这个超像素中的特征个数。

5.3 保护水平计算

保护水平(PL)是为了保证位姿误差超过所述数字的概率小于或等于目标完好性风险而计算的概率误差包络。本文对每个位姿分量分别定义了PL。第 q q q个分量的保护水平 P L q PL_q PLq可通过求解下式确定:
P H M I , q ( 1 − p n m P H M I ) = 2 Q ( P L q σ q ( 0 ) ) + ∑ j = 1 N s p f s ( j ) Q ( P L q − T q ( j ) σ q ( j ) ) (37) P_{HMI,q}(1-\frac{p_{nm}}{P_{HMI}})=2Q(\frac{PL_q}{\sigma_q^{(0)}})+\sum_{j=1}^{N_s}p_{fs}^{(j)}Q(\frac{PL_q-T_q^{(j)}}{\sigma_q^{(j)}}) \tag{37} PHMI,q(1PHMIpnm)=2Q(σq(0)PLq)+j=1Nspfs(j)Q(σq(j)PLqTq(j))(37)
其中,
P H M I , q = { P H M I , R ,    q = 1 , 2 , 3 P H M I , t ,     q = 4 , 5 , 6 (38) P_{HMI,q}=\begin{cases} P_{HMI,R},\ \ q = 1,2,3 \\ P_{HMI,t}, \ \ \ q=4,5,6 \end{cases} \tag{38} PHMI,q={PHMI,R,  q=1,2,3PHMI,t,   q=4,5,6(38)
与该保护水平相关的安全性证明和求解公式(37)的方法在ARAIM基线算法中显示。在该式中,右边的每一项都是每个故障模式对完好性风险贡献的上界,左边的一项是分配给监控子集的目标完好性风险。

6 实验和结果

在本节中,进行了几个仿真来验证所提出的算法。为了表示真实城市环境中的特征几何,我们从KITTI数据集提供的图像中提取ORB特征。每个特征的深度也是通过比较左右相机的输出来计算的。图3显示了在相机系中提取的特征的几何形状。我们假定这幅图像来自一辆在良好建图环境中行驶的车辆,并且该图像与地图之间的特征对应关系已经确定。为了模拟噪声测量,我们根据表2所示的测量误差协方差对特征加入白噪声。由于所提出的位姿估计和完好性监测方案均为“快照”方法,即结果仅依赖于当前观测数据,因此图3所示的静态场景足以进行性能评估。

在这里插入图片描述

图3 图像中的特征点及其空间分布

在模拟特征对应的基础上,首先验证了所提出的位姿确定算法和相关的协方差估计方法。为了捕捉车辆位姿的协方差变化,表4中所示的10个场景被用于执行此分析。该表中的参数表示车辆相对于局部地图的位姿。对于每个场景,我们进行蒙特卡罗模拟,生成5000个随机场景,用于统计上确定误差标准差。图4给出了统计误差和估计误差标准差。研究结果表明,该算法能较好地估计导航状态参数,证明了协方差估计方法的可行性。从图中可以看出,位姿不确定性对车辆姿态很敏感,但对平移保持不变。

表4 模拟中使用的案例列表

在这里插入图片描述

在这里插入图片描述

图4 统计(实线)和估计(虚线)误差标准差

然后,我们进行了另一个仿真,以揭示故障分组对计算复杂度和导航性能的影响。在这个模拟中,我们假设如图3所示的特征构成了RANSAC生成的内点集。将每个特征的故障概率设置为不同的值进行灵敏度分析。此外,通过将三维图像分割为几个长方体来进行故障分组,长方体的大小对分组结果影响很大。表5显示了不同分组结果的CPU时间比较,图5显示了相关的保护水平。仿真实验在MATLAB 2018b上运行,笔记本电脑配置为Intel Core i5-8300H和8GB内存。注意,我们不计算案例1的保护水平,因为这个过程会消耗大量的时间。

表5 不同分组结果的计算复杂度比较

在这里插入图片描述

在这里插入图片描述

图5 保护水平随故障分组结果和先验故障概率的变化

根据表5和图5的结果,我们可以得出以下结论。首先,如果不采用故障分组,完好性监测框架就不能应用于实时应用程序。其次,故障分组可以通过减少子集的数量而大大减少时间消耗,同时以提供保护水平为代价。第三,对故障概率的灵敏性分析表明,高故障概率会导致大量的子集和大的保护水平。因此,必须进行第一层故障检测,因为它可以有效地降低第二层检测中使用的特征的故障概率。

最后,通过仿真两种故障场景验证了所提出的故障检测方案。如图3所示,从图像中央的摩托车上提取部分特征(标记为超像素A),另一部分特征(标记为超像素B),位于图像左侧的树中。在第一种场景中,我们手动注入一个10米的故障到超像素A的深度分量中。这表示在地图中有一个非静态路标点的情况。第二种是多故障场景,在超像素A的故障基础上,往超像素B的深度分量上增加5米的故障。超像素B的故障可能是由于特征误匹配造成的。蒙特卡罗模拟采用的参数如表6所示。

表6 仿真中使用的参数

在这里插入图片描述

图6显示了 Z Z Z方向(通常是沿街道方向)在标称和故障条件下的位置误差。可见,与无故障情况相比,视觉故障存在时,位置误差显著增大。由于较大的导航误差可能导致严重的事故,因此在安全关键应用中有必要进行故障检测。图7给出了三种场景下的故障检测结果。当统计值超过阈值时,故障检测器将会发出告警。如图所示,本次实验没有出现漏检或虚警现象。因此,结果证明了该故障检测方案在单故障和多故障情况下都具有良好的性能。

在这里插入图片描述

图6 在无故障和故障情况下Z方向的位置误差

在这里插入图片描述

图7 在无故障和故障条件下检验统计量和相关阈值

7 结论

为了保证基于特征的视觉导航的安全性,本文开发了一个完好性监测框架。在此框架下,我们设计了一个双层故障检测方案,以应对误导特征,并严格推导保护水平,以量化导航安全。为了支持实时应用,我们还利用故障分组技术来降低该框架的计算复杂度。通过几个蒙特卡罗仿真来验证所提出的算法。首先,验证了基于最小二乘的位姿确定算法和相关协方差估计方法的可行性。此外,还指出了计算复杂度与导航完好性之间的一个关键权衡:故障分组可以大大减少算法的时间消耗,同时以提高保护水平为代价。高的先验故障概率同时会导致较大的计算量和较差的导航性能。最后,仿真结果表明了该故障检测算法的良好性能。我们未来的工作将集中在使用开源开源数据集验证所提出的框架,研究一种有效的故障排除算法,以及优化双层故障检测方案。

8 附件:公式(24)的证明

δ φ \delta \pmb{\varphi} δφφφ通常被称为失准角,而 ε φ \pmb{\varepsilon_{\varphi}} εφεφεφ表示方位角误差。它们之间的关系由下式给出,
δ φ = C b n ⋅ C A ω ⋅ ε φ (39) \delta \pmb{\varphi}=\pmb{C}_b^n\cdot \pmb{C}_A^{\omega} \cdot \pmb{\varepsilon_{\varphi}} \tag{39} δφφφ=CCCbnCCCAωεφεφεφ(39)
其中 C b n = R T \pmb{C}_b^n=\pmb{R}^T CCCbn=RRRT,而 C A ω \pmb{C}_A^{\omega} CCCAω由下式给出,
C A ω = [ 1 0 − s β 0 c α s α c β 0 − s α c α c β ] (40) \pmb{C}_A^{\omega}=\begin{bmatrix} 1 & 0 & -s\beta \\ 0 & c\alpha & s\alpha c\beta \\ 0 & -s\alpha & c\alpha c\beta \end{bmatrix} \tag{40} CCCAω=1000cαsαsβsαcβcαcβ(40)
该方程由姿态动力学方程得到。将公式(40)代入公式(39),
δ φ = [ c β c γ − s γ 0 c β s γ c γ 0 − s β 0 1 ] ⋅ ε φ (41) \delta \pmb{\varphi}=\begin{bmatrix} c\beta c\gamma & -s\gamma & 0 \\ c\beta s\gamma & c\gamma & 0 \\ -s\beta & 0 & 1 \end{bmatrix}\cdot \pmb{\varepsilon_{\varphi}} \tag{41} δφφφ=cβcγcβsγsβsγcγ0001εφεφεφ(41)
因此,我们有,
ε φ = [ c γ / c β s γ / c β 0 − s γ c γ 0 c γ s β / c β s γ s β / c β 1 ] ⋅ δ φ (42) \pmb{\varepsilon_{\varphi}}=\begin{bmatrix} c\gamma / c\beta & s\gamma / c\beta & 0 \\ -s\gamma & c\gamma & 0\\ c\gamma s\beta /c \beta & s\gamma s\beta/ c\beta & 1 \end{bmatrix} \cdot \delta{\pmb{\varphi}} \tag{42} εφεφεφ=cγ/cβsγcγsβ/cβsγ/cβcγsγsβ/cβ001δφφφ(42)

9 参考文献

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YMWM_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值