当前位置: 首页 > news >正文

SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry

1. 算法概述

DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法,它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本,主要创新点在于采用了一种延迟边缘化策略,能够更好地处理非线性问题和保持系统的可观测性。

2. 系统模型

2.1 状态表示

系统的状态向量定义为:
X = [ x 0 , x 1 , … , x n , λ 0 , λ 1 , … , λ m ] X = [ x_0, x_1, \dots, x_n, \lambda_0, \lambda_1, \dots, \lambda_m ] X=[x0,x1,,xn,λ0,λ1,,λm]

其中:

  • x_i = [p_i, q_i, v_i, b_a_i, b_g_i] 表示第i个关键帧的状态
    • p_i ∈ ℝ³:位置
    • q_i ∈ SO(3):姿态(四元数表示)
    • v_i ∈ ℝ³:速度
    • b_a_i ∈ ℝ³:加速度计偏置
    • b_g_i ∈ ℝ³:陀螺仪偏置
  • λ_j ∈ ℝ:第j个3D点的逆深度

2.2 IMU预积分

IMU测量模型:
[ a ^ t = a t + b a + R w t g w + n a ] [ \hat{a}_t = a_t + b_a + R_w^t g^w + n_a ] [a^t=at+ba+Rwtgw+na]

[ ω ^ t = ω t + b g + n g ] [ \hat{\omega}_t = \omega_t + b_g + n_g ] [ω^t=ωt+bg+ng]

IMU预积分量(两个关键帧i和j之间):
[ Δ R i j = ∏ k = i j − 1 exp ⁡ ( ( ω ^ k − b g k ) Δ t ) ] [ \Delta R_{ij} = \prod_{k=i}^{j-1} \exp\left((\hat{\omega}_k - b_{g_k}) \Delta t \right) ] [ΔRij=k=ij1exp((ω^kbgk)Δt)]
[ Δ v i j = ∑ k = i j − 1 Δ R i k ( a ^ k − b a k ) Δ t ] [ \Delta v_{ij} = \sum_{k=i}^{j-1} \Delta R_{ik} (\hat{a}_k - b_{a_k}) \Delta t ] [Δvij=k=ij1ΔRik(a^kbak)Δt]
[ Δ p i j = ∑ k = i j − 1 [ Δ v i k Δ t + 0.5 Δ R i k ( a ^ k − b a k ) Δ t 2 ] ] [ \Delta p_{ij} = \sum_{k=i}^{j-1} \left[ \Delta v_{ik} \Delta t + 0.5 \Delta R_{ik} (\hat{a}_k - b_{a_k}) \Delta t^2 \right] ] [Δpij=k=ij1[ΔvikΔt+0.5ΔRik(a^kbak)Δt2]]

其中:

  • ( Δ R i j ) ( \Delta R_{ij} ) (ΔRij) 表示从时刻 ( i ) ( i ) (i) 到时刻 ( j ) ( j ) (j) 的旋转增量,通过累积旋转误差来计算。
  • ( Δ v i j ) ( \Delta v_{ij} ) (Δvij) ( D e l t a p i j ) ( Delta p_{ij} ) (Deltapij) 分别是从时刻 ( i ) ( i ) (i) 到时刻 ( j ) ( j ) (j) 的速度增量和位置增量。
  • ( ω ^ k ) ( \hat{\omega}_k ) (ω^k) 是时刻 ( k ) ( k ) (k) 的角速度估计, ( b g k ) ( b_{g_k} ) (bgk) 是角速度偏差。
  • ( a ^ k ) ( \hat{a}_k ) (a^k) 是时刻 ( k ) ( k ) (k) 的加速度估计, ( b a k ) ( b_{a_k} ) (bak) 是加速度偏差。
  • ( Δ t ) ( \Delta t ) (Δt) 是两个时刻之间的时间间隔。

预积分残差:
[ r Δ R i j = Log ( Δ R i j T R i T R j ) ] [ r_{\Delta R_{ij}} = \text{Log}(\Delta R_{ij}^T R_i^T R_j) ] [rΔRij=Log(ΔRijTRiTRj)]
[ r Δ v i j = R i T ( v j − v i − g Δ t i j ) − Δ v i j ] [ r_{\Delta v_{ij}} = R_i^T(v_j - v_i - g \Delta t_{ij}) - \Delta v_{ij} ] [rΔvij=RiT(vjvigΔtij)Δvij]
[ r Δ p i j = R i T ( p j − p i − v i Δ t i j − 0.5 g Δ t i j 2 ) − Δ p i j ] [ r_{\Delta p_{ij}} = R_i^T(p_j - p_i - v_i \Delta t_{ij} - 0.5 g \Delta t_{ij}^2) - \Delta p_{ij} ] [rΔpij=RiT(pjpiviΔtij0.5gΔtij2)Δpij]

