卡尔曼滤波通俗易懂的解释

2023-05-16

关于卡尔曼滤波,网上的资料很多,但是有很大一部分都是不断堆叠公式,然后用各种晦涩难懂的专业术语进行解释,说实话我刚开始看的时候也是云里雾里,因此写下这篇博客是为了照顾和我一样的萌新,通篇文章我会力求从最基础的部分一步一步深入,并尽可能少地使用公式(或许?),对每个公式和参数也尽可能详尽地解释,所以通篇文章可能较长;另一方面,这篇博文也是为了自己日后方便回顾用的。如有错误请及时指出。

参考的部分资料如下:
如何通俗并尽可能详细地解释卡尔曼滤波?
如何理解那个把嫦娥送上天的卡尔曼滤波算法Kalman filter?
卡尔曼滤波器的原理以及在matlab中的实现
Understanding Kalman Filters
How a Kalman filter works, in pictures

文章中使用了部分资料的部分图片(侵删),废话不多说,直接开始我们学习卡尔曼滤波器之旅。

什么是卡尔曼滤波?

卡尔曼滤波是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。由于观测数据中包括系统中的噪声和干扰影响,所以最优估计也可以看做是滤波过程(出自百度百科)。

从上面的解释我们可以提取出一些关键信息,首先,卡尔曼滤波是面向线性系统的(当然还有面向非线性系统的扩展卡尔曼滤波,这也是后话了);其次,是一种估计系统状态的最优化算法。卡尔曼滤波一般用于机器人的状态估计较多,如移动机器人的位姿估算等。

如何通俗易懂地理解卡尔曼滤波?

这里我们就不扯那些专业术语了,我们讲“人话”。首先我们需要对卡尔曼滤波具体是干什么的要建立起一个最基本的概念,这里先借鉴知乎用户Kent Zeng的说法,给大家打一个大致的基础。

假设你现在处于某颗星球上,手上有两个力传感器,并且有一个已知质量为m的物体,但是你不清楚他们的重力大小,而且你也不知道你现在所处位置的重力加速度的具体值为多少,因此你打算通过两个传感器获得物体的重力。

但不幸的是它们测得的读数似乎每次都不太一样,那该怎么办?没错,就是取平均

再假设你知道其中贵的那个传感器应该准一些,便宜的那个应该差一些。那有比取平均更好的办法吗?没错,加权平均

再然后,假如你手上只有一个传感器,但是你碰巧得知了当地的重力加速度为g,那么你现在可以知道传感器测出的重力值为G1,你自己通过数学模型推导出来的重力G2 = mg,但是这两个值之间似乎也有偏差,那该怎么办呢?

没错,我们还是取两值的加权平均,但是你不清楚G1和G2哪个更加可信,那么如何确定权值系数?这取决于你对这个g值的确信度,如果你更相信数学模型mg的推导结果,那么对应数学模型的权值更大,而你传感器的观测模型的权值则变小;如果你对g的确信度较小,那么就正好相反。而这个权值,在卡尔曼滤波中也叫作卡尔曼系数。

以上,就是卡尔曼滤波最基本的思想。没错,是不是很简单呢?当然,在这之中我们也忽略掉了一些东西,但是不要着急,我们一步一步来。

卡尔曼滤波实际上就是把传感器测得的值和根据数学模型推导出来的值融合以逼近实际值的过程,因此卡尔曼滤波也经常被称作传感器融合算法。

更近一步的实例

现在,让我们更进一步地理解卡尔曼滤波的思想(下图均来自MATLAB官方卡尔曼滤波视频)。如果你对正态分布不太了解或者已经忘得差不多了,请你查看以下博客内容来回顾一下正态分布、方差、标准差等知识点。
高斯分布
平均值(Mean)、方差(Variance)、标准差(Standard Deviation)

假设你现在有一辆车,并且已知小车在初始状态的位置如图所示服从正态分布(横坐标为小车前进坐标),有可能位于正态分布的均值附近。有人会问,为什么是正态分布而不是确定点呢?因为在这里我们给出的是它此刻的状态估计量,对于地图上的物体,我们无法确切得出其具体的位置信息,当你使用GPS来定位时始终会有一定的误差。因此你只能通过系统的输入(如小车的速度)和系统的输出(GPS给定的位置信息)来估算它当前的状态(真实的位置信息)。

