多传感器融合定位1(激光雷达+毫米波雷达)

2023-05-16

前言

LZ最近在看Udacity的无人驾驶课程,该课程主要分为三部分,第一部分的课程主要使用Python实现的车道线识别、车牌识别等计算机视觉项目。由于我对定位、建图等方面有些知识储备,所以先从第二部分课程开始。
本节将用最简洁的话讲解卡尔曼滤波KF、非线性卡尔曼滤波EKF等知识点,并就此实现一个多传感器融合定位的小demo,后面会就粒子滤波PF专门开一个章节讲解。

对于匀速运动模型,KF和EKF的状态预测(Predict)过程是一样的;KF和EKF唯一区别的地方在于测量值更新(Update)这一步。在测量值更新中,KF使用的测量矩阵H是不变的,而EKF的测量矩阵H是Jacobian矩阵。

本文约束:匀速运动;固定位置的传感器对小车不断测量。

一、卡尔曼滤波 KF

1、引子

1)两个传感器测量同一个信号,为了减小误差我们可以采用取平均的方式,
2)进一步的我们采用加权平均(由方差大小分配),但加权平均是一种静态分配方式。3)方差是随外界环境而变的,加权值也应该随之改变,这就是卡尔曼滤波出现的原因,它是一种动态更新加权值,不断迭代的算法。

卡尔曼滤波器就是根据上一时刻x(k-1)的状态,预测当前时刻x(k)的状态,将预测的状态x^(k)与当前时刻的测量值z进行加权,加权后的结果才认为是当前的实际状态。

2、对象:线性高斯模型,这个模型最好的地方在于两个高斯分布的乘积仍然是一高斯分布,由此实现模型的动态迭代。

3、本质:参数化的贝叶斯模型。先验估计:对下一时刻系统初步状态估计;结合先验估计以及测量反馈,得到后验估计。

4、应用:最优化自回归数据处理算法、机器人导航、雷达系统、图像处理等

2、黄金公式及推导

直接上结论,下面这个公式分为两部分,上面的是预测,下面是更新。
5个黄金公式
具体公式推导,我竟然发现了我之前的笔记,下面直接上图解释。
为了避免推导晦涩难懂,采用小汽车的模型进行一步一步的推导。

1、建立模型

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

2、简单一维小车

假设有个小车匀速运动,我们在左侧安装了一个测量小车距离和速度传感器,每秒测一次小车位置s和速度v。我们用向量 x t x_{t} xt状态向量。

由于测量误差的存在,无法获得真实值,我们可以以一个高斯分布来表示结果在各个地方出现的概率,如下图所示,在真值附近的概率最高。
公号无人驾驶干货铺
x t − 1 = [ s t − 1 v t − 1 ] x_{t-1}=\begin{bmatrix} s_{t-1}\\ v_{t-1} \end{bmatrix} xt1=[st1vt1]
接下来是使用历史信息对未来的位置进行推测,以速度v匀速行走 Δ t \Delta t Δt后,小车位置的红色区域范围变大了,这是因为预测时加入了速度估计的噪声,放大了不确定性。
公号无人驾驶干货铺
[ s t v t ] = [ 1 Δ t 0 1 ] [ s t − 1 v t − 1 ] \begin{bmatrix}s_{t}\\v_{t}\end{bmatrix}= \begin{bmatrix}1 & \Delta t\\ 0& 1\end{bmatrix}\begin{bmatrix}s_{t-1}\\v_{t-1}\end{bmatrix} [stvt]=[10Δt1][st1vt1]
此时传感器对小车做了一次观测,结果为 z

公号无人驾驶干货铺
上图蓝色区域为此时观测结果,红色为预测结果,那么最终的结果是怎样的呢?下图绿色部分给出了答案。
公号无人驾驶干货铺
在这里插入图片描述
我们对预测和观测结果用不同的权重得到最终结果,两个权值的计算是根据预测结果和观测结果的不确定性来的,这个不确定性就是高斯分布中的方差的大小,方差越大,波形分布越广,不确定性越高,这样一来给的权值就会越低。
在这里插入图片描述

3、预测(Predict)