其中:

  • ( r Δ R i j ) ( r_{\Delta R_{ij}} ) (rΔRij), ( r Δ v i j ) ( r_{\Delta v_{ij}} ) (rΔvij), 和 ( r Δ p i j ) ( r_{\Delta p_{ij}} ) (rΔpij) 分别表示旋转矩阵、速度和位置的残差。
  • ( Log ) (\text{Log}) (Log) 是李群的对数映射(通常用于旋转矩阵或四元数的误差表示)。
  • ( Δ R i j ) (\Delta R_{ij}) (ΔRij), ( Δ v i j ) (\Delta v_{ij}) (Δvij), 和 ( Δ p i j ) (\Delta p_{ij}) (Δpij) 是旋转、速度和位置的增量或误差项。
  • ( R i ) ( R_i ) (Ri) ( R j ) ( R_j ) (Rj) 是对应时刻 ( i ) (i) (i) ( j ) (j) (j) 的旋转矩阵。
  • ( v i ) ( v_i ) (vi) ( v j ) ( v_j ) (vj) 是时刻 ( i ) (i) (i) ( j ) (j) (j) 的速度向量。
  • ( p i ) ( p_i ) (pi) ( p j ) ( p_j ) (pj) 是时刻 ( i ) (i) (i) ( j ) (j) (j) 的位置向量。
  • ( Δ t i j ) ( \Delta t_{ij} ) (Δtij) 是时刻 ( i ) (i) (i) ( j ) (j) (j) 之间的时间间隔。
  • ( g ) ( g ) (g) 是重力加速度。

2.3 视觉重投影误差

对于特征点l在帧i中的观测 ( u i l , v i l ) (u_i^l, v_i^l) (uil,vil),其重投影误差为:
[ r c l = [ u i l − π ( R i ( X l − p i ) ) v i l − π ( R i ( X l − p i ) ) ] T ] [ r_c^l = \begin{bmatrix} u_i^l - \pi(R_i(X_l - p_i)) \\ v_i^l - \pi(R_i(X_l - p_i)) \end{bmatrix}^T ] [rcl=[uilπ(Ri(Xlpi))vilπ(Ri(Xlpi))]T]

其中 X l X_l Xl是3D点坐标,π是投影函数。

使用逆深度参数化时,3D点表示为:
[ X l = p C 1 + 1 λ l R C 1 [ u l v l 1 ] ] [ X_l = p_{C1} + \frac{1}{\lambda_l} R_{C1} \begin{bmatrix} u_l \\ v_l \\ 1 \end{bmatrix} ] [Xl=pC1+λl1RC1 ulvl1 ]

3. 优化问题

3.1 目标函数

联合优化问题:
[ min ⁡ X { ∑ ∥ r I ( x i , x j ) ∥ Σ I 2 + ∑ ρ ( ∥ r C ( x i , λ l ) ∥ Σ C 2 ) } ] [ \min_X \left\{ \sum \left\| r_I(x_i, x_j) \right\|_{\Sigma_I}^2 + \sum \rho \left( \left\| r_C(x_i, \lambda_l) \right\|_{\Sigma_C}^2 \right) \right\} ] [Xmin{rI(xi,xj)ΣI2+ρ(rC(xi,λl)ΣC2)}]
其中ρ是Huber鲁棒核函数。

3.2 滑动窗口优化

DM-VIO采用滑动窗口优化策略,窗口内保持N个关键帧。当新帧加入时,最旧的关键帧会被边缘化。

4. 延迟边缘化策略

4.1 标准边缘化的问题

传统VIO在边缘化旧帧时:

  1. 线性化点固定,导致线性化误差
  2. 可能破坏系统的可观测性
  3. 对IMU偏置的估计有负面影响

4.2 DM-VIO的解决方案

DM-VIO采用两阶段边缘化:

  1. 初始边缘化:当关键帧被移出窗口时,只边缘化与视觉相关的状态(位姿和路标点),保留IMU相关状态(速度、偏置)在优化窗口中。

  2. 延迟边缘化:当这些IMU状态也变得过时时,再进行第二次边缘化。

