常用的积分方法讨论(数学表达与代码整理)(龙格-库塔、中值积分、欧拉积分)

article/2025/10/22 20:47:23

积分方法讨论(数学表达与代码整理)

数学原理

1.1 四元数与角速度的关系

在无人机或无人车的导航系统中常常采用四元数代替欧拉角来表示机体的旋转,因为欧拉角在计算过程中容易产生奇异,这与欧拉角的计算需要利用正弦、余弦公式相关。

    机体姿态的计算中常常需要对四元数进行积分处理。博客1中给出了四元数与机体角速度的关系,表示如下。下面的积分方法基于该公式。
q ˙ e b ( t ) = 1 2 [ 0 − ω x − ω y − ω z ω x 0 ω z − ω y ω y − ω z 0 ω x ω z ω y − ω x 0 ] q e b ( t ) \dot{q}_{e}^{b}(t)=\frac{1}{2}\left[\begin{array}{cccc} 0 & -\omega_{x} & -\omega_{y} & -\omega_{z} \\ \omega_{x} & 0 & \omega_{z} & -\omega_{y} \\ \omega_{y} & -\omega_{z} & 0 & \omega_{x} \\ \omega_{z} & \omega_{y} & -\omega_{x} & 0 \end{array}\right] q_{e}^{b}(t) q˙eb(t)=210ωxωyωzωx0ωzωyωyωz0ωxωzωyωx0qeb(t)

1.2 4阶龙格-库塔方法探讨(Runge-Kutta methods)2

算法如下:
q k + 1 = q k + Δ t 1 6 ( k 1 + 2 k 2 + 2 k 3 + k 4 ) k i = f ( q ( i ) , t k + c i Δ t ) q ( i ) = q k , for  i = 1 q ( i ) = q k + Δ t ∑ j = 1 i − 1 a i j k j , for  i > 1 \begin{aligned} &\mathbf{q}_{k+1}=\mathbf{q}_{k}+\Delta t \frac{1}{6}\left(\mathbf{k}_{1}+2 \mathbf{k}_{2}+2 \mathbf{k}_{3}+\mathbf{k}_{4}\right)\\ &\begin{array}{ll} \mathbf{k}_{i}=\mathbf{f}\left(\mathbf{q}^{(i)}, t_{k}+c_{i} \Delta t\right) \\ \mathbf{q}^{(i)}=\mathbf{q}_{k}, & \text { for } i=1 \\ \mathbf{q}^{(i)}=\mathbf{q}_{k}+\Delta t \sum_{j=1}^{i-1} a_{i j} \mathbf{k}_{j}, & \text { for } i>1 \end{array} \end{aligned} qk+1=qk+Δt61(k1+2k2+2k3+k4)ki=f(q(i),tk+ciΔt)q(i)=qk,q(i)=qk+Δtj=1i1aijkj, for i=1 for i>1
其中需要的系数 c i c_i ci a i j a_ij aij是:
c 1 = 0 , c 2 = 1 2 , c 3 = 1 2 , c 4 = 1 a 21 = 1 2 , a 31 = 0 , a 41 = 0 a 32 = 1 2 , a 42 = 0 , a 43 = 1 \begin{aligned} c_{1}=0, & c_{2}=\frac{1}{2}, \quad c_{3}=\frac{1}{2}, \quad c_{4}=1 \\ a_{21}=\frac{1}{2}, & a_{31}=0, \quad a_{41}=0 \\ a_{32}=\frac{1}{2}, & a_{42}=0, \quad a_{43}=1 \end{aligned} c1=0,a21=21,a32=21,c2=21,c3=21,c4=1a31=0,a41=0a42=0,a43=1
最后我们需要对四元数进行归一化处理。

1.3 欧拉积分3

DraggedImage.png

1.4 中值积分

DraggedImage-1.png

2 仿真部分

2.1 代码

1. 龙格-库塔

