低成本MEMS INS系统 + GNSS组合导航MATLAB仿真

news2024/11/20 13:29:58

感谢西工大严老师的无私奉献!!

低成本MEMS INS系统 + GNSS组合导航MATLAB仿真

    • 感谢西工大严老师的无私奉献!!
  • 一、kalman参数初始化——kfinit()
  • 二、imu添加误差——imusdderr()
  • 三、imu位姿更新——insupdate()
  • 四、kalman误差方程——kfft15()
  • 五、kalman滤波——kfupdate()
  • 六、主程序:
  • 七、仿真结果
  • 八、程序及数据下载地址

一、kalman参数初始化——kfinit()

在这里插入图片描述

%________________________________________________________________________
% 输入:
%       Qk: 系统的状态噪声,15*15的对角矩阵,Qk = diag([web; wdb; zeros(9,1)])^2*nts;
%       Rk: 系统的测量噪声,6*6的对角矩阵,rk = [[0.1;0.1;0.1];[[10;10]/Re;10]];  Rk = diag(rk)^2;
%       P0: 初始状态的协方差矩阵,15*15的对角矩阵,P0 = diag([delta_a;delta_v;delta_p;delta_eb;delta_db])^2;
%       Phikk_1: 状态转移矩阵
%       Hk: 量测转移矩阵
%       Gammak: 状态噪声驱动矩阵
% 输出:
%       kf: 
%_________________________________________________________________________
function kf = kfinit(Qk, Rk, P0, Phikk_1, Hk, Gammak)
    [kf.m, kf.n] = size(Hk);                                              % kf.m:量测维数; kf.n:状态维数
    kf.Qk = Qk; kf.Rk = Rk;                                               % 状态噪声和量测噪声
    kf.Pk = P0; kf.Xk = zeros(kf.n,1);                                    % 初始状态和初始状态误差协方差矩阵
    kf.Phikk_1 = Phikk_1; kf.Hk = Hk;                                     % 状态转移矩阵和量测矩阵
    if nargin<6,  kf.Gammak = eye(kf.n);                                  % 状态噪声驱动矩阵
    else          kf.Gammak = Gammak;   end

二、imu添加误差——imusdderr()

function [wm, vm] = imuadderr(wm, vm, eb, web, db, wdb, ts)  % IMU添加零偏与游走误差
    m = size(wm,1); sts = sqrt(ts);
    wm = wm + [ ts*eb(1) + sts*web(1)*randn(m,1), ...
                ts*eb(2) + sts*web(2)*randn(m,1), ...
                ts*eb(3) + sts*web(3)*randn(m,1) ];
    vm = vm + [ ts*db(1) + sts*wdb(1)*randn(m,1), ...
                ts*db(2) + sts*wdb(2)*randn(m,1), ...
                ts*db(3) + sts*wdb(3)*randn(m,1) ];

三、imu位姿更新——insupdate()

具体编写过程请参考我的其他两篇博客:
1、高、低成本MEMS惯导系统姿态、位置、速度更新算法的对比
2、低成本MEMS惯导系统的捷联惯导解算MATLAB仿真

