MATLAB - 小車倒立擺的非線性模型預測控制(NMPC)

系列文章目錄

目錄

系列文章目錄

前言

一、擺錘/小車組件

二、系統方程

三、控制目標

四、控制結構

五、創建非線性 MPC 控制器

六、指定非線性設備模型

七、定義成本和約束

八、驗證非線性 MPC 控制器

九、狀態估計

十、MATLAB 中的閉環仿真

十一、使用 MATLAB 中的 FORCESPRO 求解器進行閉環仿真

十二、Simulink 中的閉環仿真

十三、使用 Simulink 中的 FORCESPRO 求解器進行閉環仿真

十四、結論


前言

????????本示例使用非線性模型預測控制器對象和塊實現對小車上倒立擺的擺動和平衡控制。

????????本示例需要 Optimization Toolbox? 軟件為非線性 MPC 提供默認的非線性編程求解器,以計算每個控制間隔的最優控制動作。


一、擺錘/小車組件

????????本例中的被控對象是擺錘/小車組件,其中 z 是小車位置,θ 是擺錘角度。該系統的可控輸入變量是作用在小車上的可變力 F。力的范圍在 -100 和 100 之間。脈沖干擾 dF 也會推動擺。

二、系統方程

????????系統方程如下,其中 l 是到擺錘質心的距離,m 和 M 分別是擺錘和小車的質量,Kd 是粘性摩擦阻尼項。

$\frac{\partial^2}{\partial t^2}z(t)=\frac{-lm\sin(\theta(t))\left(\frac{\partial}{\partial t}\theta(t)\right)^2-\mathrm{Kd}\frac{\partial}{\partial t}z(t)+F+gm\cos(\theta(t))\sin(\theta(t))}{-m\cos(\theta(t))^2+M+m}$

$g\sin(\theta(t))=\frac{-lm\cos(\theta(t))^{2}+Ml+lm}{M+m}\frac{\partial^{2}}{\partial t^{2}}\theta(t)+\frac{lm\cos(\theta(t))\sin(\theta(t))\left(\frac{\partial}{\partial t}\theta(t)\right)^{2}+\mathrm{Kd}\cos(\theta(t))\frac{\partial}{\partial t}z(t)-F\cos(\theta(t))}{M+m}$

????????通過第二項中的長度 l 和最后一項中的 theta 余弦,并在左側分離出 theta 的二次導數,就可以從第二個方程中推導出表示角加速度與角速度和線速度函數關系的公式。有關如何推導方程的詳細說明,請參閱推導運動方程和仿真車極系統(符號數學工具箱)。

????????系統方程編碼在文件 pendulumCT0.m 中,其中不包括脈沖力 dF(設為零),因為它被視為控制器未知的干擾。顯示文件。

type("pendulumCT0.m")
function dxdt = pendulumCT0(x, u)
%% Continuous-time nonlinear dynamic model of a pendulum on a cart
%
% 4 states (x): 
%   cart position (z)
%   cart velocity (z_dot): when positive, cart moves to right
%   angle (theta): when 0, pendulum is at upright position
%   angular velocity (theta_dot): anti-clockwise positive
% 
% 1 inputs: (u)
%   force (F): when positive, force pushes cart to right 
%
% Copyright 2018 The MathWorks, Inc.%#codegen%% parameters
M = 1;      % cart mass
m = 1;      % pendulum mass
g = 9.81;   % gravity of earth
l = 0.5;    % pendulum length
Kd = 10;    % cart damping%% Obtain x, u and y% x (state variables)
z_dot = x(2);
theta = x(3);
theta_dot = x(4);% u (input variable)
F = u;%% Compute dxdt
dxdt = [z_dot;...(   F - Kd*z_dot ...- m*l*theta_dot^2*sin(theta) ...+ m*g*sin(theta)*cos(theta)  ...)/(M + m*sin(theta)^2);...theta_dot;...(  g*sin(theta) + ...(F - Kd*z_dot - m*l*theta_dot^2*sin(theta))*cos(theta)/(M + m) ...)/(l - m*l*cos(theta)^2/(M + m));];

