视觉惯性SLAM:VINS-Mono
视觉惯性SLAM:VINS-Mono
- 这篇博客
- 一些符号说明
- IV 测量数据的预处理
- A.视觉处理前端
- B.IMU预积分
- V. 初始化
- A.Vision-Only SfM in Sliding Window
- B.Visual-Inertial Alignment
- VI.TIGHTLY COUPLED MONOCULAR VIO
- A.公式介绍
- B.IMU误差
- C.视觉误差
- D.边缘化
- E.位姿优化
- F.以IMU采集的速率估计位姿值
- VII 重定位(和VI ORB不同)
- A.闭环检测
- B.特征找回
- C.紧耦合的重定位
- VIII全局优化和地图复用
- A.四个存在漂移问题的变量
- B.向位姿图中加KF
- C. 4自由度的位姿图优化
- D.位姿图合并
- E.位姿图保存
- F.加载位姿图
- 结尾
这篇博客
最近看了VINS-Mono,所以就写篇关于系统各部分内容的总结,方便自己之后进行论文的回顾,也希望大家能从中有所收获。一些我认为比较重要的地方和自己的理解都用了颜色标注。好的,话不多说,直接莽。
【转载声明】本篇文字均为原创,如转载请注明出处
一些符号说明
1、(.)w(.)^{w}(.)w:变量表示在世界坐标系下;
2、(.)b(.)^{b}(.)b:变量表示在IMUIMUIMU坐标系(Body坐标系)下;
3、(.)c(.)^{c}(.)c:变量表示在相机坐标系下;
4、R、qR、qR、q:旋转矩阵及其对应的四元数(在紧耦合的状态变量中使用);
5、qbw,pbwq_{b}^{w}, p_{b}^{w}qbw,pbw:从IMUIMUIMU坐标系到世界坐标系的旋转和平移变换;
6、⨂{\bigotimes }⨂:表示四元数之间的乘法;
7、bk,ckb_{k}, c_{k}bk,ck:第kkk帧对应的IMUIMUIMU和相机坐标系;
8、gw=[0,0,G]Tg^{w}=[0,0,G]^{T}gw=[0,0,G]T:世界坐标系下的重力向量;
9、(.)^\hat{(.)}(.)^:表示带有噪声的测量值或一个定值估计;
10、bw,bab_{w}, b_{a}bw,ba:表示陀螺仪和加速度偏差。
IV 测量数据的预处理
这部分介绍如何处理视觉和IMU的测量数据。大致内容为:跟踪每一帧,在新帧上提取一定数量特征点;预积分IMU数据。
A.视觉处理前端
对于新获得的当前帧:
1、用KLTKLTKLT稀疏光流法跟踪已有特征点(上一帧中的);
2、若跟踪到的特征点较少,则在当前帧中提取新的特征点,以保证至少有100-300个特征点(提取的特征点应满足均匀分布);
3、用跟踪上的特征点求解前后帧的FFF单应矩阵,并用RANSAC法进行外点剔除;
4、将剩余内点反投影到当前帧的归一化平面上
此外,这个部分还需要判断是否产生新的关键帧。判断条件是:
∙{\bullet }∙ 跟踪到的特征点的平均视差大于一定阈值;
∙{\bullet }∙ 跟踪到的特征点数量小于一定阈值。
B.IMU预积分
1)IMU的噪声和偏差:
IMU 元件获得的原始测量值(角速度w^\hat{w}w^和加速度a^\hat{a}a^)会受到重力、偏差和噪声的影响:
这些测量值是在ttt时刻的IMU坐标系中表示 。式中(.)t(.)_{t}(.)t表示真实值,nnn表示白噪声。而某一时刻的加速度batb_{a_{t}}bat和陀螺仪偏差bwtb_{w_{t}}bwt被建模为随机行走(它们的导数为高斯白噪声)。
2)预积分:
先设定一个偏差的估计值,将bkb_{k}bk和bk+1b_{k+1}bk+1这前后两帧的 IMU 数据进行预积分。积分后的结果在bkb_{k}bk的坐标系中表示:
可以看出,式3 中的每一项都能直接通过 IMU 的测量数据来求解,它们表示的是前后两帧之间的相对变换关系。
3)偏差修正:
如果估计的偏差bakb_{a_{k}}bak、bwkb_{w_{k}}bwk发生了微小的变化,就要相应的调整预积分的结果(根据它们对bakb_{a_{k}}bak、bwkb_{w_{k}}bwk的雅可比矩阵):
如果偏差变化太大,则需要用新的值重新进行预积分。
V. 初始化
通过视觉数据和IMU数据构建约束关系,以获得一些必要变量的初值。
A.Vision-Only SfM in Sliding Window
先只使用视觉来获得一系列相机位姿和地图点坐标(未知尺度),构建最初的滑动窗口。为控制复杂程度,只在窗口中保留一定数量的帧。
具体的步骤如下:
1、构建含有一定数量帧的滑动窗口,此时所有帧的位姿都未知;
2、获得新的帧,为其在窗口内寻找一个匹配帧(要求:匹配的特征个数多于30,同时平均视差大于20个像素单位);
3、使用五点法恢复两帧之间的R和sp(带尺度的平移);
4、随意设一个尺度s′s_{'}s′,对所有被两帧观测到的特征进行三角化,构建初始地图点;
5、用这些地图点估计出窗口中其他帧的位姿(使用PnP法);
6、用BA优化各帧的位姿(优化重投影误差)。
因为还没有关于世界坐标系的任何信息,所以将窗口内第一帧作为第一参考帧(.)c0(.)^{c_{0}}(.)c0,其余帧的位姿和地图点的坐标都用第一参考帧为基准来表示,分别记为(.)ckc0,(.)c0(.)_{c_{k}}^{c_{0}}, (.)^{c_{0}}(.)ckc0,(.)c0。
根据标定好的相机到 IMU 元件的变换关系,可以将相机坐标系转换到IMU坐标系,但是 sss 是未知的:
B.Visual-Inertial Alignment
原理:将 A部分估计的位姿和IMU数据的预积分结合起来,估计出尺度、偏差等变量。(具体求解方法和 VI ORB-SLAM 存在一些不同,最大的不同在于这里使用四元数表示旋转)
1)陀螺仪偏差bwb_{w}bw估计:
对于滑动窗口内相邻两帧有用视觉估计出的位姿qbkc0,qbk+1c0q_{b_{k}}^{c_{0}} , q_{b_{k+1}}^{c_{0}}qbkc0,qbk+1c0,以及IMU预积分的结果τ^k+1k\hat{\tau }_{k+1}^{k}τ^k+1k。所以可通过最小化下面公式的误差来获得bwb_{w}bw:
式中BBB表示窗口内所有帧。在获得bwb_{w}bw新的估计值后,重新计算一次IMU预积分。
2)速度vvv、重力向量gc0g^{c_{0}}gc0和尺度估计sss:
这一阶段估计的所有状态变量如下:
对于滑动窗口内前后两帧bk,bk+1b_{k}, b_{k+1}bk,bk+1有下面的公式(这里也忽视了先加速度偏差,和VIORB一样):
然后将式(9)和式(6)混合,可以获得下面的线性方程组:
其中z^k+1k\hat{z }_{k+1}^{k}z^k+1k是由 IMU 测量数据计算得出(带噪声),而Hbk+1bkH_{b_{k+1}}^{b_{k}}Hbk+1bk由视觉的计算结果组成:
最后通过优化下面的误差获得各帧的速度,重力向量(在第一参考帧坐标系(.)c0(.)^{c_{0}}(.)c0下)和尺度:
3)优化重力向量:
由于重力向量gc0g^{c_{0}}gc0的大小是已知的G,所以可以想象重力向量在一个半径为G的圆上,如图4:
此时重力向量就只有2个自由度,可在图中的重力向量的切平面上用两个正交的变量去扰动它(改变其方向):b1、b2b1、b2b1、b2。扰动的公式为:G(g^ˉ+δg),δg=w1b1+w2b2G(\bar{\hat{g}}+\delta g), \delta g=w_{1}b_{1}+w_{2}b_{2}G(g^ˉ+δg),δg=w1b1+w2b2。其中G是重力的大小(用这个可能更好理解一点),g^ˉ\bar{\hat{g}}g^ˉ是重力的单位方向向量,b1、b2b_{1}、b_{2}b1、b2是切平面上的两个正交基;w1、w2w_{1}、w_{2}w1、w2是两个扰动方向的大小。最后G(g^ˉ+δg)G(\bar{\hat{g}}+\delta g)G(g^ˉ+δg)替换掉式子(9)中的ggg,将2自由度的 δg\delta gδg 和其他变量一起求解(包括速度vvv、尺度sss、加速度偏差bab_{a}ba)。
个人理解:所有变量的求解思路和VI ORB-SLAM的思路是相似的,但更新重力向量的方式有所不同
4)完成初始化:
使用最终求出的重力向量与真实世界的重力向量[0,0,−1]T[0,0,-1]^{T}[0,0,−1]T,求出qc0wq_{c_{0}}^{w}qc0w,即第一参考帧与世界坐标系之间的变换关系。然后将地图点都转到世界坐标系中,轨迹也用求出的尺度进行修正。
VI.TIGHTLY COUPLED MONOCULAR VIO
在滑动窗口内求解每个视觉+惯性的紧耦合状态变量,如图5所示:
A.公式介绍
紧耦合后的状态变量如下:
xkx_{k}xk是第kkk个状态变量,包含位姿、速度和偏差。λl\lambda _{l}λl是第 lll 个地图点在其第一观测帧中的逆深度。此时待优化的误差函数为:
式中第一项是先验误差,第二项是 IMU 误差,第三项是重投影误差,式(15) 表示鲁棒核函数。
B.IMU误差
滑动窗口内相邻两帧间的IMU误差为:
式中[.]XYZ表示提取出四元数Q中的向量部分来表示误差状态。
个人理解:每一个误差项=当前估计的状态变量求出的相对变换 — IMU预积分求出的相对变换。
C.视觉误差
在归一化平面上计算视觉误差。以在第 iii 帧上观测到的第 lll 个地图点为例,他在第 jjj 帧上的视觉误差为:
式中π{\pi }π是相机投影函数;u,vu,vu,v是像素坐标。
由于上述视觉误差的自由度为2,所及将误差向量投影到切平面上,并用两个正交方向上的扰动来优化误差,如图6所示:
个人理解:这里的2自由度是因为重投影误差是在归一化平面上的,有一维坐标一直为1
D.边缘化
用这个方法控制滑动窗口内KF和地图点的数量,并把边缘化的帧作为一个先验信息。边缘化的两种情况如图7所示:
图中棕色图形表示两个最新的帧,此时边缘化的操作有两种:
1、若图中n-1帧是KF,则将其放入窗口中,并把窗口中最老的KF丢掉。(但保留它的IMU信息作为先验)
2、若n-1帧不是KF,则只保留它的IMU预积分结果,也作为一个先验信息。(帮助计算KF与下一帧之间的IMU预积分)
(对第一种情况的先验信息不是很理解)
E.位姿优化
为了降低计算量,只进行运动上的位姿优化,如图8所示:
如图所示,不优化窗口内的所有KFKFKF,只优化最近一定数量的KFKFKF和当前帧。优化时使用的误差式子和式(14)一样,即 IMU 误差、视觉误差和先验误差。
F.以IMU采集的速率估计位姿值
系统的处理速率受帧速率影响,但可以结合最新帧的估计值,使用之后一系列(在下一帧到来前的)的IMU数据来获得和IMU采集速率一样的位姿估计。这个高速率的估计值可用于闭环的状态反馈。(最后一句话不是很理解,期待各位博友指点迷津)
VII 重定位(和VI ORB不同)
作用:消除累积误差(漂移)
A.闭环检测
使用DBOW2词袋中的单词来描述每一帧,再通过这个描述完成闭环检测。(这一部分可参考《视觉SLAM十四讲》P303)
B.特征找回
目的:确定闭环对应的两个KFsKFsKFs之间的特征匹配和变换关系。
当检测到闭环后,窗口(一般是当前最新的KFKFKF)与匹配的闭环帧(记为KFvKF_{v}KFv)(来自系统保存KFsKFsKFs的数据库中)的关系就能被建立起来(通过特征匹配)。为了降低误匹配,使用下面两个几何的方法来去除外点:
1)2d-2d:通过RANSAC求出KFvKF_{v}KFv和当前KFKFKF之间的单应矩阵FFF。
2)3d-2d:将滑动窗口内已有地图点,和其在KFvKF_{v}KFv上匹配的观测点进行基于RANSAC法的PnP问题求解。
如此就能求出vvv和当前KFKFKF之间的变换关系,并剔除了外点。
C.紧耦合的重定位
目的:发现闭环后,将当前滑动窗口与以往帧进行位姿对齐。
窗口内每产生一个新的KFKFKF就为其在数据库中查询是否存在匹配的闭环KF。在找到匹配的闭环KFKFKF后(记为KFvKF_{v}KFv),将它作为一个闭环约束,构建一个新的误差函数:
式中KFvKF_{v}KFv提供的约束就是滑动窗口内地图点在KFvKF_{v}KFv上的重投影误差,它可以帮助修正窗口的所有地图点坐标和KFsKFsKFs的位姿。图9展示了整个闭环检测和重定位的过程:
从图中可以看出,前三步为:正常跟踪、发现闭环、重定位滑动窗口。在这之后,窗口内还有不断产生新的KFKFKF,新来的KF也可能找到对应的闭环帧,所以闭环约束就会增加,这就形成了多视图约束。
个人理解 :在第一个发生闭环的KF即将被边缘化时,进行一次全局BA,把整体轨迹整合进行修正。
VIII全局优化和地图复用
A.四个存在漂移问题的变量
受益于重力向量的惯性测量,系统可以估计(.)bi(.)^{b_{i}}(.)bi与(.)w(.)^{w}(.)w在roll、pitch上的绝对旋转(x,y轴旋转,z轴的旋转不会影响重力向量的方向),如图11所示。此时只会在x,y,z,yawx,y,z,yawx,y,z,yaw四个变量上产生累积误差。所以全局位姿图优化只用优化这四个变量。
B.向位姿图中加KF
视觉-惯性里程计处理后的KF会加到位姿图中。它 会被当作一个顶点,并通过两类边和其他顶点产生联系:
1) 连续边:某个KFKFKF与之前的KFsKFsKFs之间的相对变换关系。只管那四个变量:
2) 闭环边:只有形成闭环的KFsKFsKFs之间才有,表示它们之间的相对变换,公式和式(19)一样。
整个位姿图的样子就如下图所示:
C. 4自由度的位姿图优化
定义i、ji、ji、j两个KF之间的边的误差为:
其中θ^,ϕ^{\hat{\theta }}, \hat{\phi }θ^,ϕ^是固定的。整个位姿图中所有边产生的总误差公式为:
式中S\mathit{S}S 为所有连续边,L\mathit{L}L为闭环边。ρ\rhoρ 是鲁棒核函数。
位姿图优化和重定位在两个异步的线程中同时进行,目的是:
1、可让数据库中优化后的位姿图立马能用于新的重定位操作中(异步不用互相等待);
2、
D.位姿图合并
通过地图间的闭环关系,将当前构建的位姿图与已有的位姿图合并。找到闭环关系后,直接使用全局BA即可。过程如图13所示:
E.位姿图保存
数据的保存内容:所有顶点和边;关键帧(顶点)的状态变量。
举个例子:
其中 iii 表示帧的编号,p^iw\hat{p}_{i}^{w}p^iw、q^iw\hat{q}_{i}^{w}q^iw是这一帧的平移和旋转变换(从当前帧到世界坐标系)。vvv是与这个帧形成闭环的匹配帧的编号,p^ivi\hat{p}_{iv}^{i}p^ivi和ψ^iv\hat{\psi }_{iv}ψ^iv是他们之间的相对位移和 yawyawyaw 方向的旋转角度(由重定位获得)。D(u,v,des)D(u,v,des)D(u,v,des)是这一帧中的特征点坐标和它对应的描述子。
F.加载位姿图
怎么保存的就怎么加载。
结尾
一口气看完两篇视觉惯性SLAM,感觉也大致懂了这类SLAM的工作原理。还是要抓紧看代码,毕竟编程能力十分重要(太忙了)。最后希望这篇博客能帮助到大家,其中存在的不足也希望大家能够指出,十分感谢!
参考资料:
1、VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
2、《视觉SLAM十四讲》
相关文章:

