• Non ci sono risultati.

A.5 Determinazione delle forze agenti sulle zampe della capsula

N/A
N/A
Protected

Academic year: 2021

Condividi "A.5 Determinazione delle forze agenti sulle zampe della capsula"

Copied!
26
0
0

Testo completo

(1)

A.5 Determinazione delle forze agenti sulle zampe della capsula

clear all; close all;

%DEFINIZIONE DEI PARAMETRI DI ANALISI UTENTE (le dimensioni sono in SI ) %Definizione della discretizzazione spaziale e temporale

N = input('Inserire il numero di segmenti longitudinali N='); for u = [0:1000]

%Controllo del dato in ingresso, N deve essere maggiore di 1 if (N= =0) | (N= =1) N = input('Inserire un valore di N>1, N='); u = 0; else u = 1000; end end

M = input('Inserire il numero di frazionamenti temporali M='); for u = [0:1000]

%Controllo del dato in ingresso, N deve essere maggiore di 0 if M==0 M = input('Inserire un valore di M>0, M='); u = 0; else u = 1000; end end %%%%%%%%

%INTRODUZIONE DEI PARAMETRI GEOMETRICI PER IL MOTO RELATIVO L=0.360; % Lunghezza del tubo [m]

D=0.030; % Diametro del tubo [m] IASS=0.020; % Interasse zampe [m]

L_lz=0.008; % Lunghezza dei link delle zampe [m] D_cap=0.010; % Diametro capsula [m]

(2)

%%%%%%%%

%CICLO DI ANALISI TEMPORALE DELLE FORZE APPLICATE ALLA CAPSULA for tempo = [1:M]

tempo %Introdotta per il controllo dell'istante di analisi %INTRODUZIONE DEI PUNTI

%SEZIONI DI ESTREMITA'

%La sezione anteriore del tratto di tubo simulato è inizialmente posta in x=0.18