%% 
for k = 2:Nwp = imu_data(4:6, k-1);w1 = imu_data(4:6, k);w = (wp+w1)/2;ap = imu_data(1:3, k-1);a1 = imu_data(1:3, k);Ow = [0     -w(1)   -w(2)    -w(3);...w(1)   0       w(3)    -w(2);...w(2)  -w(3)    0        w(1);...w(3)   w(2)   -w(1)     0  ];Fc = 0.5*Ow;F = eye(4) + Fc*dt;%%或者在这里改变积分的方法(对于矩阵的积分方法)quat1 = attitude_update_RK4(quat,dt,wp,w1);%%R_S_n = quat2dcm(quat');R_S_n_1 = quat2dcm(quat1');acc_w = (R_S_n' * ap + gw   +   R_S_n_1' * a1 + gw)/2;%     quat = F* quat;quat = attitude_update_RK4(quat,dt,wp,w1);Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;Vw = Vw + acc_w * dt;
%%quatAll(k,:) = quat';oula_new(k,:) = qtpoula(quat)';PwbSav(k,:) = Pwb';
endfunction [Qk_plus1] = attitude_update_RK4(Qk,dt,gyro0,gyro1)
%% /*gyro0代表k-1时刻的角速度,gyro1代表k时刻的角速度*/% RK4% conference: A Robust and Easy to implement method for imu% calibration without External Equipmentsq_1=Qk;k1=(1/2)*omegaMatrix(gyro0)*q_1;q_2=Qk+dt*(1/2)*k1;k2=(1/2)*omegaMatrix((1/2)*(gyro0+gyro1))*q_2;q_3=Qk+dt*(1/2)*k2;k3=(1/2)*omegaMatrix((1/2)*(gyro0+gyro1))*q_3;q_4=Qk+dt*k3;k4=(1/2)*omegaMatrix(gyro1)*q_4;Qk_plus1=Qk+dt*(k1/6+k2/3+k3/3+k4/6);Qk_plus1=Qk_plus1/norm(Qk_plus1);
end
function [omega]=omegaMatrix(data)% wx=data(1)*pi/180;% wy=data(2)*pi/180;% wz=data(3)*pi/180;wx=data(1);wy=data(2);wz=data(3);omega=[0  , -wx , -wy , -wz ;...wx ,  0  ,  wz , -wy ;...wy , -wz ,  0  ,  wx ;...wz ,  wy , -wx ,  0   ];
end

2. 欧拉积分:

