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

【机器人学】6-4.六自由度机器人运动学参数辨识-机器人精度验证【附MATLAB代码】

前言

        前两个章节以及完成了机器人参数辨识。

【机器人学】6-1.六自由度机器人运动学参数辨识-辨识数学模型的建立

【机器人学】6-2.六自由度机器人运动学参数辨识-优化方法求解辨识参数

        这里我们认为激光测量仪测量到的数据为机器人实际到达的位置,而机器人理论到达的位置是通过运动学解算出来的,在实际过程中,会产生误差导致机器人的理论位置与实际位置不相同。因此引出机器人的精度问题。

在标定了工具端、基座以及机器人本身的DH参数。那么我们的机器人精度如何呢?机器人的精度应该如何验证?

关于末端定位精度的概念
        当我们在机械臂领域谈到未端定位精度这一概念时,实际上是诸多复杂概念的一个统称。整体而言,未端定位精度是描述机械臂整机运动性能的重要定量指标(一般我们会看到这个定量的数值在0.01mm和1m之间),其与机械臂本体硬件结构的刚度、传动误差与相应的伺服控制水平息息相关。

重复定位精度和绝对定位精度
        在大多数情况下,工程师口中所述的未端定位精度一般指的是重复定位精度,这边首先就要引出两个重要概念的区分介绍:即重复定位精度(Repeatability)绝对定位精度(Accuracy)
重复定位精度是衡量机械臂未端到达空间相同一点一致性的能力,而绝对定位精度衡量的是机械臂未端到达空间目标点准确度的能力。

     比如:让机械臂向前走100mm,第一次走到了99.8mm,第二次走到了100.1mm,这个差值0.03mm就是重复定位精度(并不是严格定义),而绝对定位精度是你需要运行100mm的距离,而实际走了101mm,这个差值1mm就是绝对定位精度。

      通常由于机械臂本体制造中存在机械制造公差装配误差导致的运动学参数误差以及电机转角与关节转角间减速比误差等,导致机械臂存在重复性定位精度较高(0.05 mm /5个丝)以内,而绝对定位精度通常较低(1~2mm)。

验证标准

我们今天的定位精度的验证标准,遵循中华人民共和国国家标准-工业机器人性能规范及其试验方法-GB/T 12642

验证方法

       实验条件:

            1. 给机械臂安装一定的负载(通常使用半载),让机器人循环走空间中的5个点30次。用激光测量仪采集数据。此时可以得到激光测量仪采集到的5*30=150个数据,和给定的5个位置数据。

计算位姿准确度-绝对定位精度(AP)

  

计算位姿重复性-重复定位精度(RP)

        重复定位进度的计算只需要对测量到的5*30=150个数据进行操作,而绝对定位精度的计算需要将给定的5个点的位置,与测量值相比较,由于激光测量仪的测量坐标系,与机械臂给定位置的给定值的坐标系不同,故需要进行转换。

        其中

        T06为我们的给定值,而T67和T-10,以经通过标定给出,故只需用式(6.2)即可求出在激光测量仪坐标系下的给定值。

已知标定后的结果为:

 MATLAB代码验证

         数据与函数准备