Vt_f=[linspace(L/2,L/2,N)', D/2*cos(linspace(0,2*pi,N))', D/2*sin(linspace(0,2*pi,N))']; %La sezione posteriore del tratto di tubo simulato è inizialmente posta

%in x=-0.18

Vt_r=[linspace(-L/2,-L/2,N)', D/2*cos(linspace(0,2*pi,N))',... D/2*sin(linspace(0,2*pi,N))'];

%ZAMPE ANTERIORI

%Legge di moto dei vertici con gdl sui giunti delle zampe anteriori alfa_1=-60*pi/180*cos((tempo-1)/M*6*pi)-10*pi/180;

alfa_2=70*pi/180*cos((tempo-1)/M*6*pi+45*pi/180)+50*pi/180; %Vertice della prima zampa anteriore

V_f_1=[IASS/2-L_lz*sin(alfa_1)-L_lz*sin(alfa_1+alfa_2),... -D_cap/2-L_lz*cos(alfa_1)-L_lz*cos(alfa_1+alfa_2), 0];

%Vertice della seconda zampa anteriore (rotazione di -120° attorno a x)

V_f_2=V_f_1*[1 0 0;0 cos(-2/3*pi) sin(-2/3*pi);0 -sin(-2/3*pi) cos(-2/3*pi)]; %Vertice della terza zampa anteriore (rotazione di 120° attorno a x)

V_f_3=V_f_1*[1 0 0;0 cos(2/3*pi) sin(2/3*pi);0 -sin(2/3*pi) cos(2/3*pi)]; %Matrice delle coordinate dei vertici anteriori

(3)

%ZAMPE POSTERIORI

%Legge di moto dei vertici con gdl sui giunti delle zampe posteriori alfa_3=-60*pi/180*cos((tempo-1)/M*6*pi+pi)-10*pi/180;

alfa_4=70*pi/180*cos((tempo-1)/M*6*pi+45*pi/180+pi)+50*pi/180; %Vertice della prima zampa posteriore

V_r_1=[IASS/2-L_lz*sin(alfa_3)-L_lz*sin(alfa_3+alfa_4),... -D_cap/2-L_lz*cos(alfa_3)-L_lz*cos(alfa_3+alfa_4), 0];

%Vertice della seconda zampa posteriore (rotazione di -120° attorno a x) V_r_2=V_r_1*[1 0 0;0 cos(-2/3*pi) sin(-2/3*pi);0 -sin(-2/3*pi) cos(-2/3*pi)]; %Vertice della terza zampa posteriore (rotazione di 120° attorno a x)

V_r_3=V_r_1*[1 0 0;0 cos(2/3*pi) sin(2/3*pi);0 -sin(2/3*pi) cos(2/3*pi)]; %Matrice delle coordinate dei vertici posteriori

V_r=[V_r_1;V_r_2;V_r_3]; V_r0=V_r;

V_r0(:,1)=V_r(:,1)-IASS; % trasla i vertici anteriori indietro su x %Ruota di - 60° i vertici traslati

V_r=V_r0*[1 0 0;0 cos(-1/3*pi) sin(-1/3*pi);0 -sin(-1/3*pi) cos(-1/3*pi)];

%Matrice delle coordinate dei vertici delle zampe V = [V_f; V_r];

%X è la matrice dei punti utilizzati per la modellazione del substrato X = [Vt_f; V; Vt_r];

%Ciclo di approssimazione dei dati in ingresso dimx = size(X,1); for i=[1:dimx] for j=[1:3] X_temp = round(X(i,j)*10^6)/10^6; X(i,j) = X_temp; end end

(4)

%%%%%%%%%%

%COSTRUZIONE DELLA TRIANGOLAZIONE

%Si definisce quindi la matrice di triangolazione TR TR = convhulln(X);

%Si escludono i triangoli che chiudono le facce estreme del tubo.

%Si selezionano quelli che connettono tre vertici della sezione di estremità e si mettono %a zero le corrispondenti righe di TR

TR(sum((TR<N+1),2)= =3,:) = []; TR(sum((TR>N+6),2)= =3,:) = []; dimTR = size(TR,1);

%%%%%%%%%

%INTRODUZIONE DELLE GRANDEZZE NECESSARIE ALL'ANALISI

%Definizione dei parametri caratterizzanti il comportamento del tessuto EL_T = 2e3; %Elasticità trasversale (N/m)

l_eq = 0.0115; %Larghezza equivalente (m) lc = 0.0135; %Lunghezza critica (m)

Ri = 0.015; %Raggio iniziale del condotto (m) %Definizione di vettori e matrici utilizzati nell'analisi %Vettore del numero dei punti di intersezione

nint = [];

%Vettore delle coordinate dei punti di intersezione pint = [];

%Vettore delle lunghezze calcolate lsezione = [];

(5)

%Vettore le cui componenti indicano il numero di punti raccolti nella matrice Mt ed %associati ad un dato piano di taglio trasversale

dimMt = [];

%Vettore con le dimensioni delle sottomatrici di Mtu associate a ciascun piano di taglio dM = [];

%Versore della retta di azione della risultante delle forze normali risultante = [];

%Vettore delle deformazioni epsilon = [];

%Vettore delle tensioni SIGMA = [];

%Vettore delle risultanti FORZA = [];

%Vettore degli angoli di proiezione delle forze ALFA = [];

%Matrice dei punti utilizzati per la proiezione della forza normale sulla sezione % trasversale

ANG = [];

%Definizione delle matrici delle risultanti forza_ris = [];

momento_ris = [];

%Vettore di raccolta delle informazioni relative al contatto zampa-substrato contatto = [];

(6)

%CICLO DI CALCOLO DELLE FORZE AGENTI SULLA CAPSULA for nzampa = [1:6];

%DETERMINAZIONE DEI PUNTI RAPPRESENTANTI LA SEZIONE TRASVERSALE

%Si utilizzano le dimensioni delle matrici dei vertici e di quelle di triangolazione n = size(X,1);

m = size(TR,1);

%Quindi si definisce il piano tramite un punto dello stesso ed un vettore normale p0 = X(N+nzampa,:);

p1 = [1, 0, 0];

%Si ordinano i vertici dei triangoli a = X(TR(:,1),:);

b = X(TR(:,2),:); c = X(TR(:,3),:);

%Si verifica la presenza di intersezioni utilizzando i valori assoluti %dei prodotti scalari

da = (a-repmat(p0, m, 1))*p1'; db = (b-repmat(p0, m, 1))*p1'; dc = (c-repmat(p0, m, 1))*p1';

%Si costruisce il vettore k in cui si ordinano tutti i triangoli cui corrispondono %intersezioni col piano

k = (da>0)+(db>0)+(dc>0); k = find((k= =1)|(k= =2));

%xyzp è la matrice dei punti di intersezione xyzp = [];

(7)

INTERSEZIONE for i = k'

%Verifica dei primi due vertici if sum((da(i)= =0)+(db(i)= =0)= =2) xyz0 = [X(TR(i,1),:);X(TR(i,2),:)]; xyzp = [xyzp;xyz0]; elseif (da(i)*db(i)) <= 0 tt = abs(da(i))/(abs(da(i))+(abs(db(i)))); xyz0 = X(TR(i,1),:)*(1-tt)+X(TR(i,2),:)*tt; xyzp = [xyzp;xyz0]; end

%Verifica dei vertici 1 e 3

if sum((da(i)= =0)+(dc(i)= =0)= =2) xyz0 = [X(TR(i,1),:);X(TR(i,3),:)]; xyzp = [xyzp;xyz0]; elseif (da(i)*dc(i)) <= 0 tt = abs(da(i))/(abs(da(i))+(abs(dc(i)))); xyz0 = X(TR(i,1),:)*(1-tt)+X(TR(i,3),:)*tt; xyzp = [xyzp;xyz0]; end

%Verifica dei vertici 2 e 3

if sum((db(i)= =0)+(dc(i)= =0)= =2) xyz0 = [X(TR(i,2),:);X(TR(i,3),:)]; xyzp = [xyzp;xyz0]; elseif (db(i)*dc(i)) <= 0 tt = abs(db(i))/(abs(db(i))+(abs(dc(i)))); xyz0 = X(TR(i,2),:)*(1-tt)+X(TR(i,3),:)*tt; xyzp = [xyzp;xyz0]; end end

(8)

%Ciclo di controllo dei dati raccolti in xyzp dimxyzp = size(xyzp,1); for i=[1:dimxyzp] for j=[1:3] xyzp_temp = round(xyzp(i,j)*10^6)/10^6; xyzp(i,j) = xyzp_temp; end end

%Esclusione dei termini che si ripetono in xyzp xyz = unique(xyzp,'rows');

dimxyz = size(xyz,1);

%Quindi si introducono una serie di matrici utilizzate da appoggio per il processo di %ordinamento xyz11 = []; xyz21 = []; xyz22 = []; xyz12 = []; xyz01 = []; xyz10= []; xyz20 = []; xyz02 = [];

%Si entra in un ciclo che scorre le righe della matrice dei punti di intersezione %mandandole in una serie di sottomatrici in funzione del quadrante in cui questi si %trovano

for i = [1:dimxyz]

%Si utilizza la tg dell'angolo che ne definisce la posizione come criterio di %ordinamento dei punti d'intersezione

%Punti sull'asse Y positivo if (xyz(i,3)= =0 & xyz(i,2)>0) xyz01 = [xyz01; xyz(i,:)];

(9)

%Primo quadrante

elseif (xyz(i,3)>0 & xyz(i,2)>0) xyz11 = [xyz11; xyz(i,:)];

%Punti sull'asse Z positivo elseif (xyz(i,3)>0 & xyz(i,2)= =0) xyz10 = [xyz10; xyz(i,:)];

%Secondo quadrante

elseif (xyz(i,3)>0 & xyz(i,2)<0) xyz21 = [xyz21; xyz(i,:)];

%Punti sull'asse Y negativo elseif (xyz(i,3)= =0 & xyz(i,2)<0) xyz20 = [xyz20; xyz(i,:)];

%Terzo quadrante

elseif (xyz(i,3)<0 & xyz(i,2)<0) xyz22 = [xyz22; xyz(i,:)];

%Punti sull'asse Z negativo elseif (xyz(i,3)<0 & xyz(i,2)= =0) xyz02 = [xyz02; xyz(i,:)];

%Quarto quadrante

elseif (xyz(i,3)<0 & xyz(i,2)>0) xyz12 = [xyz12; xyz(i,:)]; end

end

%Si ordinano i termini di ogni sottomatrice utilizzando due cicli for. Il ciclo interno %calcola il vettore delle tangenti, quello esterno ne estrae l'indice della riga cui %corrisponde il minimo per definire il punto relativo.

%Primo quadrante xyz11ord = [];

(10)

for i = [1:size(xyz11,1)] tg=[]; for j = [1:size(xyz11,1)] tg1 = xyz11(j,3)/xyz11(j,2); tg = [tg; tg1]; end [minimo,indmin] = min(tg); xyz11ord = [xyz11ord;xyz11(indmin,:)]; xyz11(indmin,:)=[]; end %Secondo quadrante xyz21ord = []; for i = [1:size(xyz21,1)] tg=[]; for j = [1:size(xyz21,1)] tg1 = xyz21(j,3)/xyz21(j,2); tg = [tg; tg1]; end [minimo,indmin] = min(tg); xyz21ord = [xyz21ord;xyz21(indmin,:)]; xyz21(indmin,:)=[]; end %Terzo quadrante xyz22ord = []; for i = [1:size(xyz22,1)] tg=[]; for j = [1:size(xyz22,1)] tg1 = xyz22(j,3)/xyz22(j,2); tg = [tg; tg1]; end [minimo,indmin] = min(tg); xyz22ord = [xyz22ord;xyz22(indmin,:)];

(11)

xyz22(indmin,:)=[]; end %Quarto quadrante xyz12ord = []; for i = [1:size(xyz12,1)] tg=[]; for j = [1:size(xyz12,1)] tg1 = xyz12(j,3)/xyz12(j,2); tg = [tg; tg1]; end [minimo,indmin] = min(tg); xyz12ord = [xyz12ord;xyz12(indmin,:)]; xyz12(indmin,:)=[]; end

%Alla fine si definisce la matrice dei punti ordinati in senso antiorario a partire %dall'asse Y positivo

xyzord= [xyz01;xyz11ord;xyz10;xyz21ord;xyz20;xyz22ord;xyz02;xyz12ord]; dimxyzord = size(xyzord,1);

%Si definisce quindi il vettore lun_app, utilizzato per il calcolo della lunghezza della % curva di intersezione tra substrato e piano di taglio

lun_app = [];

%Detto calcolo si fa sommando le distanze tra i vari punti adiacenti in un ciclo for %quindi aggiungendo a ciò la distanza tra il primo e l'ultimo termine della serie. %La variabile di appoggio v_app serve a discriminare tra le condizioni di presenza o %assenza di contatto sulla zamp

v_app = 0; %v_app nulla = assenza di contatto for i = [1:dimxyzord]

if xyzord(i,:)= =X(N+nzampa,:) v_app = v_app+1;

(12)

end

ang = zeros(3,3);

if v_app>0 %v_app>0, presenza di contatto contatto = [contatto; nzampa];

for i = [1:dimxyzord-1] lun = sqrt((xyzord(i+1,1)-xyzord(i,1))^2+... (xyzord(i+1,2)-xyzord(i,2))^2+... (xyzord(i+1,3)-xyzord(i,3))^2); lun_app = [lun_app;lun]; end lun_app = [lun_app;sqrt((xyzord(1,1)-xyzord(dimxyzord,1))^2+... (xyzord(1,2)-xyzord(dimxyzord,2))^2+... (xyzord(1,3)-xyzord(dimxyzord,3))^2)]; lun = sum(lun_app);

%Calcolo dell'angolo di proiezione della forza normale sulla sezione trasversale if xyzord(1,:) = = X(N+nzampa,:)

ang = [xyzord(dimxyzord,:); xyzord(1,:); xyzord(2,:)]; elseif xyzord(dimxyzord,:) == X(N+nzampa,:)

ang = [xyzord(dimxyzord-1,:); xyzord(dimxyzord,:); xyzord(1,:)]; else for j = [2:dimxyzord-1]

if xyzord(j,:) = = X(N+nzampa,:)

ang = [xyzord(j-1,:); xyzord(j,:); xyzord(j+1,:)]; end end end else lun = 0; contatto = [contatto; 0]; end

%Si raccolgono i risultati in tre matrici già definite sopra nint = [nint; dimxyzord];

(13)

lsezione = [lsezione; lun];

%CALCOLO DELLE FORZE

%Determinazione delle dimensioni dei triangoli e applicazione del %teorema di Carnot

if ang = = zeros(3,3) alfa = pi;

ALFA = [ALFA; (alfa*360)/(2*pi)]; else lato1 = sqrt((ang(1,1)-ang(3,1))^2+... (ang(1,2)-ang(3,2))^2+... (ang(1,3)-ang(3,3))^2); lato2 = sqrt((ang(1,1)-ang(2,1))^2+... (ang(1,2)-ang(2,2))^2+... (ang(1,3)-ang(2,3))^2); lato3 = sqrt((ang(2,1)-ang(3,1))^2+... (ang(2,2)-ang(3,2))^2+... (ang(2,3)-ang(3,3))^2); alfa = acos(-(lato1^2-lato2^2-lato3^2)/(2*lato2*lato3)); ALFA = [ALFA; (alfa*180)/pi];

end

%ANG è la matrice dei vertici dei triangoli ANG = [ANG; ang];

%CALCOLO DELLE FORZE NORMALI SULLE ZAMPE

%CALCOLO DEI MODULI DELLE FORZE NORMALI if lun = = 0 %Se non c'è contatto

def = 0;

epsilon = [epsilon; def]; SIGMA = [SIGMA; 0]; FORZA = [FORZA; 0]; else %Se c'è contatto

(14)

def = (lun-pi*2*Ri)/(pi*2*Ri); epsilon = [epsilon; def]; sigma = EL_T*def^2; SIGMA = [SIGMA; sigma];

FORZA = [FORZA; 2*l_eq*sigma*cos(alfa/2)]; end

%%%%%%%%%%%%%%

%CALCOLO DELLA DIREZIONE DI AZIONE DELLE FORZE NORMALI

%Si entra in un ciclo per la selezione dei triangoli aventi un vertice coincidente con la %posizione della zampa considerata

if v_app>0

%DETERMINAZIONE DELLE GRANDEZZE NECESSARIE AL CALCOLO

%Introduzione delle matrici di raccolta dei dati.

%TRI_zampa è la matrice nelle cui righe stanno i numeri di riga di X che % individuano i punti che stanno ai vertici dei triangoli convergenti nella zampa % considerata.

TRI_zampa = [];

%Selezione dei triangoli convergenti nella zampa for i = [1:dimTR]

for j = [1:3]

if TR(i,j)= =N+nzampa

TRI_zampa = [TRI_zampa; TR(i,1), TR(i,2), TR(i,3)]; end

end end

(15)

TRI = [];

%Definizione della matrice TRI for i = [1:size(TRI_zampa,1)] if TRI_zampa(i,1) == N+nzampa

TRI(i,:) = [TRI_zampa(i,2), TRI_zampa(i,3)]; elseif TRI_zampa(i,2) = = N+nzampa

TRI(i,:) = [TRI_zampa(i,1), TRI_zampa(i,3)]; else

TRI(i,:) = [TRI_zampa(i,1), TRI_zampa(i,2)]; end

end

%%%%%%%%%%%%%%

%CALCOLO DEO VERSORI DA SOMMARE

%Introduzione delle matrici dei versori

%VERS è la matrice dei versori dei lati dei triangoli VERS = [];

%VERS_MED è la matrice dei versori mediasti VERS_MED = [];

%Ciclo di calcolo dei versori dei lati dei triangoli for i = [1: size(TRI,1)] for j = [1:2] vers = [(X(TRI(i,j),1)-X(N+nzampa,1))/sqrt((X(TRI(i,j),1)-X(N+nzampa,1))^2+... (X(TRI(i,j),2)-X(N+nzampa,2))^2+(X(TRI(i,j),3)-X(N+nzampa,3))^2),... (X(TRI(i,j),2)-X(N+nzampa,2))/sqrt((X(TRI(i,j),1)-X(N+nzampa,1))^2+... (X(TRI(i,j),2)-X(N+nzampa,2))^2+(-X(TRI(i,j),3)-X(N+nzampa,3))^2),...

(16)

(X(TRI(i,j),3)-X(N+nzampa,3))/sqrt((X(TRI(i,j),1)-X(N+nzampa,1))^2+...

(X(TRI(i,j),2)-X(N+nzampa,2))^2+(-X(TRI(i,j),3)-X(N+nzampa,3))^2)]; VERS = [VERS; vers];

end end

%%%%%%%%%%%%%

%CALCOLO DEI PESI ASSEGNATI AI VERSORI E SOMMA

%Definizione dei vettori e dei coefficienti per il calcolo dei vettori mediati altezza = []; %Vettore medio

mod_alt = 0; %Modulo del vettore medio vers_alt = []; %Versore del vettore medio prod_vettore = []; %Prodotto vettore

modulo = 0; %Modulo del prodotto vettore vers_med = []; %Singolo versore medisto

VERS_MED = []; %Matrice di raccolta dei versori mediati risult = []; %Risultante

%Calcolo dei termini per mediare i versori.

%Si definisce il vettore altezza del singolo triangolo convergente nella zampa come %somma tra i versori dei suoi lati diviso due

altezza = sum(VERS,1)/2;

%Quindi se ne prende modulo (che coincide con il coseno dell'angolo tra un lato e %l'altezza stessa) mod_alt = sqrt(altezza(1,1)^2+altezza(1,2)^2+altezza(1,3)^2); %E se ne calcola il versore vers_alt = [altezza(1,1)/mod_alt,altezza(1,2)/mod_alt,... altezza(1,3)/mod_alt];

(17)

% angolo che ne è il modulo

prod_vettore = cross(VERS(1,:), vers_alt);

modulo = sqrt(prod_vettore(1,1)^2+prod_vettore(1,2)^2+prod_vettore(1,3)^2);

%Quindi si media il versore dell'altezza vers_med = vers_alt*modulo*mod_alt;

%Infine si raccolgono i dati mediati VERS_MED = [VERS_MED; vers_med];

%Calcolo della risultante e raccolta dei risultati risult = [sum(VERS_MED,1)];

vers_risult = [risult(1,1)/sqrt(risult(1,1)^2+risult(1,2)^2+risult(1,3)^2),... risult(1,2)/sqrt(risult(1,1)^2+risult(1,2)^2+risult(1,3)^2),...

risult(1,3)/sqrt(risult(1,1)^2+risult(1,2)^2+risult(1,3)^2)]; risultante = [risultante; vers_risult];

else risultante = [risultante; 0,0,0]; end end %risultante %%%%%%%%%%%%%%

%INTRODUZIONE DEI COEFFICIENTI RIDUTTIVI PER EFFETTO DELL'INTERAZIONE

%Introduzione dei vettori e delle matrici necessarie all'analisi serie = [];

V_app = []; V_appord = []; V_app_ind = [];

(18)

%Selezione delle zampe effettivamente in contatto col substrato for i = [1:6]

if contatto(i,1) ~= 0

V_app = [V_app; V(contatto(i,1),:)]; V_app_ind = [V_app_ind; i];

end end

%Ordinamento delle zampe in funzione della loro posizione assiale for i = [1:6]

[minimo, indmin] = min(V_app(:,1)); V_appord = [V_appord; V_app(indmin,:)]; V_app(indmin,:)=[]; end for i = [1:size(V_appord,1)] for j = [1:6] if V(j,:) == V_appord(i,:) serie = [serie; j]; end end end

%Quindi si calcolano i coefficienti correttivi coeff_rid = ones(6,1); V_nuo = V_appord; for i = [1:size(V_appord,1)] DIST = []; V_nuo(i,:) = []; for j = [1:size(V_appord,1)-1] dist = abs(V_appord(i,1)-V_nuo(j,1)); DIST = [DIST; dist];

end

V_nuo = V_appord; nc = 0;

(19)

for k = [1:size(DIST,1)] if DIST(k,1) = = 0 nc = nc+1; end end

%Introduzione dei vettori e dei coefficienti V_appord_prec = []; V_appord_post = []; DIST_prec = []; DIST_post = []; distmin = 0; distmin_prec = 0; distmin_post = 0; if nc ~= 0 coeff_rid(serie(i,1)) = coeff_rid(serie(i,1))/(nc+1); end DIST1 = []; nc1 = 0; for i = [1:size(DIST,1)] if DIST(i,1) ~= 0 DIST1 = [DIST1;DIST]; nc1 = nc1+1; end end if nc1 ~= 0 if i == 1 distmin = min(DIST1); if distmin <= 0 lc coeff_rid(serie(i,1)) = coeff_rid(serie(i,1))*... (-916.155*distmin^2+49.44*distmin+0.5); end

elseif i > 1 && i < size(V_appord,1) nc_prec = 0;

(20)

nc_post = 0; for k = [1:i-1]

DIST_prec = [DIST_prec; DIST(k,1)]; if DIST(k,1) ~= 0

nc_prec = nc_prec+1; end

end

for k = [i:size(V_appord,1)-1]

DIST_post = [DIST_post; DIST(k,1)]; if DIST(k,1) ~= 0 nc_post = nc_post+1; end end if nc_prec ~= 0 DIST1_prec = []; for k = [i:size(DIST_prec,1)] if DIST_prec(k,1) == 0

DIST1_prec = [DIST1_prec; DIST_prec(k,1)]; end end distmin_prec = min(DIST1_prec); end if nc_post ~= 0 DIST1_post = []; for k = [i:size(DIST_post,1)] if DIST_post(k,1) = = 0

DIST1_post = [DIST1_post; DIST_post(k,1)]; end

end

distmin_post = min(DIST1_post); end

if distmin_prec <= lc & distmin_post <= lc coeff_rid(serie(1,1)) = coeff_rid(serie(1,1))*...

(21)

(-916.155*distmin_post^2+49.44*distmin_post+0.5); elseif distmin_prec <= lc & distmin_post > lc

coeff_rid(serie(1,1)) = coeff_rid(serie(1,1))*...

(-916.155*distmin_prec^2+49.44*distmin_prec+0.5); elseif distmin_prec > lc & distmin_post<= lc

coeff_rid(serie(1,1)) = coeff_rid(serie(1,1))*... (-916.155*distmin_post^2+49.44*distmin_post+0.5); end else distmin = min(DIST); if distmin <= lc coeff_rid(serie(1,1)) = coeff_rid(serie(1,1))*... (-916.155*distmin^2+49.44*distmin+0.5); end end end end %%%%%%%%%%%%%

%SCRITTURA IN COMPONENTI DELLA FORZA NORMALE FORZACOMP = []; for i = [1:6] for j = [1:3] FORZACOMP(i,j) = FORZA(i,1)*risultante(i,j)*coeff_rid(i,1); end end %%%%%%%%%%%%%

%DETERMINAZIONE DELLE FORZE DI ATTRITO SULLE ZAMPE %DETERMINAZIONE DEI MODULI DELLE FORZE DI ATTRITO

(22)

%Si calcola il coefficiente di attrito come funzione della deformazione epsilon e quindi %si moltiplica per la forza normale

mod_fatt = []; mu = []; for i = [1:6] MU = 0.4208*epsilon(i)^2-0.2413*epsilon(i)+0.0489; mu = [mu; MU]; fatt = FORZA(i)*MU; mod_fatt = [mod_fatt; fatt]; end

%%%%%%%%%%%%%

%CALCOLO DELLA DIREZIONE DELLA FORZA DI ATTRITO %Definizione delle matrici e dei vettori necessari

FATT = []; vers_att = [];

%Si utilizza un doppio prodotto vettoriale for i = [1:6]

if risultante(i,:) ~= [0, 0, 0] %Indica la presenza di contatto

%DEFINIZIONE DELLA POSIZIONE DELLE ZAMPE ALLO STEP PRECEDENTE

alfa_1_prec=-60*pi/180*cos((tempo-2)/M*6*pi)-10*pi/180;

alfa_2_prec=70*pi/180*cos((tempo-2)/M*6*pi+45*pi/180)+50*pi/180;

%Vertice della prima zampa anteriore

V_f_1_prec=[IASS/2-L_lz*sin(alfa_1_prec)-L_lz*sin(alfa_1_prec+alfa_2_prec),... -D_cap/2-L_lz*cos(alfa_1_prec)-L_lz*cos(alfa_1_prec+alfa_2_prec), 0];

(23)

V_f_2_prec=V_f_1_prec*[1 0 0;0 2/3*pi) sin(-2/3*pi);0 -sin(-2/3*pi) cos(-2/3*pi)];

%Vertice della terza zampa anteriore (rotazione di 120° attorno a x) V_f_3_prec=V_f_1_prec*[1 0 0;0 cos(2/3*pi) sin(2/3*pi);0 -sin(2/3*pi) cos(2/3*pi)];

%Matrice di raccolta dei vertici anteriori

V_f_prec=[V_f_1_prec;V_f_2_prec;V_f_3_prec];

%Legge di moto dei vertici con gdl sui giunti delle zampe posteriori alfa_3_prec=-60*pi/180*cos((tempo-2)/M*6*pi+pi)-10*pi/180;

alfa_4_prec=70*pi/180*cos((tempo-2)/M*6*pi+45*pi/180+pi)+50*pi/180;

%Vertice della prima zampa posteriore

V_r_1_prec=[IASS/2-L_lz*sin(alfa_3_prec)-L_lz*sin(alfa_3_prec+alfa_4_prec),... -D_cap/2-L_lz*cos(alfa_3_prec)-L_lz*cos(alfa_3_prec+alfa_4_prec), 0];

%Vertice della seconda zampa posteriore (rotazione di -120° attorno a x) V_r_2_prec=V_r_1_prec*[1 0 0;0 2/3*pi) sin(-2/3*pi);0 -sin(-2/3*pi) cos(-2/3*pi)];