三、控制目標

????????假設擺錘/小車組件的初始條件如下。

  • 小車在 z = 0 處靜止。
  • 擺錘處于向下的平衡位置,θ = -pi。

????????控制目標為

  • 上擺控制: 最初將擺錘向上擺動至 z = 0 和 theta = 0 的倒平衡位置。
  • 小車位置參考跟蹤: 通過設定點的階躍變化將小車移動到新位置,保持擺錘倒置。
  • 擺錘平衡: 當對倒立擺施加幅度為 2 的脈沖干擾時,保持擺的平衡,并使小車回到初始位置。

????????向下的平衡位置是穩定的,而倒置的平衡位置是不穩定的,這使得擺錘上升控制對單一線性控制器來說更具挑戰性,而非線性 MPC 則可以輕松應對。

四、控制結構

????????在本示例中,非線性 MPC 控制器的輸入/輸出配置如下。

  • 一個可控輸入變量: 變量力 (F)
  • 兩個可觀測輸出: 小車位置 (z) 和擺錘角度 (Theta)

????????另外兩個狀態:小車速度 (zdot) 和擺錘角速度 (thetadot)不可觀測。

????????小車位置(z)的設定點可以變化,而擺錘角度(θ)的設定點始終為 0(倒置平衡位置)。

五、創建非線性 MPC 控制器

????????使用 nlmpc 對象創建一個具有適當尺寸的非線性 MPC 控制器。在本示例中,預測模型有 4 個狀態、2 個輸出和 1 個輸入(可控變量或 MV)。

nx = 4;
ny = 2;
nu = 1;
nlobj = nlmpc(nx, ny, nu);
Zero weights are applied to one or more OVs because there are fewer MVs than OVs.

????????預測模型的采樣時間為 0.1 秒,與控制器的采樣時間相同。

Ts = 0.1;
nlobj.Ts = Ts;

????????將預測范圍設為 10,這個時間長度足以捕捉被控對象的主要動態,但又不會太長,以免影響計算效率。

nlobj.PredictionHorizon = 10;

????????將控制范圍設為 5,這個時間長度足以讓控制器有足夠的自由度來處理不穩定模式,同時又不會引入過多的決策變量。

nlobj.ControlHorizon = 5;

六、指定非線性設備模型

????????非線性模型預測控制的主要優勢在于,它使用非線性動態模型來預測被控對象未來在各種運行條件下的行為。

????????這種非線性模型通常是由一組微分和代數方程 (DAE) 組成的第一原理模型。在本示例中,離散時間小車和擺錘系統定義在 pendulumDT0 函數中。該函數使用多步正向歐拉法在控制間隔之間對連續時間模型 pendulumCT0 進行積分。非線性狀態估計器也使用同一函數。顯示離散模型

type("pendulumDT0.m")
function xk1 = pendulumDT0(xk, uk, Ts)
%% Discrete-time nonlinear dynamic model of a pendulum on a cart at time k
%
% 4 states (xk): 
%   cart position (z)
%   cart velocity (z_dot): when positive, cart moves to right
%   angle (theta): when 0, pendulum is at upright position
%   angular velocity (theta_dot): anticlockwise positive
% 
% 1 inputs: (uk)
%   force (F): when positive, force pushes cart to right 
%
% xk1 is the states at time k+1.
%
% Copyright 2018 The MathWorks, Inc.%#codegen% Repeat application of Euler method sampled at Ts/Nd.
Nd = 10;
delta = Ts/Nd;
xk1 = xk;
for ct=1:Ndxk1 = xk1 + delta*pendulumCT0(xk1,uk);
end
% Note that we choose the Euler method (first order Runge-Kutta method)
% because it is more efficient for plant with non-stiff ODEs.  You can
% choose other ODE solvers such as ode23, ode45 for better accuracy or
% ode15s and ode23s for stiff ODEs.  Those solvers are available from
% MATLAB.

????????將離散化模型設置為非線性 MPC 控制器使用的預測模型。

nlobj.Model.StateFcn = "pendulumDT0";

????????要使用離散時間模型,請將控制器的 Model.IsContinuousTime 屬性設置為 false。