当然,这里说多了,后续我们会详细展开讨论,这里你只要知道,小车在初始状态的位置估计是服从正态分布的。
在这里插入图片描述
然后,根据初始时刻小车的位置,我们可以预测出它在下一个时间步长的可能的位置分布。图中可以看出,它的正态分布函数明显比上一时刻来的更宽一些。这是因为在小车运动过程中会不可避免地遇到一些随机因素的干扰,如坑洼、风等,因此我们估算的位置值的不确定性变大,小车实际经过的距离与模型预测的距离不同。
在这里插入图片描述
上述过程均是由我们的数学模型推算估计出来的结果,但是,我们也知道,相同的数据,我们也可以通过传感器测量来获取,而测量值往往也呈正态分布并且与我们的模型预测值有所不同,如下图中红色正态分布曲线所示,方差表示噪声测量中的不确定性。
在这里插入图片描述
那么,通过上一个小节的学习,你知道了,我们可以通过将我们的模型预测值与传感器的测量值相互结合起来来获得小车的最佳位置估计值。具体的结合过程我们后续讨论,这里你可以简单当做我们把这两者的概率密度函数相乘得出了当前时刻的最佳状态估计值,如图中灰色正态分布曲线所示。
在这里插入图片描述
再然后,我们把前面的时间信息换一下,比如我们知道了上一时刻即k-1时刻小车的位置估算值,并且通过数学模型预测得到了k时刻的位置估算值,然后将其与小车传感器的测量值进行结合,得到了当前k时刻小车的最佳位置估算值。

那么问题来了,这里我们并没有给出初始状态,因此k-1时刻的位置估算值又是怎么来的呢?没错,我们是通过k-2时刻的状态量估算的来了。这就引出了我们卡尔曼滤波在连续时间段内的迭代操作。

以上,通过本小节的学习,你已经在原来的基础上更深一步地理解了卡尔曼滤波的思想:

  1. 卡尔曼滤波是利用线性状态模型,以及模型的输入和输出值,结合传感器测量值获取当前时刻的最佳状态估计值;
  2. 卡尔曼滤波假设所有的不确定性因素理论上都服从正态分布;
  3. 卡尔曼滤波就是使最后估算状态的高斯分布的期望值能够接近实际值,并且方差够小;
  4. 卡尔曼滤波工作于连续的系统,并通过迭代操作估算每一个时刻的最佳状态估计值。

结合线性系统模型再来看看

通过之前的学习,相信你已经对卡尔曼滤波建立起了一个初步的印象,如果你是科普性质的学习,那么到上一小节为止已经足够了。但是,如果要更深一步,我们还必须结合各种公式来深入探讨一下。当然,我会尽可能用通俗易懂的语言来进行描述。

在开始学习之前,请你先简单回顾一下方差、协方差以及协方差矩阵的一些基本概念。
方差、协方差、相关系数的理解
概率笔记8——方差、均方差和协方差
如果有同学还没有学习过现代控制理论,建议先去学一下,至少先知道状态空间模型是什么。

在我们之前的讨论过程中,我都是尽可能避免公式的堆叠,用图文的方式进行解释。现在,让我们重新回看一下上一小节的小车模型。不过,在此之前,我们先定义三个变量,在这里,你只要先简单记住这些变量的含义就行了。

x x x —— 状态量的真实值
x ^ \hat{x} x^ —— 状态量的估计值
x ^ − \hat{x}^- x^ —— 根据上一步估计值推算出来的当前时刻预测值(并不是最终的估计值)

有人会对 x ^ \hat{x} x^ x ^ − \hat{x}^- x^ 的差别有疑问,我这里先简单解释一下, x ^ \hat{x} x^ 表示的是最终的估计值, x ^ − \hat{x}^- x^ 表示的是不完整的估计,也就是还需要进行修正。简单点说就是 x ^ − \hat{x}^- x^ x ^ \hat{x} x^ 的未完成版。

还是原来那个小车模型,这次我们结合小车的线性模型来进行讨论。首先假定下图所示是我们真实的小车模型(这个模型指的是真实的小车系统,并不是我们用来推算的数学模型,也就是说对于我们来说,我们并不清楚方框内部的方程),它仅有一个状态量,即用 x k x_k xk来表示某一时刻车的真实位置,我们往往不能直接得到 x k x_k xk的值。系统的输入为速度 u k u_k uk,而车的位置 y k y_k yk 我们通常由GPS进行定位得到。