在这里插入图片描述
上面是一维小车,状态向量里只有它的位置和速度,当二维小车在平面时它的状态向量有分别是位置和速度的x、y方向(x,y,vx,vy)
x = [ x y v x v y ] x_{}=\begin{bmatrix}x\\ y\\vx\\vy\end{bmatrix} x=xyvxvy

和上面的一维对应
[ s t v t ] = [ 1 Δ t 0 1 ] [ s t − 1 v t − 1 ] \begin{bmatrix}s_{t}\\v_{t}\end{bmatrix}= \begin{bmatrix}1 & \Delta t\\ 0& 1\end{bmatrix}\begin{bmatrix}s_{t-1}\\v_{t-1}\end{bmatrix} [stvt]=[10Δt1][st1vt1]
这里的二维应该是
在这里插入图片描述
[ x t y t v x t v y t ] = [ 1 0 Δ t 0 0 1 0 Δ t 0 0 1 0 0 0 0 1 ] [ x t − 1 y t − 1 v x t − 1 v y t − 1 ] \begin{bmatrix}x_{t}\\ y_{t}\\vx_{t}\\vy_{t}\end{bmatrix}=\begin{bmatrix} 1& 0 & \Delta t& 0\\ 0 & 1 & 0 & \Delta t\\ 0 & 0& 1 & 0\\ 0 & 0& 0 & 1 \end{bmatrix}\begin{bmatrix}x_{t-1}\\ y_{t-1}\\vx_{t-1}\\vy_{t-1}\end{bmatrix} xtytvxtvyt=10000100Δt0100Δt01xt1yt1vxt1vyt1+Bu
接下来是预测的第二个模块,状态协方差矩阵P和过程噪声Q。P表示系统的不确定程度,卡尔曼滤波器初始化时很大,随着更多数据注入滤波器,不确定度会逐渐变小。Q暂时设为单位矩阵。
在这里插入图片描述
P = [ 1 0 0 0 0 1 0 0 0 0 100 0 0 0 0 100 ] P=\begin{bmatrix} 1& 0 & 0& 0\\ 0 & 1 & 0 & 0\\ 0 & 0& 100 & 0\\ 0 & 0& 0 & 100 \end{bmatrix} P=10000100001000000100
Q = [ 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 ] Q=\begin{bmatrix} 1& 0 & 0& 0\\ 0 & 1 & 0 & 0\\ 0 & 0& 1 & 0\\ 0 & 0& 0 & 1\end{bmatrix} Q=1000010000100001

4、观测更新(measurement update)

在这里插入图片描述
在这里插入图片描述
先说第一个公式括号里面的z-Hx,z表示的是测量值,x是4维的状态向量,对于激光雷达测量的z就是位置(x,y),对于毫米波雷达测量的z是位置和角度。需要对状态向量x左乘一个矩阵H,才能将二者映射到同一个空间,直接进行加减运算。
以激光雷达的测量值z为:
z = [ x m y m ] z=\begin{bmatrix}x_{m}\\y_{m}\end{bmatrix} z=[xmym]
z-Hx扩展开为:
[ Δ x Δ y ] = [ x m y m ] − [ 1 0 0 0 0 1 0 0 ] ∗ [ x t y t v x t v y t ] \begin{bmatrix}\Delta x\\\Delta y\end{bmatrix}=\begin{bmatrix}x_{m}\\y_{m}\end{bmatrix}-\begin{bmatrix} 1& 0& 0 & 0\\ 0& 1 & 0 & 0 \end{bmatrix}*\begin{bmatrix}x_{t}\\ y_{t}\\vx_{t}\\vy_{t}\end{bmatrix} [ΔxΔy]=[xmym][10010000]xtytvxtvyt
测量矩阵 H 是一个2*4的矩阵
H = [ 1 0 0 0 0 1 0 0 ] H=\begin{bmatrix} 1& 0& 0 & 0\\ 0& 1 & 0 & 0 \end{bmatrix} H=[10010000]

    H_lidar_ = Eigen::MatrixXd(2, 4);
    H_lidar_ << 1, 0, 0, 0,
                0, 1, 0, 0;

