走马观花之《视觉SLAM十四讲》

2023-05-16

1. 视觉SLAM 系统概述

SLAM 是Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建” 。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为“视觉SLAM”。
在这里插入图片描述
视觉SLAM流程分为以下几步

  • 传感器信息读取。在视觉SLAM 中主要为相机图像信息的读取和预处理。
  • 视觉里程计。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。
  • 后端优化。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。
  • 回环检测。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
  • 建图。它根据估计的轨迹,建立与任务要求对应的地图。

2. 前端视觉里程计

视觉里程计根据相邻图像的信息,估计出粗略的相机运动,给后端提供较好的初始值。视觉里程计的算法主要分为两个大类:特征点法和直接法。基于特征点法的前端,长久以来(直到现在)被认为是视觉里程计的主流方法。它运行稳定,对光照、动态物体不敏感,是目前比较成熟的解决方案。
核心问题:如何根据图像估计相机运动。

2.1. 特征点法

特征点:由关键点和描述子两部分组成。关键点是指该特征点在图像里的位置,有些特征点还具有朝向、大小等信息。描述子通常是一个向量,按照某种人为设计的方式,描述了该关键点周围像素的信息。描述子是按照“外观相似的特征应该有相似的描述子”的原则设计的。

特征匹配:视觉SLAM 中极为关键的一步,特征匹配解决了SLAM 中的数据关联问题,即确定当前看到的路标与之前看到的路标之间的对应关系。通过对图像与图像,或者图像与地图之间的描述子进行准确的匹配,我们可以为后续的姿态估计,优化等操作减轻大量负担。匹配方法:暴力匹配等。

当相机为单目时,我们只知道2D 的像素坐标,因而问题是根据两组2D 点估计运动。该问题用对极几何来解决。

当相机为双目、RGB-D 时,或者我们通过某种方法得到了距离信息,那问题就是根据两组3D 点估计运动。该问题通常用ICP 来解决。

如果我们有3D 点和它们在相机的投影位置,也能估计相机的运动。该问题通过PnP求解。

2.1.1. 2D-2D: 对极几何

假设我们从两张图像中,得到了一对配对好的特征点,如果我们有若干对这样的匹配点,就可以通过这些二维图像点的对应关系,恢复出在两帧之间摄像机的运动。
在这里插入图片描述
在这里插入图片描述
八点法+奇异值分解即可求得旋转矩阵R和位移向量t。

2.1.2. 三角测量

在得到运动之后,下一步我们需要用相机的运动估计特征点的空间位置。在单目SLAM 中,仅通过单张图像无法获得像素的深度信息,我们需要通过三角测量(Triangulation)(或三角化)的方法来估计地图点的深度。
在这里插入图片描述在这里插入图片描述

2.1.3. 3D-2D: PnP

PnP(Perspective-n-Point)是求解3D 到2D 点对运动的方法。它描述了当我们知道n 个3D 空间点以及它们的投影位置时,如何估计相机所在的位姿

如果两张图像中,其中一张特征点的3D 位置已知,那么最少只需三个点对(需要至少一个额外点验证结果)就可以估计相机运动

在双目或RGB-D 的视觉里程计中,我们可以直接使用PnP 估计相机运动。而在单目视觉里程计中,必须先进行初始化,然后才能使用PnP

PnP 问题有很多种求解方法,例如用三对点估计位姿的P3P,直接线性变换(DLT),非线性优化构建最小二乘问题并迭代求解

2.1.4. 3D-3D: ICP

假设一组配对好的3D 点(比如对两个RGB-D 图像进行了匹配):
在这里插入图片描述
现在,找一个欧氏变换R; t,使得:
在这里插入图片描述
这个问题可以用迭代最近点(Iterative Closest Point, ICP)求解
ICP 的求解也分为两种方式:利用线性代数的求解(主要是SVD),以及利用非线性优化方式的求解(类似于Bundle Adjustment)。

2.1.5. 特征点法的缺陷

特征点法存在的问题:

  • 关键点的提取与描述子的计算非常耗时
  • 使用特征点时,忽略了除特征点以外的所有信息。一张图像有几十万个像素,而特征点只有几百个。只使用特征点丢弃了大部分可能有用的图像信息。
  • 相机有时会运动到特征缺失的地方,往往这些地方没有明显的纹理信息。
    克服对策:
  • 只计算关键点,不计算描述子。同时,使用光流法(Optical Flow)来跟踪特征点的运动。这样可以回避计算和匹配描述子带来的时间,而光流本身的计算时间要小于特征点的计算与匹配。
  • 只计算关键点,不计算描述子。同时,使用直接法(Direct Method)来计算特征点在下一时刻图像的位置。这同样可以跳过描述子的计算过程,而且直接法的计算更加简单。

