[Python|最优状态估计与滤波学习笔记] 最小均方滤波,卡尔曼滤波,神经网络滤波

2023-05-16

文章目录

  • 前言—最优状态估计与滤波
  • 1、最小均方滤波(Least Mean Square, LMS)
    • 基本原理
    • LMS设计步骤
    • 仿真代码
  • 2、线性卡尔曼滤波(Linear Kalman Filter, KF)
    • 使用示例
    • 基本步骤
    • 仿真模型
    • 仿真结果
    • 线性卡尔曼的局限
      • 噪声影响
      • 建模误差
  • 3、H无穷卡尔曼滤波(H-infinite KF)
  • 4、扩展卡尔曼滤波(Extend Kalman Filter, EKF)
  • 5、无迹卡尔曼滤波(Unscented Kalman Filter, UKF)
  • 6、神经网络滤波(Neural Networks Filter, NNF)
  • 持续更新中。。。

前言—最优状态估计与滤波

卡尔曼滤波器在Python的filterpy模块里面全都有:线性卡尔曼,扩展卡尔曼和无极卡尔曼。这里记录自己的学习。

1、最小均方滤波(Least Mean Square, LMS)

基本原理

最小均方滤波大致思路:对于一大段受到噪声干扰的数据,如果能从中获取到一小段不含噪声的理想数据,则可以通过理想数据和受干扰的数据训练出来一个滤波器,这个滤波器通过学习可以自己滤掉干扰噪声。这和神经网络或者机器学习有相似的地方。原理图如下所示:
在这里插入图片描述
d(n)为理想数据序列,w(n)为实际数据序列。

LMS设计步骤

对于LMS滤波器,首先提几个很重要的参数:滤波器的阶数—ord(有的也叫抽头)、训练步长train_len,学习率learning_rate,后面一一用到再介绍。现在假设有一个包含噪声的序列X,然后还知道序列X中X(1)~X(m)(假设序列编号是从1开始,且X是列向量)这一段序列的真实值为X_ideal。则设计LMS滤波器的步骤为:

  • 1、首先初定一个阶数ord和训练步长train_len(随便确定两个整数即可,但要求满足ord+train_len<=m);
  • 2、定义一个权值矩阵(列向量)W,大小为(ord,1),初值全部设置为0;
  • 3、计算序列X的自相关矩阵,即:A = X*tranpose(X),同时计算矩阵A的最大特征值eigA_max,则学习率learning_rate = 1/abs(eigA_max);
  • 4、接下来则开始一个循环:
    for (i=1;i<=train;i++)
    		W = W - 2*learning_rate*(tranpose(X(i:i+ord))*W-X_ideal(i:i+ord))
    
    循环结束后的W即为训练完的权值矩阵。
  • 5、最后,利用训练完的权值矩阵则直接可以对X序列进行滤波了,即:
    X_ideal(k) = tranpose(X(k-ord,k))*W
    

上面可以看出,滤波输出为当前测量值和之前若干测量值的加权求和,这种权值就是通过学习训练得到,尤其是第4步更新权值的算法,就是梯度下降,这种过程和神经网络的训练很类似。这里的性能函数为:
在这里插入图片描述

仿真代码

这里序列是1000个数据点,用于训练的数据点是125个。

import numpy as np
import matplotlib.pyplot as plt


class LMSFilter():
    def __init__(self, ideal_sequence, real_sequence, filter_ord, learning_rate, train_len):
        '''
        :param ideal_sequence:理想输出序列
        :param real_sequence:实际输出序列
        :param filter_ord:滤波器阶数
        :param learning_rate:学习率
        :param train_len:训练长度
        '''
        self.ideal_sequence = ideal_sequence
        self.real_sequence = real_sequence
        self.filter_ord = filter_ord
        self.learning_rate = learning_rate
        self.train_len = train_len
        self.__Train()

    def __Train(self):
        self.W = np.zeros(self.filter_ord)#权值矩阵
        for i in range(self.filter_ord - 1, self.filter_ord + self.train_len):
            measured = self.real_sequence[i - self.filter_ord + 1: i+1]
            y_ideal = self.ideal_sequence[i]
            y_real = np.matmul(measured, self.W)
            error = y_real - y_ideal
            self.W = self.W - 2*self.learning_rate*error*measured

    def Filter(self):
        '''
        :return:返回滤波值和滤波误差
        '''
        self.y_filtered = np.zeros(len(self.real_sequence))#定义一个矩阵存放滤波后的值
        self.y_filtered[:] = None#初始化,用于训练的数据段不需要输出。
        for i in range(self.filter_ord + self.train_len, len(self.real_sequence)):
            measured = self.real_sequence[i - self.filter_ord + 1: i+1]
            self.y_filtered[i] = np.matmul(measured, self.W)
        self.error = self.ideal_sequence - self.y_filtered
        return self.y_filtered, self.error