x k = A x k − 1 + B u k x_k =Ax_{k-1} + Bu_k xk=Axk1+Buk 表示系统的状态预测方程,A表示状态转移矩阵,表示如何从上一时刻状态推算当前时刻状态;B为控制矩阵,表示控制量 u u u 如何作用于当前状态(这里由于只有一个状态量,因此A和B都是标量)。

y k = C x k y_k = Cx_k yk=Cxk 表示系统的观测方程,当前模型在理论情况下 y k y_k yk应该和 x k x_k xk是相等的,也就是 C = 1 C = 1 C=1

但是在真实的环境下,GPS的测量往往是不准确的,并且会伴随着测量噪声,因此我们需要在观测方程后面加上噪声干扰,用 v v v进行表示。

而同样的,我们的小车在实际运行过程中也会不可避免地受到一些随机因素的影响,因此我们在状态方程后面同样加上过程噪声,用 w w w 表示,那么实际的小车模型可以表示为:
在这里插入图片描述
我们相信随机噪声 w w w v v v 是服从正态分布的。

现在,假定你的数学基础非常的好,你给出了小车系统的数学模型。通过下方的小车数学模型(Car model),你可以将输入量(速度 u k u_k uk)输入到你给出的数学模型中推算出小车位置的估计值 x ^ \hat{x} x^(注意这里的C = 1,也就是说 y ^ \hat{y} y^ = x ^ \hat{x} x^ )。
在这里插入图片描述
那么,卡尔曼滤波器的作用,就是把GPS测量得出的传感器测量值 y k y_k yk 和你用数学模型推导出的估计值 x ^ \hat{x} x^(其实是 y ^ \hat{y} y^,只不过这里两者相等)相结合,得出对小车的最佳位置估计。

图中,我们再次强调,Car dynamics是小车的真实模型,内部的方程我们是不清楚的,这里只是为了更好地示意真实噪声环境下传感器测量结果的不确定性,我们能得知并且运用的,只有输入量 u k u_k uk 和传感器测量值 y k y_k yk;而 Car model 则是我们实际运用的数学模型,我们可以从中得出状态估计量 x ^ \hat{x} x^
在这里插入图片描述
那么,现在我们再把示意图加进去,再仔细理解一下,发现是不是瞬间通顺了很多?
在这里插入图片描述

卡尔曼滤波器的实际推导

讲了这么多,所以卡尔曼滤波到底是怎么实现的呢?接下来我们将通过小车模型进行实际的推导。
在这里插入图片描述
还是原来的模型,我们现在想获得最接近实际值的估计值 x ^ \hat{x} x^。一种比较简单的方式就是将数学模型的估计值 y ^ \hat{y} y^ 逼近实际值 y k y_k yk,即令 e r r o r = y − y ^ error = y - \hat{y} error=yy^ 趋于0,这样最后得到的 x ^ \hat{x} x^ 也将会接近于实际值 x k x_k xk。这听上去像不像反馈控制呢?我们可以借鉴类似的思想。
在这里插入图片描述
这里直接给出了卡尔曼滤波器的公式,是不是感觉很熟悉呢?公式中括起来的第一部分就是我们原先的Car model中的 x ^ \hat{x} x^的计算公式,只不过在后面我们加上了相应的修正。
在这里插入图片描述
因此,我们可以得知之前给出的 x ^ k = A x ^ k − 1 + B u k \hat{x}_k =A\hat{x}_{k-1} + Bu_k x^k=Ax^k1+Buk 它是不完整的,后续还需要进一步的修正,因此在这里用 x ^ k − \hat{x}_k^- x^k 来表示,称为先验概率
在这里插入图片描述
因此,可以进一步简化为如图所示公式。原模型的观测方程表示为: y ^ k = C x ^ k \hat{y}_k =C\hat{x}_k y^k=Cx^k。由此可知,后面的 y k − C x ^ k − y_k - C\hat{x}_k^- ykCx^k表示的就是测量值减去估计值,将其合并到预测中以更新估计值, K k K_k Kk即为卡尔曼系数,表示更新的权重,后面这部分也被称为后验估计
在这里插入图片描述
那么,最后我们可以得到卡尔曼滤波的完整公式,如图所示。它主要分为两部分,包括预测部分和更新部分。看上去是不是有点麻烦?没关系,我们一步一步来看。你只需要记住,其他5个方式实际上就是为了我们上面图中推导出来的那个状态估计公式所服务的。
在这里插入图片描述