2.2. 光流法

光流法仍然使用特征点,只是把匹配描述子替换成了光流跟踪,估计相机运动时仍使用对极几何、PnP 或ICP 算法。

光流是一种描述像素随着时间,在图像之间运动的方法,计算部分像素运动的称为稀疏光流,计算所有像素的称为稠密光流。

LK光流是光流法的一种,它对观测量做了“灰度不变”假设和“某个窗口内的像素具有相同的运动”假设。因而能够从前后两幅图片中追踪到同一个点的位置移动。

在这里插入图片描述
在实际应用中,LK光流的作用就是跟踪特征点。与对每一帧提取特征点相比,使用LK光流只需要提取一次特征点,后续视频帧只需要跟踪就可以了,节约了许多特征提取时间。

2.3. 直接法

在直接法中,根据图像的像素灰度信息同时估计相机的运动和点的投影,不要求提取到的点必须为角点。
在这里插入图片描述
在这里插入图片描述
直接法的思路是根据当前相机的位姿估计值,来寻找p2 的位置。但若相机位姿不够好,p2 的外观和p1 会有明显差别。于是,为了减小这个差别,我们优化相机的位姿,来寻找与p1 更相似的p2。光度误差(Photometric Error),也就是P 的两个像的亮度误差:
在这里插入图片描述
优化目标为该误差的二范数

能够做这种优化的理由,仍是基于灰度不变假设。在直接法中,假设一个空间点在各个视角下,成像的灰度是不变的。有许多个(比如N 个)空间点Pi,那么,整个相机位姿估计问题变为:
在这里插入图片描述
然后使用G-N 或L-M 计算增量,迭代求解。

3. 后端优化

前端视觉里程计能给出一个短时间内的轨迹和地图,但由于不可避免的误差累积,这个地图在长时间内是不准确的。所以,在视觉里程计的基础上,我们还希望构建一个尺度、规模更大的优化问题,以考虑长时间内的最优轨迹和地图。

3.1. 线性系统和卡尔曼滤波KF

在这里插入图片描述

3.2. 非线性系统和扩展的卡尔曼滤波EKF

把卡尔曼滤波器的结果拓展到非线性系统中来,称为扩展卡尔曼滤波器(ExtendedKalman Filter,EKF)。通常的做法是,在某个点附近考虑运动方程以及观测方程的一阶泰勒展开,只保留一阶项,即线性的部分,然后按照线性系统进行推导。

先定义一个卡尔曼增益Kk:

在这里插入图片描述
在卡尔曼增益的基础上,后验概率的形式为:
在这里插入图片描述

3.3. 光束法平差BA

所谓的Bundle Adjustment,是指从视觉重建中提炼出最优的3D 模型和相机参数(内参数和外参数)。从每一个特征点反射出来的几束光线(bundles of light rays),在我们把相机姿态和特征点空间位置做出最优的调整(adjustment) 之后,最后收束到相机光心的这个过程,简称为BA。
在这里插入图片描述
左侧的p 是全局坐标系下的三维坐标点,右侧的us, vs 是该点在图像平面上的最终像素坐标。
系统的观测方程为:

z=h(T,p)

其中,T为相机的位姿变换矩阵,其对应的李代数为ξ。
则以最小二乘的角度考虑,可得此次观测的误差:

e=z-h(T,p)

然后,把其他时刻的观测量也考虑进来,我们可以给误差添加一个下标。设zij 为在位姿ξi 处观察路标pj 产生的数据,那么整体的代价函数(Cost Function)为:
在这里插入图片描述
对这个最小二乘进行求解,相当于对位姿和路标同时作了调整,也就是所谓的BA。

3.4. 位姿图优化