nlobj.Model.IsContinuousTime = false;

????????預測模型使用可選參數 Ts 表示采樣時間。使用該參數意味著,如果在設計過程中更改了預測采樣時間,則無需修改擺錘 DT0 文件。

nlobj.Model.NumberOfParameters = 1;

????????兩個被控對象的輸出分別是模型中的第一和第三狀態,即小車位置和擺錘角度。相應的輸出函數定義在 pendulumOutputFcn 函數中。

nlobj.Model.OutputFcn = 'pendulumOutputFcn';

????????最佳做法是盡可能提供解析雅各布函數,因為它們能顯著提高仿真速度。在本例中,使用匿名函數為輸出函數提供雅各布函數。

nlobj.Jacobian.OutputFcn = @(x,u,Ts) [1 0 0 0; 0 0 1 0];

????????由于您沒有提供狀態函數的雅各布,非線性 MPC 控制器會在優化過程中使用數值擾動來估計狀態函數的雅各布。這樣做會在一定程度上降低仿真速度。

七、定義成本和約束

????????與線性 MPC 相似,非線性 MPC 在每個控制區間都要解決一個受約束的優化問題。不過,由于被控對象模型是非線性的,因此非線性 MPC 將最優控制問題轉換為一個具有非線性成本函數和非線性約束的非線性優化問題。

????????本例中使用的成本函數與線性 MPC 使用的標準成本函數相同,其中強制執行了輸出參考跟蹤和可控輸入變量移動抑制。因此,請指定標準的 MPC 調整權重。

nlobj.Weights.OutputVariables = [3 3];
nlobj.Weights.ManipulatedVariablesRate = 0.1;

????????小車位置限制在 -10 至 10 的范圍內。????????

nlobj.OV(1).Min = -10;
nlobj.OV(1).Max = 10;

????????力的范圍在 -100 和 100 之間。

nlobj.MV.Min = -100;
nlobj.MV.Max = 100;

八、驗證非線性 MPC 控制器

????????設計完非線性 MPC 控制器對象后,最好檢查一下為預測模型、狀態函數、輸出函數、自定義成本和自定義約束定義的函數及其雅各布系數。為此,請使用 validateFcns 命令。該功能可檢測這些函數中的任何尺寸和數值不一致之處。

x0 = [0.1;0.2;-pi/2;0.3];
u0 = 0.4;
validateFcns(nlobj,x0,u0,[],{Ts});
Model.StateFcn is OK.
Model.OutputFcn is OK.
Jacobian.OutputFcn is OK.
Analysis of user-provided model, cost, and constraint functions complete.

九、狀態估計

????????在本例中,只有兩個設備狀態(小車位置和擺錘角度)是可觀測的。因此,您需要使用擴展卡爾曼濾波器來估計四個被控對象的狀態。其狀態轉換函數在 pendulumStateFcn.m 中定義,測量函數在 pendulumMeasurementFcn.m 中定義。

EKF = extendedKalmanFilter(@pendulumStateFcn, @pendulumMeasurementFcn);

十、MATLAB 中的閉環仿真

????????通過設置初始被控對象狀態和輸出值來指定仿真的初始條件。此外,還要指定擴展卡爾曼濾波器的初始狀態。

????????仿真區域的初始條件如下。

  • 小車靜止在 z = 0 處。
  • 擺錘處于向下的平衡位置,θ = -pi。
x = [0;0;-pi;0];
y = [x(1);x(3)];
EKF.State = x;

????????mv 是在任何控制間隔內計算出的最佳控制移動量。初始化 mv 為零,因為一開始施加在小車上的力為零。

mv = 0;

????????在仿真的第一階段,擺錘從向下的平衡位置向上擺動到倒平衡位置。該階段的狀態參考值均為零。

yref1 = [0 0];

????????10 秒后,小車從位置 0 移動到位置 5。設置該位置的狀態參考點。

yref2 = [5 0];

????????使用 nlmpcmove 命令計算每個控制間隔的最佳控制移動。該函數構建了一個非線性編程問題,并使用優化工具箱中的 fmincon 函數進行求解。