%重复的5个点的位置
function Position = verifyPara()
Position = [
-150,-350,630,78,-42,35;
-150,-650,930,79,-41,37;
150,-650,930,78,-42,35;
150,-350,630,81,-43,37;
0,-500,780,78,-45,41;
];
end
%激光测量仪测量到的5*30=150个数据
function measurementPara= measurementPara()
measurementPara = [
2227.1503	1299.0807	-124.93645	0	0	0;
1958.0963	1161.9514	171.70475	0	0	0;
2087.8145	896.25159	170.83141	0	0	0;
2362.3512	1026.0956	-131.34257	0	0	0;
2161.0067	1090.2524	22.07108	0	0	0;
2227.1328	1299.0675	-124.95587	0	0	0;
1958.0968	1161.9532	171.70837	0	0	0;
2087.8123	896.25279	170.83337	0	0	0;
2362.3504	1026.1024	-131.33808	0	0	0;
2161.0008	1090.2239	22.05651	0	0	0;
2227.1277	1299.0672	-124.957	0	0	0;
1958.0944	1161.9271	171.69652	0	0	0;
2087.7926	896.30133	170.84371	0	0	0;
2362.352	1026.0943	-131.34141	0	0	0;
2161.0026	1090.2215	22.057113	0	0	0;
2227.1286	1299.0658	-124.95844	0	0	0;
1958.0881	1161.9125	171.68597	0	0	0;
2087.7965	896.30007	170.84699	0	0	0;
2362.3567	1026.0941	-131.33545	0	0	0;
2161.0043	1090.217	22.058082	0	0	0;
2227.1269	1299.0627	-124.95822	0	0	0;
1958.088	1161.9106	171.68716	0	0	0;
2087.7957	896.30107	170.85008	0	0	0;
2362.3557	1026.0953	-131.33103	0	0	0;
2161.0028	1090.2176	22.054826	0	0	0;
2227.1245	1299.0624	-124.96233	0	0	0;
1958.0895	1161.9066	171.68568	0	0	0;
2087.7962	896.30256	170.84894	0	0	0;
2362.3569	1026.0909	-131.34075	0	0	0;
2161.0029	1090.2189	22.054347	0	0	0;
2227.1223	1299.0567	-124.96166	0	0	0;
1958.0858	1161.9049	171.68655	0	0	0;
2087.7986	896.30332	170.85224	0	0	0;
2362.3574	1026.094	-131.33775	0	0	0;
2161.0037	1090.2248	22.057439	0	0	0;
2227.1271	1299.0604	-124.95894	0	0	0;
1958.0896	1161.902	171.68774	0	0	0;
2087.7967	896.3074	170.85602	0	0	0;
2362.3575	1026.0921	-131.33658	0	0	0;
2161.0086	1090.2505	22.072462	0	0	0;
2227.1324	1299.0626	-124.95405	0	0	0;
1958.087	1161.8947	171.68433	0	0	0;
2087.7972	896.30836	170.85737	0	0	0;
2362.3605	1026.0935	-131.33612	0	0	0;
2161.0121	1090.2599	22.0819	    0	0	0;
2227.1424	1299.0687	-124.94304	0	0	0;
1958.0947	1161.9415	171.70198	0	0	0;
2087.8176	896.26544	170.84715	0	0	0;
2362.3669	1026.0778	-131.34163	0	0	0;
2161.0095	1090.2586	22.077012	0	0	0;
2227.148	1299.0718	-124.93995	0	0	0;
1958.0974	1161.9659	171.71319	0	0	0;
2087.8227	896.243	170.83566       0	0	0;
2362.3656	1026.0794	-131.33656	0	0	0;
2161.0053	1090.2222	22.060474	0	0	0;
2227.1404	1299.0653	-124.94379	0	0	0;
1958.09	1161.9415	171.69821       0	0	0;
2087.8048	896.28336	170.84699	0	0	0;
2362.3655	1026.0884	-131.33415	0	0	0;
2161.0052	1090.2181	22.058498	0	0	0;
2227.141	1299.0652	-124.94244	0	0	0;
1958.0846	1161.9042	171.68599	0	0	0;
2087.7997	896.29979	170.85183	0	0	0;
2362.3688	1026.087	-131.33232	0	0	0;
2161.0078	1090.2438	22.073072	0	0	0;
2227.1406	1299.0661	-124.94075	0	0	0;
1958.0869	1161.9088	171.68885	0	0	0;
2087.7986	896.30631	170.86088	0	0	0;
2362.3698	1026.0803	-131.33583	0	0	0;
2161.0135	1090.2543	22.081642	0	0	0;
2227.1481	1299.0694	-124.93844	0	0	0;
1958.1003	1161.9703	171.7137	0	0	0;
2087.8147	896.27067	170.85004	0	0	0;
2362.3702	1026.0732	-131.33896	0	0	0;
2161.0145	1090.2489	22.079415	0	0	0;
2227.1411	1299.0657	-124.93989	0	0	0;
1958.0911	1161.9327	171.69864	0	0	0;
2087.8039	896.3008	170.85674	0	0	0;
2362.3693	1026.0841	-131.3328	0	0	0;
2161.0093	1090.2225	22.064856	0	0	0;
2227.1393	1299.0619	-124.94452	0	0	0;
1958.0888	1161.8893	171.6866	0	0	0;
2087.8052	896.3025	170.86156	0	0	0;
2362.3721	1026.0838	-131.33244	0	0	0;
2161.0165	1090.2413	22.082128	0	0	0;
2227.1346	1299.0572	-124.9494	0	0	0;
1958.0907	1161.8902	171.68926	0	0	0;
2087.8045	896.30308	170.85715	0	0	0;
2362.3694	1026.0844	-131.33563	0	0	0;
2161.0153	1090.2449	22.080295	0	0	0;
2227.135	1299.058	-124.94482	0	0	0;
1958.0889	1161.8905	171.68681	0	0	0;
2087.8068	896.30223	170.86288	0	0	0;
2362.373	1026.0809	-131.3344	0	0	0;
2161.014	1090.2388	22.081018	0	0	0;
2227.1381	1299.0576	-124.94568	0	0	0;
1958.0941	1161.8954	171.6958	0	0	0;
2087.8106	896.29813	170.86339	0	0	0;
2362.3744	1026.0758	-131.33531	0	0	0;
2161.0166	1090.2423	22.079447	0	0	0;
2227.1338	1299.0522	-124.94801	0	0	0;
1958.0918	1161.8941	171.68975	0	0	0;
2087.8121	896.2927	170.85906	0	0	0;
2362.3766	1026.0839	-131.33044	0	0	0;
2161.0195	1090.2426	22.081034	0	0	0;
2227.1346	1299.052	-124.94854	0	0	0;
1958.0941	1161.8959	171.69126	0	0	0;
2087.811	896.29205	170.86051	0	0	0;
2362.3757	1026.0845	-131.33301	0	0	0;
2161.024	1090.2508	22.08968	0	0	0;
2227.1534	1299.0688	-124.92994	0	0	0;
1958.1047	1161.9637	171.71792	0	0	0;
2087.8274	896.25739	170.85273	0	0	0;
2362.3796	1026.0758	-131.33511	0	0	0;
2161.0208	1090.2432	22.085467	0	0	0;
2227.1357	1299.0578	-124.94638	0	0	0;
1958.0981	1161.923	171.70381	0	0	0;
2087.8116	896.29648	170.86604	0	0	0;
2362.3796	1026.0797	-131.33004	0	0	0;
2161.0191	1090.2472	22.086271	0	0	0;
2227.153	1299.0648	-124.93174	0	0	0;
1958.1018	1161.9538	171.71551	0	0	0;
2087.8185	896.27232	170.8565	0	0	0;
2362.3806	1026.0816	-131.33051	0	0	0;
2161.0192	1090.2453	22.085389	0	0	0;
2227.142	1299.0491	-124.94231	0	0	0;
1958.0928	1161.8919	171.68926	0	0	0;
2087.8098	896.29497	170.86687	0	0	0;
2362.3808	1026.0833	-131.33199	0	0	0;
2161.0221	1090.2497	22.094875	0	0	0;
2227.1397	1299.0522	-124.94604	0	0	0;
1958.0909	1161.8938	171.68821	0	0	0;
2087.8105	896.29812	170.86859	0	0	0;
2362.3816	1026.0819	-131.32675	0	0	0;
2161.0214	1090.2481	22.090946	0	0	0;
2227.138	1299.0493	-124.94669	0	0	0;
1958.0962	1161.8912	171.69576	0	0	0;
2087.8151	896.2934	170.87058	0	0	0;
2362.3833	1026.0814	-131.3294	0	0	0;
2161.0205	1090.2542	22.094345	0	0	0;
2227.1403	1299.0491	-124.9435	0	0	0;
1958.0927	1161.8883	171.68916	0	0	0;
2087.8144	896.29467	170.87374	0	0	0;
2362.383	1026.0798	-131.32969	0	0	0;
2161.0222	1090.2577	22.094401	0	0	0;
2227.1387	1299.0474	-124.94533	0	0	0;
1958.0936	1161.8906	171.69421	0	0	0;
2087.8112	896.30127	170.86989	0	0	0;
2362.3816	1026.0765	-131.33263	0	0	0;
2161.0222	1090.2542	22.09253	0	0	0;
];
end