构建一个只有轨迹的图优化,而位姿节点之间的边,可以由两个关键帧之间通过特征匹配之后得到的运动估计来给定初始值。一旦初始估计完成,我们就不再优化那些路标点的位置,而只关心所有的相机位姿之间的联系了。通过这种方式,我们省去了大量的特征点优化的计算,只保留了关键帧的轨迹,从而构建了所谓的位姿图
在这里插入图片描述
位姿图优化中的节点表示相机位姿,边表示两个节点之间相对运动的估计。
边可表示为
在这里插入图片描述
或按李群的写法:
在这里插入图片描述
然后构建误差eij:
在这里插入图片描述
所有的位姿顶点和位姿——位姿边构成了一个图优化,本质上是一个最小二乘问题,优化变量为各个顶点的位姿,边来自于位姿观测约束。记ε 为所有边的集合,那么总体目标函数为:
在这里插入图片描述
我们依然可以用Gauss-Newton、Levenberg-Marquardt 等方法求解此问题,除了用李代数表示优化位姿以外,别的都是相似的。

4. 回环检测

4.1. 概述

4.1.1. 回环检测的意义

前端提供特征点的提取和轨迹、地图的初值,而后端负责对这所有的数据进行优化。然而,如果像VO 那样仅考虑相邻时间上的关联,那么,之前产生的误差将不可避免地累计到下一个时刻,使得整个SLAM 会出现累积误差。长期估计的结果将不可靠,或者说,我们无法构建全局一致的轨迹和地图。

回环检测模块,能够给出除了相邻帧之外的,一些时隔更加久远的约束。回环检测的关键,就是如何有效地检测出相机经过同一个地方这件事。如果能够成功地检测这件事,就可以为后端的Pose Graph 提供更多的有效数据,使之得到更好的估计,特别是得到一个全局一致(Global Consistent)的估计。

4.1.2. 核心问题:

如何计算图像间的相似性

4.1.3. 准确率和召回率

在这里插入图片描述
准确率:算法提取的所有回环中,确实是真实回环的概率。
召回率:在所有真实回环中,被正确检测出来的概率。

为了评价算法的好坏,我们会测试它在各种配置下的P 和R 值,然后做出一条Precision-Recall 曲线。当用召回率为横轴,用准确率为纵轴时,我们会关心整条曲线偏向右上方的程度、100% 准确率下的召回率,或者50% 召回率时候的准确率,作为评价算法的指标。

值得一提的是,在SLAM 中,我们对准确率要求更高,而对召回率则相对宽容一些。由于假阳性的(检测结果是而实际不是的)回环将在后端的Pose Graph 中添加根本错误的边,有些时候会导致优化算法给出完全错误的结果。而相比之下,召回率低一些,则顶多有部分的回环没有被检测到,地图可能受一些累积误差的影响——然而仅需一两次回环就可以完全消除它们了。所以说在选择回环检测算法时,我们更倾向于把参数设置地更严格一些,或者在检测之后再加上回环验证的步骤。

4.2. 词袋模型

词袋,也就是Bag-of-Words(BoW),目的是用“图像上有哪几种特征”来描述一个图像。
字典中的单词,假设为w1、w2、w3。然后,对于任意图像A,根据它们含有的单词,可记为:
在这里插入图片描述
字典是固定的,所以只要用[1 1 0]T 这个向量就可以表达A 的意义。通过字典和单词,只需一个向量就可以描述整张图像了。

同理,用[2 0 1]T 可以描述图像B。如果只考虑“是否出现”而不考虑数量的话,也可以是[1 0 1]T ,这时候这个向量就是二值的。于是,根据这两个向量,设计一定的计算方式,就能确定图像间的相似性了。当然如果对两个向量求差仍然有一些不同的做法,比如说对于a,b∈ RW,可以计算:
在这里插入图片描述
其中范数取L1 范数,即各元素绝对值之和。请注意在两个向量完全一样时,我们将得到1;完全相反时(a 为0 的地方b 为1)得到0。这样就定义了两个描述向量的相似性,也就定义了图像之间的相似程度。

4.3. 字典创建

4.3.1. K均值算法

字典由很多单词组成,而每一个单词代表了一个概念。一个单词与一个单独的特征点不同,它不是从单个图像上提取出来的,而是某一类特征的组合。所以,字典生成问题类似于一个聚类问题。当我们有N 个特征点,想要归成k 个类,那么用K-means 来做,主要有以下几个步骤:

在这里插入图片描述

4.3.2. k叉树字典

使用一种k叉树来表达字典。它的思路很简单,类似于层次聚类,是K-means的直接扩展。假定我们有N 个特征点,希望构建一个深度为d,每次分叉为k 的树,那么做法如下:
在这里插入图片描述
在这里插入图片描述
实际上,最终我们仍在叶子层构建了单词,而树结构中的中间节点仅供快速查找时使用。这样一个k 分支,深度为d 的树,可以容纳kd个单词。另一方面,在查找某个给定特征对应的单词时,只需将它与每个中间结点的聚类中心比较(一共d 次),即可找到最后的单词,保证了对数级别的查找效率。