????????使用 nlmpcmoveopt 對象指定預測模型參數,并將該對象傳遞給 nlmpcmove。

nloptions = nlmpcmoveopt;
nloptions.Parameters = {Ts};

????????運行仿真 20 秒。

Duration = 20;
hbar = waitbar(0,'Simulation Progress');
xHistory = x;
for ct = 1:(20/Ts)% Set referencesif ct*Ts<10yref = yref1;elseyref = yref2;end% Correct previous prediction using current measurement.xk = correct(EKF, y);% Compute optimal control moves.[mv,nloptions,info] = nlmpcmove(nlobj,xk,mv,yref,[],nloptions);% Predict prediction model states for the next iteration.predict(EKF, [mv; Ts]);% Implement first optimal control move and update plant states.x = pendulumDT0(x,mv,Ts);% Generate sensor data with some white noise.y = x([1 3]) + randn(2,1)*0.01;% Save plant states for display.xHistory = [xHistory x]; %#ok<*AGROW>waitbar(ct*Ts/20,hbar);
end
close(hbar)

????????繪制閉環響應圖。

figuresubplot(2,2,1)
plot(0:Ts:Duration,xHistory(1,:))
xlabel('time')
ylabel('z')
title('cart position')subplot(2,2,2)
plot(0:Ts:Duration,xHistory(2,:))
xlabel('time')
ylabel('zdot')
title('cart velocity')subplot(2,2,3)
plot(0:Ts:Duration,xHistory(3,:))
xlabel('time')
ylabel('theta')
title('pendulum angle')subplot(2,2,4)
plot(0:Ts:Duration,xHistory(4,:))
xlabel('time')
ylabel('thetadot')
title('pendulum velocity')

????????擺角圖顯示,擺錘在兩秒內成功擺起。在上擺過程中,小車發生位移,峰值偏差為-1,并在 2 秒鐘左右回到原位。

????????小車位置圖顯示,小車在兩秒內成功移動到 z = 5 處。在小車移動的同時,擺錘以 1 弧度(57 度)的峰值偏差發生位移,并在 12 秒左右恢復到倒平衡位置。

十一、使用 MATLAB 中的 FORCESPRO 求解器進行閉環仿真

????????您可以輕松地將第三方非線性編程求解器與使用模型預測控制工具箱軟件設計的非線性 MPC 對象結合使用。例如,如果您安裝了 Embotech 的 FORCESPRO 軟件,就可以使用其 MPC 工具箱插件從 nlmpc 對象生成高效的自定義 NLP 求解器,并使用該求解器進行仿真和代碼生成。

????????首先,使用 nlmpcToForces 命令生成自定義求解器。您可以使用 nlmpcToForcesOptions 命令選擇使用內部點 (IP) 求解器或順序二次編程 (SQP) 求解器。

options = nlmpcToForcesOptions();
options.SolverName = 'MyIPSolver';
options.SolverType = 'InteriorPoint';
options.Parameter = Ts;
options.x0 = [0;0;-pi;0];
options.mv0 = 0;
[coredata, onlinedata] = nlmpcToForces(nlobj,options);

????????nlmpcToForces 函數會生成一個自定義 MEX 函數 nlmpcmove_MyIPSolver,您可以用它來加快閉環仿真。

x = [0;0;-pi;0];
mv = 0;
EKF.State = x;
y = [x(1);x(3)];
hbar = waitbar(0,'Simulation Progress');
xHistory = x;
for ct = 1:(20/Ts)% Set referencesif ct*Ts<10onlinedata.ref = repmat(yref1,10,1);elseonlinedata.ref = repmat(yref2,10,1);end% Correct previous prediction using current measurement.xk = correct(EKF, y);% Compute optimal control moves using FORCESPRO solver.[mv,onlinedata,info] = nlmpcmove_MyIPSolver(xk,mv,onlinedata);% Predict prediction model states for the next iteration.predict(EKF, [mv; Ts]);% Implement first optimal control move and update plant states.x = pendulumDT0(x,mv,Ts);% Generate sensor data with some white noise.y = x([1 3]) + randn(2,1)*0.01;% Save plant states for display.xHistory = [xHistory x]; %#ok<*AGROW>waitbar(ct*Ts/20,hbar);endclose(hbar)