for k = 1:Nw =   imu_data(4:6, k);a =   imu_data(1:3, k);Ow = [0     -w(1)   -w(2)    -w(3);...w(1)   0       w(3)    -w(2);...w(2)  -w(3)    0        w(1);...w(3)   w(2)   -w(1)     0  ];Fc = 0.5*Ow;F = eye(4) + Fc*dt;%%或者在这里改变积分的方法(对于矩阵的积分方法)%%R_S_n = quat2dcm(quat');%%Rbwacc_w = R_S_n' * a + gw;quat = F* quat;quat = quat/norm(quat);Vw = Vw + acc_w * dt;Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;
%%quatAll(k,:) = quat';oula_new(k,:) = qtpoula(quat)';PwbSav(k,:) = Pwb';
end

3. 中值积分

for k = 2:Nw = (imu_data(4:6, k-1)    +    imu_data(4:6, k))/2;a = imu_data(1:3, k-1);a1 = imu_data(1:3, k);Ow = [0     -w(1)   -w(2)    -w(3);...w(1)   0       w(3)    -w(2);...w(2)  -w(3)    0        w(1);...w(3)   w(2)   -w(1)     0  ];Fc = 0.5*Ow;F = eye(4) + Fc*dt;%%或者在这里改变积分的方法(对于矩阵的积分方法)quat1 = F* quat;%%R_S_n = quat2dcm(quat');R_S_n_1 = quat2dcm(quat1');acc_w = (R_S_n' * a + gw   +   R_S_n_1' * a1 + gw)/2;quat = F* quat;Pwb = Pwb + Vw * dt + 0.5 * dt * dt * acc_w;Vw = Vw + acc_w * dt;
%%quatAll(k,:) = quat';oula_new(k,:) = qtpoula(quat)';PwbSav(k,:) = Pwb';
end

2.2 结果

  1. 欧拉积分
    DraggedImage-2.png
  2. 中值积分
    DraggedImage-3.png
  3. 龙格-库塔
    DraggedImage-4.png

  1. https://blog.csdn.net/chenshiming1995/article/details/105107578 ↩︎

  2. A Robust and Easy to Implement Method for IMU Calibration without External Equipments ↩︎

  3. 参考 贺一家「从0开始写VIO」 ↩︎


http://chatgpt.dhexx.cn/article/IRaOy7e6.shtml

相关文章

常微分方程的解法 (二): 欧拉(Euler)方法

上一节讲了 常微分方程的三种离散化 方法:差商近似导数、数值积分、Taylor 多项式近似。 目录 2 欧拉(Euler)方法 2.1 向前 Euler 公式、向后 Euler 公式 2.2 Euler 方法的误差估计 3 改进的 Euler 方法 3.1 梯形公式 …

微积分 --- 欧拉数e的计算方法(个人学习笔记)

计算方法1: 计算方法2: 对于100来说,分37份的话,其值最接近e,且所有份的乘积最大为9.2944e15。 下面是从微积分的角度去求证,如果要让y为最大值,应该让xc/e,这就是最优份数。 &am…

考研数二第十七讲 反常积分与反常积分之欧拉-泊松(Euler-Poisson)积分

反常积分 反常积分又叫广义积分,是对普通定积分的推广,指含有无穷上限/下限,或者被积函数含有瑕点的积分,前者称为无穷限广义积分,后者称为瑕积分(又称无界函数的反常积分)。 含有无穷上限/下…

#欧拉第二积分(伽马函数)

伽玛函数,也叫欧拉第二积分,是阶乘函数在实数与复数上扩展的一类函数。 伽玛函数作为阶乘函数的延拓,是定义在复数范围内的亚纯函数,通常写成,负整数和0是它的一阶极点。 实数域: 复数域: 在解…

常见的数值积分方法 (欧拉、中值、龙格-库塔,【常用于IMU中】)

1. 积分基本概念 设F(x)为函数f(x)的一个原函数,我们把函数f(x)的所有原函数F(x)C(C为任意常数)叫做函数f(x)的不定积分(indefinite integral)。 非线性微分方程: 在有限的时间间隔Δt积分: 连续时间内积分: 工程上最常见的有三种&#xff…

欧拉积分法

数值积分法是求定积分的近似值的数值方法。即用被积函数的有限个抽样值的离散或加权平均近似值代替定积分的值。 数值积分法也是计算机仿真中常用的一种方法。在已知函数的微分方程时,求解函数下一时刻的值,我们主要有欧拉法、梯形法和龙格库塔法。 欧拉…

欧拉积分

欧拉积分 两个公式: $\Gamma(s)\int_{0}^{\infty}x^{s-1}e^{-x}dx,s>0$ (1) $B(p,q)\int_{0}^{1}x^{p-1}(1-x)^{q-1}dx,p>0,q>0$ (2) 一 、$\Gamma(Gamma)$函数 性质: 1.$\Gamma(s)$在定义域…

Oracle现使用CVSS 3.0对漏洞进行评级

Oracle今年4月关键补丁更新(Critical Patch Update)涉及多款产品中的136个漏洞,其中最大的变化是切换到通用安全漏洞评分系统3.0版本或者说CVSSv3,该版本可更准确反映漏洞带来的影响。 Oracle公司在其补丁公告中指出,这个关键补丁更新中的漏洞…

Cvss v2 complete documentation

通用漏洞计分系统(CVSS)为沟通IT漏洞的特征和影响提供了一个开放的框架。 CVSS由3组组成:基础,时间和环境。 每个组产生的范围从0到10的数字分数,以及Vector,一个反映用于得出分数的值的压缩文本表示。 基础…

东莞dell服务器维修上门服务,CVSS 10分漏洞影响Dell Wyse Thin客户端设备

近日,CyberMDX 研究人员公开了今年6月在Dell Wyse Thin客户端中发现了2个安全漏洞,漏洞CVE编号为CVE-2020-29491 和 CVE-2020-29492,这两个漏洞CVSS 评分都为10分,漏洞影响运行ThinOS v8.6及更低版本的所有设备。攻击者利用这两个…

通用漏洞评估方法CVSS3.0简表

CVSS3.0计算分值共有三种维度: 1. 基础度量。 分为 可利用性 及 影响度 两个子项,是漏洞评估的静态分值。 2. 时间度量。 基础维度之上结合受时间影响的三个动态分值,进而评估该漏洞的动态分值。 3. 环境度量。 根据用户实际环境需求结合时间…

通用漏洞评估方法CVSS3.0详解

CVSS(Common Vulerability Scoring System, 通用漏洞评估方法),是由NIAC 发布、FITST维护的开放式行业标准,CVSS 的发布为信息安全产业从业人员交流网络中所存在的系统漏洞的特点与影响提供了一个开放式的评价方法。 1.度量(Metrics&#xf…

通用漏洞评估方法CVSS3.0介绍

CVSS(Common Vulerability Scoring System, 通用漏洞评估方法),是由NIAC 发布、FITST维护的开放式行业标准,CVSS 的发布为信息安全产业从业人员交流网络中所存在的系统漏洞的特点与影响提供了一个开放式的评价方法。 1.度量(Metrics&#xf…

通用漏洞评估方法CVSS 3.0 计算公式及说明

CVSS 3.0 计算公式及说明 一、基础评价 1. 基础评价公式为: 当 影响度分值 <= 0: 基础分值 = 0 当 0 < 影响度分值 + 可利用度分值 < 10: 作用域 = 固定: 基础分值 = Roundup(影响度分值 + 可利用度分值) 作用域 = 变化: 基础分值 = Roundup[1.08 (影响度分值 + 可…

漏洞评估-CVSS3

详细可以参考ITU-T X.1521 Exploitability Attack Vector&#xff08;AV&#xff09; Attack Complexity(AC) Priviliages required(PR) User Interation&#xff08;UI&#xff09; Scope(S) 范围指的是计算授权主体&#xff08;如应用、操作系统或沙盘环境&#xff09;在授…

基于CVSS3.1的一种评估框架

原文 Vulnerability Modelling for Hybrid Industrial Control System Networks 出版 Springer Nature B.V. 2020June 2020https://doi.org/10.1007/s10723-020-09528-w 文章目录 一、摘要二、相关技术介绍&#xff08;一&#xff09;CVSS3.1计算&#xff08;二&#xff09;…

【CVSS V3.1漏洞评分计算方法】

​ 漏洞计算的官网CVSSV3.1 &#xff1a;Common Vulnerability Scoring System Version 3.1 Calculator 1、使用方法&#xff1a; 用鼠标移到对应的字符即可了解相应的含义。选中后即可得到一个分值。2、严酷度评估&#xff1a; 严重程度分值范围9.0-10致命7.0-8.9严重4.0-6…

【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology

基于CVSS的IT系统网络安全风险定量评估方法 A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology For IT Systems 摘要 由于我们不断增长的IT系统中网络威胁不断增加&#xff0c;IT系统风险评估是必不可少的。此外&#xff0c;法律法规敦促组织定期进行风…

cvss评分及漏洞矢量

CVSS CVSS全称为Common Vulnerability Scoring System&#xff0c;即“通用漏洞评分系统”&#xff0c;是一个行业公开的标准。其被设计用来评测漏洞的严重程度&#xff0c;并帮助确定所需反应的紧急度和重要度。通过漏洞难易程度以及对机密性、完整性、可用性的影响综合评估后…

cvss(cvss)

nt最近领土存在感很低&#xff1f;nt最近领土存在感很低&#xff0c;多半是废了从布 SS特5红颜101都是一打一个准只有赤那V韧性十足看空投布局SS特5红颜后方种地我以为赤那V没这么2 漏洞扫描软件Nessus怎么用&#xff1f; 装完后&#xff0c;在菜单选择&#xff1a; 当然&#…