%旋转矩阵转轴角
function Rxyz=RotMat_AxisAngle(R)theta = acos((R(1,1)+R(2,2)+R(3,3)-1)/2);r = 1/2/sin(theta)*[R(3,2)-R(2,3);R(1,3)-R(3,1);R(2,1)-R(1,2)];Rxyz=theta*r;
end
%轴角转旋转矩阵
function R=AxisAngle_RotMat(Rxyz)theta=(Rxyz(1)^2+Rxyz(2)^2+Rxyz(3)^2)^0.5;if(abs(theta)<1e-8)R=eye(3);return;endr=Rxyz/theta;R=[r(1)^2*(1-cos(theta))+cos(theta) r(1)*r(2)*(1-cos(theta))-r(3)*sin(theta) r(1)*r(3)*(1-cos(theta))+r(2)*sin(theta)r(1)*r(2)*(1-cos(theta))+r(3)*sin(theta) r(2)^2*(1-cos(theta))+cos(theta) r(2)*r(3)*(1-cos(theta))-r(1)*sin(theta)r(1)*r(3)*(1-cos(theta))-r(2)*sin(theta) r(2)*r(3)*(1-cos(theta))+r(1)*sin(theta) r(3)^2*(1-cos(theta))+cos(theta)];
end
%绕Z轴的旋转矩阵转换
function R = rotz(t, deg)if nargin > 1 && strcmp(deg, 'deg')t = t *pi/180;endct = cos(t);st = sin(t);R = [ct  -st  0st   ct  00    0   1];
%绕Y轴的旋转矩阵转换
function R = roty(t, deg)if nargin > 1 && strcmp(deg, 'deg')t = t *pi/180;endct = cos(t);st = sin(t);R = [ct  0   st0   1   0-st  0   ct];
%绕X轴的旋转矩阵转换
function R = rotx(t, deg)if nargin > 1 && strcmp(deg, 'deg')t = t *pi/180;endct = cos(t);st = sin(t);R = [1   0    00   ct  -st0   st   ct];

        计算与验证代码

