パストレース-Matlab LQRライブラリ関数がコード生成できない場合は、手書きで作成します.


Matlab環境ではlqr,dlqr,care,dare関数をコード生成できません.Simulink環境で使用したい場合は、コード生成ができないことを示します.外部関数を加えるとSimulink環境で使用できます.
// 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

このモデルは車両動力学に基づく誤差方程式である.導出プロセスは、どこにでもあるドキュメントを参照します.離散化の過程は前方オラと中点オラで、興味があれば導いてもいいです.