拓展卡尔曼滤波(Kalman)附Matlab代码

news2025/7/29 6:31:29

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

根据传统的扩展卡尔曼厚度算法在多普勒测量目标情况下估计精度低的,提出了扩展卡尔曼厚度跟踪优化算法。估计量测的扩展卡算法推广到包含普勒量测的提高目标跟踪位置精确度。仿真结果主动,算法以多方均方根的精度和方根的速度精度,可以很容易地实现精度良好地提高目标跟踪的精确度,可有效持续跟踪目标中的情况。

⛄ 部分代码

clear; close all; format compact;

addpath('filters');

addpath('helper');

addpath('thirdparty/shadedErrorBar');

% -------------------------------------------------------------------------

% Fake data time limits and resolution lower resolution with noise free

% data should cause the prediction to improve.

time.tmin = 0;

time.tmax = 2;

time.dt = 1e-3;

% Covariance for sensor noise set noise.add_noise = false 

% to have perfect noise free data.

% If add_noise if false, accel_noise and gyro_noise can be anything.

%

% Q1 and Q2 are two random matrices to try to create really bad noise

% with a ton of cross corelation between states

rng(2)

noise.add_noise = true;

m = 100;

Q1 = randn(3,3);

Q2 = randn(3,3);

noise.accel_noise = (6*9.81)^2*eye(3);

noise.gyro_noise = eye(3);

% Set the frequency of the correction step (Hz)

%  - Increase the frequency to test robustness of filter

%    to slow updates

f_cor = 1;

dt_cor = 1/f_cor;

% Generate the fake data see function definition for input and output

% variable definitions.

[omega, accel, ~, ~, gt, init, wf_data] = gen_fake_data(time, noise);

% Set the time data from the accelerometer

t = accel.t;

N = length(t);

% -------------------------------------------------------------------------

% Initialize the solution / gt vectors

p_gt = [gt.x;gt.y;gt.z];

theta_gt = zeros(3, N);

theta_gt(:,1) = Log(gt.R{1});

p_ekf = zeros(3,N);

p_ekf_var = zeros(3,N);

theta_ekf = zeros(3, N);

theta_ekf_var = zeros(3,N);

p_liekf = zeros(3,N);

p_liekf_var = zeros(3,N);

theta_liekf = zeros(3, N);

theta_liekf_var = zeros(3,N);

% -------------------------------------------------------------------------

% Initialize the filter (with initial condition)

% Note: the polynomial function created by gen_fake_data almost definitely

% wont be zero at t = 0