clc;
clear;
addPoint = zeros(5,6);
P07 = [];
% 30*5=150 组激光测量仪测量到的数据
measurementPara = measurementPara();
length = size(measurementPara);
for i=1:lengthif(mod(i,5)==0)  addPoint(5,:) = addPoint(5,:) + measurementPara(i,:);else addPoint(mod(i,5),:) = addPoint(mod(i,5),:) + measurementPara(i,:);end
end
addPoint = addPoint/30;  
% RD1100W1BY670W92024-07-21-1数据
%基座标定数据
R00 = rotZ(-1.118222)*rotY(0.004544 )*rotX(0.006666);
P00 = [2.711833, 1.361573, -0.718014]'*1000;
%工具端标定数据		
R67 = rotZ(1.933119)*rotY(-1.537018)*rotX(-1.01495);
P67 = [-0.029781, -0.029171, 0.106038]'*1000;
APR = zeros(5,3);
AllT06=verifyPara();
for i=1:5T06 = AllT06(i,:);R06 = AxisAngle_RotMat([T06(1,4),T06(1,5),T06(1,6)]/180*pi);P06 = T06(1,1:3)';P07 =[P07;[(R00*R06*P67)+(R00*P06)+P00]'];R07 = R00*R06*R67;APR(i,2) = atan2(-R07(1,3),sqrt(R07(2,3)^2+R07(3,3)^2));   % beta YAPR(i,1) = atan2(R07(2,3)/cos(APR(i,2)),R07(3,3)/cos(APR(i,2))); % aerfa XAPR(i,3) = atan2(R07(1,2)/cos(APR(i,2)),R07(1,1)/cos(APR(i,2))); % gama Z
end
APR = APR*180/pi - addPoint(:,4:6);
APP = addPoint(:,1:3) - P07;
APP = sqrt(APP(:,1).^2 + APP(:,2).^2 + APP(:,3).^2);
%绝对定位精度
AP=[APP ,APR]
L = [0 0 0 0 0];
Lt = [];
RPR = zeros(5,3);
for i=1:lengthif(mod(i,5)==0)  L(5) = L(5) + sqrt((addPoint(5,1) - measurementPara(i,1))^2+(addPoint(5,2) - measurementPara(i,2))^2+(addPoint(5,3) - measurementPara(i,3))^2);Lt(i) = sqrt((addPoint(5,1) - measurementPara(i,1))^2+(addPoint(5,2) - measurementPara(i,2))^2+(addPoint(5,3) - measurementPara(i,3))^2);RPR(5,:)= RPR(5,:) + (addPoint(5,4:6)-measurementPara(i,4:6)).^2;else L(mod(i,5)) = L(mod(i,5)) + sqrt((addPoint(mod(i,5),1) - measurementPara(i,1))^2+(addPoint(mod(i,5),2) - measurementPara(i,2))^2+(addPoint(mod(i,5),3) - measurementPara(i,3))^2);Lt(i) = sqrt((addPoint(mod(i,5),1) - measurementPara(i,1))^2+(addPoint(mod(i,5),2) - measurementPara(i,2))^2+(addPoint(mod(i,5),3) - measurementPara(i,3))^2);RPR(mod(i,5),:)= RPR(mod(i,5),:)+(addPoint(mod(i,5),4:6)-measurementPara(i,4:6)).^2;end
end
L=L/30;
Lm = [0 0 0 0 0];
for i=1:lengthif(mod(i,5)==0)  Lm(5) = Lm(5) + (L(5)-Lt(i))^2;else Lm(mod(i,5)) = Lm(mod(i,5)) + (L(mod(i,5))-Lt(i))^2;end
end
Lm = sqrt(Lm/29);
RPR = 6*sqrt(RPR/29);
RPP= [L + 3*Lm]';
%重复定位精度
RP = [RPP RPR]

        测试结果

           本实验数据来自一个不合格的机器人标定数据。 

        如上图可知:由于激光测量仪只是测量了位置信息,没有姿态信息,故重复定位精度的姿态重复度为0,绝对定位精度的姿态精度不具备参考性。该机器人的绝对定位进度为1.7088mm效果较差,重复定位精度为0.645效果一般。

        下一章 【机器人学】6-5.六自由度机器人运动学参数辨识-逆运动学迭代解【附MATLAB代码】

