• 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

In questa prova non sono presenti gli usuali quesiti teorici in quanto la parte teorica sarà oggetto di una prova orale integrativa che si terrà a Vicenza all’interno

[r]

Trovare la tensione di ognuna di esse Forze: di gravit` a, tensione delle funi Nel punto in cui le funi si incontrano la risultante deve essere nulla. Il momento rispetto a questo

ESERCIZI su FUNZIONI DERIVABILI, parte 3 Provare di ciascuna delle seguenti a↵ermazioni se `e vera o falsa.. Risolvere gli esercizi 11-25 del libro

I neuroni di II ordine (il cui soma è nel midollo allungato e forma i nuclei della colonna dorsale) hanno campi recettivi diversi da quelli dei n. Posseggono un’attività

Anno di Corso Laurea in Ingegneria.

Dai risultati stabiliti sulle funzini continue segue che nell’insieme delle matrici 2 × 2, ciascuno degli insiemi delle matrici definite positive, definite negative, indefinite e’

Leggi attentamente i problemi ed indica con una crocetta l'operazione corretta.. Leggi le domande ed indica con una crocetta la