パストレース-Matlab LQRライブラリ関数がコード生成できない場合は、手書きで作成します.
12554 ワード
Matlab環境ではlqr,dlqr,care,dare関数をコード生成できません.Simulink環境で使用したい場合は、コード生成ができないことを示します.外部関数を加えるとSimulink環境で使用できます.
ただし、車両経路追跡dlqrアルゴリズムなど、オンラインlqr関数を実際のコントローラに配備したい場合は、フィードバックゲインKを事前に解きたくない場合や、QとRマトリクスを経時的に変更する必要がある場合は、lqr関数コード生成を高速制御プロトタイプまたはワークコントローラROSシステムに配備することはできません.Matlabが与えた提案は,手作業で符号化してリカティ方程式を解くことである.具体的な原理は述べず,Matlab M関数を直接与えた.原理を書くのも簡単で、反復リカティ方程式を解くだけでいいです.反復ステップ数が多いので、Overrunができるかどうかはコントローラの性能を見てみましょう.次に、車両経路追跡動力学モデルに基づくdlqrアルゴリズムは、フィードバック利得Kコードを解くために与えられる.
このモデルは車両動力学に基づく誤差方程式である.導出プロセスは、どこにでもあるドキュメントを参照します.離散化の過程は前方オラと中点オラで、興味があれば導いてもいいです.
// An highlighted block
coder.extrinsic(function)
ただし、車両経路追跡dlqrアルゴリズムなど、オンラインlqr関数を実際のコントローラに配備したい場合は、フィードバックゲインKを事前に解きたくない場合や、QとRマトリクスを経時的に変更する必要がある場合は、lqr関数コード生成を高速制御プロトタイプまたはワークコントローラROSシステムに配備することはできません.Matlabが与えた提案は,手作業で符号化してリカティ方程式を解くことである.具体的な原理は述べず,Matlab M関数を直接与えた.原理を書くのも簡単で、反復リカティ方程式を解くだけでいいです.反復ステップ数が多いので、Overrunができるかどうかはコントローラの性能を見てみましょう.次に、車両経路追跡動力学モデルに基づくdlqrアルゴリズムは、フィードバック利得Kコードを解くために与えられる.
// An highlighted block
function [K,i] = fcn(a, b, m, cr, cf, Iz, vx)
dt = 0.005; %
PN_1 =zeros(4,4);
P=zeros(4,4);
I =eye(4);
i=0;%
vx =double( uint8(vx*10/10));
if vx>0.1
A=[0,1,0,0;0,(cf+cr)/(m*vx),-(cf+cr)/m,(a*cf-b*cr)/(m*vx);
0,0,0,1;0,(a*cf-b*cr)/(Iz*vx),-(a*cf-b*cr)/Iz,(a*a*cf+b*b*cr)/(Iz*vx)];
B=[0; -cf/m; 0; -a*cf/Iz];
Ad = (eye(4)-A*dt/2)\(eye(4)+A*dt/2); % A
Bd = B*dt;% B
Q=[20 0 0 0;0 1 0 0;0 0 20 0;0 0 0 1 ];
R=10;
PN =Q;
err =10^(-1);% ,
error = 1;
while(error>err)
PN_1 = Q+Ad'*PN/(I+Bd/R*Bd'*PN)*Ad;%
error = norm(PN-PN_1);
PN =PN_1;
i = i+1;%
if i>400
break;
end
end
P =PN_1;
K = (R+Bd'*P*Bd)\Bd'*P*Ad;
else
K = [0 0 0 0];
end
end
このモデルは車両動力学に基づく誤差方程式である.導出プロセスは、どこにでもあるドキュメントを参照します.離散化の過程は前方オラと中点オラで、興味があれば導いてもいいです.