接下来说K(z-Hx)中的权重K是如何取的,简单来说是和协方差矩阵相关。

    R_lidar_ = Eigen::MatrixXd(2, 2);
    R_lidar_ << 0.0225, 0,
                0, 0.0225;

在这里插入图片描述
这两个公式求的是卡尔曼滤波器中一个很重要的量——卡尔曼增益K(Kalman Gain),用人话讲就是求y值的权值。第一个公式中的R是测量噪声矩阵(measurement covariance matrix),这个表示的是测量值与真值之间的差值,R应该是2*2的矩阵。一般情况下,传感器的厂家会提供该值。
在这里插入图片描述
求得K之后,当前时刻的x和P都可以求解出来了,第一个公式是完成了当前状态向量x的更新,不仅考虑了上一时刻的预测值,也考虑了测量值,和整个系统的噪声,第二个公式根据卡尔曼增益,更新了系统的不确定度P,用于下一个周期的运算。

二、非线性卡尔曼滤波EKF

KF中测量矩阵H是固定的,代码中直接赋值即可。
H = [ 1 0 0 0 0 1 0 0 ] H=\begin{bmatrix} 1& 0& 0 & 0\\ 0& 1 & 0 & 0 \end{bmatrix} H=[10010000]
但是真实情况下,测量矩阵 H应该是需要求雅克比矩阵求出的。我们接下来以毫米波雷达为例
在这里插入图片描述
毫米波原理是多普勒效应,能够测量障碍物在极坐标系下雷达的距离ρ,方向角ϕ和距离的变化率(径向速度)ρ’。
Udacity 无人驾驶工程师学位
已知量:状态向量x为4*1,

已知量:观测值z的数据维度为3*1.
在这里插入图片描述
观测值z和预测值x之间的差值y关系为:
在这里插入图片描述
在这里插入图片描述
但是如果转化为 y=Hx时,由于第二部分的转化是非线性的,无法找到一个常数矩阵H。
在这里插入图片描述
所以我们需要将上述非线性函数转化为近似的线性函数,用一阶泰勒展开。对状态向量x求偏导数,即雅克比Jacobian矩阵。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、代码讲解

KF和EKF都在kalmanfilter.h/cpp文件中,头文件KalmanFilter类为:

class KalmanFilter {
public:
    // 构造函数和析构函数
    KalmanFilter();
    ~KalmanFilter();
    // 初始化
    void Initialization(Eigen::VectorXd x_in);
    bool IsInitialized();

    // 5个矩阵赋值
    void SetF(Eigen::MatrixXd F_in);
    void SetP(Eigen::MatrixXd P_in);
    void SetQ(Eigen::MatrixXd Q_in);
    void SetH(Eigen::MatrixXd H_in);
    void SetR(Eigen::MatrixXd R_in);
    // 预测
    void Prediction();
    // KF更新
    void KFUpdate(Eigen::VectorXd z);
    // EKF更新
    void EKFUpdate(Eigen::VectorXd z);
    // 获得状态x
    Eigen::VectorXd GetX();

private:
    // Jacobian矩阵
    void CalculateJacobianMatrix();

    // 是否初始化标志
    bool is_initialized_;

    // 状态向量x
    Eigen::VectorXd x_;

    // 状态协方差矩阵P
    Eigen::MatrixXd P_;
    // 状态转移矩阵F  
    Eigen::MatrixXd F_;
    // 过程噪声Q 
    Eigen::MatrixXd Q_;
    // 测量矩阵H 
    Eigen::MatrixXd H_;
    // 测量噪声R 
    Eigen::MatrixXd R_;
};

5个黄金公式
主要成员变量为:状态转移矩阵F、状态协方差矩阵P、测量矩阵H、过程噪声Q、测量噪声R、状态向量x
主要成员函数为:初始化Initialization()、5个矩阵赋值set()、预测prediction()、KF更新KFUpdate()、EKF更新EKFUpdate().

1、预测Prediction()

在这里插入图片描述

// x=F*x
// P=F*P*Ft+Q
void KalmanFilter::Prediction()
{
    x_ = F_ * x_;
    Eigen::MatrixXd Ft = F_.transpose();
    P_ = F_ * P_ * Ft + Q_;
}