ekf = EKF(rotm2eul(init.R0)', init.p0, init.v0, eye(3) * 100);

p_ekf(:,1) = ekf.mu(1:3);

p_ekf_var(:,1) = sqrt(diag(ekf.Sigma(1:3,1:3)));

theta_ekf(:,1) = ekf.mu(7:9);

theta_ekf_var(:,1) = sqrt(diag(ekf.Sigma(7:9,7:9)));

% -------------------------------------------------------------------------

% Run the simulation on the data

t_cor = t(1);  %Time of first correction

for i = 1:N-1

    % Set dt off time data

    dt = t(i+1) - t(i);

    % Set the acceleration from the fake data

    a = [accel.x(i); accel.y(i); accel.z(i)];

    w = [omega.x(i); omega.y(i); omega.z(i)];

    

    % Run the ekf prediction step

    ekf.prediction(w, a, dt);

    

    % Run the ekf correction step

    if t(i) >= t_cor

        gps = [gt.x(i); gt.y(i); gt.z(i)];

        ekf.correction(gps)

        % Next correct at t + dt_cor

        t_cor = t(i) + dt_cor;

    end

    

    % Save the outputs (for plotting)

    variances = sqrt(diag(ekf.Sigma));

    p_ekf(:,i+1) = ekf.mu(1:3);

    theta_ekf(:,i+1) = Log(eul2rotm(ekf.mu(7:9)'));

    p_ekf_var(:,i+1) = variances(1:3);

    theta_ekf_var(:,i+1) = variances(7:9);

    

    theta_gt(:,i+1) = Log(gt.R{i});

end

% -------------------------------------------------------------------------

% LIEKF

liekf = LIEKF(init.R0, init.p0, init.v0, ...

    eye(3)*.01, eye(3)*.01, eye(3)*.01, eye(3)*.01, eye(3)*.01);

lieTocartesian(liekf)

vars = sqrt(diag(liekf.sigma_cart));

p_liekf(:,1) = init.p0;

p_liekf_var(:,1) = vars(1:3);

theta_liekf(:,1) = Log(liekf.mu(1:3,1:3));

theta_liekf_var(:,1) = vars(1:3);

% Run the simulation on the data

t_cor = t(1);  %Time of first correction

for i = 1:N-1

    % Set dt off time data

    dt = t(i+1) - t(i);

    % Set the acceleration from the fake data

    a = [accel.x(i); accel.y(i); accel.z(i)];

    w = [omega.x(i); omega.y(i); omega.z(i)];

    

    % Run the ekf prediction step

    liekf.prediction(w, a, dt);

    

    % Run the ekf correction step

    if t(i) >= t_cor

        gps = [gt.x(i); gt.y(i); gt.z(i)];

        liekf.correction(gps)

        % Next correct at t + dt_cor

        t_cor = t(i) + dt_cor;

    end

    % Extract the state from the filter

    [R, p, v] = liekf.getState(); 

    lieTocartesian(liekf)

    

    % Save the outputs (for plotting)

    p_liekf(:,i+1) = p;

    theta_liekf(:,i+1) = Log(R);

    

    vars = sqrt(diag(liekf.sigma_cart));

    p_liekf_var(:,i+1) = vars(7:9);

    theta_liekf_var(:,i+1) = vars(1:3);

end

% -------------------------------------------------------------------------

% Plot position and theta data to visualize

% the operation of the filter

figure;

subplot(311)

hold('on')

plot(t, p_gt(1,:), 'k--', 'LineWidth', 2);

plot(t, p_ekf(1,:), 'g', 'LineWidth', 1);

plot(t, p_liekf(1,:), 'r', 'LineWidth', 1);

axis([0,2,-200,200])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Position");

subplot(312)

hold('on')

plot(t, p_gt(2,:),  'k--', 'LineWidth', 2)

plot(t, p_ekf(2,:), 'g', 'LineWidth', 1);

plot(t, p_liekf(2,:), 'r', 'LineWidth', 1)

axis([0,2,-400,0])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, p_gt(3,:), 'k--', 'LineWidth', 2)

plot(t, p_ekf(3,:), 'g', 'LineWidth', 1);

plot(t, p_liekf(3,:), 'r', 'LineWidth', 1)

axis([0,2,-300,100])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('position_noise', '-dpng')

figure;

subplot(311)

hold('on')

plot(t, theta_gt(1,:), 'k--', 'LineWidth', 2);

plot(t, theta_ekf(1,:), 'g', 'LineWidth', 1);

plot(t, theta_liekf(1,:), 'r', 'LineWidth', 1);

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Theta");

subplot(312)

hold('on')

plot(t, theta_gt(2,:), 'k--', 'LineWidth', 2)

plot(t, theta_ekf(2,:), 'g', 'LineWidth', 1);

plot(t, theta_liekf(2,:), 'r', 'LineWidth', 1)

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, theta_gt(3,:),  'k--', 'LineWidth', 2)

plot(t, theta_ekf(3,:), 'g', 'LineWidth', 1);

plot(t, theta_liekf(3,:), 'r', 'LineWidth', 1)

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('theta_noise', '-dpng')

% -------------------------------------------------------------------------

% Plot position and theta data to visualize

% the operation of the filter

figure;

subplot(311)

hold('on')

plot(t, p_gt(1,:), 'k--', 'LineWidth', 2);

%plot(t, p_ekf(1,:), 'g', 'LineWidth', 1);

%plot(t, p_liekf(1,:), 'r', 'LineWidth', 1);

%plot(t, p_ekf(1,:)+3*p_ekf_var(1,:), 'b', 'LineWidth', 1);

%plot(t, p_ekf(1,:)-3*p_ekf_var(1,:), 'b', 'LineWidth', 1);

%plot(t, p_liekf(1,:)+3*p_liekf_var(1,:), 'm', 'LineWidth', 1);

%plot(t, p_liekf(1,:)-3*p_liekf_var(1,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, p_ekf(1,:), 3*p_ekf_var(1,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, p_liekf(1,:), 3*p_liekf_var(1,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-200,200])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Position");

subplot(312)

hold('on')

plot(t, p_gt(2,:),  'k--', 'LineWidth', 2)

%plot(t, p_ekf(2,:), 'g', 'LineWidth', 1);

%plot(t, p_liekf(2,:), 'r', 'LineWidth', 1)

%plot(t, p_ekf(2,:)+3*p_ekf_var(2,:), 'b', 'LineWidth', 1);

%plot(t, p_ekf(2,:)-3*p_ekf_var(2,:), 'b', 'LineWidth', 1);

%plot(t, p_liekf(2,:)+3*p_liekf_var(2,:), 'm', 'LineWidth', 1);

%plot(t, p_liekf(2,:)-3*p_liekf_var(2,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, p_ekf(2,:), 3*p_ekf_var(2,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, p_liekf(2,:), 3*p_liekf_var(2,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-400,0])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, p_gt(3,:), 'k--', 'LineWidth', 2)

% plot(t, p_ekf(3,:), 'g', 'LineWidth', 1);

% plot(t, p_liekf(3,:), 'r', 'LineWidth', 1)

% plot(t, p_ekf(3,:)+3*p_ekf_var(3,:), 'b', 'LineWidth', 1);

% plot(t, p_ekf(3,:)-3*p_ekf_var(3,:), 'b', 'LineWidth', 1);

% plot(t, p_liekf(3,:)+3*p_liekf_var(3,:), 'm', 'LineWidth', 1);

% plot(t, p_liekf(3,:)-3*p_liekf_var(3,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, p_ekf(3,:), 3*p_ekf_var(3,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, p_liekf(3,:), 3*p_liekf_var(3,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-300,100])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('position_noise_mean_cov', '-dpng')

figure;

subplot(311)

hold('on')

plot(t, theta_gt(1,:), 'k--', 'LineWidth', 2);

plot(t, theta_ekf(1,:), 'g', 'LineWidth', 1);

plot(t, theta_liekf(1,:), 'r', 'LineWidth', 1);

%plot(t, theta_ekf(1,:)+3*theta_ekf_var(1,:), 'b', 'LineWidth', 1);

%plot(t, theta_ekf(1,:)-3*theta_ekf_var(1,:), 'b', 'LineWidth', 1);

%plot(t, theta_liekf(1,:)+3*theta_liekf_var(1,:), 'm', 'LineWidth', 1);

%plot(t, theta_liekf(1,:)-3*theta_liekf_var(1,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, theta_ekf(1,:), 3*theta_ekf_var(1,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, theta_liekf(1,:), 3*theta_liekf_var(1,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Theta");

subplot(312)

hold('on')

plot(t, theta_gt(2,:), 'k--', 'LineWidth', 2)

%plot(t, theta_ekf(2,:), 'g', 'LineWidth', 1);

%plot(t, theta_liekf(2,:), 'r', 'LineWidth', 1)

%plot(t, theta_ekf(2,:)+3*theta_ekf_var(2,:), 'b', 'LineWidth', 1);

%plot(t, theta_ekf(2,:)-3*theta_ekf_var(2,:), 'b', 'LineWidth', 1);

%plot(t, theta_liekf(2,:)+3*theta_liekf_var(2,:), 'm', 'LineWidth', 1);

%plot(t, theta_liekf(2,:)-3*theta_liekf_var(2,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, theta_ekf(2,:), 3*theta_ekf_var(2,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, theta_liekf(2,:), 3*theta_liekf_var(2,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, theta_gt(3,:),  'k--', 'LineWidth', 2)

%plot(t, theta_ekf(3,:), 'g', 'LineWidth', 1);

%plot(t, theta_liekf(3,:), 'r', 'LineWidth', 1)

%plot(t, theta_ekf(3,:)+3*theta_ekf_var(3,:), 'b', 'LineWidth', 1);

%plot(t, theta_ekf(3,:)-3*theta_ekf_var(3,:), 'b', 'LineWidth', 1);

%plot(t, theta_liekf(3,:)+3*theta_liekf_var(3,:), 'm', 'LineWidth', 1);

%plot(t, theta_liekf(3,:)-3*theta_liekf_var(3,:), 'm', 'LineWidth', 1);

shadedErrorBar(t, theta_ekf(3,:), 3*theta_ekf_var(3,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, theta_liekf(3,:), 3*theta_liekf_var(3,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('theta_noise_mean_cov', '-dpng')

% -------------------------------------------------------------------------

% Plot position and theta data to visualize

% the operation of the filter

figure;

subplot(311)

hold('on')

plot(t, zeros(size(p_gt(1,:))), 'k--', 'LineWidth', 2);

shadedErrorBar(t, zeros(size(p_ekf(1,:))), 3*p_ekf_var(1,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(p_liekf(1,:))), 3*p_liekf_var(1,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-200,200])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Position 3 Standard Deviations");

subplot(312)

hold('on')

plot(t, zeros(size(p_gt(2,:))), 'k--', 'LineWidth', 2);

shadedErrorBar(t, zeros(size(p_ekf(1,:))), 3*p_ekf_var(2,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(p_liekf(1,:))), 3*p_liekf_var(2,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-200,200])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, zeros(size(p_gt(3,:))), 'k--', 'LineWidth', 2);

shadedErrorBar(t, zeros(size(p_ekf(1,:))), 3*p_ekf_var(3,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(p_liekf(1,:))), 3*p_liekf_var(3,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-200,200])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('position_noise_cov', '-dpng')

figure;

subplot(311)

hold('on')

plot(t, zeros(size(theta_gt(1,:))), 'k--', 'LineWidth', 2);

shadedErrorBar(t, zeros(size(theta_ekf(1,:))), 3*theta_ekf_var(1,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(theta_liekf(1,:))), 3*theta_liekf_var(1,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

title("Theta 3 Standard Deviations");

subplot(312)

hold('on')

plot(t, zeros(size(theta_gt(2,:))), 'k--', 'LineWidth', 2)

shadedErrorBar(t, zeros(size(theta_ekf(2,:))), 3*theta_ekf_var(2,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(theta_liekf(2,:))), 3*theta_liekf_var(2,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

subplot(313)

hold('on')

plot(t, zeros(size(theta_gt(3,:))),  'k--', 'LineWidth', 2)

shadedErrorBar(t, zeros(size(theta_ekf(3,:))), 3*theta_ekf_var(3,:), 'lineProps', {'g', 'LineWidth', 1})

shadedErrorBar(t, zeros(size(theta_liekf(3,:))), 3*theta_liekf_var(3,:), 'lineProps', {'r', 'LineWidth', 1})

axis([0,2,-7,7])

legend('Ground Truth', 'EKF', 'LIEKF', 'location', 'eastoutside')

print('theta_noise_cov', '-dpng')

% -------------------------------------------------------------------------

% Helper functions, mostly for SO3 stuff

function ux  = skew(u)

    ux = [

        0 -u(3) u(2)

        u(3) 0 -u(1)

        -u(2) u(1) 0

    ];

end

function u = unskew(ux)

    u(1,1) = -ux(2,3);

    u(2,1) = ux(1,3);

    u(3,1) = -ux(1,2);

end

function w = Log(R)

    w = unskew(logm(R));

end

function J = J_l(theta)

    t_x = skew(theta);

    t = norm(theta);

    J = eye(3) + (1 - cos(t))/t^2 * t_x + (t - sin(t))/t^3*(t_x)^2;

end

%-------------------------------------------------------------

⛄ 运行结果

⛄ 参考文献

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

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

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

相关文章

分享5个良心好用的PC软件,免费无广告

今天再次推荐5个良心好用的Windows神级软件,每一个都是完全免费,堪称神器,让你打开新世界的大门。 1.数据恢复工具——EaseUS Data EaseUS Data Recovery Wizard是一款简单易用的数据恢复工具,给用户提供了三种恢复模式&#xf…

docker部署ES及kibana整个流程

对于ES小白,第一次安装ES走了很多弯路,下面记录自己本地安装elasticsearch的整个过程,我觉得小白如果按照我的流程走,大部分应该可以安装并运行成功。下面是整个步骤: 一、部署ES 拉取镜像 docker pull docker.elast…

胞外囊泡代谢组学—前列腺癌代谢变化研究的新策略

小小身体蕴含大大能量!前列腺癌非侵入性的诊断和监测的新方式——胞外囊泡(外泌体)代谢组学!目前,胞外囊泡/外泌体作为非侵入性的癌生物标志物已成为新的研究热点。百趣代谢组学文献分享,芬兰赫尔辛基大学学…

避免项目资源管理陷阱,8Manage帮你支招!

项目资源管理主要是对项目所需的人力、材料、机械、技术、资源等资源进行计划、组织、指挥、协调和控制。众所周知,项目推进需要资源支撑,一旦资源不足,项目的进度和质量都会受到影响。而在项目管理活动中,做好资源管理并不容易&a…

SORT追踪

卡尔曼滤波 卡尔曼滤波用当前时刻运动变量去预测下一时刻的运动变量,检测器第一次的检测结果用来初始化卡尔曼滤波的运动变量,后续的结果作为更新。在信号处理中卡尔曼滤波是去除噪声的一个算法,作用是使用信号更加的准确。在SORT中的&#x…

MySQL常用语句汇总

一、背景 日常测试开发工作中会用到各类SQL语句,很多时候都是想用的时候才发现语句细节记不清楚了,临时网上搜索SQL语法,挺费时费力的,语法还不一定是对的。因此汇总整理了一下MySQL最常用的各类语句,以后就不用再到处…

Linux环境安装

学习Linux首先要准备一个Linux环境。环境的安装有两种途径:买一个云服务器,安装虚拟机。 推荐使用云服务器,较虚拟机方便很多。 云服务器具体来说是Centos 7.6 64位——我也不知道为啥用这个 步骤一: 购买云服务器的主要方式…

“向美好女人致敬”粉红丝带主题活动,谈水果养生之道

传递粉红正能量,践行粉红关爱,“向美好女人致敬”粉红丝带关爱月公益线下活动于11月13日顺利收尾,帮助广大女性更加深入地了解、认识乳腺癌预防和康复治疗,推进乳腺癌防治意识。此次活动邀请到了云南省肿瘤医院乳腺三科科主任、副…

Android通过jni调用本地c/c++接口方法总结

网上有网友问android的原生应用,上层java代码如何通过jni调用本地的c/c++接口或第三方动态库 ?之前搞过android应用开发和底层c/c++接口开发都是一个人搞定,觉得还是蛮简单的。其实没啥难度,如果觉得难只是因为你没有经历过,只要搞过一遍基本就记住了。这里总结下方法留作…

李嘉诚人生最大的错误,并非错过阿里华为,而是套现中国投资欧洲

李嘉诚是很多人心中的生意之神,很多人认为李嘉诚一生从来都没有失败过,他是生意场的常胜将军。可是事实上真的是如此么? 很多人可能不知道,李嘉诚其实也曾经犯下了很大的错误,比如说2003年前后,李嘉诚先后错…

【设计模式】2.工厂模式

文章目录1. 工厂模式概述2. 简单工厂模式3. 工厂方法模式4. 抽象工厂模式1. 工厂模式概述 工厂模式属于创建型模式的一种。 在java中,万物皆对象,这些对象都需要创建,如果创建的时候直接new该对象,就会对该对象耦合严重&#xf…

图神经网络学习笔记

1 图神经网络应用 芯片设计、场景分析问题推理、推荐系统、欺诈检测风控相关、道路交通动态流量预测、自动驾驶、无人机等、化学医疗等场景 2 图神经网络基本组成 点(vertex)、边(edge)、全局图(global),图神经网络(GNN,Graph Neural Netw…

Java 集合知识点总结

Java 集合知识点总结总览Collection 接口ListArrayList源码&扩容机制SetQueueMap接口HashMapHashMap源码&底层数据结构HashMap 的遍历LinkedHashMapTreeMapHashtableConcurrentHashMap 源码&底层数据结构本文是个人阅读学习JavaGuide的集合知识的总结笔记。总览 C…

【计算机毕业设计】个人交友网站源码

一、系统截图(需要演示视频可以私聊) 摘 要 本论文主要论述了如何使用JAVA语言开发一个个人交友网站,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中&#xff0…

【最强最全车牌识别算法】支持13种中文车牌识别的云端API部署(可直接获取源码使用)

项目简介 在城市交通管理、视频监控、车辆识别和停车场管理中车辆检测与车牌识别是一项富有挑战而重要的任务。利用深度学习识别不同条件下的车辆及其车牌信息。更具体地说,实时目标检测网络(Yolov5)用于从车辆图像中提取特征并且通过训练对…

[附源码]java毕业设计面试刷题系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

基于分组码的消息验证码的程序实现

目 录 摘 要 I 1 绪论 1 1.1 课题研究背景和意义 1 1.2 课题研究现状 1 2 CBC MAC的特征和基本工作原理 2 2.1 CBC MAC的特征和码集选择的原则 2 2.2 CBC MAC生成原理 2 2.3 CBC MAC模块结构图 3 3 FPGA和VHDL语言 4 3.1 概述 4 3.2 VHDL语言特点 5 3.2.1 常用硬件描述语言简介…

GUI编程--PyQt5--QAbstractButton

文章目录绘制事件设置文本设置快捷键设置自动重复按钮状态排他性按钮的点击按钮点击有效区域按钮的信号QAbstractButton是一个抽象类,无法直接使用。绘制事件 from PyQt5.QtWidgets import QAbstractButton from PyQt5.QtGui import QPainter, QPen, QColor # 定义…

loki单机对接minio

安装minio 请参考minio官方文档部署 创建Buckets 配置Policy策略 创建一个loki的policy,授权内容如下 (权限配置请参考aws的s3权限配置) { "Version": "2012-10-17", "Statement": [ { …

部署安装yapi

配置环境 部署安装yapi 前提是配置环境,需要 nodejs(7.6)mongodb(2.6) 这里我使用docker 安装上面的nodejs 或 mongodb docker 安装 mongodb 教程: 使用docker 安装MongoDB数据库_小周sir的码农的博客-CSDN博客Doc…