function [qnb,vn2,pos,eth]=insupdate(qnb,vn1,pos,delta_theta_m,delta_v_m,ts)
nn=1;                                                                  %子样数   
nts=nn*ts;
g0=9.780325333434361;                                                  %单位;m/s^2
sl = sin(pos(1));                                                      % pos(1)=L
sl2 = sl*sl;  sl4 = sl2*sl2;
gLh = g0*(1+5.27094e-3*sl2+2.32718e-5*sl4)-3.086e-6*pos(3); 
gn = [0;0;-gLh];
eth = earth(pos, vn1);  % 地球相关参数计算
%速度更新
vsf =q2mat(qnb)*(delta_v_m + 1/2*cross(delta_theta_m,delta_v_m))';     
vn2 = vn1 + vsf + gn*nts;
%位置更新
vn1 = (vn2+vn1)/2;
pos = pos + [vn1(2)/eth.RMh;vn1(1)/eth.clRNh;vn1(3)]*nts;
%姿态更新                                                               
q_bb = [cos(norm(delta_theta_m)/2);(delta_theta_m/norm(delta_theta_m))'*sin((norm(delta_theta_m)/2))];
qnb = qmul(rv2q(-eth.wnin*nts), qmul(qnb, q_bb));  % 姿态更新
qnb = qnormlz(qnb);

end

四、kalman误差方程——kfft15()

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

function Ft = kfft15(eth, Cnb, fb)
global g0 ff
	tl = eth.tl; secl = 1/eth.cl; L = eth.pos(1); h = eth.pos(3); 
    f_RMh = 1/eth.RMh; f_RNh = 1/eth.RNh; f_clRNh = 1/eth.clRNh;
    f_RMh2 = f_RMh*f_RMh;  f_RNh2 = f_RNh*f_RNh;
    vE_clRNh = eth.vn(1)*f_clRNh; vE_RNh2 = eth.vn(1)*f_RNh2; vN_RMh2 = eth.vn(2)*f_RMh2;
    Mp1 = [ 0,           0, 0;                                             % 4.2.33a
           -eth.wnie(3), 0, 0;
            eth.wnie(2), 0, 0 ];
    Mp2 = [ 0,             0,  vN_RMh2;
            0,             0, -vE_RNh2;
            vE_clRNh*secl, 0, -vE_RNh2*tl];                                % 4.2.33c
    beta = 5.27094e-3; beta1 = (2*beta+ff)*ff/8; beta2 = 3.086e-6; beta3 = 8.08e-9;
    Mp3 = [0,0,0; -2*beta3*h,0,-beta3*sin(2*L); -g0*(beta-4*beta1*cos(2*L))*sin(2*L),0,beta2];                  % 对M3的补偿项
    Maa = askew(-eth.wnin);                                                % 4.2.38_1
    Mav = [ 0,       -f_RMh, 0;
            f_RNh,    0,     0;
            f_RNh*tl, 0,     0 ];                                          % 4.2-33b
    Map = Mp1+Mp2;                                                         % 4.2.38_2
    
    Mva = askew(Cnb*fb);
    Mvv = askew(eth.vn)*Mav - askew(eth.wnien);                            % 4.2.40 1-3
    Mvp = askew(eth.vn)*(Mp1+Map)+Mp3;
    
    Mpv = [ 0,       f_RMh, 0;
            f_clRNh, 0,     0;
            0,       0,     1 ];                                           % 4.2.42a
    Mpp = [ 0,           0, -vN_RMh2;
            vE_clRNh*tl, 0, -vE_RNh2*secl;
            0,           0,  0 ];                                          % 4.2.42b
    O33 = zeros(3);
	%%    phi   dvn   dpos   eb     db
	Ft = [ Maa    Mav    Map    -Cnb     O33 
           Mva    Mvv    Mvp     O33     Cnb 
           O33    Mpv    Mpp     O33     O33
           zeros(6,15) ];

五、kalman滤波——kfupdate()

在这里插入图片描述
在这里插入图片描述
Kalman滤波过程可用流程框图表示:
在这里插入图片描述

function kf = kfupdate(kf, Zk, TimeMeasBoth)              % T: 进行时间更新,M: 进行量测更新,B: 进行时间更新和量测更新
% **************************************************************
%名称:Kalman filter update
% 输入:
%       kf: k-1时刻的kalman filter参数
%       Zk: k时刻传感器测得的量测信息
%       time_measure_both: 
% 输出:
%       kf: k时刻的kalman filter参数
% **************************************************************
    if nargin==1,         TimeMeasBoth = 'T';             % 如果没有量测输入,则只进行时间更新
    elseif nargin==2,     TimeMeasBoth = 'B';    end      % 有量测输入,进行时间更新和量测更新
    if TimeMeasBoth=='T' || TimeMeasBoth=='B'             % 时间更新  
        kf.Xkk_1 = kf.Phikk_1*kf.Xk;
        kf.Pkk_1 = kf.Phikk_1*kf.Pk*kf.Phikk_1' + kf.Gammak*kf.Qk*kf.Gammak';
    else % TimeMeasBoth=='M'
        kf.Xkk_1 = kf.Xk;
        kf.Pkk_1 = kf.Pk; 
    end
    if TimeMeasBoth=='M' || TimeMeasBoth=='B'             % 量测更新
        kf.PXZkk_1 = kf.Pkk_1*kf.Hk';
        kf.PZkk_1 = kf.Hk*kf.PXZkk_1 + kf.Rk;
        kf.Kk = kf.PXZkk_1/kf.PZkk_1;
        kf.Xk = kf.Xkk_1 + kf.Kk*(Zk-kf.Hk*kf.Xkk_1);
        kf.Pk = kf.Pkk_1 - kf.Kk*kf.PZkk_1*kf.Kk';
    else % TimeMeasBoth=='T'
        kf.Xk = kf.Xkk_1;
        kf.Pk = kf.Pkk_1; 
    end
	kf.Pk = (kf.Pk+kf.Pk')/2;   % P阵对称化

六、主程序:

clc
clear  
gvar;
imu=load ('imu.mat');                                                      % imu数据: avp=[wm, vm, tt(2:end)]; gx(rad)  gy  gz ax (m/s)  ay  az time  
trj=load ('trj.mat');                                                      % trj=[att, vn, pos]; att() vn(米每秒) pos()
arcdeg = pi/180;   
nn=1;                                                                      % 子样数
ts=0.01;                                                                   % 单个采样间隔的采样时间长度
nts=nn*ts;                                                                 % 采样周期,在nts时间内进行两次采样,每次采样 0.1%初始化参数
att = [0;0;90]*arcdeg; vn0 = [0;0;0]; pos0 = [[34;108]*arcdeg;100];        % att -- 欧拉角;arcdeg -- 度转换为弧度;vn -- 速度;pos -- 位置
qnb0 = a2qua(att);  
qnb = qnb0;  vn = vn0;  pos = pos0;                                        % 姿态、速度和位置初始化
%添加误差
phi = [0.1; 0.2; 3]*arcmin;  qnb = qaddphi(qnb, phi);                      % 失准角
eb = [0.01;0.015;0.02]*dph; web = [0.001;0.001;0.001]*dpsh;                % 陀螺常值零偏,角度随机游走                                                                         
db = [80;90;100]*ug; wdb = [1;1;1]*ugpsHz;                                 % 加速度计常值偏值,速度随机游走
                                                                           % ug=ge*1e-6; g0 = ge; ge -- 赤道重力; ugpsHz= ug/sqrt(1);
                                                                                                                                                      
%初始化kalman参数                                                                          
Qk = diag([web; wdb; zeros(9,1)])^2*nts;                                   % Qk系统噪声
rk = [[0.1;0.1;0.1];[[10;10]/Re;10]];  Rk = diag(rk)^2;                    % Rk量测噪声
P0 = diag([[0.1;0.1;10]*arcdeg; [1;1;1]; [[10;10]/Re;10];                  % Re赤道长半轴
           [0.1;0.1;0.1]*dph; [80;90;100]*ug])^2;                          % 协方差矩阵,x = [phi, delta_vn, delta_p, eb, db]
Hk = [zeros(6,3),eye(6),zeros(6)];
kf = kfinit(Qk, Rk, P0, zeros(15), Hk); 

len=length(imu.avp);
avps=zeros(fix(len/2),10);
avps(1,:)=[att;vn;pos;0]';
t=0;kk=1;err = zeros(len, 10);  xkpk = zeros(len, 2*kf.n+1);
for k=1:nn:len                                                            
    t=t+nts;
    delta_theta_m=imu.avp(k,1:3);
    delta_v_m=imu.avp(k,4:6);
    [wm_b, vm_b] = imuadderr(delta_theta_m, delta_v_m, eb, web, db, wdb, ts);% IMU添加零偏与游走误差
    [qnb,vn,pos,eth]=insupdate(qnb,vn,pos,wm_b,vm_b,ts);  
    kf.Phikk_1 = eye(15) + kfft15(eth, q2mat(qnb), sum(vm_b,1)'/nts)*nts;  % kf.Phikk_1 = Phikk_1; kfft15 -- SINS误差转移矩阵
    kf = kfupdate(kf);                                                     % Kalman滤波时间更新
    if mod(t,0.01)<nts
        gps = trj.trj(k,4:9)' +  rk.*randn(6,1);                           % GPS速度位置仿真
        kf = kfupdate(kf, [vn;pos]-gps, 'M');                              % Kalman滤波量测更新
    end
    %误差反馈
    qnb = qdelphi(qnb,kf.Xk(1:3));  kf.Xk(1:3) = 0;                        % kf.Xk = zeros(kf.n,1); qdelphi -- 四元数真实值=四元数计算值-失准角;误差反馈
    vn = vn - kf.Xk(4:6);  kf.Xk(4:6) = 0;                                 %每次减完都需要把当前时刻的估计误差给扣除,也就是最后把姿态、速度、位置误差全部清零。
    pos = pos - kf.Xk(7:9);  kf.Xk(7:9) = 0;
    
    err(kk,:) = [qq2phi(qnb,a2qua(trj.trj(k,1:3))'); vn-trj.trj(k,4:6)'; 
                pos-trj.trj(k,7:9)'; t]';                                  % qq2phi -- 失准角误差=四元数计算值-四元数真值
    xkpk(kk,:) = [kf.Xk; diag(kf.Pk); t];                                  % kf.Pk = P0; [kf.Xk; diag(kf.Pk); t] -- 反馈后的剩余状态、方差阵和时间
    
    kk=kk+1; 
    cnb=q2att(qnb);
    cnb(3)=mod(cnb(3),2*pi);                                               % avp()=[θ γ ψ VE VN VU B L h t]
    avps(kk,:)=[cnb; vn; pos; t]';
    if mod(t,1)<nts,  disp(fix(t));  
    end                                                                    % 显示进度  disp函数:显示文本或数组
end
    
%姿态
tt=length(avps);
tf=length(trj.trj);
figure(1);
subplot(321);
plot(1:tt,(avps(1:tt,1:2)/arcdeg),1:tf,(trj.trj(1:tf,1:2)/arcdeg),'--'); title('俯仰角和横滚角');xlabel('d');ylabel('\theta,\gamma(\circ)');
legend('\it\theta','\it\gamma','\bf\theta','\bf\gamma');grid on;
subplot(322);
plot(1:tt,(avps(1:tt,3)/arcdeg),1:tf,(trj.trj(1:tf,3)/arcdeg),'--'); title('偏航角');xlabel('d');ylabel('\Phi(\circ)');
legend('\it\Phi','\bf\Phi') ;grid on;
subplot(323);
plot(1:tt,(avps(1:tt,4:5)),1:tf,(trj.trj(1:tf,4:5)),'--'); title('速度');xlabel('d');ylabel('Vel/(m.s^{-1})');
legend('\itv\rm_E','\itv\rm_N','\bfv\rm_E','\bfv\rm_N');grid on;
subplot(324);
plot(1:tt,(avps(1:tt,6)),1:tf,(trj.trj(1:tf,6)),'--'); title('速度');xlabel('d');ylabel('Vel/(m.s^{-1})');
legend('\itv\rm_U','\bfv\rm_U');grid on;
subplot(325);
plot(1:tt,deltapos(avps(1:tt,7:9)),1:tf,deltapos(trj.trj(1:tf,7:9)),'--'); title('位置');xlabel('d');ylabel('\DeltaPos / m');
legend('\Delta\itL', '\Delta\it\lambda', '\Delta\ith','\Delta\bfL', '\Delta\bf\lambda', '\Delta\bfh');grid on;   

err(kk:end,:) = [];  xkpk(kk:end,:) = [];  tt = err(:,end);
% 状态真值与估计效果对比图
msplot(321, tt, err(:,1:2)/arcmin, '\it\phi\rm / ( \prime )');                                                        % 俯仰角,滚转角误差
legend('\it\phi\rm_E', '\it\phi\rm_N') ; title('俯仰角和横滚角真值与估计值之差');                                       % 添加图例
msplot(322, tt, err(:,3)/arcmin, '\it\phi\rm_U\rm / ( \prime )'); title('偏航角真值与估计值之差');                      % 偏航角误差
msplot(323, tt, err(:,4:6), '\delta\itv^n\rm / ( m.s^{-1} )'); title('三轴速度真值与估计值之差');                       % 三轴速度误差
legend('\delta\itv\rm_E', '\delta\itv\rm_N', '\delta\itv\rm_U')
msplot(324, tt, [err(:,7)*Re,err(:,8)*Re*cos(pos(1)),err(:,9)], '\delta\itp\rm / m');title('三轴位置真值与估计值之差'); % 三轴位置误差
legend('\delta\itL', '\delta\it\lambda', '\delta\ith')
msplot(325, tt, xkpk(:,10:12)/dph, '\it\epsilon\rm / ( (\circ).h^{-1} )');title('三轴陀螺仪常值误差');                  % 三轴陀螺仪常值误差
legend('\it\epsilon_x','\it\epsilon_y','\it\epsilon_z')
msplot(326, tt, xkpk(:,13:15)/ug, '\it\nabla\rm / \mu\itg');                                                           % 三轴加速度计误差
legend('\it\nabla_x','\it\nabla_y','\it\nabla_z');title('三轴加速度计常值零偏误差');
% 均方差收敛图 滤波器的可观测性
spk = sqrt(xkpk(:,16:end-1));
msplot(321, tt, spk(:,1:2)/arcmin, '\it\phi\rm / ( \prime )');title('俯仰角和横滚角反馈后误差的方差');
legend('\it\phi\rm_E', '\it\phi\rm_N'), 
msplot(322, tt, spk(:,3)/arcmin, '\it\phi\rm_U\rm / ( \prime )');title('偏航角反馈后误差的方差');
msplot(323, tt, spk(:,4:6), '\delta\itv^n\rm / ( m.s^{-1} )');title('三轴反馈后误差的方差');
legend('\delta\itv\rm_E', '\delta\itv\rm_N', '\delta\itv\rm_U')
msplot(324, tt, [[spk(:,7),spk(:,8)*pos(1)]*Re,spk(:,9)], '\delta\itp\rm / m');title('三轴位置反馈后误差的方差');
legend('\delta\itL', '\delta\it\lambda', '\delta\ith')
msplot(325, tt, spk(:,10:12)/dph, '\it\epsilon\rm / ( (\circ).h^{-1} )');title('三轴陀螺仪常值反馈后误差的方差');
legend('\it\epsilon_x','\it\epsilon_y','\it\epsilon_z')
msplot(326, tt, spk(:,13:15)/ug, '\it\nabla\rm / \mu\itg');title('三轴加速度计常值零偏反馈后误差的方差');
legend('\it\nabla_x','\it\nabla_y','\it\nabla_z')

七、仿真结果

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

八、程序及数据下载地址

sins + gnss 组合导航算法Matlab仿真

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159314.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【1】K8s的组件及概念

目录 1、K8s的组件 2、组件概念 1、K8s的组件 一个kubernetes集群主要是由控制节点(master)、工作节点(node)构成&#xff0c;每个节点上都会安装不同的组件。 master: 集群的控制平面&#xff0c;负责集群的决策 ApiServer:资源操作的唯一入口&#xff0c;接收用户输入的命令…

ArcGIS基础实验操作100例--实验92以图形与表格构建趋势面

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 空间分析篇--实验92 以图形与表格构建趋势面 目录 一、实验背景 二、实验数据 三、实验步骤 &#xf…

ts实现简易观察者模式

什么是观察者模式 观察者模式能让你时刻知悉对象状态的变化的一种设计模式,是一种一对多依赖的关系,比如报纸的订阅 生活中随处可见的观察者模式(猎头与求职者): headfirst设计模式气象站案例 通知更新的方式有两种: 主题推给观察者和观察者自己去主题拉取两种方式,大部分实现…

年中盘点 | 2022年,PaaS 再升级

过去十五年&#xff0c;是云计算从无到有突飞猛进的十五年。PaaS 作为云计算的重要组成部分&#xff0c;在伴随着云计算高速发展的同时&#xff0c;在云计算产业链中的关键性作用日渐凸显。关于 PaaS&#xff0c;很多人都认同一个观点&#xff0c;在公有云上&#xff0c;除了 I…

【寒假每日一题】AcWing 4699. 如此编码

目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 一、题目 1、原题链接 4699. 如此编码 - AcWing题库 2、题目描述 某次测验后&#xff0c;顿顿老师在黑板上留下了一串数字 23333便飘然而去。 凝望着这个神秘数字&#xff…

雄关漫道真如铁,而今迈步从头越 | 挥别2022,再战2023!

挥别2022年 这一年&#xff0c;虽面临诸多挑战&#xff0c;但我们充满干劲儿 向下扎根&#xff0c;向上生长 这一年&#xff0c;我们风云十载&#xff0c;厚积薄发 站在2023年的开端 让我们一起回顾博云2022年的这些成绩 No.1 专精特新&#xff0c;示范引领 2022年8月&am…

【鸟哥杂谈】Linux环境搭建Redis

忘记过去&#xff0c;超越自己 ❤️ 博客主页 单片机菜鸟哥&#xff0c;一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建记录 2023-01-12 ❤️❤️ 本篇更新记录 2023-01-12 ❤️&#x1f389; 欢迎关注 &#x1f50e;点赞 &#x1f44d;收藏 ⭐️留言&#x1f4dd;&#x1f64…

指针笔试题详细介绍,让你不再惧怕指针【c语言】

int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1); //&a1的类型是int&#xff08; * &#xff09;[5]printf( "%d,%d", *(a 1), *(ptr - 1));//输出2 5 return 0; }&a&#xff0c; 取出整个数组的地址&#xff0c;放在一个数组指针中…

你拿了多少年终奖?

见字如面&#xff0c;我是军哥&#xff01;前几天我看到一个大 V 调研他的程序员粉丝&#xff0c;都拿了多少年终奖&#xff1f;结果可想而知&#xff0c;2000 多人参与问卷调查&#xff0c;53% 左右的人说今年没有年终奖。另外&#xff0c;我估计大多数人今年的年终奖金额相比…

超能面板PRO搭载北京君正研发的X2000多核异构跨界处理器

每一座建筑&#xff0c;都承载着它独特的生活方式。隐匿在老胡同里的四合院&#xff0c;见证了大院三代同堂的喧闹欢愉&#xff0c;散落在烟雨中的园林小院散发着对诗意生活的淡然向往。在一代又一代的变迁中&#xff0c;逐渐形成了符合居住者气质的生活方式。历史与现代在不断…

等差素数数列

问题描述&#xff1a; 2,3,5,7,11,13,…是素数序列。 类似&#xff1a;7,37,67,97,127,157 这样完全由素数组成的等差数列&#xff0c;叫等差素数数列。 上边的数列公差为30&#xff0c;长度为6。 2004年&#xff0c;格林与华人陶哲轩合作证明了&#xff1a;存在任意长度的素数…

事件总线 + 函数计算构建云上最佳事件驱动架构应用

作者 | 史明伟&#xff08;世如&#xff09; 距离阿里云事件总线&#xff08;EventBridge&#xff09;和 Serverless 函数计算&#xff08;Function Compute&#xff0c;FC&#xff09;宣布全面深度集成已经过去一年。站在系统元数据互通&#xff0c;产品深度集成的肩膀上&…

《面试八股文》之GitHub中文社区Java 领域又一份备战神器,开冲金三银四

今天讲讲跳槽。 新年即将开启&#xff0c;一些不满现状&#xff0c;被外界的“高薪”“好福利”吸引的人&#xff0c;一般就在这时候毅然决然地跳槽了。 跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去…

前端号外—2022年明星项目居然是它,Node.js危已?

导读 | 2022年是艰难的一年&#xff0c;不仅有互联网的寒冬、还有新冠疫情的洗礼。但是似乎这一切都阻挡不了JavaScript的内卷&#xff0c;一年不长不短的时间中&#xff0c;JavaScript从创新、性能、功能等多维度深度进化&#xff0c;给前端带来了诸多惊喜。本文基于github上流…

JVM调优简介

数据类型 java虚拟机中&#xff0c;数据类型可以分为两类&#xff1a;基本类型和引用类型。 基本类型的变量保存原始值&#xff0c;即&#xff1a;它代表的值就是数值本身&#xff0c;而引用类型的变量保存引用值。 “引用值”代表了某个对象的引用&#xff0c;而不是对象本身&…

JSP内置对象详解 常用方法

目录 out request response session application exception page config pageContext JSP内置对象的作用域 JSP内置对象是在JSP运行环境中已定义好的对象&#xff0c;可在JSP页面的脚本部分直接使用。 out对象 out 为输出流对象&#xff0c;主要用于向客户端输出流…

Java-容器

一、ListArrayList<>&#xff08;变长数组&#xff09;实现add( )&#xff1a;在末尾添加一个元素clear( )&#xff1a;清空size( )&#xff1a;返回长度isEmpty( )&#xff1a;是否为空get(i)&#xff1a;获取第i个元素set(i, val)&#xff1a;将第i个元素设置为val&…

以太网接口电路设计

标准的以太网接口是这种RJ45的连接器它总共8个引脚&#xff0c;当设计成千兆以太网时&#xff0c;这8个引脚都会用到&#xff0c;大家可以看下千兆以太网引脚的信号定义&#xff0c; 0&#xff0c; 0-&#xff0c; 1&#xff0c; 1-&#xff0c; 2&#xff0c; 2-&#xff0c; …

计算机体系结构详解

文章目录1 概述1.1 计算机体系结构图1.2 计算机硬件系统图2 网工软考真题3 扩展1 概述 1.1 计算机体系结构图 1.2 计算机硬件系统图 冯 诺依曼 设计的体系结构&#xff0c;由 CPU&#xff08;运算器、控制器&#xff09;、存储器、输入/输出设备&#xff08;I/O&#xff09;…

Windows同时安装两个版本JDK,并实现动态切换版本JDK8和JAVA17教程

一、下载安装两个版本的JDK 官网下载地址&#xff1a;Java Downloads | Oracle 下载版本 jdk1.8.0_271 和 jdk-17.0.5 下载安装成功后&#xff0c;安装路径E:\Java\上 JDK8 有两个包一个jdk1.8.0_271&#xff0c;一个jre1.8.0_271。JDK17只有一个jdk-17.0.5 二、JDK的环境配…