????????不出所料,閉環響應與使用 fmincon 得到的響應相似。

十二、Simulink 中的閉環仿真

????????在 Simulink? 中進行閉環仿真,驗證非線性 MPC 控制器。

????????打開 Simulink 模型。

mdl = 'mpc_pendcartNMPC';
open_system(mdl)

????????在該模型中,非線性 MPC 控制器模塊被配置為使用先前設計的控制器 nlobj。

????????為了在預測模型中使用可選參數,模型中的 Simulink 總線塊連接到非線性 MPC 控制器塊的 params 輸入端口。要配置該總線塊以使用 Ts 參數,請在 MATLAB? 工作區中創建一個總線對象,并配置總線創建器塊以使用該對象。為此,請使用 createParameterBus 函數。在本示例中,將總線對象命名為 “myBusObject”。

createParameterBus(nlobj,[mdl '/Nonlinear MPC Controller'],'myBusObject',{Ts});
Simulink Bus object "myBusObject" created in the MATLAB Workspace.
Bus Creator block "mpc_pendcartNMPC/Nonlinear MPC Controller" is configured to use it.

????????運行仿真 30 秒。

open_system([mdl '/Scope'])
sim(mdl)

????????與 MATLAB 仿真相比,Simulink 中的非線性仿真得出了完全相同的擺動和小車位置跟蹤結果。此外,在 20 秒的時間內對倒立擺施加了一個推力(脈沖干擾 dF)。非線性 MPC 控制器成功地拒絕了干擾,并使小車返回到 z = 5,擺錘返回到倒置平衡位置。

十三、使用 Simulink 中的 FORCESPRO 求解器進行閉環仿真

????????您還可以使用 Embotech FORCESPRO 軟件中的 FORCES 非線性 MPC 塊,使用生成的自定義 NLP 求解器仿真非線性 MPC。

????????如果您已安裝 FORCESPRO 軟件,只需將上述模型中的非線性 MPC 塊替換為庫瀏覽器中 FORCESPRO MPC 塊部分的 FORCESPRO 非線性 MPC 塊。在程序塊對話框中,將 coredata 指定為控制器數據結構,并啟用模型參數輸入。如下圖所示重新連接其余信號。

?

????????閉環響應與使用 fmincon 時類似。

十四、結論

????????本例說明了在 MATLAB 和 Simulink 中分別使用 nlmpc 對象和非線性 MPC 控制器塊設計和仿真非線性 MPC 的一般工作流程。根據具體的非線性被控對象特性和控制要求,實施細節會有很大不同。主要的設計挑戰包括

  • 選擇適當的范圍、界限和權重
  • 設計非線性狀態估計器
  • 設計定制的非線性成本函數和約束函數
  • 選擇求解器選項或自定義 NLP 求解器

????????您可以將本例中的函數和 Simulink 模型作為模板,用于其他非線性 MPC 設計和仿真任務。

????????模型預測控制工具箱軟件中的 nlmpcmoveCodeGeneration 命令和 FORCESPRO 中的 nlmpcmoveForces 命令都支持在 MATLAB 中生成代碼。模型預測控制工具箱軟件中的非線性 MPC 塊和 FORCESPRO 中的 FORCES 非線性 MPC 塊都支持在 Simulink 中生成代碼。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/77350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77350.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA文件I/O

目錄 一、三種路徑的分類&#xff1a; 1、絕對路徑&#xff1a; 2、相對路徑&#xff1a; 3、基準目錄&#xff1a; 二、文件的種類&#xff1a; 三、利用JAVA操作文件&#xff1a; 1、File類的構造方法&#xff1a; 2、File 類方法的使用&#xff1a; 使用例子&#…

焊接機器人的設計

一、引言 隨著制造業的發展&#xff0c;焊接工藝在各個領域得到廣泛應用。焊接機器人具有焊接質量高、效率高、勞動強度低等優點&#xff0c;能夠滿足現代制造業對焊接生產的要求。設計一款性能優良的焊接機器人&#xff0c;對于提高焊接生產的自動化水平和產品質量具有重要意…