4.3 数学推导

设要边缘化的状态为 x m x_m xm,保留状态为 x r x_r xr。将Hessian矩阵分块

[ H = [ H m m H m r H r m H r r ] ] [ H = \begin{bmatrix} H_{mm} & H_{mr} \\ H_{rm} & H_{rr} \end{bmatrix} ] [H=[HmmHrmHmrHrr]]

边缘化后的先验信息:
[ H ∗ = H r r − H r m H m m − 1 H m r ] [ H^* = H_{rr} - H_{rm} H_{mm}^{-1} H_{mr} ] [H=HrrHrmHmm1Hmr]
[ b ∗ = b r − H r m H m m − 1 b m ] [ b^* = b_r - H_{rm} H_{mm}^{-1} b_m ] [b=brHrmHmm1bm]

在DM-VIO中,第一次边缘化:
[ x m = [ p i , q i , λ j ] , x r = [ v i , b a i , b g i , … ] ] [ x_m = [p_i, q_i, \lambda_j], \quad x_r = [v_i, b_{a_i}, b_{g_i}, \dots] ] [xm=[pi,qi,λj],xr=[vi,bai,bgi,]]

第二次边缘化:
[ x m = [ v i , b a i , b g i ] , x r = [ 其他状态 ] ] [ x_m = [v_i, b_{a_i}, b_{g_i}], \quad x_r = [\text{其他状态}] ] [xm=[vi,bai,bgi],xr=[其他状态]]

其中:

  • ( H ) ( H ) (H) 是Hessian矩阵,分为四个子块 ( H m m , H m r , H r m , H r r ) ( H_{mm}, H_{mr}, H_{rm}, H_{rr} ) (Hmm,Hmr,Hrm,Hrr)
  • ( H ∗ ) ( H^* ) (H) ( b ∗ ) ( b^* ) (b) 是边缘化后的先验信息。
  • ( x m ) ( x_m ) (xm) 是边缘化的状态, ( x r ) ( x_r ) (xr) 是保留的状态。
  • 在DM-VIO中,第一次边缘化涉及将位置和方向 ( p i , q i , λ j ) ( p_i, q_i, \lambda_j ) (pi,qi,λj)从状态中移除,保留速度、偏差等其他信息。第二次边缘化则是将速度和偏差 (v_i, b_a_i, b_g_i )从状态中移除。

5. 可观测性分析

DM-VIO的延迟边缘化策略有助于保持系统的可观测性:

  1. 保持IMU状态在窗口中更长时间,可以更好地估计偏置
  2. 分离视觉和IMU状态的边缘化,减少了线性化误差的传播
  3. 特别对俯仰和滚转角度的可观测性有改善

6. 实现细节

6.1 关键帧选择策略

基于以下条件选择关键帧:

  1. 平均视差大于阈值
  2. 跟踪质量低于阈值
  3. 距离上一关键帧时间超过阈值

6.2 初始化

采用视觉-惯性联合初始化:

  1. 纯视觉SfM估计初始位姿和地图
  2. 视觉惯性对齐估计尺度、重力方向、速度和偏置
  3. 紧耦合优化 refine 所有参数

6.3 重定位与闭环检测

使用DBoW2进行地点识别,然后进行几何验证和位姿图优化。

7. 实验分析

DM-VIO在EuRoC和TUM-VI数据集上表现出色:

  1. 比VINS-Mono有更高的精度
  2. 对IMU偏置估计更准确
  3. 在快速运动和大旋转情况下更鲁棒
  4. 计算开销与VINS-Mono相当

8. 总结

DM-VIO通过创新的延迟边缘化策略,解决了传统VIO系统中的几个关键问题:

  1. 减少了边缘化带来的线性化误差
  2. 保持了系统的可观测性
  3. 提高了IMU偏置估计的准确性
  4. 在不显著增加计算负担的情况下提高了系统鲁棒性

相关文章:

SLAM文献之DM-VIO: Delayed Marginalization Visual-Inertial Odometry

1. 算法概述 DM-VIO (Delayed Marginalization Visual-Inertial Odometry) 是一种基于延迟边缘化的视觉-惯性里程计算法,它结合了视觉和惯性测量单元(IMU)的数据进行位姿估计。该算法是VINS-Mono的改进版本,主要创新点在于采用了一种延迟边缘化策略&…...