预测模型

首先是预测部分,其内部主要分为两个公式:
状态预测公式: x ^ k − = A x ^ k − 1 + B u k \hat{x}_k^- =A\hat{x}_{k-1} + Bu_k x^k=Ax^k1+Buk
协方差预测公式: P k − = A P k − 1 A T + Q P_k^- = AP_{k-1}A^T + Q Pk=APk1AT+Q

其中 A A A 表示状态转移矩阵, B B B 表示控制矩阵, P P P 表示噪声协方差矩阵, Q Q Q 表示过程激励噪声协方差矩阵。

我们必须知道,在推测时都是包含噪声的,噪声越大,系统的不确定性也就越大,而每一个状态的不确定性通常由协方差矩阵 P P P 来表示,那么如何让这种不确定性在每个时刻进行传递呢?这边直接给出答案,就是通过 A P k − 1 A T AP_{k-1}A^T APk1AT在两侧分别呈上状态转换矩阵以及它的转置,但是我们的模型也并非百分之百准确,因此需要在之后加上噪声 Q Q Q

关于协方差的意义具体查看:
方差、协方差、相关系数的理解
概率笔记8——方差、均方差和协方差

通过上面两个公式即可用上一时刻的状态来预测当前时刻的状态,得到带 “-” 号的 x ^ k − \hat{x}_k^- x^k P k − P_k^- Pk“-” 号表示该值该欠缺一部分,需要从观测值处获得补充的信息。

状态更新模型

状态更新这部分主要包含3个公式:
卡尔曼系数: K k = P k − C T C P k − C T + R K_k = \frac {P_k^-C^T} {CP_k^-C^T + R} Kk=CPkCT+RPkCT
状态估计: x ^ k = x ^ k − + K k ( y k − C x ^ k − ) \hat{x}_k = \hat{x}_k^- + K_k(y_k - C\hat{x}_k^-) x^k=x^k+Kk(ykCx^k)
噪声协方差矩阵更新: P k = ( I − K k C ) P k − P_k = (I - K_kC)P_k^- Pk=(IKkC)Pk

其中 C 表示观测矩阵,R表示观测噪声协方差矩阵(传感器噪声)。

最重要的就是其中的状态估计公式,其余五个公式进行运算实际上都是为了这个状态估计公式来服务的。它将原本的预测值进行更新,即加上一个残差(实际观测值与预期观测值之间的差),这个残差还需要乘上一个卡尔曼系数,将预测值和乘上卡尔曼系数的残差进行相加,即可得到我们最后的最佳状态估计值。

卡尔曼系数 K k K_k Kk 的推导较为复杂,我们不详细展开,这里主要说明一下它的作用:

  1. 权衡预测状态协方差矩阵P和观测量协方差矩阵R的大小来觉得对预测模型和观测模型的确信度。如果相信预测模型多一些,那么 K k K_k Kk 会相应小一些,如果相信观测模型多一些,那么 K k K_k Kk 会相应大一些;
  2. 把残差的表现形式从观测域转换到状态域。因为在实际运用过程中都是采用矩阵形式,而 y k y_k yk x ^ k \hat{x}_k x^k 两个向量之间的元素个数很可能不同,因此通过这种运算完成转换。

最后通过噪声协方差矩阵更新公式来利用卡尔曼系数更新最佳估计值的噪声分布。此次得到的协方差矩阵是留给下一次迭代时使用的。

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