2、KF更新KFUpdate()

在这里插入图片描述

// x=x+k*(z-H*x)
// P=(I-K*h)*P
// K=P*Ht*(H*P*Ht+R)t
void KalmanFilter::KFUpdate(Eigen::VectorXd z)
{
    Eigen::VectorXd y = z - H_ * x_;
    Eigen::MatrixXd Ht = H_.transpose();
    Eigen::MatrixXd S = H_ * P_ * Ht + R_;
    Eigen::MatrixXd Si = S.inverse();
    Eigen::MatrixXd K =  P_ * Ht * Si;
    x_ = x_ + (K * y);
    int x_size = x_.size();
    Eigen::MatrixXd I = Eigen::MatrixXd::Identity(x_size, x_size);
    P_ = (I - K * H_) * P_;
}

3、EKF更新EKFUpdate()

EKF的预测两个公式和之前一样,都是Prediction()函数,区别在于求解测量矩阵H矩阵。
首先是要求解测量值z和预测值x之间的偏差。y=z-Hx。
这里Hx用的就是将x从笛卡尔坐标系转化为极坐标系。
接下来的主要问题是在求解H矩阵。

// KF和EKF区别在于测量矩阵H的计算
void KalmanFilter::EKFUpdate(Eigen::VectorXd z)
{
    double rho = sqrt(x_(0)*x_(0) + x_(1)*x_(1));
    double theta = atan2(x_(1), x_(0));
    double rho_dot = (x_(0)*x_(2) + x_(1)*x_(3)) / rho;
    Eigen::VectorXd h = Eigen::VectorXd(3);
    h << rho, theta, rho_dot;
    Eigen::VectorXd y = z - h;

    CalculateJacobianMatrix();

    Eigen::MatrixXd Ht = H_.transpose();
    Eigen::MatrixXd S = H_ * P_ * Ht + R_;
    Eigen::MatrixXd Si = S.inverse();
    Eigen::MatrixXd K =  P_ * Ht * Si;
    x_ = x_ + (K * y);
    int x_size = x_.size();
    Eigen::MatrixXd I = Eigen::MatrixXd::Identity(x_size, x_size);
    P_ = (I - K * H_) * P_;
}

4、CalculateJacobianMatrix()函数

在这里插入图片描述

void KalmanFilter::CalculateJacobianMatrix()
{
    Eigen::MatrixXd Hj(3, 4);

    // get state parameters
    float px = x_(0);
    float py = x_(1);
    float vx = x_(2);
    float vy = x_(3);

    // pre-compute a set of terms to avoid repeated calculation
    float c1 = px * px + py * py;
    float c2 = sqrt(c1);
    float c3 = (c1 * c2);

    // Check division by zero
    if(fabs(c1) < 0.0001){
        H_ = Hj;
        return;
    }

    Hj << (px/c2), (py/c2), 0, 0,
         -(py/c1), (px/c1), 0, 0,
          py*(vx*py - vy*px)/c3, px*(px*vy - py*vx)/c3, px/c2, py/c2;
    H_ = Hj;
}

5、main主函数

主函数基本流程为:

int main()
{
    KalmanFilter kf;
    while(getlint(x,y,时间戳)){
         if(激光雷达尚未初始化){
             kf.Initialization(x_in);
             P<< 4*4;
             Q<< 4*4;
             H<< 2*4;
             R<<2*2;
         }
         获取两帧时间差delta t;
         F<< 4*4;
         kf.Prediction();
         kf.KFUpdate();
         VectorXd x_out=kf.GetX();
    }
}

公号无人驾驶干货铺

参考:
https://zhuanlan.zhihu.com/p/45238681

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