4.4. 相似度计算

考虑权重以后,对于某个图像A,它的特征点可对应到许多个单词,组成它的Bag-of-Words:

在这里插入图片描述
对于给定的VA和VB,通过某些方式即可比较其相似度。如L1范数:
在这里插入图片描述

5. 建图

所谓地图,即所有路标点的集合。一旦我们确定了路标点的位置,那就可以说我们完成了建图。SLAM 作为一种底层技术,往往是用来为上层应用提供信息的。应用层面对于“定位”的需求是相似的,他们希望SLAM 提供相机或搭载相机的主体的空间位姿信息。而对于地图,则存在着许多不同的需求。
在这里插入图片描述
稀疏地图只建模感兴趣的部分,也就是前面说了很久的特征点(路标点)。
稠密地图是指,建模所有看到过的部分。
在稠密重建,我们需要知道每一个像素点(或大部分像素点)的距离,那么大致上有以下几种解决方案:

  1. 使用单目相机,利用移动相机之后进行三角化,测量像素的距离。
  2. 使用双目相机,利用左右目的视差计算像素的距离(多目原理相同)。
  3. 使用RGB-D 相机直接获得像素距离。
    前两种方式称为立体视觉(Stereo Vision),其中移动单目的又称为移动视角的立体视觉(Moving View Stereo)。相比于RGB-D 直接测量的深度,单目和双目对深度的获取往往是“费力不讨好”的——我们需要花费大量的计算,最后得到一些不怎么可靠的¬深度估计。当然,RGB-D 也有一些量程、应用范围和光照的限制,不过相比于单目和双目的结果,使用RGB-D 进行稠密重建往往是更常见的选择。而单目双目的好处,是在目前RGB-D还无法很好应用的室外、大场景场合中,仍能通过立体视觉估计深度信息。

5.1. 单目稠密建图

在稠密深度图估计中,我们无法把每个像素都当作特征点,计算描述子。因此,稠密深度估计问题中,匹配就成为很重要的一环:如何确定第一张图的某像素,出现在其他图里的位置呢?这需要用到极线搜索和块匹配技术。然后,当我们知道了某个像素在各个图中的位置,就能像特征点那样,利用三角测量确定它的深度。
在这里插入图片描述
左边的相机观测到了某个像素p1。由于这是一个单目相机,我们无从知道它的深度,所以假设这个深度可能在某个区域之内,不妨说是某最小值到无穷远之间:(dmin,+∞)。因此,该像素对应的空间点就分布在某条线段(本例中是射线)上。在另一个视角(右侧相机)看来,这条线段的投影也形成图像平面上的一条线,我们知道这称为极线。
在p1 周围取一个大小为w * w 的小块,然后在极线上也取很多同样大小的小块进行比较,就可以一定程度上提高区分性。这就是所谓的块匹配。
然后计算小块与小块间的差异,存在很多计算方法,如
在这里插入图片描述
它计算的是两个小块的相关性,接近0表示两个图像不相似,而接近1表示相似。
在这里插入图片描述

5.2. RGB-D稠密建图

除了使用单目和双目进行稠密重建之外,在适用范围内,RGB-D 相机是一种更好的选择。在RGB-D 相机中可以完全通过传感器中硬件测量得到深度,无需消耗大量的计算资源来估计它们。并且,RGB-D 的结构光或飞时原理,保证了深度数据对纹理的无关性。即使面对纯色的物体,只要它能够反射光,我们就能测量到它的深度。这亦是RGB-D 传感器的一大优势。

利用RGB-D 进行稠密建图是相对容易的。不过,根据地图形式不同,也存在着若干种不同的主流建图方式。最直观最简单的方法,就是根据估算的相机位姿,将RGB-D 数据转化为点云(Point Cloud),然后进行拼接,最后得到一个由离散的点组成的点云地图(Point Cloud Map)。在此基础上,如果我们对外观有进一步的要求,希望估计物体的表面,可以使用三角网格(Mesh),面片(Surfel)进行建图。另一方面,如果希望知道地图的障碍物信息并在地图上导航,亦可通过体素(Voxel)建立占据网格地图(Occupancy Map)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