卡尔曼滤波通俗易懂的解释 的相关文章

  • ADC采样滤波算法利用卡尔曼滤波算法详解

    1 ADC采样模型 xff08 本文为笔者早期所写 xff0c 当时对卡尔曼滤波器理解尚未透彻 xff0c 如今回顾 xff0c 该模型还有所缺陷 xff0c 推荐读者看卡尔曼的推导过程或者B站大佬Dr CAN的空间 xff09 假设ADC
  • 微信支付趟过的坑

    这段时间在做微信支付开发 xff0c 在公司的公众号审批下来后 xff0c 我这边的测试用例也已经开发完毕 xff0c 于是拿着具体的数据来调试了 xff0c 大段大段的代码就不贴了 xff0c demo里有 xff0c 这里就说说调试过程
  • java底层原理

    Java运行三部曲 xff1a 编写 xff0c 编译 xff0c 运行 编写 xff1a 硬件编写代码 xff0c 就是我们写代码 编译 xff1a javac将文件编译成一个或多个 class文件 编译中间的过程主要是类型和格式的检查
  • 信息化时代下的我们----弄潮儿

    读完 信息化与信息管理实践之道 的部分章节想起了 第三次浪潮 中的一段话 xff0c 摘录如下 人类到现在已经经历了两次巨大的变革浪潮 这两次浪潮都淹没了早先的文明和文化 xff0c 都是以前人所不能想象的生活方式 xff0c 替代了原来的
  • ORB-SLAM稠密点云地图构建(黑白+彩色)+ pcd文件以八叉树形式表示

    pcl1 8 1 VTK 7 1 1 版本一定要对好 xff0c 如果安装了不符的版本如我之前安的pcl1 1 3和VTK8 2 一定要卸载干净不然会一直报错 xff0c 不同版本的pcl和vtk是无法共存的 xff0c 并且光把包删除是不
  • 一步步学习多线程(一) 重要概念

    几个重要的概念 1 同步 xff08 synchronous xff09 和 异步 xff08 asynchronous xff09 2 并发 xff08 Concurrency xff09 和 并行 xff08 Parallelism x
  • MAVLink功能开发,移植教程。

    MAVLink功能开发 本文由 智御电子 提供 xff0c 同时提供视频移植教程 xff0c 以便电子爱好者交流学习 1 MAVLink简介 MAVLink是一种针对微型飞行器 xff0c 推出的轻量化 xff0c 仅由头文件信息编码而成的
  • workerman问题总结大全及解决方案

    workerman无法正常访问 问题描述 xff1a 在阿里云ECS上部署了workerman的应用 xff08 ECS是专有网络 xff09 xff0c 在ECS安全组里已经允许workerman需要的全部端口 xff0c 但是外网一直不
  • Eclipse Android开发遇到:"The type org.apache.http.HttpResponse cannot be resolved."问题的解决办法

    今天在做手机卫士的项目中 xff0c 在联网下载的功能模块中遇到The type org apache http HttpResponse cannot be resolved It is indirectly referenced fro
  • UG创建图纸明细表失败的情况

    今天进行UG二次开发的时候 xff0c 由于要在图纸中自动加入零件明细表 xff0c 但是当我在图纸中插入明细表的时候UG会弹出错误对话框 xff1a 当打开UGII UPDATE ALL ID SYMBOLS WITH PLIST变量时
  • 字符串末尾自动加上'\0'的情况

    之前一直都有一个问题困扰着我 xff0c 就是我们知道C风格的字符串在用strlen求长度时只会遇到 39 0 39 结束 xff0c 如果一个字符数组全部填满了 xff0c 而在末尾没有加上 39 0 39 就会出现结果不定的现象 xff
  • c++类成员变量的初始化顺序以及特殊成员的初始化方法规则

    说到类的成员变量的初始化顺序 xff0c 对于初学者很多容易混淆其顺序 xff0c 以为简单的按初始表来初始化 xff0c 其实不然 xff0c 现在我来详细讲解下类的初始化顺序 xff1a 首先由简单开始 xff1a class peop
  • deque 迭代器失效的问题详解

    今天在看STL源码的时候 xff0c 无意写了如下的代码 xff0c 发现程序崩溃了 xff1a lt span style 61 34 font size 14px 34 gt deque lt int gt iterator iter
  • Python中__init__.py文件的作用

    在创建python包的过程中 xff0c IDE都会在包根目录下创建一个 init py文件 xff0c 该Python文件默认是空的 目录结构如下 xff1a Pycharm下的package树结构 xff1a 在Finder中的目录结构
  • 使用Ajax以及CSS+DIV高仿谷歌搜索(附源码下载)

    在使用 Google 搜索或者是 Baidu 搜索的时候 xff0c 在输入搜索关键字的同时 xff0c 会自动弹出匹配的其他关键字的提示 xff0c 全心全意为人民服务的精神在这里崭露无遗 这种利用 Ajax 技术实现输入提示和自动完成的
  • 导致索引失效的可能情况

    如下是可能导致索引失效的情况 xff1a 1 xff0e 隐式转换导致索引失效 这一点应当引起重视 也是开发中经常会犯的错误 由于表的字段tu mdn定义为varchar2 20 但在查询时把该字段作为number类型以where条件传给O
  • 二叉搜索树的增删查

    今天把搜索二叉树的思路又理了一遍 xff0c 把代码又从头到尾敲了一遍 xff0c 各位看客就不要在意代码粗糙和内存溢出了 xff0c 主要把插入和删除的过程理了一遍 xff0c 其中比较复杂的地方就是搜索二叉树的删除 xff0c 涉及了很
  • 中缀表达式转前缀和后缀表达式

    之前笔试中国电信IT研发中心的时候 xff0c 遇到了几个前 中 后缀表达式的相互转换 xff0c 当时忘得差不多了 xff0c 今天好好把该方面的知识好好复习 xff0c 并把相关代码和思路自己缕了一遍 xff1a 将中缀表达式转换为前缀
  • java prometheus 自定义exporter开发,以及实现多个接口返回metrics

    普罗 自定义exporter开发 exporter的作用是采集需要监控的数据 xff0c 并将采集到的数据转换成prometheus所需要的数据格式 xff0c 将这些转换后的数据返回 xff0c 供给prometheus 使用 java
  • 双系统重装Ubuntu经验分享

    真的很喜欢ubuntu 但又没有恒心把它学通透 xff0c 毕竟不是相关专业 第一次重装是因为没多少经验 xff0c 安装qqforlinux的时候多了两个东西 xff0c 还自己生成了快捷方式 xff0c 就想点开看看是啥 xff0c 结