多传感器融合定位1(激光雷达+毫米波雷达) 的相关文章

  • 3.3应用程序

    3 3 应用程序 程序中我们首先创建一个四边形 xff0c 然后使用像素着色器进行纹理混合后对其进行渲染 下面是应用程序代码 xff1a 顶点格式定义 struct CUSTOMVERTEX 定点位置坐标 float x y z 两套纹理坐
  • 4.HLSL Effect(效果框架)

    4 HLSL Effect xff08 效果框架 xff09 进行到这里 xff0c 读者可能会觉得使用着色器多少有些繁琐 xff0c Effect xff08 效果框架 xff09 被提出以解决这些问题 作为一种方法 xff0c Effe
  • 4.2用Effect实现多纹理化效果

    4 2 用 Effect 实现多纹理化效果 前面我们介绍了一个使用像素着色器实现的多纹理化 xff0c 这里用 Effect 框架重新给于实现 xff0c 读者可以比较两者之间的异同 xff0c 体会 Effect 框架给我们带来了哪些方面
  • HLSL初级教程-结语,参考资料

    结语 至此 xff0c HLSL 初级内容介绍完毕 xff0c 相信读者已经对 HLSL 着色器 Effect 等概念有了比较深入的理解 xff0c 并且掌握了 HLSL 编程的基本方法 xff0c 文章中裁去了对 HLSL 语法等细节的讨
  • Unity 3D网页游戏 Demo 展示

    2011 年 xff0c 网页 3D 这一网游开发新趋势逐渐浮出水面 xff0c Unity 作为浏览器及移动设备 3D 引擎领域的佼佼者 xff0c 在国内开始崭露头角 我们团队也完成了首款 Unity Demo 的第一个版本 Demo
  • 用Ogre实现无缝地图

    用 Ogre 实现无缝地图 1 7 版本之前 xff0c 如果想用 Ogre 内建的地形系统实现一个像样的无缝地图 xff0c 恐怕要闹到抓狂 所幸 sinbad 在 1 7 为 Ogre 加入了全新的地形组件 xff0c 它囊括了一个地形
  • 一劳永逸地解决寻路问题

    一劳永逸地解决寻路问题 作者 xff1a PaulT 译者 xff1a trcj 原文 xff1a http www ai blog net archives 000152 html 通常我都会尽量避免对业内游戏产品或开发者们评头论足 但这
  • 口吐莲花

    久不更新blog xff0c 优狗 进展尚可 xff0c 新项目又开 xff0c 忙里偷闲想写点东西 xff0c 一时竟无从下笔 xff0c 以往那种花几天甚至几星期整理一篇技术文章的机会恐怕越来越少了 六月份 优狗 团队新入数名成员 xf
  • Unity3D运行时刻资源管理

    Unity运行时刻资源管理 Asset Bundles 制作 xff1a BuildPipeline BuildAssetBundle 加载 xff1a AssetBundle Load 卸载 xff1a AssetBundle Unloa
  • Unity3D页游《坦克英雄》发布!

    坦克英雄 是一款主打PVP的射击类3D竞技页游 xff0c 它基于Unity引擎 xff0c 以二战坦克为题材 xff0c 既保留了射击类游戏的操作性 xff0c 又缓和了其与页游载体看似相悖的剧烈节奏 xff0c 目前游戏的核心玩法及主体
  • 给我时间

    Jenifer Tell 39 ment de gens veulent Tell 39 ment tre aim s Pour se donner peuvent Tout abandonner Tellement d 39 erreur
  • Docker 查看Image镜像的Dockerfile方法

    Dokcer中使用的Image镜像可能别人写好 xff0c 我们下载来直接使用 xff0c 但有些情况可能不能满足我们的需求 xff0c 那就需要修改镜像 xff0c 一般可以通过在容器中修改 xff0c 之后在生成镜像 xff0c 但有时
  • (三)ROS上位机与stm32进行串口通信

    ROS上位机与stm32进行串口通信 1 1 ROS发送数据1 2 stm32接收数据2 1 stm32发送数据2 2 ROS接收数据上位机串口初始化文件代码下位机stm32的串口配置代码 总代码在文末 xff0c 需要完整的工程文件可以留
  • 智能车摄像头算法——寻线

    寻线 1 灰度图像二值化2 找边线3 获得中线 1 灰度图像二值化 如果使用的是小钻风摄像 xff08 二值化摄像头 xff09 xff0c 就不用再进行软件二值化 使用灰度摄像头 xff0c 就需要这步 以下展示常用的大津法 xff08
  • 【Vue】在vue中命名的时候会遇到 component name “index“ should always be multi-word的解决方案

    Vue 在vue中命名的时候会遇到 component name index should always be multi word的解决方案 文章目录 Vue 在vue中命名的时候会遇到 component name 34 index 3
  • docker容器和镜像的停止和删除

    文章目录 docker容器和镜像的停止和删除1 列出所有docker镜像2 查看正在运行的 或所有的docker容器3 停止所有容器4 删除所有容器5 删除所有镜像通过 image name 删除单个镜像通过 image id 删除单个镜像
  • Windows上应用Docker容器技术的动态代码测试

    转载自维克多汽车技术 xff08 上海 xff09 有限公司 xff0c 作者Vector China 随着软件项目复杂度的提升和不可控的团队资源变更 xff0c 研发组织对DevOps部署的灵活性 可快速迁移和适配CI CD的迭代提出了更
  • 写学术论文的一些感想

    我自己写得是真差 xff01 虽然和我英语程度低有一定的关系 xff0c 最重要的是没有这个基础的底蕴和不明白自己做的东西的意义 所以来总结一下关于学术论文的想法 1 最基础的 xff0c 最重要的 xff0c 你要做出东西来 xff0c
  • kvaser怎么用?Kvaser 汽车CAN通讯协议总线分析仪新手入门常见问题解决方案教程

    logo png 1 驱动安装问题 答 xff1a 驱动程序安装问题通常是由防病毒软件引起的 在驱动程序安装期间 xff0c 常见问题是无法安装枚举服务 解决方案 xff1a 确保您的防病毒软件已关闭 xff0c 然后再次安装驱动程序 2
  • 图解git使用

    1 基本用法 上面的四条命令在工作目录 暂存目录 也叫做索引 和仓库之间复制文件 git add em files em 把当前文件放入暂存区域 对比stage和working dir xff0c 如果有改变就增加 xff1b 如果没有改变