mysql 0x80004005 unable to connect to any of the specified mysql hosts
语言:c# 问题:偶尔会出现连不上mysql 报标题的这个错误。 解决方法:把server localhost 改为 127.0.0.1 或者静态IP ,按着改暂时没出现了,继续观望! 转载于:https://www.cnblogs.com/wdw31210/p/9857514…
iOS开发-自己定义重用机制给ScrollerView加入子视图
iOS开发-自己定义重用机制给ScrollerView加入子视图 事实上这个问题我非常早就想过,仅仅是没有通过去写程序实现,昨天有人提起,我就巧了一下 不知道大家打印郭tableview:cellforrow中cell初始的次数,也就是重用池中的c…

2021年中国工业互联网安全大赛核能行业赛道writeup之Webshell密码
附件题:Webshell密码 题目描述: 某次攻防演练中,抓到了一个webshell的流量,请分析出密码,flag形式:flag{密码} 附件下载: https://download.csdn.net/download/qpeity/33675356https://downlo…

关于python3与python2同时存在情况下导入pyqt失败解决记录
最近感觉tkinter功能还是比较不适合新手做出高大上的界面,故开始使用pyqt,通过pip安装好了之后,利用qt设计师设计好界面之后,cmd运行之,报错提示没有找到pyqt5模块,IDE运行能正常加载 查找资料后发现&#…