走马观花之《视觉SLAM十四讲》 的相关文章

  • TIANBOT MINI机器人使用blender进行贴图并导出详细教程

    很多小伙伴在看一些仿真视频中会看到 xff0c 仿真模型栩栩如生 xff0c 但是我们自己导出的模型总是不堪入目 xff0c 哪是因为你还没学会贴图 xff0c 下面我来教大家一步一步怎么学会贴图 首先我们打开blender并设置好简体中文
  • 什么是ROS2GO随身系统?

    随着ROS xff08 Robot Operating System xff09 机器人操作系统的越来越热 xff0c 大家都跃跃欲试 想一睹ROS的风采 xff0c 感受ROS的魅力 但是挡在初学者面前的第一个难题就是如何在Ubuntu系
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(二)

    第二章 配置xacro文件 0 前言 上一节已经将urdf导出来了 xff0c 这一节需要配置一下xacro文件 先看一下导出的功能包在gazebo以及rviz中显示的效果 将功能包放进工作空间进行编译 xff0c source一下环境 x
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(三)

    第三章 让小车动起来 1 配置controller 在tianracer description功能包新建config文件夹时 xff0c 我们可以通过一个yaml文件smart control config yaml来声明我们所需要的co
  • 教程 | 阿克曼结构移动机器人的gazebo仿真(五)

    第四章 用xacro优化URDF并配置gazebo仿真插件 1 前言 上节用简易模型写了一个小车的URDF代码 xff0c 这一节将用xacro对其进行优化 xff0c 这里我并不打算用宏对参数进行封装 xff0c 因为我个人觉得这样看起来
  • 教程 | Jetson Xavier NX 开发板强化学习环境配置流程

    一 基本介绍 NX开发板 全名Jetson Xavier NX xff08 后简称为NX xff09 xff0c 是NVIDIA英伟达提供的模组和开发者套件 xff0c 保持Jetson Nano小巧尺寸的同时拥有相当于Jetson TX2
  • 免费教程·开源 | 从零开始制作ROS无人竞速车RACECAR教程

    一 课程前提 自动驾驶汽车即将成为交通出行的主流工具之一 xff0c 它以计算机 现代汽车产业技术为基础 xff0c 以数字化 智能化为依托实现自动化驾驶 xff0c 学习自动驾驶需要了解架构 环境感知 行为决策 规划路径 xff0c 多传
  • c++ 继承 学习总结3 继承中父类和子类同名非静态成员或者同名静态成员的处理方式

    1 继承中父类和子类有同名非静态成员的处理方式 eg include lt iostream gt using namespace std class Base public Base m A 61 100 void func cout l
  • 2022ROS暑期学校暨人工智能与机器人论坛报名及日程安排

    机器人操作系统 ROS 暑期学校自2015年举办以来 xff0c 被中国机器人业界和学界 xff0c 以及ROS开源基金会誉为除了ROSCon之外规模最大 参与人数最多 最成功的ROS线下活动 过去八年 xff0c 共吸引了全国300多所高
  • MATLAB Simulink开发ROS无人车与机器人应用 详细教程

    引言 xff1a MATLAB在机器人中的应用 现在大多数机器人开发者都会选择ROS xff0c 在ROS整个框架下 调包 极其容易 很多ROS开发者热衷于 调包 来实现功能 xff0c 却难以在机器人学的理论知识上有所突破 MATLAB的
  • DE1-SOC入门之Linux开发环境搭建

    入手DE1 SOC这块FPGA也有两三个月了 xff0c 将友晶提供的入门学习例程 代码等摸索了一下 xff0c 感觉正常的fpga和arm之间的通信 控制已经没多大问题了 可是很多时候 xff0c 事情没有自己想的那么简单 现在接手的项目
  • sensor_msgs/NavSatFix Message

    1 sensor msgs NavSatStatus Message http docs ros org en api sensor msgs html msg NavSatStatus html Navigation Satellite
  • 零基础如何入门激光SLAM

    零基础如何入门激光SLAM 最近有几个人加我 xff0c 都说是刚开始学激光slam xff0c 基本都是研一 xff0c 也有一些大四的 xff08 大四的都开始学SLAM了 xff01 xff09 情况也都差不多 xff0c 有的是课题
  • 从零开始搭二维激光SLAM --- 栅格地图的构建

    上周搬家 导致这篇文章更新的慢了点 之前的文章我们都是通过scan to scan的方式进行位姿变换的计算 接下来的文章将带领大家体验scan to map的计算位姿变换的方式 首先 来简要介绍一下什么是map 1 地图与占用栅格地图 1
  • 从零开始搭二维激光SLAM --- 基于gtsam的后端优化的代码实现

    上一篇文章我们分析了如何使用ceres进行位姿图的优化 这篇文章来讲一下如何使用gtsam进行位姿图的优化 1 gtsam简介 gtsam是最近几年火起来的一个优化库 GTSAM xff08 Georgia Tech Smoothing a
  • 从零开始学定位 --- kaist数据集体验

    1 Kaist数据集简介 选择数据集选择了好几天 xff0c 最终选择了kaist数据集 xff0c 这个数据集中有 轮速计 xff0c imu gps 16线雷达 xff0c 这些传感器满足了我认为多传感器融合定位的需要 简要介绍一下Ka
  • 从零开始学定位 --- 使用kaist数据集进行LIO-SAM建图

    之前的文章只是将数据的雷达在rviz中进行可视化了 xff0c 并没有实际用起来 这篇文章将使用Kaist Urban08 数据使用LIO SAM进行三维点云地图的构建 1 clone 工程 仓库的地址是 https github com
  • 我的2048天创作纪念日

    距离发布第一篇博客竟然已经2048天了 不知不觉都已经这么长时间了啊 xff0c 真是岁月不饶人啊 随想 5年的时间 xff0c 这5年经历了硕士时期 xff0c 经历了毕业之后的第一份工作 xff0c 第二份工作 xff0c 第三份工作
  • 基于粒子滤波的SLAM(GMapping)算法分析

    本文是 Improved Techniques for Grid Mapping with Rao Blackwellized Particle Filters 的大致翻译 xff0c 难免有不通顺与错误的地方 xff0c 如有错误请指出
  • tf之static_transform_publisher

    tf xff1a transform xff0c ROS中管理3D坐标系变换的工具 只要告诉tf两个相关联坐标系的坐标变换信息 xff0c tf会帮你一直记录这个两个坐标系的坐标变换 xff0c 即使两个坐标系处于运动中 1 tf的命令行用