if __name__=="__main__":
    t = np.linspace(0,10,1000)#时间序列
    noise = 50*np.random.randn(1000)#噪声序列
    X_ideal = 100*np.sin(t)#理想序列
    Measured = X_ideal + noise#实际测量序列
    A = np.array([Measured])#求输入序自相关矩阵的特征值
    B = np.matmul(np.transpose(A),A)
    Eig = np.linalg.eig(B)
    learning_rate = 1/max(abs(Eig[0]))#学习率取最大特征值的倒数
    Example = LMSFilter(X_ideal, Measured, 25, learning_rate, 100)#初始化一个LMS,并开始训练
    Filtered, Error = Example.Filter()#返回寻训练后的LMS滤波器
    F1, = plt.plot(t, Measured, color='r')
    F2, = plt.plot(t, Filtered, color='b')
    F3, = plt.plot(t, X_ideal, color='k')
    F4, = plt.plot(t, Error, color='y')
    plt.legend(handles=[F1, F2, F3, F4], labels=['Measured', 'Filtered', 'Ideal', 'Error'])
    plt.show()

结果:
在这里插入图片描述
可以发现前面有125个点没有输出,这些点用于训练了,所以不拿来再作为测试数据(类似神经网络里面的测试集和训练集)。可以发现,滤波效果有,但不是很好,这里的噪声为平稳随机噪声。LMS的几个参数对滤波效果有很大的影响,可以自己改改相应试一试。

2、线性卡尔曼滤波(Linear Kalman Filter, KF)

使用示例

考虑一个真实的物理系统:一辆汽车,当汽车运动起来后,车就具有速度,同时车在大地坐标系的位置也会发生改变。现在,考虑这样一个问题。如果有一套GPS安装在车上面,就可以实时获得车辆的坐标和速度。但是,对于任何一个测量信号入股不进行滤波的话将会有噪声成分干扰测量。此外,GPS是一种低频信号(10Hz左右),想想当汽车以120km/h速度行驶时候,在120/3.6x0.1=3.3m内是无法知道汽车的真实位置。因此,卡尔曼滤波器一个很重要的应用就是GPS与惯导的融合(GPS与IMU融合介绍)。接下来,就以这种融合做一个很简单线性卡尔曼滤波的示例(示例很简单,并不是严格的GPS与IMU融合)。

基本步骤

线性卡尔曼滤波器是一种基于模型的滤波器,在使用时必须建立起研究对象相对精确的状态空间方程。线性卡尔曼滤波的理论推导网上很多,这里不重复。卡尔曼的基本步骤是“计算先验状态和协方差”—>“计算卡尔曼增益”—>“计算后验状态和协方差”。

仿真模型

仿真模型为一个在平面二维运动汽车,汽车的状态有X坐标,Y坐标,X方向速度和Y方向速度,这里假设利用GPS测量汽车的坐标信息,利用IMU测量汽车的加速度Ax和Ay。汽车运动方程具体矩阵A、B、C参数见程序[Main.py]

# Main.py
# linear system
# X(k + 1) = AX(k) + BU(k)
# Y(K + 1) = CX(k + 1)
from LKFilter import *
import matplotlib.pyplot as plt
import math

