okvis
论文
Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization
摘要
由于两种感知模式的互补性,视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案,但视觉机器人界最近转向了非线性优化方法,用于视觉同步定位和映射(SLAM)等任务,因为他们发现这在性能质量和计算复杂性方面具有显著优势。根据这一趋势,我们提出了一种新的方法,将视觉测量与SLAM中惯性测量单元(IMU)的读数紧密集成。IMU误差项以完全概率的方式与界标重投影误差集成,导致要优化的联合非线性成本函数。利用“关键帧”这一强大的概念,我们部分边缘化了旧状态,以保持有限大小的优化窗口,确保实时操作。与纯视觉和松散耦合的视觉惯性算法相比,我们的实验证实了紧密融合在准确性和鲁棒性方面的优势。
INTRODUCTION
长期以来,将视觉和惯性测量相结合一直是解决机器人常见任务的流行方法,如自我运动估计、视觉里程计和SLAM。图像中捕捉到的场景的丰富表示,以及典型IMU中存在的陀螺仪和加速度计的准确短期估计,已被公认为是相辅相成的,在机载[6,20]和汽车[14]导航中有很大的用途。此外,随着这些传感器在大多数智能手机中的可用性,人们对视觉惯性SLAM的有效解决方案产生了极大的兴趣和研究活动。
从历史上看,视觉惯性姿态估计问题已经通过滤波来解决,其中IMU测量被传播,关键点测量被用来形成更新。Mourikis和Roumeliotis[14]提出了一种使用单目视觉的基于EKF的实时融合,而Jones和Soatto[8]提出了在长户外轨迹上的单目惯性滤波结果,包括IMU到相机的校准和闭环。这两项工作的表现都令人印象深刻,误差都低于行驶距离的0.5%。
Kelly和Sukhatme[9]提供了校准结果和基于滤波的视觉IMU融合背景下的可观测性研究。偏航和位置的全局不可观测性,以及相对于初始参考姿态的日益增长的不确定性,是视觉惯性估计问题的固有问题;这对通常依赖于某种形式的线性化的滤波方法提出了挑战。
在[18]中,表明在纯视觉SLAM中,与滤波方法相比,基于优化的方法为相同的计算工作提供了更好的精度。在非线性优化的情况下,保持关键帧及其相关地标的相对稀疏图一直很受欢迎
文献中发现的视觉惯性融合方法可以分为两种方法。在松耦合系统中,例如[10],IMU测量作为独立的倾角仪和相对偏航测量纳入立体视觉优化。Weiss等人[20]使用仅视觉姿态估计作为间接IMU传播的EKF的更新。同样在[15,7]中,相对立体姿态估计被集成到包含惯性项和绝对GPS测量的因子图中。这种方法限制了复杂性,但忽略了不同传感器内部状态之间的相关性。相反紧密耦合的方法联合估计所有传感器状态。
为了便于处理,并作为滤波的替代方案,Dong Si和Mourikis[2]提出了一种固定滞后平滑器,其中保持了连续机器人姿态和相关状态的窗口,从而边缘化了超出范围的状态(参见[19])。[16]中使用了类似的方法,但没有惯性项,并且在行星着陆的背景下使用。
为了实现稳健和准确的视觉惯性SLAM,我们提倡紧密耦合融合,尽可能最大限度地利用感知线索和非线性估计,而不是滤波,以减少线性化引起的次优性。我们的方法受到[17]的启发,其中提出在批量优化的SLAM中使用IMU误差项(尽管仅在初始化期间)。我们的方法与[2]中提出的固定滞后平滑器密切相关,因为它在单个成本函数中结合了惯性项和重投影误差,并且为了限制复杂性,旧状态被边缘化
三个贡献点
1) 当存在缓慢或根本没有运动时,我们也使用关键帧范式进行无漂移估计:我们不使用时间连续姿势的优化窗口,而是保留可能在时间上任意间隔的关键帧,保持视觉约束,同时仍然遵守IMU项。我们对关键帧的相对不确定性的公式允许在不表达全局姿态不确定性的情况下构建姿态图,灵感来自RSLAM[13]。
2) 我们提供了IMU误差项的完全概率推导,包括相应的信息矩阵,在没有明确引入IMU速率下的状态的情况下关联连续图像帧。
3) 在系统层面,我们开发了用于精确实时SLAM的硬件和算法,包括鲁棒的关键点匹配和使用惯性线索的异常值抑制
在本文的其余部分中,我们在II-B中介绍了批量视觉SLAM中的惯性误差项,然后概述了II-C中的实时立体图像处理和关键帧选择,以及II-D中的边缘化形式。最后,我们在第三章中展示了我们的立体视觉和IMU传感器在室内和室外获得的结果。
紧密耦合视觉-惯性融合
在视觉SLAM中,通过最小化在相机帧中观察到的地标的重投影误差,制定了一种非线性优化来找到相机姿态和地标位置。图2显示了各自的图形表示:它将测量值显示为带有方形框的边,将估计量显示为圆形节点。一旦惯性引入了测量,它们不仅在连续姿态之间产生时间约束,而且在加速度计和陀螺仪的连续速度和IMU偏差估计之间产生时间限制,从而增强机器人状态向量。
在本节中,我们介绍了将惯性测量纳入批量视觉SLAM的方法。
符号和定义
一个帧包含的坐标系
状态包含
x R : = [ p W W S T , q W S T , v W W S T , b g T , b a T ] T ∈ R 3 × S 3 × R 9 \mathbf{x}_{\mathrm{R}}:=\left[\mathbf{p}_W^{W S^T}, \mathbf{q}_{W S}^T, \mathbf{v}_W^{W S^T}, \mathbf{b}_{\mathrm{g}}^T, \mathbf{b}_{\mathrm{a}}^T\right]^T \in \mathbb{R}^3 \times S^3 \times \mathbb{R}^9 xR:=[pWWST,qWST,vWWST,bgT,baT]T∈R3×S3×R9
残差部分
我们试图将视觉惯性定位和映射问题公式化为成本函数 J ( x ) J(x) J(x)的一个联合优化,该成本函数包含来自IMU e s e_s es的(加权)重投影误差 e r e_r er和时间误差项:
J ( x ) : = ∑ i = 1 I ∑ k = 1 K ∑ j ∈ J ( i , k ) e r i , j , k W r i , j , k e r i , j , k + ∑ k = 1 K − 1 e s k T W s k e s k J(\mathbf{x}):=\sum_{i=1}^I \sum_{k=1}^K \sum_{j \in \mathcal{J}(i, k)} \mathbf{e}_{\mathrm{r}}^{i, j, k} \mathbf{W}_{\mathrm{r}}^{i, j, k} \mathbf{e}_{\mathrm{r}}^{i, j, k}+\sum_{k=1}^{K-1} \mathbf{e}_{\mathrm{s}}^{k^T} \mathbf{W}_{\mathrm{s}}^k \mathbf{e}_{\mathrm{s}}^k J(x):=i=1∑Ik=1∑Kj∈J(i,k)∑eri,j,kWri,j,keri,j,k+k=1∑K−1eskTWskesk
其中,i是组件的相机索引,k表示相机帧索引,j表示地标索引。
本质上,纯视觉SLAM具有6个自由度(DoF),在优化过程中需要保持固定,即绝对姿态。组合视觉惯性问题只有4个自由度,因为重力使两个旋转自由度可观测到。这使固定变得复杂。我们希望固定围绕重力方向(世界z轴)的偏航,以及第一个位姿的位置 对应4个不可观量。因此,除了设置位置变化为零, δ p W W S k 1 = 0 3 × 1 \delta \mathbf{p}_W^{W S^{k_1}}=\mathbf{0}_{3 \times 1} δpWWSk1=03×1外,我们还假设 δ α k 1 = [ δ α 1 k 1 , δ α 2 k 1 , 0 ] T \delta \boldsymbol{\alpha}^{k_1}=\left[\delta \alpha_1^{k_1}, \delta \alpha_2^{k_1}, 0\right]^T δαk1=[δα1k1,δα2k1,0]T。也就是第一帧的增量进行了处理
在下文中,我们将介绍(标准)重投影误差公式。然后,结合偏置项建模对IMU运动学进行了概述,并在此基础上建立了IMU误差项。
重投影误差公式
e r i , j , k = z i , j , k − h i ( T C i S T S W k l W W L , j ) \mathbf{e}_{\mathrm{r}}^{i, j, k}=\mathbf{z}^{i, j, k}-\mathbf{h}_i\left(\boldsymbol{T}_{C_i S} \boldsymbol{T}_{S W}^k \boldsymbol{l}_W^{W L, j}\right) eri,j,k=zi,j,k−hi(TCiSTSWklWWL,j)
imu部分…
关键点匹配和关键帧选择
我们的处理流水线采用定制的多尺度SSE优化Harris角检测器,结合BRISK描述符提取[12]。检测器通过逐渐抑制得分较弱的角点来强制图像中的均匀关键点分布,因为它们是在距离较强角点很小的距离处检测到的。描述符是沿着重力方向提取的(投影到图像中),由于紧密的IMU融合,重力方向是可观察的。
最初,对关键点进行立体三角测量并将其插入到局部地图中。我们针对所有地图地标;通过使用IMU积分获得的(不确定的)姿态预测,在图像坐标中应用卡方检验来简单地执行异常值抑制。不需要昂贵的RANSAC步骤,这是IMU紧密参与的另一个优势。对于子后续优化,保持一组有界的相机帧,即具有在该时刻拍摄的相关图像的姿势;在这些图像中可见的所有地标都保存在本地地图中。如图5所示,我们区分了两种帧:我们引入了包括当前帧在内的S个最近帧的时间窗口;并且我们使用了许多N个关键帧,这些关键帧可能在很久以前就被拍摄过。对于关键帧选择,我们使用一个简单的启发式方法:如果匹配点跨越的图像区域与所有检测点跨越的区域之间的比率低于50%到60%,则帧被标记为关键帧。
部分边缘化
非线性时间约束如何存在于包含关键帧的有界优化窗口中尚不清楚,这些关键帧可能在时间上间隔任意远。在下文中,我们首先提供了边缘化的数学基础,即非线性优化中状态的消除,并将其应用于视觉惯性SLAM。
1) 非线性优化中边缘化的数学公式:
高斯-牛顿方程组由所有误差项、雅可比矩阵和信息构成:其形式为 H δ χ = b Hδχ=b Hδχ=b。让我们考虑一组待边缘化的状态, x µ x_µ xµ,与误差项相关的所有状态的集合, x λ x_λ xλ,以及剩余状态的集合 x ρ x_ρ xρ。由于条件独立性,我们可以简化边缘化步骤,只将其应用于一个子问题:
[ H μ μ H μ λ 1 H λ 1 μ H λ 1 λ 1 ] [ δ χ μ δ χ λ ] = [ b μ b λ 1 ] \left[\begin{array}{cc} \mathbf{H}_{\mu \mu} & \mathbf{H}_{\mu \lambda_1} \\ \mathbf{H}_{\lambda_1 \mu} & \mathbf{H}_{\lambda_1 \lambda_1} \end{array}\right]\left[\begin{array}{l} \delta \boldsymbol{\chi}_\mu \\ \delta \boldsymbol{\chi}_\lambda \end{array}\right]=\left[\begin{array}{c} \mathbf{b}_\mu \\ \mathbf{b}_{\lambda_1} \end{array}\right] [HμμHλ1μHμλ1Hλ1λ1][δχμδχλ]=[bμbλ1]
Schur互补运算的应用产生:
H λ 1 λ 1 ∗ : = H λ 1 λ 1 − H λ 1 μ H μ μ − 1 H μ λ 1 b λ 1 ∗ : = b λ 1 − H λ 1 μ H μ μ − 1 b μ \begin{aligned} \mathbf{H}_{\lambda_1 \lambda_1}^* & :=\mathbf{H}_{\lambda_1 \lambda_1}-\mathbf{H}_{\lambda_1 \mu} \mathbf{H}_{\mu \mu}^{-1} \mathbf{H}_{\mu \lambda_1} \\ \mathbf{b}_{\lambda_1}^* & :=\mathbf{b}_{\lambda_1}-\mathbf{H}_{\lambda_1 \mu} \mathbf{H}_{\mu \mu}^{-1} \mathbf{b}_\mu \end{aligned} Hλ1λ1∗bλ1∗:=Hλ1λ1−Hλ1μHμμ−1Hμλ1:=bλ1−Hλ1μHμμ−1bμ
(18)中的方程式描述了边缘化的单一步骤。在我们基于关键帧的方法中,必须重复应用边缘化步骤,并随着状态估计的不断变化,将得到的信息作为优化的先验信息。因此,我们将线性化点固定在x0附近,即边缘化时x的值。有限偏差 Δ χ : = Φ − 1 ( log ( x ‾ ⊞ x 0 − 1 ) ) ) \left.\Delta \chi:=\Phi^{-1}\left(\log \left(\overline{\mathbf{x}} \boxplus \mathbf{x}_0^{-1}\right)\right)\right) Δχ:=Φ−1(log(x⊞x0−1)))表示边缘化后发生的状态更新,其中 x ‾ \overline{\mathbf{x}} x是我们对x的当前估计。换句话说,x由 x = exp ( Φ ( δ χ ) ) ⊞ exp ( Φ ( Δ χ ) ) ⊞ x 0 ⏟ = x ‾ . \mathbf{x}=\exp (\Phi(\delta \boldsymbol{\chi})) \boxplus \underbrace{\exp (\Phi(\Delta \boldsymbol{\chi})) \boxplus \mathbf{x}_0}_{=\overline{\mathbf{x}}} . x=exp(Φ(δχ))⊞=x exp(Φ(Δχ))⊞x0.这种通用公式允许我们将最小坐标上的先验信息应用于任何状态变量,包括单位长度四元数。引入∆χ可以将右手边近似为(一阶) b + ∂ b ∂ Δ χ ∣ x 0 Δ χ = b − H Δ χ \mathbf{b}+\left.\frac{\partial \mathbf{b}}{\partial \Delta \boldsymbol{\chi}}\right|_{\mathbf{x}_0} \Delta \boldsymbol{\chi}=\mathbf{b}-\mathbf{H} \Delta \boldsymbol{\chi} b+∂Δχ∂b x0Δχ=b−HΔχ现在我们可以将高斯-牛顿系统(17)表示为: [ b μ b λ 1 ] = [ b μ , 0 b λ 1 , 0 ] − [ H μ μ H μ λ 1 H λ 1 μ H λ 1 λ 1 ] [ Δ χ μ Δ χ λ ] . \left[\begin{array}{c} \mathbf{b}_\mu \\ \mathbf{b}_{\lambda_1} \end{array}\right]=\left[\begin{array}{c} \mathbf{b}_{\mu, 0} \\ \mathbf{b}_{\lambda_1, 0} \end{array}\right]-\left[\begin{array}{cc} \mathbf{H}_{\mu \mu} & \mathbf{H}_{\mu \lambda_1} \\ \mathbf{H}_{\lambda_1 \mu} & \mathbf{H}_{\lambda_1 \lambda_1} \end{array}\right]\left[\begin{array}{c} \Delta \boldsymbol{\chi}_\mu \\ \Delta \boldsymbol{\chi}_\lambda \end{array}\right] . [bμbλ1]=[bμ,0bλ1,0]−[HμμHλ1μHμλ1Hλ1λ1][ΔχμΔχλ].
在这种形式中,右侧(18)变成 b λ 1 ∗ = b λ 1 , 0 − H λ 1 μ T H μ μ − 1 b μ , 0 ⏟ b λ 1 , 0 ∗ − H λ 1 λ 1 ∗ Δ χ λ 1 . \mathbf{b}_{\lambda_1}^*=\underbrace{\mathbf{b}_{\lambda_1, 0}-\mathbf{H}_{\lambda_1 \mu}^T \mathbf{H}_{\mu \mu}^{-1} \mathbf{b}_{\mu, 0}}_{\mathbf{b}_{\lambda_1, 0}^*}-\mathbf{H}_{\lambda_1 \lambda_1}^* \Delta \chi_{\lambda_1} . bλ1∗=bλ1,0∗ bλ1,0−Hλ1μTHμμ−1bμ,0−Hλ1λ1∗Δχλ1.
在边缘化节点包括无穷大(或足够接近无穷大)处的地标,或仅在一个相机中从单个姿势可见的地标的情况下,与这些地标相关联的Hessian块将(在数值上)等级不足。因此,我们采用了伪逆 H µµ + H^+_{µµ} Hµµ+,它为给定 δ χ λ δχ_λ δχλ的 δ χ µ δχ_µ δχµ提供了一个零分量到零空间方向的解
上述公式为边缘化的状态 x µ x_µ xµ和剩余状态 x λ x_λ xλ引入了一个固定的线性化点。这也将被用作涉及这些状态的术语的所有未来线性化的参考点。在应用(18)之后,我们可以去除消耗的非线性项,并将边缘化的 H λ 1 λ 1 ∗ , N \mathbf{H}_{\lambda_1 \lambda_1}^{*, N} Hλ1λ1∗,N 和 b λ 1 ∗ , N \mathbf{b}_{\lambda_1}^{*, N} bλ1∗,N,作为求和项,以构建整个高斯-牛顿系统。对平方误差的贡献可以写成 χ λ 1 2 = b λ 1 ∗ T H λ 1 λ 1 ∗ + b λ 1 ∗ \chi_{\lambda_1}^2=\mathbf{b}_{\lambda_1}^{* T} \mathbf{H}_{\lambda_1 \lambda_1}^{*+} \mathbf{b}_{\lambda_1}^* χλ12=bλ1∗THλ1λ1∗+bλ1∗.
边缘化应用于基于关键帧的视觉惯性SLAM:
最初边缘化的误差项是由前N+1帧 x T k , k = 1 , … , N + 1 \mathbf{x}_{\mathrm{T}}^k, k=1, \ldots, N+1 xTk,k=1,…,N+1构造的。分别具有如图6所示的速度和偏置状态。N个第一帧将全部解释为关键帧,边缘化步骤包括消除相应的速度和偏移状态。
当一个新的帧 x T c x^c_T xTc(当前帧,索引c)被插入到优化窗口中时,我们应用边缘化操作。在时间窗口 ( x T c − S ) (x^{ c−S}_ T) (xTc−S)中最古老的帧不是关键帧的情况下,我们将放弃其所有路标点测量,然后将其与最古老的速度和偏移状态一起边缘化。图7说明了这个过程。丢弃路标测量是次优的;
图7、具有N=3个关键帧和IMU/时间节点大小S=3的图形说明。一个规则的框架正在从时间窗口中滑出。
然而,为了快速求解,它保持了问题的稀疏性。具有关键帧的视觉SLAM成功地以类似的方式进行,丢弃具有路标测量值的整个帧。
在 ( x T c − S ) (x^{ c−S}_ T) (xTc−S)是关键帧的情况下,简单地放弃所有关键点测量的信息损失将更为显著:公共路标点观测中编码的最古老的两个关键帧之间的所有相对姿态信息都将丢失。因此,我们还将在 x T k 1 x^{k1}_T xTk1中可见但在最近的关键帧中不可见的地标边缘化。图8以图形方式描述了该过程。问题的稀疏性再次得到保留。
总结
本文提出了一种将惯性测量紧密集成到基于关键帧的视觉SLAM中的方法。非线性优化中误差项的组合是由可用于关键点检测和IMU读数的误差统计数据驱动的,从而取代了对任何调谐参数的需要。使用所提出的方法,我们使用IMU运动学运动模型获得了重力方向的全局一致性和鲁棒的异常点抑制。同时,获得了基于关键帧的非线性优化的所有优点,如保持静止的姿态。使用立体相机和IMU传感器获得的结果证明了所提出的框架的实时操作,同时比仅视觉或松耦合方法表现出更高的准确性和鲁棒性。
相关文章:

