function y=laurens5(u); global K_PHI K_PSI K_TETA F_PHI F_PSI F_TETA vitesse_rotation % En entrée un vecteur u à 10 composantes: % u(1:3) est le champ magnétique pulsé élaboré à bord à l'aide des mesures % u(4:10) est le vecteur d'état p q r + le quaternion Q % -------------------------------------------------------------------------------------- B=u(1:3); % Champ magnétique colonne NB=norm(B); % Norme du champ magnétique % ---------------------------------------------------------------------------------------- % Récupération des angles vect_etat=u(4:10)'; result=pqrQ_V_P(vect_etat); phi=result(1); teta=result(2); psi=result(3); phi_prime=result(4); teta_prime=result(5); psi_prime=result(6); angles_colonne=[phi teta psi]'; % Angles en vecteur colonne % Calcul du couple de commande sur les axes de mesure des angles c_phi=-K_PHI*phi-F_PHI*phi_prime; c_teta=-K_TETA*teta-F_TETA*teta_prime; c_psi=-K_PSI*psi-F_PSI*psi_prime; couple_colonne=[c_phi c_teta c_psi]'; % Couple en vecteur colonne % Calcul de la matrice de changement d'axes de mesure des angles de Cardan vers xyz ( elle % n'est unitaire et présente une difficulté pour tangage = + ou - 90° % D'où la précaution suivante qui ne faussera les calculs que sur un court instant % lorsque cos(tangage) approche 0 on donne des valeurs plausibles mais inefficaces % pratiquement nulles if abs(cos(teta))>0.001 Pcardan=mat_card(angles_colonne); else Pcardan=[1 0 -sin(teta); 0 cos(phi) 0.001*sin(phi); 0 -sin(phi) 0.001*cos(phi)]; end % Calcul du couple de commande en axes satellite cpl=Pcardan*couple_colonne; % Calcul de mx mz Cr éléments de la commande % vecteur unitaire de B u=B/NB; % Toujours défini % ----------------------------------------- if abs(B(2))>1e-7; mxx=cpl(3)/B(2); mzz=-cpl(1)/B(2); Croue=(B'*cpl)/B(2); else mxx=0; mzz=0; Croue=0; end % Fin du if y=[mxx 0 mzz 0 Croue 0]'; % Sortie y(1:3) est le vecteur moment magnétique % Sortie y(4:6) est le couple roue de dimension 3 end % Fin programme