if __name__=="__main__":
    T = 0.01#时间采样步长
    N = 0#计数器,乘以T后用来输出连续时间
    A = np.matrix([1, 0, T, 0, 0, 1, 0, T, 0, 0, 1, 0, 0, 0, 0, 1]).reshape(4, 4)#状态矩阵
    B = np.matrix([0.5 * T ** 2, 0, 0, 0.5 * T ** 2, T, 0, 0, T]).reshape(4, 2)#输入矩阵
    C = np.matrix([1, 0, 0, 0, 0, 1, 0, 0]).reshape(2, 4)#输出矩阵
    I = np.eye(4)#单位矩阵
    Q = np.diag((0.0, 0.0, 0.0, 0.0))#系统噪声协方差矩阵
    R = np.diag((0.1, 0.1))#测量噪声协方差矩阵
    X_est = np.matrix([0.0, 0., 0.0, 0.]).reshape(4, 1)  # 后验状态初始化
    X_pre = np.matrix([0., 0., 0., 0.]).reshape(4, 1)  # 先验状态初始化
    X_true = np.matrix([0., 0., 0., 0.]).reshape(4, 1)  # 真实状态初始化
    Y_observed = np.matrix([0., 0.]).reshape(2, 1)  # 测量值初始化
    P0 = np.diag((10, 10, 0, 0))  # 初始状态协方差矩阵

    Example = KFilter(A, B, C, Q, R, T, P0, X_true, X_est)#实例化一个线性卡尔曼滤波器

    while True:
        N+=1
        Ax = 30 * np.sin(2 * math.pi * N*T)#x方向加速度
        Ay = 90 * np.cos(2 * math.pi * N*T)#y方向加速度
        U = np.array([Ax, Ay]).reshape(2, 1)#组合成输入向量
        W = np.matmul(np.sqrt(Q), np.random.randn(4).reshape(4, 1))#系统噪声矩阵,这里放在while循环里面,每次都可以产生一个随机矩阵
        V = np.matmul(np.sqrt(R), np.random.randn(2).reshape(2, 1))#测量噪声矩阵
        '''利用上述的矩阵来构建一个仿真系统'''
        X_true_tem = np.matmul(A, X_true[:, -1]) + np.matmul(B, U) + W
        X_true = np.column_stack((X_true, X_true_tem))#真实的状态序列,这里用了column_stack,就是将每一个的更新的状态放在X_true后面,便于最后画图
        Y_observed_tem = np.matmul(C, X_true[:, -1]) + V
        Y_observed = np.column_stack((Y_observed, Y_observed_tem))
        '''调用线性Kalman滤波'''
        Result = Example.Kalman(Y_observed[:, -1], U)#这个方法的输入参数是当前时刻系统的测量值Y_observed[:, -1]和输入U,返回的是时间序列,所有时刻的观测状态与测量值
        '''画图,注意Result中返回的值属于numpy.matrix型数据不是array型,在plot的时候要转换一下'''
        plt.clf()
        plt.figure(1)
        plt.plot(np.array(Result[0][0, :])[0], np.array(Result[1][0, :])[0], label='Estimated X')
        plt.plot(np.array(Result[0][0, :])[0], np.array(Result[2][0, :])[0], label='Measured X')
        plt.plot(np.array(Result[0][0, :])[0], np.array(X_true[0, :])[0], label='Real X')
        plt.xlabel('Time[s]')
        plt.ylabel('X coordinate[m]')
        if N == 1:
            plt.legend()
        plt.figure(2)
        plt.plot(np.array(Result[1][0, :])[0], np.array(Result[1][1, :])[0], label='Estimated X-Y')
        plt.plot(np.array(Result[2][0, :])[0], np.array(Result[2][1, :])[0], label='Measured X-Y')
        plt.plot(np.array(X_true[0, :])[0], np.array(X_true[1, :])[0], label='Real X-Y')
        plt.xlabel('X coordinate[m]')
        plt.ylabel('Y coordinate[m]')
        plt.pause(0.01)
        plt.ioff()

线性卡尔曼滤波算法,文件名KFilter.py。

# Linear System Kalman Filter
# X(k + 1) = AX(k) + BU(k) + W(k)
# Y(K + 1) = CX(k + 1) + V(k)
# Developed by OldYoung
import numpy as np