随机推荐

  • Docker容器 - DockerFile详解

    目录 DockerFile 一 是什么 二 构建步骤 DockerFile构建过程 一 DockerFile基础 二 Docker执行DockerFile的流程 三 总结 DockerFile常用保留字 零 参考Tomcat的DockerF
  • Docker网络 - docker network详解

    目录 是什么 一 Docker不启动时默认的网络情况 二 Docker启动时的网络情况 能干什么 常用基本命令 一 ls 1 no trunc 2 DRIVER 3 ID 4 format 二 create 三 rm 四 inspect 五
  • 时间划过的伤痕叫成长

    我要用代码敲出整个世界 也许刚看这句话的时候 很多人都嗤之以鼻 太自大太高傲了 但这是我梦想也是我目标 我出生在一个小县城的普通家庭里 经济状况也只能解决温饱 上高中的时候我就没想着要读大学 我很贪玩 几乎都是和一群 34 狐朋狗友 34
  • CMD终端中一些常用的快捷键

    1 使用键盘上的 xff0c 可以快速定位到上一次执行的命令 2 使用键盘上的tab键 xff0c 可以快速补全路径 3 使用键盘上的esc键 xff0c 能够快速清空当前已经输入的命令 4 输出cls命令 xff0c 可以清空终端
  • github在线简历

    github在线简历 对于找工作 xff0c 不论是对校招还是社招的来说 xff0c 在线简历这个东西还是比较加分的 xff0c 可以让hr和面试官 xff0c 看到你更多的东西 xff0c 比如你的个人项目之类的 xff0c 还是挺不错的
  • nrm ls不显示星号

    npmi切换依赖 xff0c 使用nrm ls命令查看当前下载以来的地址看不到是哪一个 nrm是什么 xff1a nrm 是npm常用镜像源管理工具 xff0c 方便本地切换npm的镜像源 xff0c 因为我们在安装依赖的时候 xff0c
  • npm i安装依赖报错,npm ERR! code EPERM npm ERR! syscall unlink,errno -4048

    我的项目是公司内网的react项目 xff0c 安装依赖的时候报错 xff0c 报错信息如下 解决方案 xff1a 1 删除 npmrc文件 他的位置不是nodejs安装目录npm模块下的那个npmrc文件 而是在C Users 账户 下的
  • element对话框遮罩层和弹出内容样式优先级错误

    代码 加入 append to body 61 34 true 34 就可以了 span class token operator lt span el span class token operator span dialog span
  • van2的弹窗自定义事件

    今天帮别人解决了一个移动端的van2的弹窗自定义事件就记录一下 现在国内开发大多数还是已vue为主 xff0c vue3已经比较火热 xff0c 但是对比vue2来讲 xff0c vue2更加稳定 xff0c 以及一些老项目还是用的vue2
  • svg图形绘画

    最近是在整理项目交接工作的时候 xff0c 把之前遇到的问题难点给找出来 xff0c 梳理一下 这个是做svg画布组态项目遇到的问题 目前组态项目中是使用ts文件 xff0c 定义组态类型和格式 xff0c 将不同的组件渲染在画布以及列表上
  • 基于Spring接口,集成Caffeine+Redis两级缓存

    原创 xff1a 微信公众号 码农参上 xff0c 欢迎分享 xff0c 转载请保留出处 在上一篇文章Redis 43 Caffeine两级缓存 xff0c 让访问速度纵享丝滑中 xff0c 我们介绍了3种整合Caffeine和Redis作
  • 不需要登录的app业务如何记录用户状态

    可以采用app获取设备号并服务端保存设备信息和业务信息的方式 欢迎加入我的QQ技术交流群425783133
  • web前端基础-给td设置宽度

    在实际需求中 xff0c 经常遇到要在table中的td中 xff0c 让用户输入比较长的字符串 xff0c 这时就要使td的宽度能较大 在WEB前端中 xff0c 对于 表格元素中的元素td 直接设置宽度是无法生效的 要想达到给td设置宽
  • Kali Linux 暴力破解 wifi密码

    Kali Linux 暴力破解 wifi密码 注意 xff1a 私自破解他人WiFi属于违法行为 xff0c 我这里使用自己的WiFi热点作为学习和测试 明白了破解原理就知道应该怎么防范了 前期准备 暴力破解需要准备的工具 xff1a ka
  • Docker安装与使用

    Docker安装与使用 介绍容器 xff1a 为什么需要Docker xff1f Docker 的用途 xff1a 特点 xff1a Docker安装Linux下安装 xff1a Windows 下安装 xff1a Docker的架构镜像
  • 前端PHP项目部署后404

    问题 xff1a php项目部署后 xff0c 首页可正常访问 xff0c 但跳转其他页面均为404 xff0c 经查询有以下原因 文件以及文件夹权限错误nginx配置错误 span class token comment 无效404方式
  • VINS-Mono 代码详细解读——初始化1:视觉SFM详解 processImage()+initialStructure()

    Estimator类 目录 processImage 函数 initialStructure 初始化函数 SFM初始化 relativePose 函数 getCorresponding 函数返回两帧匹配特征点3D坐标 solveRelati
  • VINS-Mono 代码详细解读——IMU预积分的残差、Jacobian和协方差 processIMU()+intergrationBase类+imu_factor.h

    前言 xff1a 对第k帧和第k 43 1帧之间所有的IMU进行积分 xff0c 可得到第K 43 1帧的PVQ xff08 位置 速度 旋转 xff09 xff0c 作为视觉估计的初始值 每次qwbt优化更新后 xff0c 都要重新进行积
  • VINS-Mono 理论详细解读——紧耦合后端非线性优化 IMU+视觉的残差residual、Jacobian、协方差、基于舒尔补的边缘化

    本讲是VINS最核心部分了 xff0c 前面经历了 1 xff09 视觉跟踪feature tracker IMU预积分integrationBase类 xff1b 2 xff09 初始化中SFM纯视觉估计滑动窗中所有帧的位姿和3D路标点深
  • 多传感器融合定位1(激光雷达+毫米波雷达)

    前言 LZ最近在看Udacity的无人驾驶课程 xff0c 该课程主要分为三部分 xff0c 第一部分的课程主要使用Python实现的车道线识别 车牌识别等计算机视觉项目 由于我对定位 建图等方面有些知识储备 xff0c 所以先从第二部分课