随机推荐

  • sensor_msgs/PointCloud2 Message

    sensor msgs PointCloud2 Message File sensor msgs PointCloud2 msg Raw Message Definition This message holds a collection
  • 安卓平台及windows平台上基于Gazebo仿真器的px4遥控控制

    这里写自定义目录标题 安卓平台及windows平台上基于Gazebo仿真器的px4遥控控制数据链路描述安卓平台简介安卓平台四旋翼无人机控制安卓平台固定翼无人机控制安卓平台无人车控制安卓遥控器实物控制 桌面平台遥控图形界面桌面平台四旋翼无人机
  • sitl_gazebo,px4模型matlab接口分析,gazebo与matlab联合仿真

    最近在使用matlab建立四旋翼控制程序 xff0c 奈何没有好的可视化仿真软件 xff0c 便想起px4的gazebo仿真环境 xff0c 使用matlab连接px4底层通信模型 xff0c 实现matlab在软件层面的可视化仿真 Gaz
  • 【体验】ESP32-CAM可能是最便宜的“监控”方案,ESP32-CAM程序下载调试

    生活新装备 NEW EQUIPMENT FOR LIFE 抱着试一试的心里 xff0c 买了ESP32 CAM xff0c xff08 你别说 还真对得起 我和RMB xff0c 看下边 xff0c 看下边 xff09 xff1a 当年玩S
  • 【树莓派】树莓派SD卡系统镜像系统备份方法

    微信关注 DLGG创客DIY 设为 星标 xff0c 重磅干货 xff0c 第一时间送达 先感谢漂移菌的技术支持 耐心 细致的帮我解决了一个困扰我很久的问题 树莓派系统备份问题 问题的提出 xff1a 树莓派各种版本系统 xff0c 各种软
  • 【笔记】可能是唯一能让天猫精灵方糖播放本地音乐的智能方案

    微信关注公众号 DLGG创客DIY 设为 星标 xff0c 重磅干货 xff0c 第一时间送达 前言 如上图所示 xff0c 我家也有个同款的天猫精灵方糖 xff0c 买了 xff08 好像是个奖品 xff09 好几年了 xff0c 利用率
  • C++做题网站

    今天小编带大家介绍一下我平时用的C 43 43 做题网站 1 洛谷 平时我发题解一般是选自这个网站 传送链接 xff1a 洛谷 2 黑猫OJ 里面的题很好 传送链接 xff1a 黑猫OJ 3 图灵编程OJ 我最开始用的做题网站 传送链接 x
  • ROS系列:第三章(二)

    系列文章目录 第一章 ROS概述与环境搭建 第二章 ROS通信机制 第三章 ROS通信机制进阶 第四章 ROS运行管理 第五章 ROS常用组件 第六章 机器人系统仿真 第七章 机器人系统仿真 第八章 机器人系统仿真 第九章 机器人系统仿真
  • 手把手系列--STM32H750移植FreeRTOS(二)--优化编译速度

    一 目的 在上一篇 手把手系列 STM32H750移植FreeRTOS 我们已经实现了在ArtPi开发板上使用FreeRTOS 在编译阶段我们发现整个编译过程特别慢 xff0c 那么如何优化编译速度呢 xff1f 本篇的主要目的就是优化整个
  • FreeRTOS如何判断当前上下文是在中断还是在线程环境中

    一 目的 很多小伙伴在使用FreeRTOS API时 xff0c 肯定看到过类似这样的接口 xff1a xSemaphoreGiveFromISR SemaphoreHandle t xSemaphore signed BaseType t
  • 手把手系列--STM32H750移植FreeRTOS(三)--获取CPU占用

    一 目的 在之前的博文中我们移植验证了STM32H750XBH6上运行FreeRTOS系统 xff0c 在实际项目开发中我们经常会遇到获取系统实时运行负载的情况 xff0c 进而对系统进行优化 手把手系列 STM32H750移植FreeRT
  • 【资料分享】工程师必备嵌入式资料合集

    对于许多电子工程师来说 xff0c 各种电路资料 xff0c 学习资料 xff0c 新新技术资料等等 xff0c 都有越多越好的 本篇帖子就为大家整理了一些比较受工程师欢迎的一些电路资料 如果你有心动的话 xff0c 不妨就来搜集一波吧 x
  • HTML网页Javascript跳转代码

    有时候咱们不希望在该页面出现一条长长的链接 xff0c 那就可以采用跳转页了 xff0c 以下是代码 lt html gt lt head gt lt meta http equiv 61 34 Content Type 34 conten
  • 一起尝试写一个自己的小软件

    一起尝试写一个自己的小软件 xff0c 有时候写个小软件 xff0c 会耗费一两个小时 xff0c 有时候耗费几个小时 xff0c 甚至几天 xff0c 但是在写小软件的过程中 xff0c 咱们都是沉浸在软件写好后的美妙体验中 xff0c
  • 网页被挂马了怎么办呢

    首先 xff0c 咱们了解一下网页挂马是什么意思 xff1a 网页挂马指的是把一个木马程序上传到一个网站里面然后用木马生成器生一个网马 xff0c 再上到空间里面 xff01 再加代码使得木马在打开网页时运行 xff01 接下来讲怎么办 如
  • 公司里最看重的是发展机会

    公司里最看重的是发展机会 xff0c 而不是现在的工资 xff0c 这是很多老板都喜欢说的 说的多了 xff0c 咱么那就相信了 虽然说 xff0c 很大程度上 xff0c 今后的日子怎么过 xff0c 取决于现在的想法和奋斗 xff0c
  • 处在八零末期,九零早期,缝隙中的人

    处在八零末期 xff0c 九零早期 xff0c 缝隙中的人 思想既可以与八零年代的人相似 xff0c 又有九零年代那种无法脱掉的稚气 这就是89年 90年出生的人 的特性
  • 马上就下班回家了,让我再写一篇

    马上就下班回家了 xff0c 让我再写一篇 xff0c 写博客让我突然静下来了 同时都纷纷离开了 快了 xff0c 快了 xff0c 马上写好了
  • 我知道自己的未来需要什么

    我知道自己的未来需要什么 xff0c 现在的路就在眼前 xff0c 争取一把 xff0c 奋斗一段时间 xff0c 未来光明坦途正在招手 下班了 xff0c 下次再来
  • 走马观花之《视觉SLAM十四讲》

    1 视觉SLAM 系统概述 SLAM 是Simultaneous Localization and Mapping 的缩写 xff0c 中文译作 同时定位与地图构建 它是指搭载特定传感器的主体 xff0c 在没有环境先验信息的情况下 xff