随机推荐

  • 还在迷茫不知Dashboard是什么?答案在文中揭晓

    Dashboard的中文翻译是 仪表盘 xff0c 与汽车的仪表盘相同 一种反映车辆各系统工作状况的装置 xff0c 有车速里程表 转速表 燃油表等 司机可以很方便地从汽车仪表盘中获得汽车整体状况 而Dashboard沿袭了汽车仪表盘理念
  • 问题:UPDATE 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'。

    解决方案 1 你可以在TSQL前Set ARITHABORT ON 代码如下 Set ARITHABORT ON GO INSERT INTO ta 2 在ADO NET中 你可以这样来写 C 代码 MyConnection Execute
  • 智能制造:三体智能革命

    赵敏 宁振波 郭朝晖是走向智能研究院资深专家 xff0c 三体智能革命 编委会中三位重要作者 他们从去年5月起多次参加了中国工程院主持的 中国智能制造发展战略研究报告 的研讨 评审与修订工作 xff0c 对该报告的形成过程 研究主旨和详细内
  • 小觅相机SDK samples安装Link error: cannot find -lvtkproj4

    Link error cannot find lvtkproj4 error ld returned 1 exit status 找不到相关动态库文件 设置软链接 xff1a ln s usr lib x86 64 linux gnu li
  • 年度回忆录(2011.12----2012.09)

    前几天刚刚参加了提高班十期的开学典礼 xff0c 最近师院的新生也陆 陆续 续的开始报道了 每年到这个时候都会感慨 年年岁岁花相似 xff0c 年年岁岁人不同 啊 对于提高班来说每年都有新的血液注入进来 xff0c 提高班的队伍在不断的扩大
  • python函数(变量,参数)

    函数的变量 1 xff0c 全局变量 定义在最外层的变量 xff0c 对于所有的内函数都能调用 2 xff0c 局部变量 定义在函数内的变量叫做局部变量 xff0c 在函数外是不能访问局部变量 注 xff1a 全局变量不能直接在函数内部进行
  • 程序员读书和练习的方法(个人观点)

    lt 传送门 gt 针对本文的交流探讨 gt 总宗旨 xff1a 打好计算机通用理论基础 通用实战能力 xff0c 便于需要时对各领域的无障碍深钻 时间宝贵 xff0c 不要为了学习而学习 计算机通用理论基础 xff1a 计算机各领域理论基
  • 从零开始的Ubuntu 16.04下PX4编译环境的搭建

    近来入手了一块pixhawk xff0c 想进行一些基于已有代码的二次加工 xff0c 于是到官网https dev px4 io 上看教程 官网上的教程是分为中文 英文以及韩文的版本 很多人肯定第一反应就是看中文的版本 但是这样做弊端真的
  • 驱动程序开发:SPI设备驱动

    目录 Linux下SPI驱动简介SPI架构概述SPI适配器 xff08 控制器 xff09 SPI设备驱动spi driver注册示例SPI 设备和驱动匹配过程编写imc20608六轴传感器SPI驱动设备树编写操作具体的imc20608驱动
  • 操作系统知识点(二)

    文章目录 内存管理程序执行过程内存保护 连续分配非连续分配基本分页存储管理方式基本分段存储管理方式段页式存储管理方式 虚拟内存局部性原理请求分页存储管理 内存管理 内存管理 Memory Management 是操作系统设计中最重要和最复杂
  • VR行业发展的前景和现状?

    标题 VR行业发展的前景和现状 xff1f 1 一个新事物的产生 xff0c 总是伴随着看好和唱衰两种声音 这两种态度自然有其可以理解的地方 xff0c 因为摆在我们面前的是未知 xff0c 而坐在餐桌前的两拨人 xff0c 站在不同的角度
  • 头文件与库的区别

    昨天突然问了一下什么是头文件 xff0c 我一听就傻了 xff0c 虽然上课的时候老师在讲编译的四个过程的时候说了一下 xff0c 但是还是不太理解 xff0c 我们知道编译过程中的预处理阶段会进行头文件展开 xff0c 宏替换以及条件编译
  • 进程、线程

    线程 xff08 thread xff09 线程其实是操作系统能够进行运算调度的最小单位 它是被包含在进程之中的 xff0c 是进程中的实际运作单位 一条线程指的是进程中一个单一顺序的控制流 xff0c 一个进程中可以并发多个线程 xff0
  • 基于Zynq7020双千兆以太网的数字信号处理板设计

    一 背景 背景 Xilinx公司在2010年发布了可扩展的处理器平台Zynq7000系列 xff0c 它采用了28nm工艺 xff0c 将FPGA与ARM cortex A9集成在一颗芯片上 xff0c 实现了高性能 高集成度 低功耗 Zy
  • 深入理解JS中的变量作用域

    在 JS 当中一个变量的作用域 xff08 scope xff09 是程序中定义这个变量的区域 变量分为两类 xff1a 全局 xff08 global xff09 的和局部的 其中全局变量的作用域是全局性的 xff0c 即在 JavaSc
  • 硬件工程师,从零开始无人机开发。

    毕业已经五年了 xff0c 一直在杭州某大厂 xff0c 做无人机硬件开发 无人机这块 xff0c 我进去的时候大厂刚开始 做 xff0c 有幸参与到整个无人机的硬件开发 我这个刚毕业的技术小白 xff0c 在这五年间成长了很多 无奈 今年
  • 个人总结:板球控制系统之串级PID整定方法,速度环与位置环,40S任务10S完成

    其实单环我们先出了所有题目 xff0c 但是效果显然没有串级PID的效果好 xff0c 有人需要的话可以把程序包发出来 xff0c 板球运行视屏也有 另外 xff1a 天下舵机参差不齐 xff08 哪怕型号相同 xff09 xff0c 想要
  • 树莓派3B+踩坑记录:一、安装Ubuntu Mate

    树莓派3B 43 踩坑记录 xff1a 一 安装Ubuntu Mate 树莓派 xff0c Ubuntu xff0c ROS硬件准备软件准备系统烧录安装Ubuntu Mate更换国内源网络配置开启ssh远程其他彩虹屏解决方案XShell和X
  • PointNet代码详解

    PointNet代码详解 最近在做点云深度学习的机器人抓取 xff0c 这篇博客主要是把近期学习PointNet的一些总结的知识点汇总一下 PointNet概述详见以下网址和博客 xff0c 这里也就不再赘述了 三维深度学习之pointne
  • 卡尔曼滤波通俗易懂的解释

    关于卡尔曼滤波 xff0c 网上的资料很多 xff0c 但是有很大一部分都是不断堆叠公式 xff0c 然后用各种晦涩难懂的专业术语进行解释 xff0c 说实话我刚开始看的时候也是云里雾里 xff0c 因此写下这篇博客是为了照顾和我一样的萌新