视觉轮速滤波融合1讲:理论推导

视觉轮速滤波融合理论推导

文章目录

  • 视觉轮速滤波融合理论推导
  • 1 坐标系
  • 2 轮速计
    • 2.1 运动学模型
    • 2.2 外参
  • 3 状态和协方差矩阵
    • 3.1 状态
    • 3.2 协方差矩阵
  • 4 Wheel Propagation
    • 4.1 连续运动学
    • 4.2 离散积分
      • 4.2.1 状态均值递推
      • 4.2.2 协方差递推
  • 5 Visual update
    • 5.1 视觉残差与雅可比
    • 5.2 左零空间投影
    • 5.3 降低计算量
    • 5.4 边缘化
  • 6 平面约束Update
    • 6.1 平面约束本质
    • 6.2 如何进行平面约束

1 坐标系

在这里插入图片描述

2 轮速计

2.1 运动学模型

  这里介绍下轮速计的一个运动学模型,以阿克曼为例。如果一个小车,它沿着直线运动,那么它的左右轮速相等。如果不相等,意味着发生了旋转:
V X = V L + V R 2 , ω = V X / R V_{X}=\frac{V_{L}+V_{R}}{2},ω = V_{X}/R VX=2VL+VRω=VX/R

在这里插入图片描述

  左右轮速的速度我们是可以计算得到的,但是半径R一开始肯定未知,所以利用下面公式计算,其中W是轮距,H是轴距