【信息安全】黑芝麻A1000芯片安全启动方案

基于黑芝麻A1000芯片的安全启动方案实现指南: 一、安全启动流程架构设计 // 启动阶段状态机定义(基于A1000芯片手册) typedef enum {ROM_BOOT = 0x01, // BootROM验证 SPL_VERIFY = 0x02, // 二级加载器验证 ATF_SIGN_CHECK = 0x03, // ARM Trusted Firmware验证 OS_LOADE…...

初识Redis · list和hash类型

目录 前言: 哈希类型 基本命令 编码方式 应用场景 列表 基本命令 编码方式 应用场景 前言: 前文我们已经介绍了string的基本使用,以及对应的基本命令,最后也是简单的理解了一下string的应用场景,比如计数统计…...

golang-非orm数据库的操作与对比 database/sql、sqlx 和 sqlc

简单介绍 database/sql database/sql 是一个标准库软件包,负责与数据库(主要是 SQL 关系数据库)的连接和交互。 它为类 SQL 交互提供泛型接口、类型和方法。database/sql 在创建时将简单易用纳入考量,配置为支持与类 SQL 数据库…...

‌DeepSeek模型在非图形智能体的应用中是否需要GPU

答:不一定 概念 1、是否需要GPU与应用是否图形处理应用无关 2、文本内容智能体大多也需要GPU来提供更好的性能 3、‌DeepSeek模型在非图形智能体的应用中是否需要GPU取决于具体的模型版本和部署环境 不需要GPU的模型版本 ‌DeepSeek-R1-1.5B‌: 这…...

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法

RadioMaster POCKET遥控器进入ExpressLRS界面一直显示Loading的问题解决方法 问题描述解决方法 问题描述 有一天我发现我的 RadioMaster POCKET 遥控器进入 ExpressLRS 设置界面时,界面却一直停留在 “Loading” 状态,完全无法进入设置界面。 我并没有…...

idea的快捷键使用以及相关设置