相关文章:

【机器人学】6-4.六自由度机器人运动学参数辨识-机器人精度验证【附MATLAB代码】

前言 前两个章节以及完成了机器人参数辨识。 【机器人学】6-1.六自由度机器人运动学参数辨识-辨识数学模型的建立 【机器人学】6-2.六自由度机器人运动学参数辨识-优化方法求解辨识参数 这里我们认为激光测量仪测量到的数据为机器人实际到达的位置&#xff0c;而机器人理论到…...

分销商城小程序系统渠道拓展

线上卖货渠道很多&#xff0c;想要不断提高营收和新客获取&#xff0c;除了自己和工具本身努力外&#xff0c;还需要其他人的帮助来提高商城店铺的整体销量。 搭建saas商城系统网站/小程序&#xff0c;后台上货&#xff0c;设置支付、配送、营销、精美模板商城装修等内容&…...

WPF篇(14)-ProgressBar进度条+Calendar日历控件+DatePicker日期控件

ProgressBar进度条 ProgressBar进度条通常在我们执行某个任务需要花费大量时间时使用&#xff0c;这时可以采用进度条显示任务或线程的执行进度&#xff0c;以便给用户良好的使用体验。 ProgressBar类定义 public class ProgressBar : RangeBase {public static readonly De…...

链表高频题目和必备技巧

链表高频题目和必备技巧 1. 链表类题目注意点 1&#xff0c;如果笔试中空间要求不严格&#xff0c;直接使用容器来解决链表问题 2&#xff0c;如果笔试中空间要求严格、或者在面试中面试官强调空间的优化&#xff0c;需要使用额外空间复杂度**O(1)**的方法 3&#xff0c;最…...

Vue3详细介绍,正则采集器所用前端框架

Vue3 引入了一个全新的响应式系统&#xff0c;它是基于ES6的Proxy特性构建的。这个系统使得 Vue 能够更加高效地追踪数据的变化&#xff0c;并在数据发生变化时自动更新DOM。响应式系统的核心是"可观察"&#xff0c;当数据变化时&#xff0c;视图会响应这些变化并重新…...

数据集--COCO2017(快速下载)

1、数据集介绍 数据集官网&#xff1a;https://cocodataset.org/#home COCO&#xff08;Common Objects in Context&#xff09;数据集是计算机视觉领域中最广泛使用的数据集之一&#xff0c;主要用于目标检测、分割和图像标注任务。COCO 数据集由 Microsoft 发布&#xff0c…...

【管理咨询宝藏159】顶级咨询公司人力三支柱建设方案思路

阅读完整版报告内容&#xff0c;请搜索VV号“管理咨询宝藏”。 【管理咨询宝藏159】顶级咨询公司人力三支柱建设方案思路 【格式】PDF版本 【关键词】人力咨询、三支柱、人力体系 【核心观点】 - 集团总部制定全集团共享中心总体规划路径&#xff0c;组织并负责实施与推广。各…...

跨时钟域总结

跨时钟域总结 秋招学习跨时钟域 总结一下吧 异步电路 设计中有两个频率不同的时钟(也可能多个),而有数据在两组时钟之间传输 单bit跨时钟域 慢时钟域数据-> 快时钟域 方法 : 使用两个锁存器 (打两拍) 数据跨时钟域同步过程中,脉冲宽度会改变&#xff0c;不影响同步结…...

富婆和富公子都在看的负载均衡和Haproxy大全

一.负载均衡 1.1&#xff1a;什么是负载均衡 负载均衡&#xff1a; Load Balance &#xff0c;简称 LB &#xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或…...