V X = V L + V R 2 , ω = V R − V L W V_{X}=\frac{V_{L}+V_{R}}{2},ω =\frac{V_{R}-V_{L}}{W} VX=2VL+VR,ω=WVRVL
在这里插入图片描述

  有了角速度和线速度,就可以计算出旋转半径R,然后利用轴距、轮距、R来计算左右前轮的偏角(θ=ωt
A n g l e L = tan ⁡ − 1 ( H R − 0.5 W ) A n g l e R = tan ⁡ − 1 ( H R + 0.5 W ) \begin{aligned}Angle_L&=\tan^{-1}\big(\frac{H}{R-0.5W}\big)\\\\Angle_R&=\tan^{-1}\big(\frac{H}{R+0.5W}\big)\end{aligned} AngleLAngleR=tan1(R0.5WH)=tan1(R+0.5WH)

2.2 外参

  与相机的姿态变换外参
O C R  与平移  C p O _O^CR\text{ 与平移 }^Cp_O OCR 与平移 CpO

3 状态和协方差矩阵

3.1 状态

  类似于MSCKF,状态由两部分组成,一个是Odometry的位姿:
O G T = { O G R , G p O } ∈ SE 3 _O^GT=\{_O^GR,^Gp_O\}\in\text{SE}3 OGT={OGR,GpO}SE3
  另一个是相机位姿(多帧):
C G T = { C G R , G p C } ∈ SE 3 _C^GT=\{_C^GR,^Gp_C\}\in\text{SE}3 CGT={CGR,GpC}SE3
  滑窗内状态变量即当前时刻Odometry位姿+N帧的相机位姿
KaTeX parse error: Got group of unknown type: 'internal'

3.2 协方差矩阵

  里程计状态(姿态)协方差矩阵维度6*6,相机状态协方差矩阵维度6N*6N
P k : k = [ P O O k : k P O C k : k P O C k : k T P C C k : k ] P_{k:k}=\begin{bmatrix}P_{OO_{k:k}}&P_{OC_{k:k}}\\P_{OC_{k:k}}^T&P_{CC_{k:k}}\end{bmatrix} Pk:k=[POOk:kPOCk:kTPOCk:kPCCk:k]

1 卡尔曼预测阶段更新里程计状态协方差,同时更新里程计与相机交叉部分状态协方差

其中, P O O k + 1 ∣ k = Φ P O O k : k Φ T + F Q F T \mathbf{P}_{OO_{k+1|k}} = \Phi P_{OO_{k:k}}\Phi^T+FQF^T POOk+1∣k=ΦPOOk:kΦT+FQFT
P k + 1 ∣ k = ( P O O k + 1 ∣ k Φ k P O C k ∣ k P O C k ∣ k ⊤ Φ k ⊤ P C C k ∣ k ) \left.\mathbf{P}_{k+1|k}=\left(\begin{matrix}\mathbf{P}_{OO_{k+1|k}}&\mathbf{\Phi}_{k}\mathbf{P}_{OC_{k|k}}\\\mathbf{P}_{OC_{k|k}}^\top\mathbf{\Phi}_{k}^\top&\mathbf{P}_{CC_{k|k}}\end{matrix}\right.\right) Pk+1∣k=(POOk+1∣kPOCkkΦkΦkPOCkkPCCkk)

2 状态增广:当新的frame到来,利用里程计位姿,通过外参预测相机位姿,更新 P k : k P_{k:k} Pk:k, 整体维度(6+6N + 6)*(6+6N + 6)

C G R = O G R C O R G p C = G p O + O G R O p C \begin{array}{c}_C^GR={}_O^GR{}_C^OR\\^Gp_C={}^Gp_O+{}_O^GR{}^Op_C\end{array} CGR=OGRCORGpC=GpO+OGROpC

P ( 6 + 6 ( N + 1 ) ) × ( 6 + 6 ( N + 1 ) ) = [ I 6 + 6 N J 6 × ( 6 + 6 N ) ] P ( 6 + 6 N ) × ( 6 + 6 N ) [ I 6 + 6 N J 6 × ( 6 + 6 N ) ] T = [ P P J T J P J P J T ] \begin{gathered} P^{(6+6(N+1))\times(6+6(N+1))} \left.=\left[\begin{array}{c}I_{6+6N}\\J_{6\times(6+6N)}\end{array}\right.\right]P^{(6+6N)\times(6+6N)}\left[\begin{array}{c}I_{6+6N}\\J_{6\times(6+6N)}\end{array}\right]^T \\ \left.=\left[\begin{array}{cc}P&PJ^T\\JP&JPJ^T\end{array}\right.\right] \end{gathered} P(6+6(N+1))×(6+6(N+1))=[I6+6NJ6×(6+6N)]P(6+6N)×(6+6N)[I6+6NJ6×(6+6N)]T=[PJPPJTJPJT]

  其中,雅可比是相机姿态对状态扰动量的雅可比,因为odometry预测相机姿态,所以和之前N帧相机无关,导数为0!
J = [ C O R T 0 3 × 3 0 6 N × 6 N − O G R [ O p C ] × I 0 6 N × 6 N ] J=\begin{bmatrix}^O_CR^T&0_{3\times3}&0_{6N\times6N}\\-_O^GR{\left[^Op_C\right]}_\times&I&0_{6N\times6N}\end{bmatrix} J=[CORTOGR[OpC]×03×3I06N×6N06N×6N]

重点补充下第一列的雅可比求解推导(要搞清楚是左/右扰动)

1 平移 G p C ^Gp_C GpC O G R _O^GR OGR的雅可比,注意是右扰动!若按左扰动求导,结果应该是 − [ O G R O p C ] -{\left[_O^GR^Op_C\right]} [OGROpC]

推导过程如下

在这里插入图片描述

在这里插入图片描述

4 Wheel Propagation

论文Localization for Ground Robots: On Manifold Representation, Integration

4.1 连续运动学

  VIO里面使用IMU去做预测这部分,这里是利用轮速计去做propagation。

O G R ˙ = O G R [ O ω O ] × G p O ˙ = G v O = O G R O v O \begin{aligned}\dot{_O^GR}&= ^G_OR[^O\omega_O]_\times\\^G\dot{p_O}&={}^Gv_O={}_O^GR^Ov_O\end{aligned} OGR˙GpO˙=OGR[OωO]×=GvO=OGROvO

  其中 O ω O ^O\omega_O OωO是轮速坐标系下的顺时角速度,等同IMU测量的角速度。但是因为轮速计只有2D方面的旋转,一般只有偏航角,即只能测到绕z轴的角速度。下面式子中b是轮距, k l , k r k_l,k_r kl,kr分别是左右轮速系数。
O ω O = [ 0 0 k r ⋅ v r − k l ⋅ v l b ] \left.^O\omega_O=\left[\begin{array}{c}0\\0\\\frac{k_r\cdot v_r-k_l\cdot v_l}b\end{array}\right.\right] OωO= 00bkrvrklvl
   O v O ^Ov_O OvO是瞬时速度,轮速本身只能测量沿x轴方向的速度(在世界系并不是)。
O v O = [ k l ⋅ v l + k r ⋅ v r 2 0 0 ] \left.^Ov_O=\left[\begin{array}{c}\frac{k_l\cdot v_l+k_r\cdot v_r}{2}\\0\\0\end{array}\right.\right] OvO= 2klvl+krvr00

4.2 离散积分

4.2.1 状态均值递推

  对上面得到的常微分方程进行离散化,使用欧拉积分,认为dt时间内变量未改变,根据定积分公式,以平移p为例,可以得到下式:

常见的一种运动学积分公式(欧拉积分)

O G R k + 1 = O G R k E x p ( O ω O Δ t ) ⏟ Δ R G p O k + 1 = G p O k + O G R k O v O Δ t ⏟ Δ p \begin{gathered} _{O}^{G}R_{k+1} ={}_O^GR_k\underbrace{\mathrm{Exp}({}^O\omega_O\Delta t)}_{\Delta R} \\ ^Gp_{O_{k+1}} ={}^Gp_{Ok}+{}_O^GR_k\underbrace{^Ov_O\Delta t}_{\Delta p} \end{gathered} OGRk+1=OGRkΔR Exp(OωOΔt)GpOk+1=GpOk+OGRkΔp OvOΔt

4.2.2 协方差递推

  对于协方差的Propgation,我们先求雅克比。

这里先引出论文中的公式,貌似顺序写反了,δp在前,δθ在后,更多详细推导可以参考论文

在这里插入图片描述

我们这里先不管后面那个m,因为这个递推公式是连续的,所以我们把它离散化。在MSCKF中,利用泰勒展开去近似Fc得到状态转移矩阵Φ,简单起见,用一阶泰勒展开δx' = (I + Fc*dt)δx + G,Q是噪声矩阵。下图展示了状态转移矩阵的推导。

在这里插入图片描述
Φ = [ Exp ⁡ ( O ω O Δ t ) T 0 − O G R k [ O v O Δ t ] × I ] \Phi=\begin{bmatrix}\operatorname{Exp}(^O\omega_O\Delta t)^T&0\\-_O^GR_k[^Ov_O\Delta t]_\times&I\end{bmatrix} Φ=[Exp(OωOΔt)TOGRk[OvOΔt]×0I]

G ′ = [ I 0 0 O G R k ] \left.G'=\left[\begin{array}{cc}I&0\\0&{}_{O}^{G}R_{k}\end{array}\right.\right] G=[I00OGRk]

卡尔曼预测阶段协方差更新

P O O k + 1 ∣ k = Φ P O O k : k Φ T + G ′ Q G ′ T \mathbf{P}_{OO_{k+1|k}} = \Phi P_{OO_{k:k}}\Phi^T+G'QG'^T POOk+1∣k=ΦPOOk:kΦT+GQGT

5 Visual update

5.1 视觉残差与雅可比

  MSCKF的边缘化操作没有把特征点放到状态向量里面,降低了计算量

  当特征点丢失的时候,才拿来进行更新。特征点丢失有两种情况:

  1. 一种是跟踪丢失,也就是当前帧跟踪不到的那些特征点;
  2. 另一种是边缘化的时候,也就是把最后一帧滑出窗口的时候,把在这一帧里面新建的特征点都丢弃,也就是都拿来做更新。

这里更详细的推导,可以参考之前MSCKF的博客

r i j = z i j − z ^ i j = H C i j x ~ C i + H f i j G p ~ j + n i j \mathbf{r}_i^j=\mathbf{z}_i^j-\hat{\mathbf{z}}_i^j=\mathbf{H}_{C_i}^j\tilde{\mathbf{x}}_{C_i}+\mathbf{H}_{f_i}^j{}^G\tilde{\mathbf{p}}_j+\mathbf{n}_i^j rij=zijz^ij=HCijx~Ci+HfijGp~j+nij

5.2 左零空间投影

左零空间投影—QR分解

r 0 ( 2 M − 3 M L ) × 1 = A T r 2 M × 1 ≅ A T H X 2 M × ( 15 + 6 N ) ⏟ H 0 X ~ ( 15 + 6 N ) × 1 + A T n 2 M × 1 ⏟ n 0 = H 0 ( 2 M − 3 ) × ( 15 + 6 N ) X ~ ( 15 + 6 N ) × 1 + n 0 ( 2 M − 3 ) × 1 \begin{aligned}r_0^{(2M-3M_L)\times1}&=\mathrm{A}^Tr^{2M\times1}\cong\underbrace{\mathrm{A}^TH_X^{2M\times(15+6N)}}_{H_0}\tilde{X}^{(15+6N)\times1}+\underbrace{\mathrm{A}^Tn^{2M\times1}}_{n_0}\\&={H_0}^{(2M-3)\times(15+6N)}\tilde{X}^{(15+6N)\times1}+{n_0}^{(2M-3)\times1}\end{aligned} r0(2M3ML)×1=ATr2M×1H0 ATHX2M×(15+6N)X~(15+6N)×1+n0 ATn2M×1=H0(2M3)×(15+6N)X~(15+6N)×1+n0(2M3)×1

5.3 降低计算量

QR分解降低计算量

  投影完之后,我们就可以得到新的残差和相应的雅可比矩阵 H 0 H_{0} H0。但是 H 0 H_{0} H0矩阵通常维度很大,为了降低计算量,对 H 0 H_{0} H0进行QR分解:

  QR分解会得到一个正交矩阵和一个上三角矩阵!正交矩阵的转置和其本身的乘积是单位矩阵,且该矩阵的所有列向量彼此正交(内积为0)
H 0 ( 2 M − 3 ) × ( 15 + 6 N ) = [ Q 1 Q 2 ] [ T H 0 ] {H_0}^{(2M-3)\times(15+6N)}=[Q_1\quad Q_2]\begin{bmatrix}T_H\\0\end{bmatrix} H0(2M3)×(15+6N)=[Q1Q2][TH0]
  对上面新的残差左边乘以 [ Q 1 T Q 2 T ] \left.\left[\begin{array}{cc}\mathbf{Q}_1^T\\\mathbf{Q}_2^T\end{array}\right.\right] [Q1TQ2T],得到
[ Q 1 T r 0 Q 2 T r 0 ] = [ T H 0 ] X ~ + [ Q 1 T n 0 Q 2 T n 0 ] \begin{bmatrix}Q_1^Tr_0\\Q_2^Tr_0\end{bmatrix}=\begin{bmatrix}T_H\\0\end{bmatrix}\tilde{X}+\begin{bmatrix}Q_1^Tn_0\\Q_2^Tn_0\end{bmatrix} [Q1Tr0Q2Tr0]=[TH0]X~+[Q1Tn0Q2Tn0]

5.4 边缘化

  边缘化,就是说如何删除滑窗里的状态,这里使用最简单的策略,把最老的一帧去掉,删掉协方差矩阵中对应块,去掉的这帧里的所有特征点都被拿来做更新。

6 平面约束Update

参考论文:VINS on wheels," 2017 (ICRA)

  当车辆在在平面上运动时,在更新的时候,我们引入一个平面约束.

6.1 平面约束本质

为了解释这个问题,首先解释下旋转矩阵的含义,更多请参考之前博客

  刚体坐标系B相对于世界坐标系A的的姿态—旋转矩阵。分别把B下的三个轴分别投影到世界坐标系下的三个轴,下面矩阵给出了对应的投影分量。
B A R = [ ∣ ∣ ∣ A X ^ B A Y ^ B A Z ^ B ∣ ∣ ∣ ] = [ X ^ B ⋅ X ^ A Y ^ B ⋅ X ^ A Z ^ B ⋅ X ^ A X ^ B ⋅ Y ^ A Y ^ B ⋅ Y ^ A Z ^ B ⋅ Y ^ A X ^ B ⋅ Z ^ A Y ^ B ⋅ Z ^ A Z ^ B ⋅ Z ^ A ] { }^A _B{R}=\left[\begin{array}{ccc} \mid & \mid & \mid \\ { }^A \widehat{X}_B & { }^A \widehat{Y}_B & { }^A \hat{Z}_B \\ \mid & \mid & \mid \end{array}\right]=\left[\begin{array}{ccc} \hat{X}_B \cdot \hat{X}_A & \hat{Y}_B \cdot \hat{X}_A & \hat{Z}_B \cdot \hat{X}_A \\ \hat{X}_B \cdot \hat{Y}_A & \hat{Y}_B \cdot \hat{Y}_A & \hat{Z}_B \cdot \hat{Y}_A \\ \hat{X}_B \cdot \hat{Z}_A & \hat{Y}_B \cdot \hat{Z}_A & \hat{Z}_B \cdot \hat{Z}_A \end{array}\right] BAR= AX BAY BAZ^B = X^BX^AX^BY^AX^BZ^AY^BX^AY^BY^AY^BZ^AZ^BX^AZ^BY^AZ^BZ^A
  也就是说,矩阵 B A R ^A_BR BAR的第3列就是坐标系B的z轴在A系下的投影。对于 O G R ^G_OR OGR来讲,前面定义世界系与初始轮速坐标系重合,轮速只有绕z轴的旋转,所以坐标系{G}和坐标系{O}的z轴是平行的。平面约束的本质就是让 O G R ^G_OR OGR的右上角2*1向量为0。

6.2 如何进行平面约束

  平面约束是Odometry的坐标的X-O-Y面与一个平面重合。我们这里设定平面 {Π} 为初始时刻Odometry坐标系的X-O-Y平面,即世界系。

0 2 × 1 = Λ G π R O G R ⏟ O π R e 3 = Λ O G R e 3 0_{2\times1}=\Lambda\underbrace{_G^\pi R_{O}^GR}_{_{O}^{\pi}R}e_3 = \Lambda^G_ORe_3 02×1=ΛOπR GπROGRe3=ΛOGRe3

  其中, Λ \Lambda Λ是为了将一个三维列向量取出前面2*1向量, e 3 e_3 e3就是Odometry坐标系z下轴单位向量,投影到世界系后,取出前面二维,应该是一个0向量!

Λ = [ 1 0 0 0 1 0 ] , e 3 = [ 0 0 1 ] \Lambda=\begin{bmatrix}1&0&0\\0&1&0\end{bmatrix},e_3=\begin{bmatrix}0\\0\\1\end{bmatrix} Λ=[100100],e3= 001

本文参考博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯2023年第十四届省赛真题-买瓜|DFS+剪枝

题目链接: 0买瓜 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-买瓜 - C语言网 (dotcpp.com) (蓝桥官网的数据要求会高一些) 说明: 这道题可以分析出:对一个瓜有三种选择: 不拿&#xff0c…

Vue3基础笔记(2)事件

一.事件处理 1.内联事件处理器 <button v-on:click"count">count1</button> 直接将事件以表达式的方式书写~ 每次单击可以完成自增1的操作~ 2.方法事件处理器 <button click"addcount(啦啦啦~)">count2</button> 如上&…

每日必学Linux命令:mv命令

mv命令是move的缩写&#xff0c;可以用来移动文件或者将文件改名&#xff08;move (rename) files&#xff09;&#xff0c;是Linux系统下常用的命令&#xff0c;经常用来备份文件或者目录。 一&#xff0e;命令格式&#xff1a; mv [选项] 源文件或目录 目标文件或目录二&am…

Open WebUI大模型对话平台-适配Ollama

什么是Open WebUI Open WebUI是一种可扩展、功能丰富、用户友好的大模型对话平台&#xff0c;旨在完全离线运行。它支持各种LLM运行程序&#xff0c;包括与Ollama和Openai兼容的API。 功能 直观的界面:我们的聊天界面灵感来自ChatGPT&#xff0c;确保了用户友好的体验。响应…

轻松掌握C语言中的sqrt函数,快速计算平方根的魔法秘诀

C语言文章更新目录 C语言学习资源汇总&#xff0c;史上最全面总结&#xff0c;没有之一 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程…

第1章 实时3D渲染流水线

前言 本书所剖析的Unity 3D内置着色器代码版本是2017.2.0f3&#xff0c;读者可以从Unity 3D官网下载这些着色器代码。这些代码以名为builtin_shaders-2017.2.0f3.zip的压缩包的形式提供&#xff0c;解压缩后&#xff0c;内有4个目录和1个license.txt文件。 目录CGIncludes存放了…

苍穹外卖项目-01(开发流程,介绍,开发环境搭建,nginx反向代理,Swagger)

目录 一、软件开发整体介绍 1. 软件开发流程 1 第1阶段: 需求分析 2 第2阶段: 设计 3 第3阶段: 编码 4 第4阶段: 测试 5 第5阶段: 上线运维 2. 角色分工 3. 软件环境 1 开发环境(development) 2 测试环境(testing) 3 生产环境(production) 二、苍穹外卖项目介绍 …

Docker搭建LNMP环境实战(05):CentOS环境安装Docker-CE

前面几篇文章讲了那么多似乎和Docker无关的实战操作&#xff0c;本篇总算开始说到Docker了。 1、关于Docker 1.1、什么是Docker Docker概念就是大概了解一下就可以&#xff0c;还是引用一下百度百科吧&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以…

SE注意力模块学习笔记《Squeeze-and-Excitation Networks》

Squeeze-and-Excitation Networks 摘要引言什么是全局平均池化&#xff1f; 相关工作Deep architectures Squeeze-and-Excitation Blocks3.1. Squeeze: Global Information Embedding3.2. Excitation: Adaptive Recalibration3.3. Exemplars: SE-Inception and SE-ResNet 5. Im…

百科词条编辑必备指南,让你轻松上手创建

1.注册账号&#xff1a;首先&#xff0c;你需要注册一个百科平台的账号。例如&#xff0c;对于百度百科&#xff0c;你需要有一个百度账号。 搜索词条&#xff1a;在百科全书平台上搜索您想要编辑的词条。如果词条已经存在&#xff0c;可以直接编辑&#xff1b;如果词条不存在&…

(已解决)vue3使用富文本出现样式乱码

我在copy代码到项目里面时候发现我的富文本乱码了 找了一圈不知道是哪里vue3不适配还是怎么&#xff0c;后来发现main.js还需要引入 import VueQuillEditor from vue-quill-editor // require styles 引入样式 import quill/dist/quill.core.css import quill/dist/quill.snow…

计算机组成原理(超详解!!) 第三节 运算器(浮点加减乘)

1.浮点加法、减法运算 操作过程 1.操作数检查 如果能够判断有一个操作数为0&#xff0c;则没必要再进行后续一系列操作&#xff0c;以节省运算时间。 2.完成浮点加减运算的操作 (1) 比较阶码大小并完成对阶 使二数阶码相同&#xff08;即小数点位置对齐&#xff09;…

力扣Lc21--- 389. 找不同(java版)-2024年3月26日

1.题目描述 2.知识点 &#xff08;1&#xff09;在这段代码中&#xff1a; // 统计字符串s中每个字符的出现次数for (int i 0; i < s.length(); i) {count[s.charAt(i) - a];}对于字符串s “abcd”&#xff1a; 当 i 0&#xff0c;s.charAt(i) ‘a’&#xff0c;ASCII…

牛客小白月赛89(A,B,C,D,E,F)

比赛链接 官方视频讲解&#xff08;个人觉得讲的还是不错的&#xff09; 这把BC偏难&#xff0c;差点就不想做了&#xff0c;对小白杀伤力比较大。后面的题还算正常点。 A 伊甸之花 思路&#xff1a; 发现如果这个序列中最大值不为 k k k&#xff0c;我们可以把序列所有数…

2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年道路运输企业主要负责人证模拟考试题库及道路运输企业主要负责人理论考试试题是由安全生产模拟考试一点通提供&#xff0c;道路运输企业主要负责人证模拟考试题库是根据道路运输企业主要负责人最新版教材&#…

数据结构进阶篇 之 【二叉树】详细概念讲解(带你认识何为二叉树及其性质)

有朋自远方来&#xff0c;必先苦其心志&#xff0c;劳其筋骨&#xff0c;饿其体肤&#xff0c;空乏其身&#xff0c;鞭数十&#xff0c;驱之别院 一、二叉树 1、二叉树的概念 1.1 二叉树中组分构成名词概念 1.2 二叉树的结构概念 1.3 特殊的二叉树 2、二叉树的存储结构 …

沪漂8年回郑州三年如何走上创业之路

大家好&#xff0c;我是大牛&#xff0c;目前人在郑州。 现在标签是&#xff1a; 创业者&#x1f697;&#x1f438; (注册有自己的公司&#xff0c;主要是为了自己的产品和接外包项目)独立开发者&#x1f468;&#x1f3fb;&#x1f4bb; (有自己的小项目)数字游民&…

SpringDoc 注解

列举几个常用的 1. Tag 用于说明或定义的标签。一般作用于控制层 2.Operation(summary "这是新增方法") 描述 API 操作的元数据信息。常用于 controller 层的方法上 ​ 3.Parameter 用于描述 API 操作中的参数 ​ 4.Operation Parameters ​ 5.Schema用于…

IPV6协议之RIPNG

目录 前言&#xff1a; 一、RIPNG与RIP的区别 二、如何配置RIPNG 如何解决RIPNG环路问题呢&#xff1f; 控制RIPNG的选路 1、修改RIPNG默认优先级 2.配置接口附加开销值从而干涉RIPNG的选路 RIPNG拓展配置 1.RIPNG的认证 配置RIPNG进程下的IPsec认证&#xff1a; 配…

麒麟系统安装JDK、OpenGauss

Linux安装openjdk1.8 1. 执行命令yum list |grep jdk查看可安装jdk版本 2. 选择一个java版本进行安装 这里我们希望安装java1.8&#xff0c;因为我们的机器是64位的&#xff0c;所以选择安装java-1.8.0-openjdk-devel.x86_64。 这里有个地方要注意&#xff0c;上图中我用红框圈…