%Vertice della terza zampa posteriore (rotazione di 120° attorno a x) V_r_3_prec=V_r_1_prec*[1 0 0;0 cos(2/3*pi) sin(2/3*pi);0 -sin(2/3*pi) cos(2/3*pi)];

%Matrice di raccolta dei vertici posteriori

V_r_prec=[V_r_1_prec; V_r_2_prec; V_r_3_prec]; V_r0_prec=V_r_prec;

V_r0_prec(:,1)=V_r_prec(:,1)-IASS; % trasla i vertici anteriori indietro su x . %Ruota di - 60° i vertici traslati

V_r_prec=V_r0_prec*[1 0 0;0 1/3*pi) sin(-1/3*pi);0 -sin(-1/3*pi) cos(-1/3*pi)];

(24)

%%%%%%%%%%

%DEFINIZIONE DELLA MATRICE DI RACCOLTA DELLE POSIZIONI ALLO % STEP PRECEDENTE %Introduzione di Vprec Vprec = []; %Definizione di Vprec

Vprec = [V_f_prec; V_r_prec];

%%%%%%%%%%%%%%

%Il calcolo è fatto proiettando il vettore di spostamento della zampa su un piano %ortogonale alla risultante delle forze normali applicate alla stessa articolazione. La %proiezione si ottiene con un doppio prodotto vettore