Thymeleaf簡介

在Java中&#xff0c;模板引擎可以幫助生成文本輸出。常見的模板引擎包括FreeMarker、Velocity和Thymeleaf等 Thymeleaf是一個適用于Web和獨立環境的現代服務器端Java模板引擎。 Thymeleaf 和 JSP比較&#xff1a; Thymeleaf目前所作的工作和JSP有相似之處&#xff0c;Thyme…

(論文閱讀)RNNoise 基于遞歸神經網絡的噪聲抑制庫

RNNoise 是一個基于遞歸神經網絡的噪聲抑制庫。 有關該算法的描述見以下論文&#xff1a; J.-M. Valin, A Hybrid DSP/Deep Learning Approach to Real-Time Full-Band Speech Enhancement, Proceedings of IEEE Multimedia Signal Processing (MMSP) Workshop, arXiv:1709.08…

DevOps-文章目錄

01什么是DevOps 02DevOps基礎環境準備 03-DevOps-安裝并初始化Gitlab 04-DevOps-安裝并初始化Jenkins 05-DevOps-Jenkins自動拉取構建代碼1 05-DevOps-Jenkins自動拉取構建代碼2 06-DevOps-自動構建Docker鏡像 07-DevOps-安裝部署Harbor鏡像倉庫 08-DevOps-向Harbor上傳自定義鏡…

UML 狀態圖:以網絡媒體教學系統為例解析

目錄 一、系統概述 二、狀態圖分析 &#xff08;一&#xff09;登錄認證模塊 &#xff08;二&#xff09;課程選擇模塊 &#xff08;三&#xff09;視頻播放模塊 &#xff08;四&#xff09;退出登錄狀態 三、UML狀態圖繪畫 四、總結 UML狀態圖是一種行為圖&#xff0c…

交易模式革新:Eagle Trader APP上線,助力自營交易考試效率提升

近年來&#xff0c;金融行業隨著投資者需求的日益多樣化&#xff0c;衍生出了眾多不同的交易方式。例如&#xff0c;為了幫助新手小白建立交易基礎&#xff0c;誕生了各類跟單社區&#xff1b;而與此同時&#xff0c;一種備受矚目的交易方式 —— 自營交易模式&#xff0c;正吸…

Elasticsearch BBQ 與 OpenSearch FAISS:向量搜索性能對比

作者&#xff1a;來自 Elastic Ugo Sangiorgi Elasticsearch BBQ 與 OpenSearch FAISS 的性能對比。 帶有二值量化的向量搜索&#xff1a;使用 BBQ 的 Elasticsearch 比使用 FAISS 的 OpenSearch 快 5 倍。Elastic 收到了來自社區的請求&#xff0c;希望澄清 Elasticsearch 與 …

Vue 3.4 新特性詳解:Composition API 與 Effect 作用域 API 實戰

一、Vue 3.4 核心特性概覽 Vue 3.4 代號「?? Slam Dunk」,帶來多項關鍵升級: 模板解析器性能翻倍:單文件組件(SFC)構建效率提升 44%,解析速度提升 2 倍。響應式系統優化:計算屬性和 watchEffect 觸發更精準,減少無效渲染。Effect 作用域 API 穩定:通過 effectScope…

【day8】調用AI接口,生成自動化測試用例

1、項目結構建議 project/ ├── api_docs/ # 存放接口文檔 │ └── XX系統.swagger.json ├── ai_generator/ # AI測試用例生成模塊 │ └── test_case_generator.py ├── tests/ # 生成的測試用例 │ └── test_user_api.py ├── conftest.py # pytest配置 ├─…

React應用開發學習指南

AI生成研究報告&#xff1a;關鍵詞 React應用開發 React 已經成為前端 Web 開發領域的主導力量&#xff0c;它是一個免費且開源的 JavaScript 庫&#xff0c;主要用于構建用戶界面 (UI) 1。其多功能性延伸到為 Web 和原生應用程序創建 UI&#xff0c;使其成為行業內備受追捧的…