文章目录 快捷键常用设置 快捷键 快捷键作用ctrlshift/注释选中内容Ctrl /注释一行/** Enter文档注释ALT SHIFT ↑, ALT SHIFT ↓上下移动当前代码Ctrl ALT L格式化代码Ctrl X删除所在行并复制该行Ctrl D复制当前行数据到下一行main/psvm快速生成入口程序soutSystem.o…...

【DDR 内存学习专栏 1.4 -- DDR 的 Bank Group】

文章目录 BankgroupBankgroup 与 Bank 的关系 DDR4 中的 BankgroupDDR4-3200 8Gb芯片为例组织结构访问场景 实际应用示例 Bankgroup Bankgroup是DDR4及后续标准(DDR5)中引入的一个更高层次的组织结构。它将多个Bank组合在一起形成一个Bankgroup,目的是为了进一步提…...

新晋前端框架技术:小程序容器与SuperApp构建

2025年,前端开发领域持续迭代,主流框架如Vue、React等纷纷推出新版本,在性能、开发效率及适用场景上实现突破,进一步巩固其技术地位。 1. Vue 3的全面普及与创新 Vue 3通过多项核心特性优化了开发体验: Teleport组件…...

强化学习:基于价值的方法做的是回归,基于策略的方法做的是分类,可以这么理解吗?

在强化学习领域,基于价值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是两种核心范式。本文将从目标函数、优化机制以及与机器学习任务的类比角度,探讨这两种方法是否可以被分别理解为回归和分类任务,并深入分析其内在逻辑。 一、基于价值的方法…...

蓝耘元生代AIDC OS:一站式MaaS平台,助力AI应用快速落地

文章目录 引言1. 什么是MaaS平台?MaaS平台的典型特点 2. 蓝耘元生代AIDC OS 热门模型3. 快速入门:如何调用API?步骤1:注册并获取API Key步骤2:调用API(Python示例) 4. 与Chatbox搭配使用&#x…...

3.2.2.3 Spring Boot配置拦截器

在Spring Boot应用中配置拦截器(Interceptor)可以对请求进行预处理和后处理,实现如权限检查、日志记录等功能。通过实现HandlerInterceptor接口并注册到Spring容器,拦截器可以自动应用到匹配的请求路径。案例中,创建了…...

Python----机器学习(基于PyTorch的蘑菇逻辑回归)

Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 本例使用了…...

Python----机器学习(基于PyTorch的乳腺癌逻辑回归)

Logistic Regression(逻辑回归)是一种用于处理二分类问题的统计学习方法。它基于线性回归 模型,通过Sigmoid函数将输出映射到[0, 1]范围内,表示概率。逻辑回归常被用于预测某个实 例属于正类别的概率。 一、数据集介绍 在本例中&…...

如何配置AWS EKS自动扩展组:实现高效弹性伸缩

本文详细讲解如何在AWS EKS中配置节点组(Node Group)和Pod的自动扩展,优化资源利用率并保障应用高可用。 一、准备工作 工具安装 安装并配置AWS CLI 安装eksctl(EKS管理工具) 安装kubectl(Kubernetes命令…...

【C++ Qt】认识Qt、Qt 项目搭建流程(图文并茂、通俗易懂)

每日激励:“不设限和自我肯定的心态:I can do all things。 — Stephen Curry” 绪论​: 本章将开启Qt的学习,Qt是一个较为古老但仍然在GUI图形化界面设计中有着举足轻重的地位,因为它适合嵌入式和多种平台而被广泛使用…...

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案

用Python打造去中心化知识产权保护系统:科技驱动创作者权益新方案 近年来,区块链技术和去中心化系统的兴起为知识产权保护提供了新的可能性。在传统模式下,知识产权保护通常依赖于集中化管理机构,这种方式不仅成本高,还可能因不透明导致权益争议。于是,我们萌生了一个设…...

CVE重要漏洞复现-Fastjson1.2.24-RCE漏洞

本文仅供网络学习,不得用于非法目的,否则后果自负 1、漏洞简介 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符…...

Windows 图形显示驱动开发-WDDM 1.2功能—显示设备硬件软件认证要求

一、容器技术id技术的硬件级实现要求 1.1 EDID规范深度适配 1.物理层要求: 必须使用EDID 2.0及以上版本数据结构 容器ID需写入VSDB区块的0x50-0x6F区域,采用Little-Endian格式存储 允许的最大传输延迟:I2C总线时钟频率≤100KHz时&#xf…...

Coze流搭建--写入飞书多维表格

目标 使用coze搭建一个业务流,将业务流生产出的数据写入飞书保存 测试业务流 使用图片生成插件,配置prompt生产图片,将生产的结果写入飞书文档 coze流 运行后最终效果 搭建流程 第一步:飞书创建多维表格 注册飞书创建多维表…...

4.14:计组第三章

一、数据的强制类型转换与存储 1、边界对齐与大端小端方式 2、真-强制类型转换 二、存储器的基本知识(不包含磁盘存储器) 1、主存储器 (1)...

Vue3+Vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案

目录 Vue3vite前端项目部署后部分图片资源无法获取、动态路径图片资源报404错误的原因及解决方案 一、情景介绍 1、问题出现的场景 2、无法加载的图片写法 二、反向代理原理简介 三、造成该现象的原因 四、解决方案 1、放弃动态渲染 2、在页面挂载的时候引入图片资源 …...

Nacos操作指南

第一章:Nacos 概述 1.1 什么是 Nacos? 定义与定位 Nacos(Naming and Configuration Service)是阿里巴巴于2018年开源的动态服务发现、配置管理和服务管理平台,现已成为微服务生态中的重要基础设施。其核心价值在于帮…...

2025年常见渗透测试面试题-红队面试宝典下(题目+回答)

网络安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 一、Java反序列化过程及利用链示例 二、大型网络渗透经验 三、Cobalt Strike的两种Dump Hash区别 四…...

扩增子分析|基于R语言microeco包进行微生物群落网络分析(network网络、Zi-Pi关键物种和subnet子网络图)

一、引言 microeco包是福建农林大学姚敏杰教授团队开发的扩增子测序集成分析。该包综合了扩增子测序下游分析的多种功能包括群落组成、多样性、网络分析、零模型等等。通过简单的几行代码可实现复杂的分析。因此,microeco包发表以来被学界广泛关注,截止2…...

flutter-Text等组件出现双层黄色下划线的问题

文章目录 1. 现象2. 原因3. 解决方法 1. 现象 这天我正在写Flutter项目的页面功能,突然发现我的 Text 文字出现了奇怪的样式,具体如下: 文字下面出现了双层黄色下划线文字的空格变得很大,文字的间距也变得很大 我百思不得其解&a…...

优化运营、降低成本、提高服务质量的智慧物流开源了

智慧物流视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本可通过边缘计算技术…...

leetcode第二题

功能函数 typedef struct ListNode {int val;struct ListNode *next; } ListNode;struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {ListNode *dummy (ListNode *)malloc(sizeof(ListNode));ListNode *cur dummy;int carry 0; //carry是进位值…...

QT实现带快捷键的自定义 QComboBox 控件

在现代GUI应用程序中,用户界面的设计不仅要美观,还要提供高效的交互方式。本文将介绍一个自定义的QCComboBox类,它是一个基于Qt的组合框(QComboBox),支持为每个下拉项添加快捷键。通过这些快捷键&#xff0…...

聊聊类模板

我们来聊聊类模板,从基础到实际例子,让你更容易理解。 什么是类模板? 类模板是一种模板,允许我们定义一个可以处理任意数据类型的类。简单来说,就是我们可以编写一个类的“蓝图”,然后在需要的时候使用不…...

使用Python进行AI图像生成:从GAN到风格迁移的完整指南

AI图像生成是一个非常有趣且前沿的领域,结合了深度学习和计算机视觉技术。以下是一些使用Python和相关库进行AI图像生成的创意和实现思路: 1. 使用GAN(生成对抗网络) 基本概念:GAN由两个神经网络组成:生成…...

Java 设计模式:外观模式详解

Java 设计模式:外观模式详解 外观模式(Facade Pattern)是一种结构型设计模式,它为复杂的子系统提供一个简化的统一接口,隐藏子系统的复杂性,使客户端更方便地使用系统。外观模式就像一个“门面”&#xff…...

微信小程序中实现某个样式值setData改变时从350rpx到200rpx的平滑过渡效果

方案一&#xff1a;使用 CSS Transition&#xff08;推荐简单场景&#xff09; WXSS /* 在对应组件的WXSS中添加 */ .transition-effect {transition: all 0.4s ease-in-out;will-change: bottom; /* 启用GPU加速 */ }WXML <!-- 修改后的WXML --> <view class"…...