okvis
论文 Keyframe-Based Visual-Inertial SLAM Using Nonlinear Optimization 摘要 由于两种感知模式的互补性,视觉和惯性线索的融合在机器人中变得很流行。虽然迄今为止大多数融合策略都依赖于过滤方案,但视觉机器人界最近转向了非线性优化方法&#x…...

fabric js双击弹出菜单, 双击弹出输入框 修改文字 群组对象
<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>测试1</title><style type"text/css">body {background-color: #ccc;float: left;}#main {background-color: #fff;border: 1px…...

路由器工作原理
路由器原理 路由概述 路由:跨越从源主机到目标主机的一个互联网络来转发数据包的过程。(为数据包选择路径的过程) 作用:路由器是连接不同网段的。 转发依据: 路由表:路径选择全看路由表,根…...

在centos 7系统docker上构建mysql 5.7
一、VM上已经安装centos 7.9,且已完成docker的构建 二、安装mysql5.7 安装镜像:[rootlocalhost lll]# docker pull mysql:5.7 查看镜像[rootlocalhost lll]# docker images 根据镜像id构建mysql容器,且分配端口号[rootlocalhost lll]# dock…...

数据库的介绍和分类
目录 一、数据库的介绍和分类 二、命令行客户端 三、数据操作 四、查询的基本操作 五、条件查询 六、分组和聚合 资料获取方法 一、数据库的介绍和分类 数据库:长期存储在计算机内、有组织的数据集合 数据库的分类: 关系型数据库 以表格的形式…...

职责链模式——请求的链式处理
1、简介 1.1、概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个。例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构。采购单沿着这条链进行传递ÿ…...

docker中涉及的挂载点总结
文章目录 1.场景描述2. 容器信息在主机上位置3. 通过docker run 命令4、通过Dockerfile创建挂载点5、容器共享卷(挂载点)6、最佳实践:数据容器 1.场景描述 在介绍VOLUME指令之前,我们来看下如下场景需求: 1ÿ…...

elasticsearch 官方优化建议
.一般建议 a.不要返回过大的结果集。这个建议对一般数据库都是适用的,如果要获取大量结果,可以使用search_after api,或者scroll (新版本中已经不推荐)。 b.避免大的文档。 2. 如何提高索引速度 a.使用批量请求。为了…...

Kubernetes(K8s)从入门到精通系列之五:K8s的基本概念和术语之应用类
Kubernetes K8s从入门到精通系列之五:K8s的基本概念和术语之应用类 一、Service与Pod二、Label与标签选择器三、Pod与Deployment四、Service的ClusterIP地址五、Service的外网访问问题六、有状态的应用集群七、批处理应用八、应用配置问题九、应用的运维一、Service与Pod Ser…...

DevOps(四)
CD(二) 1. CDStep 1 - 上传代码Step 2 - 下载代码Step 3 - 检查代码Step 4 - 编译代码Step 5 - 上传仓库Step 6 - 下载软件Step 7 - 制作镜像Step 8 - 上传镜像Step 9 - 部署服务2. 整体预览2.1 预览1. 修改代码2. 查看sonarqube检查结果3. 查看nexus仓库4. 查看harbor仓库5.…...

Element-plus侧边栏踩坑
问题描述 el-menu直接嵌套el-menu-item菜单,折叠时不会出现文字显示和小箭头无法隐藏的问题,但是实际开发需求中难免需要把el-menu-item封装为组件 解决 vue3项目中嵌套两层template <template><template v-for"item in list" :k…...

支持多种通信方式和协议方便接入第三方服务器或云平台
2路RS485串口是一种常用的通信接口,可以支持Modbus Slave协议,并可接入SCADA、HMI、DSC、PLC等上位机。它还支持Modbus RTU Master协议,可用于扩展多达48个Modbus Slave设备,如Modbus RTU远程数据采集模块、电表、水表、柴油发电机…...

使用 OpenCV 进行图像模糊度检测(拉普拉斯方差方法)
写在前面 工作中遇到,简单整理人脸识别中,对于模糊程度较高的图像数据,识别率低,错误率高。虽然使用 AdaFace 模型,对低质量人脸表现尤为突出。但是还是需要对 模糊程度高的图像进行丢弃处理当前通过阈值分类ÿ…...

神经网络简单介绍
人工神经网络(artififial neural network) 简称神经网络,它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息,再通过隐藏层进行特征信息的加工和提取,最后通过输出层输出结果。 根据需要神经网络可以…...

16位S912ZVML32F3MKH、S912ZVML31F1WKF、S912ZVML31F1MKH混合信号MCU,适用于汽车和工业电机控制应用。
S12 MagniV微控制器是易于使用且高度集成的混合信号MCU,非常适合用于汽车和工业应用。S12 MagniV MCU提供单芯片解决方案,是基于成熟的S12技术的完整系统级封装 (SiP) 解决方案,在整个产品组合内软件和工具都兼容。 S12 MagniV系统级封装 (S…...

力扣 509. 斐波那契数
题目来源:https://leetcode.cn/problems/fibonacci-number/description/ C题解1:根据题意,直接用递归函数。 class Solution { public:int fib(int n) {if(n 0) return 0;else if(n 1) return 1;else return(fib(n-1) fib(n-2));} }; C题…...

使用 DolphinDB TopN 函数探索高效的Alpha因子
DolphinDB 已经有非常多的窗口计算函数,例如 m 系列的滑动窗口计算,cum 系列累计窗口计算,tm 系列的的时间窗口滑动计算。但是所有这类函数都是对窗口内的所有记录进行指标计算,难免包含很多噪音。 DolphinDB 的金融领域用户反馈…...

超聚变和厦门大学助力兴业银行构建智慧金融隐私计算平台,助力信用卡业务精准营销...
兴业银行与超聚变数字技术有限公司、厦门大学携手,发挥产学研用一体化整体优势联合建设,厦门大学提供先进的算法模型及科研能力,超聚变提供产品解决方案及工程能力,兴业银行提供金融实践能力,三方发挥各自领域优势&…...

docker 的compose安装
1. Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose docker compose 实现单机容器集群编排管理(使用一个模板文件定义多个应用容器的启动参数和依赖关系,并使用docker co…...

JavaScript---事件对象event
获取事件对象: 事件对象:是个对象,这个对象里有事件触发时的相关信息,在事件绑定的回调函数的第一个参数就是事件对象,一般命名为event、ev、e eg: 元素.addEventListener(click,function (e){}) 部分常用属性&…...

Day 15 C++对象模型和this指针
目录 C对象模型 类内的成员变量和成员函数分开存储 总结 this指针 概念 示例 用途 当形参和成员变量同名时 在非静态成员函数中,如果希望返回对象本身 例子 空指针访问成员函数 示例 const修饰成员函数 常函数(const member function&…...

HarmonyOS/OpenHarmony元服务开发-卡片生命周期管理
创建ArkTS卡片,需实现FormExtensionAbility生命周期接口。 1.在EntryFormAbility.ts中,导入相关模块。 import formInfo from ohos.app.form.formInfo; import formBindingData from ohos.app.form.formBindingData; import FormExtensionAbility from …...

软件工程01
软件工程原则: 开闭原则: open closed principle : 对扩展开放,对修改关闭,,,只让扩展,不让修改,用新增的类去替代修改的类 扩展之后,代码不用改变ÿ…...

UML/SysML建模工具更新(2023.7)(1-5)有国产工具
DDD领域驱动设计批评文集 欢迎加入“软件方法建模师”群 《软件方法》各章合集 最近一段时间更新的工具有: 工具最新版本:Visual Paradigm 17.1 更新时间:2023年7月11日 工具简介 很用心的建模工具。支持编写用例规约。支持文本分析和C…...

Mac plist文件
macOS、iOS、iPadOS的应用程序都可能会有plist配置文件,他是苹果系列操作系统特有的配置文件。 plist的本质是个xml格式的文本文件,英文全称是property list,文件后缀使用.plist。 对于普通用户来说,基本不用管plist文件是什么&…...

基于Java+SpringBoot+vue前后端分离校园周边美食探索分享平台设计实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...

【openwrt】package介绍
openwrt package介绍 OpenWrt 构建系统主要围绕package的概念展开。不管是什么软件,几乎都对应一个package。 这几乎适用于系统中的所有内容:HOST工具、交叉编译工具链、Linux 内核、内核mod、根文件系统和上层的应用软件。 一个 OpenWrt package本质上…...

vue 封装一个鼠标拖动选择时间段功能
<template><div class"timeRange"><div class"calendar"><table><thead><tr><th rowspan"6" class"weekRow"><b>周/时间</b></th><th colspan"24"><…...

ubuntu22.0安装Barrier局域网共享鼠标键盘
ubuntu22.0安装Barrier局域网共享鼠标键盘 参考网站安装步骤客户端一直开启中解决 参考网站 https://idroot.us/install-barrier-ubuntu-22-04/ 安装步骤 sudo apt update sudo apt upgrade sudo apt install wget apt-transport-https gnupg2 software-properties-common s…...

ffmpeg常用功能博客导航
FFmpeg 是一个处理视频和音频内容的开源工具库,可以实现编码、解码、转码、流媒体和后处理等服务。 推荐博客: 常见命令和使用案例 用ffmpeg转mov为mp4格式 FFmpeg 常用命令 FFmpeg 常用命令编辑音/视频(转换格式、压缩、裁剪、截图、切分合…...