%Vettore di spostamento spostamento = Vprec(i,:)-V(i,:); %Calcolo direzione primo = cross(risultante(i,:),spostamento); secondo = cross(primo,risultante(i,:)); mod_secondo = sqrt(secondo(1,1)^2+secondo(1,2)^2+secondo(1,3)^2); if mod_secondo < 0.0001 vers_att = [vers_att; 0,0,0]; FATT = [FATT; 0, 0, 0]; else ver_secondo = [secondo(1,1)/sqrt(secondo(1,1)^2+secondo(1,2)^2+… secondo(1,3)^2), secondo(1,2)/sqrt(secondo(1,1)^2+… secondo(1,2)^2+secondo(1,3)^2), secondo(1,3)/sqrt… (secondo(1,1)^2+secondo(1,2)^2+secondo(1,3)^2)];

%vers_att è il versore in cui riga per riga si raccolgono le %direzioni appena calcolate

(25)

vers_att = [vers_att; ver_secondo];

FATT = [FATT; mod_fatt(i,1)*vers_att(i,:)]; end

else %Cioè se non c'è contatto vers_att = [vers_att; 0,0,0]; FATT = [FATT; 0,0,0]; end

end

%%%%%%%%%

%CALCOLO DELLE RISULTANTI IN COMPONENTI %CALCOLO RISULTANTI SULLE SINGOLE ZAMPE %Forza risultante sulle zampe

FORZARIS = FORZACOMP + FATT; FORZACOMP

%Determinazione delle azioni a momento sulla capsula braccio = [];

MOMENTO = []; for i = [1:6]

braccio = [braccio; V(i,1), V(i,2), V(i,3)]; momento = cross(FORZARIS(i,:), braccio(i,:)); MOMENTO = [MOMENTO; momento]; end

%%%%%%%%%%

%CALCOLO RISULTANTI COMPLESSIVE %Calcolo delle risultanti

(26)

mom = sum(MOMENTO,1); forza_ris = [forza_ris; forz];

momento_ris = [momento_ris; mom]; end

Riferimenti

Documenti correlati