class KFilter:
    def __init__(self, A, B, C, Q, R, T, P0_ini, X_true_ini, X_est_ini):
        '''
        :param A:State matrix
        :param B:Input matrix
        :param C:Transfer matrix
        :param Q:System noise covariance
        :param R:Measurement noise covariance
        :param T:Sample time
        :param P0_ini:Initial covariance matrix of state
        :param X_true_ini:Initial value of true states
        :param X_est_ini:Initial value of estimated states
        '''
        self.A = A
        self.B = B
        self.C = C
        self.Q = Q
        self.R = R
        self.A_shape = A.shape
        self.C_shape = C.shape
        self.P0 = P0_ini
        self.T = T
        self.N = 0
        self.I = np.eye(self.A_shape[0])
        self.t = np.matrix(np.zeros((1, 1)))
        self.Y_measured = np.matrix([0.] * self.C_shape[0]).reshape(self.C_shape[0], 1)
        self.Y_true = np.matrix([0.] * self.C_shape[0]).reshape(self.C_shape[0], 1)
        self.X_estimated = X_est_ini
        self.X_true = X_true_ini

    def Kalman(self, Y_measured, U):
        '''
        :param Y_measured: Measured output
        :param U:Input
        :return:[time, estimated states, measured output]
        '''
        self.N += 1
        self.t = np.column_stack((self.t, np.matrix([self.N * self.T])))
        self.Y_measured = np.column_stack((self.Y_measured, Y_measured))
        self.X_pre = np.matmul(self.A, self.X_estimated[:, -1]) + np.matmul(self.B, U)#预测
        self.P_pre = np.matmul(np.matmul(self.A, self.P0), np.transpose(self.A)) + self.Q#预测
        self.K = np.matmul(np.matmul(self.P_pre, np.transpose(self.C)),
                           np.linalg.pinv(np.matmul(np.matmul(self.C, self.P_pre), np.transpose(self.C)) + self.R))#计算卡尔曼增益
        self.X_est_tem = self.X_pre + np.matmul(self.K, self.Y_measured[:, -1] - np.matmul(self.C, self.X_pre))#校正
        self.X_estimated = np.column_stack((self.X_estimated, self.X_est_tem))
        self.P0 = np.matmul(np.matmul(self.I - np.matmul(self.K, self.C), self.P_pre),
                            np.transpose(self.I - np.matmul(self.K, self.C))) + np.matmul(np.matmul(self.K, self.R), np.transpose(self.K))#更新协方差矩阵
        return [self.t, self.X_estimated, self.Y_measured]

仿真结果

可以看到,卡尔曼滤波后的位置与真实位置很接近。

  • “t—X”轴观测结果:
    在这里插入图片描述
  • “X—Y”坐标系观测结果:
    在这里插入图片描述

线性卡尔曼的局限

上面结果表明线性卡尔曼滤波具有很好的效果。但是,线性卡尔曼是一种基于模型的滤波方法。也就是说,如果没有系统建模方程是不能用卡尔曼滤波(和LMS这些基于数据的滤波器是不一样的)。并且,如果建立的模型不够精确,也会导致卡尔曼滤波效果变差甚至发散。此外,设计滤波器的时候,系统噪声和测量噪声要求为高斯白噪声且需要知道噪声的统计信息,这在实际应用中很难满足要求。

噪声影响

为了对比,将上面程序Main.py的17、24、32行程序做一下改动,增加一个噪声R1,假设这是测量噪声的真实值,并带入测量矩阵V,但是在给滤波器实例化传递参数的时候仍然给R。可以发现,此时的卡尔曼滤波效果相对变差了一些。值得注意的是,系统噪声一直设为0,因为系统噪声本身就很难测量和估计,这里就不研究了

R = np.diag((0.1, 0.1))  # 假定测量噪声协方差矩阵
R1 = np.diag((1, 1))#真实测量噪声协方差矩阵
Example = KFilter(A, B, C, Q, R, T, P0, X_true, X_est)#实例化一个线性卡尔曼滤波器
V = np.matmul(np.sqrt(R1), np.random.randn(2).reshape(2, 1))#测量噪声矩阵

在这里插入图片描述
在这里插入图片描述

建模误差

同样,将上面程序Main.py的13、34行程序做一下改动,B看作是我们建立的模型的输入矩阵,而B1是真实模型输入矩阵。同样,用一个不精确的B去初始化卡尔曼滤波器。可以发现,此时的卡尔曼滤波器的效果变得更差,和真实值有很大的出入。

B = np.matrix([0.5 * T ** 2, 0, 0, 0.5 * T ** 2, T, 0, 0, T]).reshape(4, 2)#建模输入矩阵
B1 = np.matrix([0.5 * T ** 2, 0, 0, 0.5 * T ** 2, 1.2*T, 0, 0, T]).reshape(4, 2)#真实输入矩阵
Example = KFilter(A, B, C, Q, R, T, P0, X_true, X_est)#实例化一个线性卡尔曼滤波器
X_true_tem = np.matmul(A, X_true[:, -1]) + np.matmul(B1, U) + W