LINUX基础 [四] - Linux工具

目录 软件包管理器yum Linux开发工具vim vim的基本概念 vim的三种常用模式 vim的简单配置 vim常用模式的基本操作 命令模式 底行模式 处理vim打开文件报错的问题 Linux编译器-gcc/g使用 为什么我们可以用C/C做开发呢&#xff1f; 预处理&#xff08;进行宏替换&#x…...

Spring Cloud之远程调用OpenFeign最佳实践

目录 OpenFeign最佳实践 问题引入 Feign 继承方式 创建Module 引入依赖 编写接口 打Jar包 服务提供方 服务消费方 启动服务并访问 Feign 抽取方式 创建Module 引入依赖 编写接口 打Jar包 服务消费方 启动服务并访问 服务部署 修改pom.xml文件 观察Nacos控制…...

【QT】 常用控件【输入类】

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;Qt 目录 一&#xff1a;&#x1f525; 输入类控件 &#x1f98b; Line Edit -- 单行输入框&#x1f380; 录入个人信息&#x1f380; 正则表达式验证输入框数据&#x1f380; 验证两次输入密码一致…...

【Python】读取xyz坐标文件输出csv文件

Python读取xyz坐标文件输出csv文件 import sys import numpy as np import pandas as pd from tqdm import tqdm import cv2 import argparsedef read_xyz(file_path):with open(file_path, "r") as f: # 打开文件data f.readlines() # 读取文件datas []for …...

深度解析Redis过期字段清理机制:从源码到集群化实践 (一)

深度解析Redis过期字段清理机制&#xff1a;从源码到集群化实践 一、问题本质与架构设计 1.1 过期数据管理的核心挑战 Redis连接池时序图技术方案 ​​设计规范&#xff1a;​ #mermaid-svg-Yr9fBwszePgHNnEQ {font-family:"trebuchet ms",verdana,arial,sans-se…...

MapReduce实验:分析和编写WordCount程序(对文本进行查重)

实验环境&#xff1a;已经部署好的Hadoop环境 Hadoop安装、配置与管理_centos hadoop安装-CSDN博客 实验目的&#xff1a;对输入文件统计单词频率 实验过程&#xff1a; 1、准备文件 test.txt文件&#xff0c;它是你需要准备的原始数据文件&#xff0c;存放在你的 Linux 系…...

【中大厂面试题】腾讯云 java 后端 最新面试题