ORBSLAM-Altas:多地图SLAM
ORBSLAM-Atlas:多地图SLAM这篇博客ORBSLAM-Altas这个系统系统方法两类子地图新地图的构建相机位姿的可观测性子地图融合系统线程结尾这篇博客 最近ORB-SLAM3横空出世,马上跑去GitHub膜拜。然后在项目的相关工作中看到了ORB-SLAM3使用了一个多地图方法。这…

Android驱动学习-内部机制_回顾binder框架关键点
内部机制_回顾binder框架关键点server注册服务时, 对每个服务都提供不同的ptr/cookie,在驱动程序里对每个服务都构造一个binder_node, 它也含有ptr/cookie client使用服务前要先getService:会在驱动程序里对该服务构造一个binder_ref, binder_ref含有desc, node成员…

数据库--事务
我们知道数据库中的SQL语句分为DDL(数据定义语言)、DQL(数据查询语言)、DML(数据操纵语言)、DCL(数据控制语言),详情请看SQL语句 当数据库的表中数据执行完添加、删除、和修改等数据操纵语言(DML)后,需要执行commit(提交)数据控制…

2021年中国工业互联网安全大赛核能行业赛道writeup之传统流量取证
附件题:传统流量取证 题目描述: 在某次攻防演练中,小王发现流量探针平台突然告警,小王第一时间下载了告警流量包,并进行分析:发现攻击队攻击在攻入内网后,利用了一个内网OA的一个漏洞ÿ…