在这里插入图片描述
在这里插入图片描述
总结:线性卡尔曼滤波最早是用在航空航天领域,可以花巨资获取精确的数学模型,效果很好。但后来移植到普通工业应用时,受成本和技术限制,不能获得精确的系统模型和噪声统计特性,上述局限就暴露出来。换句话说,线性卡尔曼滤波器的鲁棒性较差(鲁棒性:控制器或观测器在系统未建模动态和不确定干扰影响下能保持较好性能的能力)。H无穷大卡尔曼滤波器正是为了提升传统卡尔曼的鲁棒性而产生的。

3、H无穷卡尔曼滤波(H-infinite KF)

4、扩展卡尔曼滤波(Extend Kalman Filter, EKF)

5、无迹卡尔曼滤波(Unscented Kalman Filter, UKF)

6、神经网络滤波(Neural Networks Filter, NNF)

持续更新中。。。

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

[Python|最优状态估计与滤波学习笔记] 最小均方滤波,卡尔曼滤波,神经网络滤波 的相关文章

  • STM32实现四驱小车(四)姿态控制任务——偏航角串级PID控制算法

    目录 一 绪论二 角度环串级PID原理1 PID基本算法2 姿态角串级PID原理 三 如何用STM32实现角度 角速度的串级PID控制1 PID算法的代码实现2 串级PID算法的代码实现 四 UCOS III姿态控制任务的实现 一 绪论 这
  • resource not found: ROS path [0]=/opt/ros/kinetic/share/ros ROS path [1]=/opt/ros/kinetic/sh

    问题 xff1a 1 resource not found ROS path 0 61 opt ros kinetic share ros ROS path 1 61 opt ros kinetic sh 2 Running xacro f
  • C++问题及解决记录

    目录 1 xff0c 无法include问题 2 xff0c c 43 43 多线程如何调试 3 opencv两个mat 相减 xff0c 从数学计算上不应为0 xff0c 但是结果为0 4 代码正确但是还是报错的问题 1 xff0c 无法
  • freertos任务管理

    TODO xff08 未完待续 xff09 核心调度器的调度实现部分介绍完成时间片的处理介绍完成任务切换处理介绍完成空闲任务未完成定时器任务未介绍完成通信方式实现未介绍完成 freertos概述 freertos属于小系统实时操作系统 xf
  • docker build

    docker build命令会根据Dockerfile文件及上下文构建新Docker镜像 构建上下文是指Dockerfile所在的本地路径或一个URL xff08 Git仓库地址 xff09 构建上下文环境会被递归处理 xff0c 所以 x
  • FreeRTOS任务间通信方式——队列

    一 三种任务调度方式 优先级抢占式调度 每个任务都赋予了一个优先级每个任务都可以存在于一个或多个状态在任何时候都只有一个任务可以处于运行状态调度器总是在所有处于就绪态的任务中选择具有最高优先级的任务来执行 选择任务优先级 这种任务调度方式是
  • 改变ros bag 中消息的frame_id 和话题名

    1 改变话题名 参考链接 https blog csdn net ethan guo article details 80262650 rosbag play file bag foo 61 bar foo是原topic xff0c bar
  • ROS下单目相机标定过程

    下面简单记录一下我利用ros标定相机参数的过程 xff0c Ubuntu 16 04 xff0c 摄像头用的罗技C920 ROSwiki有相机矫正的官方文档 xff0c 有单目的也有立体相机的教程 xff0c 建议直接看原文 xff0c 原
  • ADC与DMA回顾

    12位ADC是一种逐次逼近型模拟数字转换器 它有多达18个通道 xff0c 可测量16个外部和2个内部信号源 各通道的A D转换可以单次 连续 扫描或间断模式执行 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中 ADC 的输入时
  • C++实现rviz 2D Pose Estimate 功能设置机器人初始坐标

    1 首先查看设置初始坐标的话题 为 intialpose xff0c 查看消息类型和格式从而决定怎么给它发数据 xff08 1 xff09 首先打开一个可以自动导航的项目文件 xff0c 打开rviz xff0c 点击2D Pose Est
  • PHPWord 导出模版Word文件,无法打开,提示xml pasring error

    最近在处理网站批量导出模版word时 xff0c 遇到一个问题 xff1a 网站是用PHP语言编写的 xff0c 导出模版word xff08 即将用户填写内容动态的插入word相应位置 xff0c 生成 doc或 docx文件 xff09
  • windows多线程分析——Semaphore(信号量)

    Semaphore相当于升级版的Mutex xff0c 因为当CreateSemaphore NULL 1 1 NULL 中第三个参数为1时 xff0c 就相当于是在CreateMutex 看一个CreateSemaphore NULL 1
  • windows下的tensorflow安装教程

    转载 xff1a https www cnblogs com lvsling p 8672404 html https blog csdn net Eppley article details 79297503 一 前言 本次安装tenso
  • TX2学习笔记(1)——NVIDIA Jetson TX2 开箱上电

    期待已久的NVIDIA Jetson TX2终于到货了 xff0c 迫不及待拆箱上电学习学习 xff01 第一次接触这么高配置的板子 xff0c 拆箱上电还是比较束手束脚 xff0c 怕一不小心就弄坏了 xff0c 好在这板子质量确实可以
  • 从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现tcp网络通信(二)

    从零开始Cubemx配置STM32搭载freeRTOS以及lwip实现网络通信 引言CubeMX配置以太网以及LWIP实现一个回环功能 xff08 裸机 xff09 ETH配置LWIP配置 CubeMX配置以太网以及LWIP实现一个回环功能
  • 让电脑使用手机的摄像头做直播

    一 xff0c 软件准备 xff08 1 xff09 直播软件 xff1a bilibili直播姬 xff08 2 xff09 摄像头工具 xff1a DroidCam xff0c PC端和手机端 xff08 提取码 xff1a 43n1
  • pixhawk 开发日记--开发环境搭建

    我用的是Ubuntu20 04 一 源码下载 编译 烧写 1 下载源码 git clone https github com PX4 PX4 Autopilot git recursive 2 下载子仓库代码 git submodule u
  • APM中SBUS信号解析

    一 SBUS信号概述 SBUS信号以串口传输 xff0c 波特率为100000bps 每2ms一帧 xff0c 一帧25个字节 其中第0字节为起始帧 xff0c 固定为0x0F 第24字节为帧尾 第1 22字节为1 16比例通道数据字节 第
  • 使用simulink分析APM日志信息

    一 将bin转化成mat文件 使用mission planner将bin文件转化成mat文件 二 将工作区变量转化成timeserial对象 RCIN TimeSerial 61 timeseries RCIN 3 RCIN 2 1e6 三
  • Alexa The required native libraries are named “libvlc.dll”

    The required native libraries are named 34 libvlc dll 34 and 34 libvlccore dll 34 In the text below lt libvlc path gt re