MSTP+VRRP+DHCP(ENSP)

下載鏈接 通過網盤分享的文件&#xff1a;MSTPVRRPDHCP拓撲圖 鏈接: https://pan.baidu.com/s/1ehRwRQ-WzKC8PsUHsTe70Q?pwd345d 提取碼: 345d PC1 PC2 PC5 AR1 為AR1各端口配置IP地址 <Huawei>sys [Huawei]un in en [Huawei]int g0/0/0 [Huawei-GigabitEthernet0/0/…

第一個Qt開發的OpenCV程序

OpenCV計算機視覺開發實踐&#xff1a;基于Qt C - 商品搜索 - 京東 下載安裝Qt&#xff1a;https://download.qt.io/archive/qt/5.14/5.14.2/qt-opensource-windows-x86-5.14.2.exe 下載安裝OpenCV&#xff1a;https://opencv.org/releases/ 下載安裝CMake&#xff1a;Downl…

深入解析 Python 中的裝飾器 —— 從基礎到實戰

1. 裝飾器基礎 1.1 什么是裝飾器&#xff1f; 裝飾器本質上是一個 Python 函數&#xff0c;它可以讓其他函數在不需要做任何代碼變動的前提下增加額外功能。裝飾器的返回值也是一個函數對象。 1.2 語法糖&#xff1a; 符號 Python 提供了 符號作為裝飾器的語法糖&#xff0c…

研究生面試常見問題

研究生面試是考研復試的重要環節&#xff0c;面試表現直接關系到錄取結果。以下從面試流程、常見問題分類及回答技巧等方面為您整理了相關內容&#xff0c;幫助您更好地準備面試。 一、研究生面試的基本流程 自我介紹&#xff1a;通常需要準備1分鐘左右的中文或英文自我介紹&a…

無人機避障與目標識別技術分析!

一、無人機避障技術 1. 技術實現方式 傳感器融合&#xff1a; 視覺傳感&#xff08;RGB/雙目/紅外相機&#xff09;&#xff1a;基于SLAM&#xff08;同步定位與地圖構建&#xff09;實現環境建模&#xff0c;但依賴光照條件。 激光雷達&#xff08;LiDAR&#xff09;&…

Facebook隱私保護:從技術到倫理的探索

在這個數字化時代&#xff0c;隱私保護已成為公眾關注的焦點。Facebook&#xff0c;作為全球最大的社交媒體平臺之一&#xff0c;其用戶隱私保護問題更是引起了廣泛的討論。本文將從技術層面和倫理層面探討 Facebook 在隱私保護方面的努力和挑戰。 技術層面的隱私保護 在技術…

vmware17 虛擬機 ubuntu22.04 橋接模式,虛擬機無法接收組播消息

問題描述&#xff1a; 在一個項目中&#xff0c;宿主機win10中&#xff0c;使用的vmware17pro 虛擬機安裝的ubuntu22.04&#xff0c;按照網上的教程使用Qt綁定組播消息&#xff0c;在另外一個Ubuntu工控機上發送用wiresahrk抓包的組播消息 sudo tcpreplay -i enp1s0 --loop0 y…

《Operating System Concepts》閱讀筆記:p735-p737

《Operating System Concepts》學習第 62 天&#xff0c;p735-p737 總結&#xff0c;總計 3 頁。 一、技術總結 1.distributed system (1)定義 A collection of loosely coupled nodes interconnected by a communication network(一組通過通信網絡相互連接的松散耦合節點)…

NO.92十六屆藍橋杯備戰|圖論基礎-最小生成樹-Prim算法-Kruskal算法|買禮物|繁忙的都市|滑雪(C++)

一個具有n個頂點的連通圖&#xff0c;其?成樹為包含n-1條邊和所有頂點的極?連通?圖。對于?成樹來說&#xff0c;若砍去?條邊就會使圖不連通圖&#xff1b;若增加?條邊就會形成回路。 ?個圖的?成樹可能有多個&#xff0c;將所有?成樹中權值之和最?的樹稱為最??成樹…