腾讯云&#xff08;一面&#xff09; 1. spring 和 springboot的区别是什么&#xff1f; 配置方式的区别&#xff1a;Spring 应用的配置较为繁琐&#xff0c;通常需要编写大量的 XML 配置文件或者使用 Java 注解进行配置。例如&#xff0c;配置数据源、事务管理器等都需要手动…...

Redis存储“大数据对象”的常用策略及StackOverflowError错误解决方案

Hi&#xff0c;大家好&#xff0c;我是灰小猿&#xff01; 在一些功能的开发中&#xff0c;我们一般会有一些场景需要将得到的数据先暂时的存储起来&#xff0c;以便后面的接口或业务使用&#xff0c;这种场景我们一般常用的场景就是将数据暂时存储在缓存中&#xff0c;之后再…...

【Vue】v-if和v-show的区别

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–核心区别三–使用场景​四–性能对比五–总结​ 二. 核心区别 之前将css的显示隐藏的方式的时候&#xff0c;就已经提到过v-show和v-if了。忘记了的可以再回头去复习复习。 &#xff08;2.1&#xff09…...

南瓜颜色预测:逻辑回归在农业分类问题中的实战应用

南瓜颜色预测&#xff1a;逻辑回归在农业分类问题中的实战应用 摘要 本案例通过预测南瓜颜色的分类问题&#xff0c;全面展示了逻辑回归在农业领域的实战应用。从数据预处理到模型评估&#xff0c;详细介绍了Seaborn可视化、模型构建、性能优化和结果解释等关键环节。案例不仅…...

【物联网-RS-485】

物联网-RS-485 ■ RS-485 连接方式■ RS-485 半双工通讯■ RS-485 的特点■ ModBus■ ModBus-ASCII■ ModBus-RTU ■ RS-485 连接方式 ■ RS-485 半双工通讯 一线定义为A 一线定义为B RS-485传输方式&#xff1a;半双工通信、&#xff08;逻辑1&#xff1a;2V ~ 6V 逻辑0&…...

TDengine 语言连接器(Node.js)

简介 tdengine/websocket 是 TDengine 的官方 Node.js 语言连接器。Node.js 开发人员可以通过它开发存取 TDengine 数据库的应用软件。 Node.js 连接器源码托管在 GitHub。 Node.js 版本兼容性 支持 Node.js 14 及以上版本。 支持的平台 支持所有能运行 Node.js 的平台。 …...

Git分布式版本控制工具

一、工作流程 二、常用指令 1、配置git 配置环境变量 cmd打开命令行&#xff0c;输入git查看是否配置成功。 设置用户名和邮箱 git config --global user.name "用户名" git config --global user.email "邮箱" 查看用户名和邮箱 git config --glob…...

The first day of vue

关于小白直接接触vue3的第1天 首先我们需要一个脚手架node.js (这个可以从官网下载&#xff0c;免费的&#xff0c;安装也比较简单&#xff0c;后续我也会出一个相关的安装教程&#xff0c;方便大家和我一起讨论&#xff0c;互相学习&#xff09; &#xff08;不知道有没有人对…...

C语言超详细指针知识(三)

在经过前面两篇指针知识博客学习之后&#xff0c;我相信你已经对指针有了一定的理解&#xff0c;今天将更新C语言指针最后一篇&#xff0c;一起来学习吧。 1.字符指针变量 在指针类型的学习中&#xff0c;我们知道有一种指针类型为字符指针char*&#xff0c;之前我们是这样使用…...

无人机气动-结构耦合技术要点与难点

一、技术要点 1. 多学科耦合建模 气动载荷与结构响应的双向耦合&#xff1a;气动力&#xff08;如升力、阻力、力矩&#xff09;导致结构变形&#xff0c;而变形改变气动外形&#xff0c;进一步影响气流分布&#xff0c;形成闭环反馈。 建模方法&#xff1a; 高精度C…...

打造现代数据基础架构:MinIO对象存储完全指南

目录 打造现代数据基础架构&#xff1a;MinIO对象存储完全指南1. MinIO介绍1.1 什么是对象存储&#xff1f;1.2 MinIO核心特点1.3 MinIO使用场景 2. MinIO部署方案对比2.1 单节点单驱动器(SNSD/Standalone)2.2 单节点多驱动器(SNMD/Standalone Multi-Drive)2.3 多节点多驱动器(…...