VScode找python环境 (conda)

第一步 CtrlshiftP 第二步 框框里输入&#xff1a;Python:Select Interpreter...

C# Winform序列化和反序列化

在NET Framework 4.7.2中不能用Newtonsoft.Json进行序列化和反序列化&#xff0c;为解决此问题&#xff0c;采用System.Text.Json进行序列化&#xff0c;注意要添加System.Memory的引用。 1、创建测试类 using System; using System.Collections.Generic; using System.Linq; …...

crc原理概述

CRC&#xff08;循环冗余校验&#xff09;是一种错误检测技术&#xff0c;用于确保数据在传输或存储过程中没有发生变化。它通过将数据视为一个多项式&#xff0c;利用二进制除法得到一个校验码&#xff08;CRC值&#xff09;。接收方使用相同的算法验证数据和CRC值是否匹配&am…...

C++要求或禁止在堆中产生对象

有时你想这样管理某些对象&#xff0c;要让某种类型的对象能够自我销毁&#xff0c;也就是能够“delete this”。很明显这种管理方式需要此类型对象被分配在堆中。而其它一些时候你想获得一种保障&#xff1a;“不在堆中分配对象&#xff0c;从而保证某种类型的类不会发生内存泄…...

为什么阿里开发手册推荐用静态工厂方法代替构造器?

&#x1f345; 作者简介&#xff1a;哪吒&#xff0c;CSDN2021博客之星亚军&#x1f3c6;、新星计划导师✌、博客专家&#x1f4aa; &#x1f345; 哪吒多年工作总结&#xff1a;Java学习路线总结&#xff0c;搬砖工逆袭Java架构师 &#x1f345; 技术交流&#xff1a;定期更新…...

前端写法建议【让项目更加易于维护】

背景 标题前提条件&#xff1a; 没有字典接口、或其他原因&#xff0c;需要前端手动维护的情况 示例环境&#xff1a;vue2&#xff0c;其他项目同理 示例 如果项目有某种类别&#xff0c;前端和后端约定好了&#xff0c;某些情况下&#xff0c;需要前端写死时。 比如有字段…...

EasyExcel 自定义转换器、自定义导出字典映射替换、满足条件内容增加样式,完整代码+详细注释说明

虽然最之前是在其他地方看到的&#xff0c;但最终因缘巧合下找到了原文&#xff0c;还是尊重一下原作者。 参考引用了这位佬的博客&#xff0c;确实方便使用。 https://blog.csdn.net/qq_45914616/article/details/137200688?spm1001.2014.3001.5502 这是一个基于Easyexcel通过…...

C语言学习笔记 Day10(指针--中)

Day10 内容梳理&#xff1a; 目录 Chapter 7 指针 7.4 指针 & 数组 &#xff08;1&#xff09;指针操作数组元素 &#xff08;2&#xff09;指针加减运算 1&#xff09;加法 2&#xff09;减法 &#xff08;3&#xff09;指针数组 7.5 多级指针 Chapter 7 指针 …...

网页显示打印 pdf

文件服务使用 minio&#xff0c;使用 nginx 反向代理。 将文件存放在 minio 上&#xff0c;如果是公开的文件&#xff0c;则统一放到一个桶&#xff0c;设置为公开只读。 如果是私有文件&#xff0c;则使用临时链接&#xff0c;给有权限的用户查看和打印。 要实现在 html 页…...

1948-2024.5金融许可信息明细数据

1948-2024.5金融许可信息明细数据 1、时间&#xff1a;1948-2024.5 2、指标&#xff1a;来源表、机构编码、机构名称、所属银行、机构类型、业务范围、机构住所、地理坐标、行政区划代码、所属区县、所属城市、所属省份、邮政编码、发证日期、批准日期、发证机关、流水号、是…...

【笔记】从零开始做一个精灵龙女-画贴图阶段(终)

这篇主要是细节&#xff0c;包括花纹和其它一些细化 皮肤 脖子 脖子一定要压暗&#xff0c;不然前后关系体现不出来 脸 1. 忘了有uv缝了&#xff0c;记得打开投影模式画 顺着头发轨迹长的方向画出发际线 背包手镯 1.先画出暗色花纹&#xff1a; 2.再加亮色&#xff0c;亮…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

蓝桥杯 冶炼金属

原题目链接 &#x1f527; 冶炼金属转换率推测题解 &#x1f4dc; 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V&#xff0c;是一个正整数&#xff0c;表示每 V V V 个普通金属 O O O 可以冶炼出 …...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...