ORB-SLAM3 论文笔记
ORB-SLAM3 论文笔记这篇博客ORB-SLAM3系统相机模型的抽象(Camera Model)重定位的问题图片矫正的问题视觉惯性SLAM的工作原理相关公式IMU初始化跟踪和建图系统对跟踪丢失的应对多地图的闭环检测和地图融合位置识别视觉地图融合方法视觉惯性地图的融合方法单个地图中的闭环融合结…

为什么需要 外键 呢?
生活现象: 不知你们是否遇到过这样的现象,就是你辛辛苦苦花了几十块钱注册一个会员,结果家里的七大姑,八大姨都要拿去用,而且完全可以用。还有就是一个淘宝账号里却可以添加好多个收获地址(里面包括收货人的姓名&#…

JavaScript闭包函数箭头函数调用与执行
一、标准的闭包函数 //一、标准的闭包函数 function A() {var i0;i;console.log(i : i);return function b() {return function c() {return i}} }var a A(); // 初始化A,执行A内的非function语句 ‘ i0; i‘,输出 I : 1 console.log(a()); // 执行fu…
jlink api sdk c# 离线数获取 标定
jlink 如何 离开 keil、IAR 监控变量呢? 目前 jlink的 api 可以做到,自己可以用C# 做一个 上位机,监控RAM里面的变量。而不用打开keil 调试。还可以 刷写 flash,可以用在产品量产的刷写上。SEGGER 的 jlink sdk并不是免费的&…
2021年中国工业互联网安全大赛核能行业赛道writeup之usb流量分析
目录 一、USB协议 二、键盘流量 三、鼠标流量 四、writeup 附件题:usb流量分析 题目描述: 具体描述忘记了o(╯□╰)o 大概意思是有个U盘插到电脑上,然后经过一些操作导致该电脑重启了。找到这个过程中的flag。 附件下载: 20…

BOS项目 第2天(BaseDao、BaseAction、用户登录、自定义strust登录拦截器)
BOS项目 第2天 今天内容安排: 1、根据提供的pdm文件生成sql 2、持久层和表现层设计---BaseDao、BaseAction 3、实现用户登录功能 4、jQuery EasyUI 消息提示控件 5、jQuery EasyUI menubutton菜单按钮 6、自定义struts2拦截器,实现用户未登录自动跳转到…

服务器 主动 推送 客户端浏览器 消息***
前言 通常情况下,无论是web浏览器还是移动app,我们与服务器之间的交互都是主动的,客户端向服务器端发出请求,然后服务器端返回数据给客户端,客户端浏览器再将信息呈现,客户端与服务端对应的模式是: 客户端请…

数据库表(字段类型、约束、截断表、修改表字段、重命名表)
字段类型: 在这里只列举一些常用的字段类型: 整数类型:int(Integer):普通大小的整数 小数类型: float(m,d):单精度浮点数,m表示数字长度,d表示小数位数,例如float(5,2)最大值999.99double(m,d…

(转载)动态SLAM系统:VDO-SLAM!
动态SLAM系统:VDO-SLAM!这篇博客是转载 计算机视觉life 公众号中的文章。这篇文章是对VDO-SLAM论文的全文翻译,是 !!真人工翻译!!不是机器翻译,我看了之后觉得挺好,所以分…

2021年中国工业互联网安全大赛核能行业赛道writeup之入门的黑客
附件题:入门的黑客 题目描述: 在某次工控攻防演练中,防守方使用蜜罐捕捉到了某黑客在入侵时留下的恶意程序样本,现在要对该黑客进行画像,需要从该恶意程序中分析出反连时的IP和端口信息,看看聪明的你能否能…

一种视觉惯性+激光传感器的SLAM系统
一种视觉惯性激光传感器的SLAM系统这篇博客论文摘要一些假设和标注系统总览VI 里程计扫描匹配(scan matching)优化提高系统鲁棒性的措施闭环检测和临近检测全局位姿图优化总结这篇博客 这篇论文“Robust High Accuracy Visual-Inertial-Laser SLAM Syste…

抽象类和接口的联系与区别
抽象类和接口联系与区别 关键字: 抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力。 abstract class和interface之间在对于抽象类定义的支持方面具…

P1132 数字生成游戏
题目描述 小明完成了这样一个数字生成游戏,对于一个不包含00的数字ss来说,有以下33种生成新的数的规则: 将ss的任意两位对换生成新的数字,例如143143可以生成314,413,134314,413,134;将ss的任意一位删除生成新的数字&a…

MySQL02-升级
MySQL 版本号由三个数字和可选后缀组成,形式 mysql-x.y.z-suffix。比如 mysql-5.7.21 或者 mysql-5.7.34。 x(5)这位是大版本y(7)这位是小版本,大版本小版本组合成 5.7 就是一个发行版最后一位是bugfix release版本,从1逐渐增加,…

Kinect V1读取图像数据(For Windows)
Kinect V1读取图像数据(For Windows)这篇博客Kinect V1介绍数据读取的基本流程运行代码和注释结尾这篇博客 刚好有一台现成的Kinect V1相机,所以就拿过来学习一下它的数据读取方式和编程方法,毕竟它还能用于跑RGBD-SLAM。Kinect V…

1.IocDI和Spring
1.面向对象回顾和案例 面向对象程序设计:1 2 3 4 案例分析: 需求分析: 报表功能: 报表服务类,检索数据,并生成图标 报表生成器类,生成不同格式的报表文件,例如PDF格式、Html…

MySQL之模糊查询
先在MySQL数据库里创建一个表,并添加几条数据: create table student(id char(36) primary key,name varchar(8) not null,age int(3) default 0,mobile char(11),address varchar(150) ) insert into student values (9b4435ec-372c-456a-b287-e3c5aa…

rsync工具
rsync工具一、介绍1、可以实现 本地数据 《----------》 远程数据/本地数据 的传输2、两种通信方式(man rsync)(1)remote shell(一个冒号:),通过sshd协议传输(2…

2021年中国工业互联网安全大赛核能行业赛道writeup之日志分析
附件题:日志分析 题目描述: 核电站新来的运维小王粗心把一个办公网地址映射到外网,遭到大量攻击,你能从日志当中找到有效信息吗。 附件下载: 2021-10-12T15_37_51.61064600_00rizhifenxi.rar-网络攻防文档类资源-CSD…

【POJ1509】Glass Beads 【后缀自动机】
题意 给出一个字符串,求它的最小表示法。 分析 这个题当然可以用最小表示法做啦!但是我是为了学后缀自动机鸭! 我们把这个字符串长度乘二,然后建SAM,然后在SAM上每次跑最小的那个字母,找出长度为n的时候就停…

order by总结
先在MySQL数据库里建一个表,并添加几条数据: create table student(id char(36) primary key,name varchar(8) not null,age int(3) default 0,mobile char(11),address varchar(150) ) insert into student values (9b4435ec-372c-456a-b287-e3c5aa23…

Gazebo构建小车模型并通过ROS控制
Gazebo构建小车模型并通过ROS控制介绍编写车子的URDF文件编写控制小车移动的插件(与ROS交互)结尾介绍 突然想试试Gazebo这款仿真软件,因为它可以让你在任何时候都有机器人玩。但Gazebo的机制也比较复杂,所以还是先学习一下如何搭一个简单的小车ÿ…