随机推荐

  • APM 新版电机电调校准

    旧版的APM电机电调校准需要将油门开到最大后给飞控上电 xff0c 使飞控黄灯常亮后断电 xff0c 继续保持最大油门再给飞控上电 xff0c 听到嘀嘀嘀三声后表示收到遥控器最大油门信号 xff0c 之后再将油门打到最低 xff0c 听到滴
  • APM日志格式表

    APM的日志格式文件在libraries AP Logger LogStructure h文件中 xff0c 二进制数据类型对照表如下 xff1a 单位对照表如下 xff1a
  • APM电机输出逻辑之二

    APM 飞控代码用c 43 43 编写 xff0c 代码中用了很多多态的特性 电机输出相关的函数在void Copter motors output 函数中 由于在Copter类中包含了AP MotorsMulticopter类的实例化对象
  • win11安装ubuntu子系统与桌面 填坑记录

    win11安装ubuntu子系统 win11可以直接从应用市场安装ubuntu子系统 详细安装步骤见参考资料 这里列出一些博主遇到的问题 填坑之路 从应用市场获取ubuntu系统时会报0x80240438或者0x80072efd等错误 网络
  • 机械革命电脑安装Ubuntu18.04+win10正版双系统

    一 电脑设置 系统默认安装了Win10 由于win10系统UEFI的限制 xff0c 其他系统无法加载 因此要装双系统 xff0c 必须先把UEFI模式改成Legacy模式 xff0c 并将Security Boot 改为Disabled
  • python+opencv3生成一个自定义纯色图

    一 图像在计算机中存储为矩阵 矩阵上一个点表示一个像素 若矩阵由一系列0 xff5e 255的整数值组成 xff0c 则表现为灰度图 便于理解 xff0c 以下贴出代码 import cv2 import numpy as np img 6
  • opencv+CUDA9.1+vs2015环境搭建,编译opencv库,调用GPU加速运算

    1 准备工作 xff08 需要用的软件安装 xff09 1 1安装VS2015 CUDA是以VS为基础的 xff0c 因此要先安装VS 安装CUDA的时候会自动检测VS的版本 安装步骤较简单 xff0c 下载在线安装程序之后双击即可 xff
  • px4 mavlink消息自定义及其发送

    在px4源码中自定义消息 xff0c 并发送主要有以下三个大步骤 xff1a 一 自定义mavlink消息 1 在myMessage XML文件中自定义消息 xff08 注意消息ID不要与原有的重复 xff09 具体消息ID可参考这里 2
  • px4自定义uORB消息,并实现收发

    如题 xff0c 实现以上需求 主要有三个步骤 xff1a 一 添加一个新的topic 话题 以uORB test msg为例 1 在根目录中msg文件下添加uORB test msg 并在该文件中加入所需的数据 xff08 在新版本中必须
  • 两台WIN10之间通过局域网共享文件的一些坑

    两台WIN10之间共享文件有两个步骤 准备工作 确保两台电脑在同一个局域网内 xff0c 可以用网线相连 xff0c 也可以链接到同一个路由器 步骤一 xff1a 在A电脑设置共享文件 xff08 夹 xff09 xff08 1 xff09
  • 使用Cifar10训练DenseNet121

    DenseNet默认就是DenseNet BC 相对于resnet xff0c densenet权重参数更少 xff0c 鲁棒性更强 xff10 下载数据集 xff1a Cifar 10在同级文件data下 预训练权重 xff1a 39 d
  • 四旋翼PID调试步骤

    0 将飞机固定在架子上 xff0c 只保留横滚一个自由度 1 将姿态外环参数置为0 xff0c 从姿态内环开始调 由于姿态外环参数为0 xff0c 遥控器的作用量和角度的误差无效 xff0c 飞机无法维持平衡 2 先调姿态内环P xff0c
  • Ubuntu 18.04 解决ssh连接远程服务器的问题

    具体错误为 xff1a connection closed by xx xx xx xx port 22 首先确认远程主机的IP地址是正确的 xff0c 然后进行以下操作 可能原因 1 被防火墙挡了 2 端口没开放 3 ssh服务开了没 网
  • leetcode字符串的全排列题解

    解法描述 xff1a 例如 xff0c 如果集合是 a b c 那么这个集合中元素的所有排列是 a b c a c b b a c b c a c a b c b a xff0c 显然 xff0c 给定n个元素共有n 种不同的排列 xff0
  • 线性二次调节器(LQR)

    线性二次调节器 xff08 LQR xff09 线性二次调节器 xff08 LQR xff09 LQR原理LQR中的LLQR中的QLQR中的R 线性二次调节器 xff08 LQR xff09 线性二次调节器 xff08 Linear Qua
  • 二级倒立摆建模(一)

    目录 一 倒立摆系统简介 二 二级倒立摆模型构建 三 二级倒立摆的线性化模型 四 二级倒立摆的状态空间模型 一 倒立摆系统简介 倒立摆控制系统作为实验装置在控制理论领域的教学与科研工作中担任着不可或缺的角色 在对其稳定控制研究过程中 xff
  • 无人机目标检测

    导师给了个练手项目 xff0c 记录下第一个项目过程 xff1a 项目要求 xff1a 检测无人机降落时是否偏移 xff0c 识别降落点 想法是用opencv xff0c 使用传统的轮廓检测 首先把视频流转换成图片 xff1a 只提取最后两
  • 扩展卡尔曼滤波

    扩展卡尔曼滤波 xff08 Extended Kalman Filter xff0c EKF xff09 是标准卡尔曼滤波在非线性情形下的一种扩展形式 xff0c EKF算法是将非线性函数进行泰勒展开 xff0c 省略高阶项 xff0c 保
  • 相机标定(1)内\外参矩阵和畸变矩阵

    相机标定可以说是计算机视觉 机器视觉的基础 分为以下内容 xff1a 相机标定的目的和意义相机成像过程的简化与建模针孔相机模型的数学描述标定针孔相机模型的参数 相机标定的目的和意义 我们所处的世界是三维的 xff0c 而照片是二维的 xff
  • [Python|最优状态估计与滤波学习笔记] 最小均方滤波,卡尔曼滤波,神经网络滤波

    文章目录 前言 最优状态估计与滤波1 最小均方滤波 xff08 Least Mean Square LMS xff09 基本原理LMS设计步骤仿真代码 2 线性卡尔曼滤波 xff08 Linear Kalman Filter KF xff0