DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
2. Dinamica del corpo rigido
In questo capitolo viene presentata la dinamica del singolo corpo rigido partendo dai concetti di
quantità di moto e momento angolare. Il carattere applicativo di questo libro impone una trattazione
che dà per assodati alcuni concetti di base della meccanica.
Indicando con p la quantità di moto e con hO il momento angolare rispetto del sistema considerato
rispetto al polo O, v C la velocità del baricentro del corpo di massa m si ha:
p = mv C
(2.1
dp = f
dt
(2.2
dhO = τO
dt
(2.3
essendo f e τ O , rispettivamente, la risultante delle forze e delle coppie applicate al sistema, le
coppie si intendono valutate rispetto al polo O. Se il sistema è a massa costante la (2.2) assume la
seguente forma:
d (mv C )
dt
dv C
=m
= f
dt
(2.4
Per quanto riguarda la (2.3) risulta essere per definizione di quantità di moto e di momento angolare
(Fig. 2.1):
vi
ω B ,A
ZB
B
r
O
ZA
XB
XA
vO
YA
Fig. 2.1 Schematizzazione di un corpo rigido roto-traslante.
1
YB
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
hi
h = ∑ ri × mi ( v O + ω B , A × ri ) = ∑ ri × ( ω B , A × ri ) mi − v O × ∑ ri mi
i
i
i
(2.5
vi
Qualora il punto O sia fisso v O = 0 o coincida con il baricentro ( ∑ ri mi = 0 ) la (2.5) diventa:
i
h = ∑ ri × ( ω B , A × ri ) mi
(2.6
i
o, per un sistema continuo:
h = ∫ r × ( ω B , A × r ) dm
(2.7
La (2.7) sviluppata assume la seguente forma:
h = Iω
(2.8
dove I è il tensore d'inerzia simmetrico:
I xy
I yz
I xx




2
2
− ∫ xy dm
− ∫ xz dm 
∫ y + z dm


I xy
I yy
I yz

 2
2
I =  − ∫ xy dm
∫ z + x dm − ∫ yz dm 

I yz
I yz
 Izz



2
2
− ∫ yz dm
+
x
y
dm
 − ∫ xz dm

∫




(
)
(
)
(
(2.9
)
Per effettuare la derivazione (2.3) è conveniente ricordare la (1.24), per comodità a presso riportata:
d Au A B A = B R u + ω B , A × BAR B u
dt
(1.2.4 bis
che esprime la derivata di un generico vettore u quando esso è noto nel sdr mobile B. Ora,
considerando il momento angolare rispetto al baricentro ( O ≡ C ), espresso nel sdr B solidale al
corpo rigido dovrà essere:
d Ah A B A = B R h + ω B , A × BAR Bh = A τ C
dt
(2.10
ma osservando che:
A
ω B , A × BAR Bh = BAR B ω B , A × Bh ;
(
)
A
τ C = BAR B τ C
(2.11
2
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
si ottiene:
A
B
R B h + BAR
(
B
ω B , A × B h = BAR B τ C
)
(2.12
da cui, premoltiplicando per BA R −1 resta:
B
h + B ω B , A × Bh = B τ C
(2.13
che costituisce la derivata del momento angolare espressa nel sdr solidale al corpo rigido. Dato che
B B B
h = I ω B , A si ottiene:
B
I BωC B , A + B ω B , A × BI Bω B , A = B τ C
(2.14
nota come equazione di Eulero. Come si osserva dalla (2.14) si tratta di un'equazione con una
struttura piuttosto semplice non contenendo matrici di rotazione. La soluzione porge l'andamento
della velocità angolare, si deve pertanto associare a questa l'equazione cinematica; un approccio
molto conveniente come visto nel primo capitolo è quello che sfrutta la formulazione con i
parametri di Eulero (1.4.3), questo verrà ampiamente applicato nel punto 2.1.
Per quanto concerne la derivata della quantità di moto (2.4), dato che l'equazione di Eulero è
espressa nel sdr solidale al corpo rigido, è conveniente scriverla in tale sdr. Con lo stesso
procedimento che ha permesso di ottenere la (2.13) si ottiene:
B
p> + B ω B , A × B p= Bf
Dato che
B
(2.15
p =m B v C si ottiene:
m B v>C +m B ω B , A × B vC = Bf
(2.16
Evidentemente attraverso quest'ultima si determina la velocità espressa nel sdr solidale al corpo
rigido, lo spazio nel sdr fisso A verrà determinato attraverso un'integrazione della velocità trovata
attraverso la (2.16) premoltiplicata per BA R , come verrà mostrato nel punto (2.1).
L'energia cinetica di un corpo rigido in moto di roto-traslazione risulta data dalla somma dei
contributi dovuti alle singole particelle materiali costituenti il corpo. Indicando al solito con vC la
velocità del centro di massa del sistema, facendo riferimento alla Fig. 2.1, la velocità di un punto
generico risulta data dalla formula fondamentale dei moti rigidi:
v = vC + ω B , A × r
(2.17
L'energia cinetica diventa pertanto:
T=
1
2∫
1 2 1 1 v = ∫ v ⋅ vdm = ∫ v ⋅ vdm =
∫
2
2
2
2
v C + ( ω B , A × r ) ⋅ ( ω B , A × r ) dm + v C ⋅ ω B , A × ∫ rdm
[
]
3
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Dato che l'origine del sdr solidale al corpo rigido è localizzata nel centro di massa
∫ rdm = 0 ,
quindi l'energia cinetica è data dalla somma dell'energia cinetica di traslazione come se tutta la
massa fosse concentrata nel centro di masse e l'energia cinetica di rotazione rispetto al centro di
massa:
T = TTrasl . + TRot .
Trasl
. Rotazione
1 2 1
= m v C + ∫ ( ω B , A × r ) ⋅ ( ω B , A × r ) dm
2
2
[
]
(2.17
Il secondo integrale sviluppato assume la seguente forma:
TRot . = ω B , A ⋅ hC = ω B , A ⋅ Iω B , A = ω TB , A Iω B , A
(2.18
Dal punto di vista pratico può essere necessario esprimere il tensore d'inerzia in sdr diversi. Si
considera dapprima il caso con sdr solamente ruotati. Sia A il sdr fisso e B quello ruotato, noti
B
I , BAR determinare A I . Dato che lo scalare energia cinetica in diversi sdr non cambia dovrà essere
dalla (2.18):
2TRot . = A ω TB , A AI A ω B , A = B ω TB , A BI B ω B , A
(2.19
Esprimendo il secondo termine in funzione delle grandezze omologhe espresse nel sdr A si ottiene:
B
ω TB , A BI B ω B , A =
(
B
A
R A ω B ,A
)
T B
I
(
B
A
)
R A ω B , A = A ω TB , A
[
B
A
R T BI ABR
]
A
ω B ,A
(2.20
in quanto il trasposto del prodotto è uguale al prodotto dei trasposti in ordine inverso. Dalla (2.20)
discende immediatamente che:
A
I = ABR T BI ABR = BAR BI BAR T
(2.21
Esempio 2.1: dato un disco di acciaio ( ρ = 7850 kg m3 ) avente raggio R=0.2 m e spessore H=0.005
m, determinare il tensore d'inerzia per un sdr ottenuto da quello principale secondo una rotazione di
30° attorno ad uno dei due assi principali ortogonale all'asse del disco.
Il calcolo del tensore per la terna principale d'inerzia viene effettuato con la funzione in_cil
secondo [9].
function [m,A,B,C]=in_cil(d,h,dens)
% Calcolo delle caratteristiche d'inerzia di un cilindro pieno
% d : diametro del cilindro
% h : altezza del cilindro
% dens : densità
% m : massa
% A : momento d'inerzia principale rispetto all'asse x
% B : momento d'inerzia principale rispetto all'asse y (B=A)
% C : momento d'inerzia principale rispetto all'asse z (asse del cilindro)
%
% Gli assi x e y sono ortogonali all'asse del cilindro.
m=pi*d^2/4*h*dens;
4
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
A=m/4*(d^2/4+h^2/3);
B=A;
C=m*d^2/8;
Si ottiene:
» [m,A,B,C]=in_cil(0.2,0.005,7850)
m =
1.2331
A =
0.0031
B =
0.0031
C =
0.0062
Pertanto:
» IB=[[A 0 0];[0 B 0];[0 0 C]]
IB =
0.0031
0
0
La matrice
A
B
0
0.0031
0
0
0
0.0062
R si ottiene mediante la funzione rot_tr per una rotazione attorno all'asse y:
» RBA=rot_tr(0,30,0)
RBA =
0.8660
0
-0.5000
0
1.0000
0
0.5000
0
0.8660
La trasformazione secondo la (2.21) viene effettuata con la funzione inrot:
function IA=inrot(RBA,IB)
% Funzione per la determinazione del tensore d'inerzia espresso nel sdr A
% IA quanto sia nota la matrice di rotazione B->A RBA e il tensore IB
% espresso nel sdr B.
IA=RBA*IB*RBA';
Si ottiene:
» IA=inrot(RBA,IB)
IA =
0.0039
0
0.0013
0
0.0031
0
0.0013
0
0.0054
Come si osserva la rotazione attorno all'asse y fa in modo che il tensore rimanga inalterato secondo
tale asse.//
5
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Nel caso in cui i sdr siano solamente traslati si utilizza il teorema degli assi traslati [10]. Con
riferimento alla Fig. 2.2
ZA
OA
A
XA
YA
YB
rOB
OB
YB
XB
Fig. 2.2 Traslazione degli assi per il calcolo del tensore d'inerzia.
*
noti B I , ArOB risulta:
A
I = BI +
[
A T A
OB
OB
r
r
[1]− ArO
B
A T
OB
r
]m
(2.22
essendo [1] la matrice indentità ed m la massa.
Esempio 2.2: dato un disco di acciaio ( ρ = 7850 kg m3 ) avente raggio R=0.15 m e spessore
H=0.007 m, determinare il tensore d'inerzia per un sdr ottenuto da quello principale secondo una
traslazione di 0.3 m lungo l'asse z. Il cilindro giace inizialmente con il proprio asse secondo l'asse z
del sdr A.
Anche ora, come nell'Esempio 2,1 il calcolo del tensore per la terna principale d'inerzia viene
effettuato con la funzione in_cil. Si ottiene:
» [m,A,B,C]=in_cil(0.15,0.007,7850)
m =
0.9710
A =
0.0014
B =
0.0014
C =
0.0027
Pertanto:
» IB=[[A 0 0];[0 B 0];[0 0 C]]
6
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
IB =
0.0014
0
0
0
0.0014
0
0
0
0.0027
T
Dai dati del problema: A rOB = (0 0 0.3)
La trasformazione secondo la (2.22) viene effettuata con la funzione intrasl:
function IA=intrasl(rOBA,M, IB)
% Funzione per la determinazione del tensore d'inerzia espresso nel sdr A
% IA quanto sia nota rOBA e la massa M e il tensore IB
% espresso nel sdr B.
IA=IB+(rOBA'*rOBA*eye(3)-rOBA*rOBA')*M;
Si ottiene:
» IA=intrasl([0 0 0.3]',m, IB)
IA =
0.0888
0
0
0
0.0888
0
0
0
0.0027
Si osservi come il valore 0.0888 risulti dal calcolo:
» A+m*0.3^2
ans =
0.0888
ossia al tensore originario si somma la massa per la distanza al quadrato, risultato questo ben noto
per le configurazioni piane.//
La diagonalizzazione del tensore d'inerzia può semplificare la scrittura delle equazioni di Eulero in
quanto vengono a mancare i termini extra diagonali. Noto pertanto il tensore non diagonalizzato nel
sdr B sarà necessario determinare la matrice di rotazione BA R tale che la trasformazione fra il sdr B e
il sdr incognito A secondo la (2.21) dia origine al tensore A I diagonalizzato:
Diagonale
A
I
= BAR
B
A T
,I
BR
Non diagonale
(2.23
Premoltiplicando la (2.23) per BAR T si ottiene:
A
B
R T A I = BI BAR T
(2.24
Ricordando che (1.1.1):
7
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
 Bi AT 
 B T 
A
=
R
B
 j A 
 B k AT 


(1.1.1 bis
la (2.24) assume la seguente forma:
[i
B
jA
A
B
kA
]
I = BI
A
[i
B
jA
A
B
kA
]
(2.25
Dato che AI è diagonale:
A
A 0 0
I = 0 B 0


 0 0 C 
(2.26
la (2.25) può essere scritta nel seguente modo:
[
A Bi A
B jA
C Bk A =
I Bi A
] [[ ]
B
I jA
[ ]
B
I Bk A
[ ] ]
B
(2.27
Questa uguaglianza matriciale implica che le colonne devono essere uguali, ad esempio:
- .
Autoval
I Bi A =
A
[ ]
B
i
,A
Autovett .
B
(2.28
Si tratta di un tipico problema agli autovalori dove l'autovalore rappresenta il momento d'inerzia
principale e il corrispondente autovettore il versore dell'asse relativo. Si tratta pertanto di risolvere il
problema agli autovalori:
[ I ]x = λ x
B
(2.29
L'm-file es1_11 fornisce un esempio di diagonalizzazione tratto da [10] pag. 185. Viene
determinato il tensore principale, la matrice di rotazione BA R e la visualizzazione dei due sdr A e B.
% Esempio1_11: tratto da [10] pag. 185. Viene diagonalizzato il tensore d'inerzia
%
determinando sia il tensore principale che la direzione degli
%
assi principali. A indica il sdr nel quale viene determinato il
%
tensore non diagonalizzato, B quello che riguarda il tensore
%
diagonalizzato.
% tensore non diagonalizzato
I=[[1.17 0.06 0.09];[0.06 0.9 0.180];[0.09 0.180 0.45]]
% Calcolo degli autovaloti e autovettori del tensore non diagonalizzato
[Avet,Aval]=eig(I);
% Costruzione della matrice di rotazione B->A e del tensore principale
RBA=Avet'
Iprinc=Aval
TBA=trasm(RBA,[0 0 0]');
8
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% Plottaggio del sdr A
pltassi(eye(4),'g','A',1,1)
% Plottaggio del sdr B
pltassi(TBA,'b','B',1,1)
view([1 1 1])
axis([-1 1 -1 1 -1 1])
Mediante il comando es1_11 si ottiene:
I =
1.1700
0.0600
0.0900
0.0600
0.9000
0.1800
0.0900
0.1800
0.4500
RBA =
0.9395
-0.3322
0.0836
0.2908
0.9023
0.3181
0.1811
0.2746
-0.9444
Iprinc =
1.2059
0
0
0
0.9327
0
0
0
0.3814
In pieno accordo con [10] pag. 185. La Fig. mostra i sdr A e B:
zA
1
0.5
0
xB
-0.5
yB
xA
yA
-1
-1
-1
zB
-0.5
-0.5
0
0
0.5
0.5
1 1
Fig. 2.3 Uscita grafica di es1_11.
2.1 Scrittura e soluzione numerica delle equazioni del moto per un corpo rigido
Moto rotazionale di un corpo rigido
La scrittura delle equazioni del moto di un corpo rigido discende direttamente dalle (2.14) e (2.16)
per quanto riguarda la velocità angolare e la velocità lineare, entrambe espresse nel sdr solidale al
corpo rigido. Per ottenere lo spazio è necessario convertire la velocità lineare nel sdr fisso e quindi
integrare.
Nel caso di solo moto rotazionale si ha:
B
I Bω B , A + B ω B , A × BI Bω B , A = B τ C
(2.1.1
9
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
q0 
 q 
 1  1  01,3
  = B
q 2  2  ω B , A
q 3 
q0 
T
~
− ω B , A   q1 
~  q 
−Bω
B ,A  2 
q3 
B
(2.1.2
Dal punto di vista dell'integrazione numerica le (2.1.1) e (2.1.2) è conveniente scriverle nella forma
di sistema del primo ordine:
 B ω B , A = B I −1 B τ C − B ω B , A × B I B ω B , A

q 0 
 q 0 
  
B
T
− ω B , A   q1 
  q1  1  01,3
~  q 
 q  = 2  B ω
−Bω
2
B ,A
B ,A  2 



q 3 


q
  3 
(
)
(2.1.3
Si viene così ha creare un sistema di equazioni differenziali il cui vettore di stato è il seguente:
1
x = ω x

2
ωy
3
ωz
4
5
6
q0
q1
q2
7
q 3 

T
(2.1.4
i primi tre elementi rappresentano B ω B , A mentre i rimanenti i parametri di Eulero q . L'integratore
di MATLAB ODE45 permette di integrare sistemi di equazioni differenziali del primo ordine
attraverso la definizione della (2.13), cioè del secondo membro dell'equazione differenziale,
mediante una funzione. Tutto questo viene riassunto attraverso l'implementazione dell'm-file
dy_bq che permette l'integrazione numerica della (2.13) e la visualizzazione del moto del corpo
rigido, ora rappresentato con un disco. Permette, inoltre, di plottare il vettore momento angolare, la
velocità angolare e la velocità ed accelerazione lineare di due punti del corpo rigido.
Dato che ODE45 è un integratore a passo variabile per il quale il passo minimo e quello massimo
sono funzione dell'intervallo di integrazione fissato, se quest'ultimo è troppo elevato è possibile
ottenere delle instabilità. Per questo motivo nella stesura dei programmi dedicati all'integrazione
numerica si è proceduto suddividendo l'intervallo di integrazione in sotto-intervalli per i quali la
condizione finale del precedente diventa iniziale per il successivo; scegliendo i sotto-intervalli in
maniera opportuna è possibile integrare per un intervallo ampio a piacere. In base a questa
suddivisione è possibile memorizzare i risultati alla fine dei sotto-intervalli o per tutti gli istanti
compresi nel sotto-intervallo, così come essi vengono generati da ODE45 (vedi la variabile
comememo).
% dy_bq.m : integrazione di un'equazione differenziale con
%
la funzione ode45 dell'equazione del moto di un corpo rigido
%
nel caso in cui le equazioni cinematiche siano espresse con
%
i parametri di Eulero.
%
%
Il tempo di integrazione viene diviso in sotto-intervalli, per
%
ognuno dei quali la condizione finale diventa iniziale
%
per quello successivo.
%
x0
: vettore delle condizioni iniziali
%
Contiene le velocità angolari e i parametri di Eulero
%
%
x0=[Wx Wy Wz q0 q1 q2 q3]'
10
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
%
%
all'istante iniziale.
%
%
toll : tolleranza di integrazione. Consigliata 1e-4 ma se si aumenta
%
la velcotà di spin del corpo rigido (Nturn) per valori elevati
%
(>10000 g/min) si consiglia di ridurla a 1e-8. Questo rallenta
%
l'esecuzione ma aumenta decisamente l'accuratezza
%
nell'integrazione numerica.
%
comememo : =1 si ottiene la memorizzazione in tutti gli istanti
%
di integrazione come generati da ode45.
%
=0 la memorizzazione nel vettore XS avviene per i soli
%
istanti finali dei sotto-intervalli.
%
sys_d : nome del file con la dinamica del sistema,
%
ossia del file che permette il calcolo del secondo membro
%
dell'equazione differenziale descrivente la dinamica del sistema.
%
La chiamata alla funzione ode45 viene fatta come segue:
%
%
[t,xs]=ode45('sys_d',time(i),time(i+1),x0,tol,0);
%
%
tempo : vettore degli istanti di integrazione.
%
XS
: matrice contenente il risultato dell'integrazione numerica
%
per colonne. Le colonne corrispondolo agli istanti di integrazione
%
memorizzati nel vettore tempo.%
% Dati per graficare il corpo rigido (mostrato come un disco)
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
%
Nturn : giri al minuto del rotore [g/min], la veloctà angolare
%
in [rad/s] risulta pi*Nturn/30
clear all
H=0.025;
R=0.1;
N=25;
Nturn=500;
comememo=1;
% Questa parte serve a definire le condizioni iniziali. Per la definizione
% dei parametri di Eulero iniziale si ricorre dapprima alla definizione della
% matrice di rotazione utilizzando gli angolo di Eulero, quindi da essa si
% determinano i parametri di Eulero.
% Rotazioni (alfa,z), (beta,y), (gamma,x) secondo gli assi solidali.
% con la function rot_tr
% ATTENZIONE ! il seguente tensore d'inerzia deve essere identico a quello
%
utilizzato nella funzione bodyq.m, necessaria per la definizione
%
dell'equazione differenziale del sistema, in quantom non viene
%
passato a tale funzione.
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
% Queste caratteristiche (Ix=0.0031 Iy=0.0031 Iz=0.0062) vengono modificate
% per tenere conto di un'assimetria nella distribuzione di massa.
Ix=0.0031;
Iy=0.0031*3;
Iz=0.0062;
Ixy=Ix*0.1;
Ixz=Ix*0.2;
Iyz=Iz*0.1;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
11
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
W0=[0*pi*Nturn/30 0*pi*Nturn/30 pi*Nturn/30]';
alfa=0; % rotazioni in gradi
beta=0;
gamma=0;
RB00=rot_tr(alfa,beta,gamma); % Matrice di rotazione iniziale
q0=quatr(RB00); % Calcolo dei quaternioni, o parametri di Eulero, iniziali
x0=[W0;q0];
tol=1e-6;
time=[0:0.001:0.3]'; % costruzione dei sotto-intervalli
for i=1:max(size(time))-1; % inizio integrazione
time(i)
[t,xs]=ode45('bodyq',time(i),time(i+1),x0,tol,0);
%
nxs=size(xs);
if i==1,
% istante iniziale
if comememo==0
XS=[xs(max(nxs),:)];
tempo=t(max(nxs));
else
XS=[xs];
tempo=t;
end
end
if i>1,
if comememo==0
% istanti successivi
XS=[XS;xs(max(nxs),:)];
tempo=[tempo;t(max(nxs))];
else
XS=[XS;xs(2:max(nxs),:)];
tempo=[tempo;t(2:max(nxs))];
end
end
x0=xs(max(nxs),:)'; % La condizione iniziale per l'istante i+1 diventa quella
% finale per l'istante i
% A questo punto è possibile inserire un'eventuale funzione per graficare il moto
% oppure plottare (o salvare) le colonne del vettore XS assieme al tempo contenuto
% nel vettore tempo.
%
figure(1)
fkinbq(x0(4:7),H,R,N)
RBA=rquat(x0(4:7)); % Calcolo della matrice di rotazione B-->A mediante i
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA
TBA=trasm(RBA,[0 0 0]');
% Calcolo del momento angolare del corpo rigido, espresso nel sdr B.
Mang=Inerzia*[x0(1) x0(2) x0(3)]';
% Plottaggio del momento angolare (indicato dal nome 'h')
plvect(TBA,Mang,[0 0 0]',--------,'r',4,'h')
% Plottaggio della velocità angolare (indicato dal nome 'W')
12
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
WB=[x0(1) x0(2) x0(3)]';
plvect(TBA,WB,[0 0 0]',-------,'m',4,'W')
% Plottaggio del vettore velocità del punto [0 R R/2]' e del punto
% [0 -R R/2]', indicato dal nome 'V'
VBO=[0 0 0]'; % Velocità dell'origine del sdr solidale al corpo rigido
VrelB=[0 0 0]'; % Velocità relativa del sdr solidale al corpo rigido
pvelocit(TBA,VBO,VrelB,WB,[0 R R/2]',0.1,'b',4,'V')
pvelocit(TBA,VBO,VrelB,WB,[0 -R R/2]',0.1,'b',4,'V')
% Plottaggio del vettore accelerazione del punto [0 R R/2]' e del punto
% [0 -R R/2]', indicato dal nome 'V'. Il calcolo dell'accelerazione angolare
% viene effettutato con la funzione bodyq.m.
yprime=bodyq(0,x0);
AWB=yprime(1:3); % I primi tre elementi di yprime sono l'acc. angolare.
ABO=[0 0 0]'; % Acc. dell'origine del sdr solidale al corpo rigido
ArelB=[0 0 0]'; % Acc. relativa del sdr solidale al corpo rigido
paccel(TBA,ABO,ArelB,VrelB,WB,AWB,[0 R R/2]',0.001,'r',4,'A')
paccel(TBA,ABO,ArelB,VrelB,WB,AWB,[0 -R R/2]',0.001,'r',4,'A')
hold off
pause(0.01) % pausa di 0.01 secondi, serve unicamente per mostrare l'immagine
figure(2)
subplot(221)
plot(tempo,XS(:,4))
xlabel('t [s]')
ylabel('q0 ')
subplot(222)
plot(tempo,XS(:,5))
xlabel('t [s]')
ylabel('q1')
subplot(223)
plot(tempo,XS(:,6))
xlabel('t [s]')
ylabel('q2')
subplot(224)
plot(tempo,XS(:,7))
xlabel('t [s]')
ylabel('q3')
% Con la seguente linea è possibile plottare la somma dei quaternioni, se
% l'integrazione numerica è corretta deve essere pari ad 1.
%plot(tempo,XS(:,4).^2+XS(:,5).^2+XS(:,6).^2+XS(:,7).^2)
if i==1 pause;end % serve per allargare la finestra con il mouse
end
La (2.13) viene determinata attraverso bodyq:
function yprime=bodyq(t,X)
%
% Viene valutato il primo membro dell'equazione differenziale dinamica e cinematica
% del moto di un corpo rigido. Per la parte cinematica si sfruttano i parametri
% di Eulero.
%
% X : vettore di stato. Contiene le velocità angolari e i parametri di Eulero:
%
%
X=[Wx Wy Wz q0 q1 q2 q3]'
%
% t : tempo
W(1,1)=X(1);
13
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
W(2,1)=X(2);
W(3,1)=X(3);
% La seguente definizione dei quaternioni serve a prevenire eventuali errori
% di arrotondamento che possono portare a violare la condizione:
%
%
q0^2+q1^2+q2^2+q3^2=1
%
% Pag. 32 Wittenburg
q(1,1)=X(4)/norm(X(4:7));
q(2,1)=X(5)/norm(X(4:7));
q(3,1)=X(6)/norm(X(4:7));
q(4,1)=X(7)/norm(X(4:7));
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
% Queste caratteristiche (Ix=0.0031 Iy=0.0031 Iz=0.0062) vengono modificate
% per tenere conto di un'assimetria nella distribuzione di massa.
Ix=0.0031;
Iy=0.0031*3;
Iz=0.0062;
Ixy=Ix*0.1;
Ixz=Ix*0.2;
Iyz=Iz*0.1;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
yprime(1:3,1)=-inv(Inerzia)*cross(W,Inerzia*W);
yprime(4:7,1)=qdot(W,q);
Come si può osservare in bodyq i parametri di eulero sono valutati come segue [6]:
q∗ =
q
3
∑q
2
i
i =0
per evitare che il vincolo (1.1.24) q02 + q12 + q22 + q32 = 1 venga violato per le approssimazioni dovute
all'integrazione numerica
La seconda delle (2.13) è ottenuta con la funzione qdot:
function qd=qdot(W,q)
% Calcolo della derivata dei parametri di Eulero noti la velocità
% angolare W espressa nel sdr solidale al corpo rigido ed i parametri
% di Eulero istantanei.
qd=0.5*[[0 -W'];[W,-tilde(W)]]*q;
Come si vede in questa funzione si trova a sua volta la funzione tilde la quale trasforma un vettore
nella matrice "tilde" di tale vettore (vedi la (1.1.27)).
Il moto del copo rigido, rappresentato come un disco, viene efettuato attraverso la funzione fkinbq:
function a=fkinbq(q,H,R,N)
% fkintop.m : Funzione per la visualizzazione 3D di un corpo rigido
%
mediante i parametri di Eulero.
14
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% Dati per graficare il corpo rigido, mostrato come un cilindro
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
% Questo programma permette di impostare gli angoli e vedere il risultato a video.
RBA=rquat(q); % Calcolo della matrice di rotazione B-->A mediante i
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA
TBA=trasm(RBA,[0 0 0]');
pltassi(eye(4),'g','0',0,0.3)
hold on
view([1 1 0.2])
axis([-1 1 -1 1 -1 1]*0.4)
pltassi(TBA,'b','b',0,0.3)
plroto(eye(4),TBA,'m',H,R,N)
% La seguente permette di plottare un prisma avente lx=R
% ly=r, lz=R/2 al posto del disco.
% Per chiarimenti sia veda la funzione prismac.
%prismac([R R],[R R],[R R]*0.5,4,4,TBA,[0 0 -R/2*0.5]')
Per quanto riguarda la funzione plroto verrà ripresa nella sezione dedicata alla robotica. In
alternativa al disco è possibile visualizzare un prisma mediante la funzione prismac.
function dummy=prismac(a,b,c,nx,ny,T,G)
% Plottaggio di un prisma a lati paralleli con coperchi
% T : operatore di roto-traslazione
% G : posizione dell'origine del sdr centrato nel centro della base
%
rispetto al baricentro, espressa nel sdr con origine nel baricentro
%
e traslato rispetto a quello alla base.
% a : vettore contenente le lunghezze secondo x
% b : vettore contenente le lunghezze secondo y
% b : vettore contenente le lunghezze secondo z (rappresenta l'altezza)
% nx : numero di segmenti lungo x
% ny : numero di segmenti lungo y
%
%
% Provare, ad esempio : prismac([2 2],[2 2],[3 3],4,4,eye(4),[0 0 -3/2]')
%
oppure : prismac([3 3 3],[3 3 3],[3 3 3],4,4,eye(4),[0 0 -3/2]')
a=[[1e-4 1e-4],a,1e-4];
b=[[1e-4 1e-4],b,1e-4];
c=[[0 0 0],c];
nz=max(size(a));
for k=1:nz
l1y=[-b(k)/2:b(k)/(ny-1):b(k)/2];
l1x=ones(size(l1y))*a(k)/2;
l1z=ones(size(l1x))*c(k);
l2x=[a(k)/2:-a(k)/(nx-1):-a(k)/2];
l2y=ones(size(l2x))*b(k)/2;
l2z=ones(size(l2x))*c(k);
l3y=[b(k)/2:-b(k)/(ny-1):-b(k)/2];
l3x=-ones(size(l3y))*a(k)/2;
15
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
l3z=ones(size(l3x))*c(k);
l4x=[-a(k)/2:a(k)/(nx-1):a(k)/2];
l4y=-ones(size(l4x))*b(k)/2;
l4z=ones(size(l4x))*c(k);
X(k,:)=[[l1x l2x l3x l4x]];
Y(k,:)=[[l1y l2y l3y l4y]];
Z(k,:)=[[l1z l2z l3z l4z]];
end
[X,Y,Z]=trasfg(X,Y,Z,T*trasm(eye(3),G));
% Plottaggio
% [127/255 1 212/255] definisce il colore 'acqua marina'
surface(X,Y,Z,'FaceColor',[127/255 1 212/255],'EdgeColor','k')
Con il comando dy_bq si ottengono due figure nelle quali vi è la rappresentazione del moto del
sistema in tre dimensioni e l'andamento dei parametri di Eulero.
La Fig. 2.1.1 contiene quattro configurazioni assunte dal disco in altrettanti istanti. La Fig. 2.1.2
mostra l'andamento dei parametri di Eulero.
W
W
0.4
h
0.4
0.3
h
0.3
0.2
0.2
V
A
0.
V
0.
0
A
V
A
0
-
-
-0.2
-0.3
-0.4
-0.4
A
-0.2
V
-0.3
-0.2
0
0.2
0.4
0.4
0.2
-0.2
0
-0.4
-0.4
-0.4
-0.2
0
0.2
t=0.01 s
W
0.4
0.4
0
-0.2
-0.4
0.2
0
-0.2
-0.4
0.2
W
0.4
h
0.3
h
0.3
0.2
0.2
0.
V
A
V
A
0.
0
V
0
-
A
-
A
-0.2
-0.2
V
-0.3
-0.4
-0.4
0.4
-0.3
-0.2
0
0.2
0.4
0.4
0.2
0
-0.2
-0.4
-0.4
-0.4
-0.2
0
0.2
0.4
0.4
t=0.2 s
t=0.3 s
Fig. 2.1.1 Moto tridimensionale di un disco in quattro istanti ottenuto con dy_bq.
Nella Fig. 2.1.1 si osservi la costanza del momento angolare h dovuta al fatto che sono assenti le
coppie esterne. Si osservi, inoltre, come il moto si trasferisca sugli altri assi anche se inizialmente è
imposto secondo l'asse del disco, questo perché il disco non è omogeneo (vedi il listato di dy_bp e
bodyq). Usando la funzione prismac al posto di plroto in fkinbq si ottiene la visualizzazione
del moto di un prisma, Fig. 2.1.2.
16
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
W
W
0.4
h
0.4
0.3
0.2
0.2
V
A
0.
0
A
V
-0.2
-0.3
-0.3
0
0.2
0.4
0.4
A
0
-0.2
-0.2
V
0.
-
-0.4
-0.4
h
0.3
0.2
-0.2
0
A
-0.4
-0.4
-0.4
V
-0.2
0
0.2
W
-0.2
0
-0.2
-0.4
0.2
W
0.4
h
0.3
h
0.3
0.2
0.2
0.
V
A
V
A
0.
V
0
0
A
-
A
-0.2
-0.2
V
-0.3
-0.3
-0.4
-0.4
0
-0.4
0.2
t=0.1 s
t=0.01 s
0.4
0.4 0.4
-0.2
0
0.2
0.4
0.4
0.2
0
-0.2
-0.4
-0.4
-0.4
-0.2
0
0.2
0.4 0.4
t=0.3 s
t=0.2 s
Fig. 2.1.2 Moto tridimensionale di un prisma in quattro istanti ottenuto con dy_bq.
1
1
0.5
0.5
0
0
q1
q0
-0.5
-1
-0.5
0
-1
0.2
0
t [s]
0.2
t [s]
1
1
0.5
0.5
0
0
q2
q3
-0.5
-1
-0.5
0
-1
0.2
t [s]
0
0.2
t [s]
Fig. 2.1.3 Andamento dei parametri di Eulero ottenuto con dy_bq.
L'andamento temporale dei parametri di Eulero è riportato nella Fig. 2.1.3. Si può immediatamente
verificare come il vincolo sui parametri di Eulero q02 + q12 + q22 + q32 = 1 sia soddisfatto. Infatti con il
comando:
17
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
» plot(tempo,XS(:,4).^2+XS(:,5).^2+XS(:,6).^2+XS(:,7).^2)
si ottiene la Fig. 2.1.4.
2
1 .5
1
0 .5
0
0
0 .0 5
0 .1
0 .1 5
0 .2
0 .2 5
0 .3
Fig. 2.1.4 Verifica che q + q + q + q = 1 .
2
0
2
1
2
2
2
3
Nella simulazione a video la velocità angolare è rappresentata in magenta, il momento angolare in
rosso, il sdr fisso in verde, il sdr solidale al disco in blu, la velocità lineare dei due punti considerati
(vedi il listato) in blu e l'accelerazione in rosso.
Moto roto-traslazionale di un corpo rigido
Nel caso in cui si consideri il moto roto-traslazionale di un corpo rigido è necessario aggiungere
alle (2.1.3) l'equazione della dinamica traslazionale (2.16):
m B vC + m B ω B , A × B vC = Bf
(2.16 bis
pertanto la (2.1.3) diventa:
 B ω B , A = BI −1 B τ C − B ω B , A × BI Bω B , A

q0 
 q0 


B
T
  q1  1  01,3
− ω B , A   q1 
   = B
~  q 
 q2  2  ω B , A − B ω
B ,A  2 
 q 
q3 
  3 B
 B
f B
− ω B , A × B vC
 vC =
m

(
)
(2.1.5
A questo sistema di equazioni differenziali si deve aggiungere l'equazione cinematica traslazionale
in quanto la posizione va valutata nel sdr fisso A. In definitiva la (2.1.5) diventa:
18
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
 B ω B , A = B I −1 B τ C − B ω B , A × B I B ω B , A ( Dinamica rotaz . sdr B )

q 0 
 q 0 


B
T
  q1  1  01,3
− ω B , A   q1 
( Cinematica rotaz . sdr B )
  = B
 
B~
 q 2  2  ω B , A − ω B , A  q 2 
 
q 3 
 q 3 
B
 f B
− ω B ,A × B vC
( Dinamica trasl . sdr B )
 B v C =
m

 A P = AR B v
( Cinematica trasl . sdr A )
C
 C B
(
)
Il contributo dovuto alla forza peso nel computo della forza
W = m AB R Ag = m BA R
( )
B
T A
g = m BA R
( ) {0
T
0 −9.81}
B
(2.1.6
f diventa:
T
(2.1.7
avendo orientato l'asse z del sdr fisso A secondo la verticale ascendente. Si viene così ha creare un
sistema di equazioni differenziali il cui vettore di stato è il seguente:
1
x = ω x

2
ωy
3
ωz
4
5
q0
q1 q 2
6
7
8
9
10
11
12
q3
v Cx
v Cy
v Cz
P Cx
P Cy
P Cz 

13
T
(2.1.8
Con la stessa filosofia utilizzata per sviluppare dy_bq è stato messo a punto dy_bqt attraverso il
quale viene integrato numericamente con la funzione di MATLAB ODE45 il sistema (2.1.6);
dy_bqt permette, inoltre, la visualizzazione del moto del corpo rigido, ora rappresentato con un
disco, di plottare il vettore momento angolare, la velocità angolare e la velocità ed accelerazione
del baricentro del corpo rigido, nonché la traiettoria del centro di massa.
% dy_bq.m : integrazione di un'equazione differenziale con
%
la funzione ode45 dell'equazione del moto di un corpo rigido
%
nel caso in cui le equazioni cinematiche siano espresse con
%
i parametri di Eulero. Si tiene conto anche del moto traslazionale
%
del baricentro del corpo rigido.
%
%
Il tempo di integrazione viene diviso in sotto-intervalli, per
%
ognuno dei quali la condizione finale diventa iniziale
%
per quello successivo.
%
x0
: vettore delle condizioni iniziali
%
Contiene le velocità angolari, i parametri di Eulero, la
%
velocità, la posizione.
%
%
x0=[Wx Wy Wz q0 q1 q2 q3 Vx Vy Vz Px Py Pz]'
%
%
all'istante iniziale.
%
La velocità angolare, la velocità lineare sono determinate
%
nel sdr solidale al corpo rigido, la posizione è calcolata
%
nel sdr fisso.
%
%
toll : tolleranza di integrazione. Consigliata 1e-4 ma se si aumenta
%
la velcotà di spin del corpo rigido (Nturn) per valori elevati
%
(>10000 g/min) si consiglia di ridurla a 1e-8. Questo rallenta
%
l'esecuzione ma aumenta decisamente l'accuratezza
%
nell'integrazione numerica.
%
comememo : =1 si ottiene la memorizzazione in tutti gli istanti
19
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
%
di integrazione come generati da ode45.
%
=0 la memorizzazione nel vettore XS avviene per i soli
%
istanti finali dei sotto-intervalli.
%
sys_d : nome del file con la dinamica del sistema,
%
ossia del file che permette il calcolo del secondo membro
%
dell'equazione differenziale descrivente la dinamica del sistema.
%
La chiamata alla funzione ode45 viene fatta come segue:
%
%
[t,xs]=ode45('sys_d',time(i),time(i+1),x0,tol,0);
%
%
tempo : vettore degli istanti di integrazione.
%
XS
: matrice contenente il risultato dell'integrazione numerica
%
per colonne. Le colonne corrispondolo agli istanti di integrazione
%
memorizzati nel vettore tempo.
%
% Dati per graficare il corpo rigido (mstrato come un disco)
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
%
Nturn : giri al minuto del rotore [g/min], la veloctà angolare
%
in [rad/s] risulta pi*Nturn/30
clear all
H=0.025;
R=0.1;
N=25;
Nturn=500;
comememo=1;
% Questa parte serve a definire le condizioni iniziali. Per la definizione
% dei parametri di Eulero iniziale si ricorre dapprima alla definizione della
% matrice di rotazione utilizzando gli angolo di Eulero, quindi da essa si
% determinano i parametri di Eulero.
% Rotazioni (alfa,z), (beta,y), (gamma,x) secondo gli assi solidali.
% con la function rot_tr
% ATTENZIONE ! il seguente tensore d'inerzia deve essere identico a quello
%
utilizzato nella funzione bodyq.m, necessaria per la definizione
%
dell'equazione differenziale del sistema, in quanto non viene
%
passato a tale funzione.
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
Ix=0.0031;
Iy=0.0031;
Iz=0.0062;
Ixy=Ix*0.0;
Ixz=Ix*0.0;
Iyz=Iz*0.0;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
alfa=0; % rotazioni in gradi
beta=0;
gamma=0;
RB00=rot_tr(alfa,beta,gamma); % Matrice di rotazione iniziale (sdr B)
W0=[0 0.4*pi*Nturn/30 pi*Nturn/30]'; % Velocità angolare iniziale
q0=quatr(RB00); % Calcolo dei quaternioni, o parametri di Eulero, iniziali
20
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
V0=[0 2 3]'; % Velocità traslazionale iniziale (sdr B)
P0=[0 0 0]'; % Posizione iniziale (sdr A)
x0=[W0;q0;V0;P0];
tol=1e-6;
time=[0:0.01:50]'; % costruzione dei sotto-intervalli
for i=1:max(size(time))-1; % inizio integrazione
time(i)
[t,xs]=ode45('bodyqt',time(i),time(i+1),x0,tol,0);
%
nxs=size(xs);
if i==1,
% istante iniziale
if comememo==0
XS=[xs(max(nxs),:)];
tempo=t(max(nxs));
else
XS=[xs];
tempo=t;
end
end
if i>1,
if comememo==0
% istanti successivi
XS=[XS;xs(max(nxs),:)];
tempo=[tempo;t(max(nxs))];
else
XS=[XS;xs(2:max(nxs),:)];
tempo=[tempo;t(2:max(nxs))];
end
end
x0=xs(max(nxs),:)'; % La condizione iniziale per l'istante i+1 diventa quella
% finale per l'istante i
% A questo punto è possibile inserire un'eventuale funzione per graficare il moto
% oppure plottare (o salvare) le colonne del vettore XS assieme al tempo contenuto
% nel vettore tempo.
%
figure(1)
fkinbqt(x0(4:7),x0(11:13),H,R,N)
plot3(XS(:,11),XS(:,12),XS(:,13),'-.') % Plottaggio treiettoria centro di massa
RBA=rquat(x0(4:7)); % Calcolo della matrice di rotazione B-->A mediante i
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA
TBA=trasm(RBA,x0(11:13));
% Calcolo del momento angolare del corpo rigido, espresso nel sdr B.
Mang=Inerzia*[x0(1) x0(2) x0(3)]';
plvect(TBA,Mang,[0 0 0]',1,'r',4,'h')
% Plottaggio della velocità angolare (indicato dal nome 'W')
WB=[x0(1) x0(2) x0(3)]';
plvect(TBA,WB,[0 0 0]',0.008,'m',4,'W')
% Plottaggio del vettore velocità del baricentro del corpo rigido, indicato dal nome 'V'
VBO=x0(8:10); % Velocità dell'origine del sdr solidale al corpo rigido
21
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
VrelB=[0 0 0]'; % Velocità relativa del sdr solidale al corpo rigido
pvelocit(TBA,VBO,VrelB,WB,0*[0 0 0]',0.08,'k',4,'V')
% Plottaggio del vettore accelerazione del baricentro del corpo rigido, indicato dal nome 'A'
% Il calcolo dell'accelerazione angolare viene effettuato con la funzione bodyqt.m.
yprime=bodyqt(0,x0);
AWB=yprime(1:3); % I primi tre elementi di yprime sono l'acc. angolare.
ABO=yprime(8:10)+cross(WB,x0(8:10)); % Acc. dell'origine del sdr solidale al corpo rigido
ArelB=[0 0 0]'; % Acc. relativa del sdr solidale al corpo rigido
paccel(TBA,ABO,ArelB,VrelB,WB,AWB,[0 0 0]',0.05,'r',4,'A')
hold off
pause(0.01) % pausa di 0.01 secondi, serve unicamente per mostrare l'immagine
figure(2)
subplot(221)
plot(tempo,XS(:,4))
xlabel('t [s]')
ylabel('q0 ')
subplot(222)
plot(tempo,XS(:,5))
xlabel('t [s]')
ylabel('q1')
subplot(223)
plot(tempo,XS(:,6))
xlabel('t [s]')
ylabel('q2')
subplot(224)
plot(tempo,XS(:,7))
xlabel('t [s]')
ylabel('q3')
% Con la seguente linea è possibile plottare la somma dei quaternioni, se
% l'integrazione numerica è corretta deve essere pari ad 1.
%plot(tempo,XS(:,4).^2+XS(:,5).^2+XS(:,6).^2+XS(:,7).^2)
if i==1 pause;end % serve per allargare la finestra con il mouse
end
Il calcolo del secondo membro della (2.1.6) viene effettuato dalla funzione bodyqt.
function yprime=bodyqt(t,X)
%
% Viene valutato il primo membro dell'equazione differenziale dinamica e cinematica
% del moto di un corpo rigido. Per la parte cinematica si sfruttano i parametri
% di Eulero.
%
% X : vettore di stato. Contiene le velocità angolari e i parametri di Eulero:
%
%
x0=[Wx Wy Wz q0 q1 q2 q3 Vx Vy Vz Px Py Pz]'
%
% La velocità angolare, la velocità lineare sono determinate
% nel sdr solidale al corpo rigido, la posizione è calcolata
% nel sdr fisso.
%
% t : tempo
% Velocità angolare (nel sdr B, solidale al corpo rigido)
22
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
W(1,1)=X(1);
W(2,1)=X(2);
W(3,1)=X(3);
% La seguente definizione dei quaternioni serve a prevenire eventuali errori
% di arrotondamento che possono portare a violare la condizione:
%
%
q0^2+q1^2+q2^2+q3^2=1
%
% Pag. 32 Wittenburg
q(1,1)=X(4)/norm(X(4:7));
q(2,1)=X(5)/norm(X(4:7));
q(3,1)=X(6)/norm(X(4:7));
q(4,1)=X(7)/norm(X(4:7));
% Velocità lineare (nel sdr B, solidale al corpo rigido)
V(1,1)=X(8);
V(2,1)=X(9);
V(3,1)=X(10);
% Posizione (nel sdr A, fisso)
P(1,1)=X(11);
P(2,1)=X(12);
P(3,1)=X(13);
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
Ix=0.0031;
Iy=0.0031;
Iz=0.0062;
Ixy=Ix*0.0;
Ixz=Ix*0.0;
Iyz=Iz*0.0;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
Massa=1.2;
RBA=rquat(q);
PesoB=RBA'*[0 0 -9.81]'*Massa;
yprime(1:3,1)=-inv(Inerzia)*cross(W,Inerzia*W); % Eq. dinamica rotazionale (sdr B)
yprime(4:7,1)=qdot(W,q);
% Eq. cinematica rotazionale (sdr B)
yprime(8:10,1)=PesoB/Massa-cross(W,V);
% Eq. dinamica traslazionale F=m a (sdr B)
yprime(11:13,1)=rquat(q)*V;
% Eq. cinematica traslazionale dP/dt=v (sdr A)
La visualizzazione del moto del corpo rigido, rappresentato mediante un disco si ottiene attraverso
la funzione fkinbqt.
function a=fkinbqt(q,P,H,R,N)
% fkintop.m : Funzione per la visualizzazione 3D di un copro rigido
%
mediante i parametri di Eulero tenendo conto anche del moto
%
traslazionale, definito dal vattore P.
% Dati per graficare il corpo rigido, mostrato come un cilindro
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
% Questo programma permette di impostare gli angoli e vedere il risultato a video.
RBA=rquat(q); % Calcolo della matrice di rotazione B-->A mediante i
23
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA
TBA=trasm(RBA,P);
pltassi(eye(4),'g','A',1,0.3)
hold on
view([1 1 0.2])
axis([-1 1 -1 1 -1 1]*1)
pltassi(TBA,'b','B',0,0.3)
plroto(eye(4),TBA,'m',H,R,N)
% La seguente permette di plottare un prisma avente lx=R
% ly=r, lz=R/2 al posto del disco.
% Per chiarimenti sia veda la funzione prismac.
%prismac([R R],[R R],[R R]*0.5,4,4,TBA,[0 0 -R/2*0.5]')
Per quanto riguarda la funzione plroto verrà ripresa nella sezione dedicata alla robotica. Anche ora,
in alternativa al disco, è possibile visualizzare un prisma mediante la funzione prismac.
1
1
W
h
W
h
z AV
0.5
0
xA
0.5
V
zA
0
yA
xA
yA
A
-0.5
-
-0.5
A
-0.5
0
0.5
1
0.5
1
0
-0.5
-
-
-0.5
0
0.5
1
0.5
1
-0.5
0
-
t=0.2 s
t=0.01 s
1
1
0.8
W
h
0.6
0.5
0.4
zA
zA
0.2
0
xA
V
yA
0
xA
yA
W
h
-0.2
A
-0.4
-0.5
-0.6
-0.8
-
-0.5
0
0.5
1
1
0.5
0
-0.5
-1
-1
-
V
-0.5
0
0.5
1
1
0.5
0
A -0.5
-1
t=0.5 s
t=0.7 s
Fig. 2.1.5 Moto roto-traslazionale di un disco in quattro istanti ottenuto con dy_bqt.
Le condizioni iniziali sono evidenti nel listato di dy_bqt. Nella Fig. 2.1.5 si osservi la costanza del
momento angolare h dovuta al fatto che sono assenti le coppie esterne.
La Fig. 2.1.6 mostra la vista da x A del moto, si noti la tangenza del vettore velocità con la
traiettoria.
24
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
1
W
h
0.8
0.6
V
0.4
zA
0.2
0
xA
yA
A
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.8
-0.6
-0.4
-0.2
0
0.2
0.4
0.6
0.8
1
Fig. 2.1.6 Tangenza della velocità alla traiettoria, ottenuto con dy_bqt.
1
0.2
0 .5
0.1
0
0
q1
q0
-0.5
-1
0
-0 .1
0 .2
0 .4
t [s]
0 .6
-0 .2
0
0 .8
0 .2
1
0 .1
0.5
0
0.2
0.4
t [s]
0 .6
0 .8
0.2
0.4
t [s]
0 .6
0 .8
0
q2
q3
-0.1
-0.2
0
-0 .5
0 .2
0 .4
t [s]
0 .6
-1
0 .8
0
Fig. 2.1.7 Andamento dei parametri di Eulero ottenuto con dy_bqt.
L'andamento temporale dei parametri di Eulero è riportato nella Fig. 2.1.7. Anche ora si può
immediatamente verificare come il vincolo sui parametri di Eulero q02 + q12 + q22 + q32 = 1 sia
soddisfatto. Infatti con il comando:
» plot(tempo,XS(:,4).^2+XS(:,5).^2+XS(:,6).^2+XS(:,7).^2)
si ottiene la Fig. 2.1.8.
25
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
2
1 .5
1
0 .5
0
0
0 .1
0 .2
0 .3
0 .4
0 .5
0 .6
0 .7
Fig. 2.1.8 Verifica che q + q + q + q = 1 .
2
0
2
1
2
2
2
3
Si osservi come il disco non si capovolga anche se inizialmente viene impressa una velocità
angolare attorno all'asse x pari a 0.4 volte quella secondo all'asse di simmetria z. Questo rappresenta
l'effetto stabilizzante tipico dei corpi rigidi dotati di struttura giroscopica (uguaglianza dei momenti
d'inerzia trasversali) dotati si spin rispetto all'asse di simmetria. Questo effetto diventa
particolarmente evidente all'aumentare dello spin. Nella Fig. 2.1.9 viene riportato l'andamento
temporale dei parametri di Eulero quando sul disco viene applicata una coppia di 20 Nm fra 0.1 e
0.2 s, lo spin è di 500 g/min.
q0
1
1
0.5
0.5
0
q1
-0.5
-1
0
0
-0.5
0.2
t [s]
-1
0
0.4
1
2
0.5
1
q2 0
q3 0
-0.5
0
0.2
t [s]
-1
0
0.4
0.2
t [s]
0.4
0.2
t [s]
0.4
Fig. 2.1.9 Andamento dei parametri di Eulero con coppia esterna applicata pari a
10 Nm fra 0.1 e 0.2 s e spin di 500 g/min.
26
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Si osservi come lo spin non eccessivamente elevato fa in modo che il disco sia soggetto a
ribaltamento, Fig. 2.1.10.
W
1
h
0.8
0.6
V
0.4
zA
0.2
0
xA
yA A
-0.2
-0.4
-0.6
-0.8
-1
-1
-0.5
0
0.5
1
0.5
1
0
-1
-0.5
Fig. 2.1.10 Istante 0.3 s, ribaltamento del disco con coppia esterna applicata pari
a 10 Nm fra 0.1 e 0.2 s e spin di 500 g/min.
La Fig. 2.1.11 mostra invece il caso in cui lo spin sia di 5000 g/min. Risulta evidente la stabilità
dell'assetto, in particolare dai parametri di Eulero q1 e q2 .
1
q0
0.02
0.01
0
q1 0
-1
-2
0
-0.01
0.2
t [s]
-0.02
0
0.4
0.01
2
0.005
1
q2
q3
0
-0.005
-0.01
0
0.2
t [s]
0.4
0.2
t [s]
0.4
0
-1
0.2
t [s]
-2
0
0.4
27
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Fig. 2.1.11 Andamento dei parametri di Eulero con coppia esterna applicata pari
a 10 Nm fra 0.1 e 0.2 s e spin di 5000 g/min.
La Fig. 2.1.12 mostra con maggiore chiarezza la stabilità dovuta all'effetto giroscopico. Si confronti
questa figura con la Fig. 2.1.10.
W
h
1
V
0.5
zA
0
xA
yAA
-0.5
-1
-1
-0.5
0
0.5
0.5
0
-0.5
-1
1 1
Fig. 2.1.12 Istante 0.3 s, stabilità del moto rotazionale del disco con coppia
esterna applicata pari a 10 Nm fra 0.1 e 0.2 s e spin di 5000 g/min.
Nell'integrazione l'introduzione di forzanti dipendenti dal tempo viene effettuata nella funzione che
calcola il secondo membro dell'equazione differenziale, in questo caso bodyqt, come segue:
function yprime=bodyqt(t,X)
%
% Viene valutato il primo membro dell'equazione differenziale dinamica e cinematica
% del moto di un corpo rigido. Per la parte cinematica si sfruttano i parametri
% di Eulero.
%
% X : vettore di stato. Contiene le velocità angolari e i parametri di Eulero:
%
%
x0=[Wx Wy Wz q0 q1 q2 q3 Vx Vy Vz Px Py Pz]'
%
% La velocità angolare, la velocità lineare sono determinate
% nel sdr solidale al corpo rigido, la posizione è calcolata
% nel sdr fisso.
%
% t : tempo
% Velocità angolare (nel sdr B, solidale al corpo rigido)
W(1,1)=X(1);
W(2,1)=X(2);
W(3,1)=X(3);
% La seguente definizione dei quaternioni serve a prevenire eventuali errori
% di arrotondamento che possono portare a violare la condizione:
%
%
q0^2+q1^2+q2^2+q3^2=1
28
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
%
% Pag. 32 Wittenburg
q(1,1)=X(4)/norm(X(4:7));
q(2,1)=X(5)/norm(X(4:7));
q(3,1)=X(6)/norm(X(4:7));
q(4,1)=X(7)/norm(X(4:7));
% Velocità lineare (nel sdr B, solidale al corpo rigido)
V(1,1)=X(8);
V(2,1)=X(9);
V(3,1)=X(10);
% Posizione (nel sdr A, fisso)
P(1,1)=X(11);
P(2,1)=X(12);
P(3,1)=X(13);
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
Ix=0.0031;
Iy=0.0031;
Iz=0.0062;
Ixy=Ix*0.0;
Ixz=Ix*0.0;
Iyz=Iz*0.0;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
Massa=1.2;
RBA=rquat(q);
PesoB=RBA'*[0 0 -9.81]'*Massa;
% Forzante dipendente dal tempo
if t>= 0.1 & t<0.2
TAUEB=[10 0 0]';
else
TAUEB=[0 0 0]';
end
yprime(1:3,1)=inv(Inerzia)*[TAUEB-cross(W,Inerzia*W)]; % Eq. dinamica rotazionale (sdr B)
yprime(4:7,1)=qdot(W,q);
% Eq. cinematica rotazionale (sdr B)
yprime(8:10,1)=PesoB/Massa-cross(W,V);
% Eq. dinamica traslazionale F=m a (sdr B)
yprime(11:13,1)=rquat(q)*V;
% Eq. cinematica traslazionale dP/dt=v (sdr A)
rappresenta la coppia esterna espressa nel sdr B solidale al corpo rigido. Si confronti questo
listato con quello di bodyqt senza la forzante, si vede come sia semplice introdurre la dipendenza
dal tempo.
TAUEB
Moto roto-traslazionale di un corpo rigido con un punto fisso
Nel caso in cui si consideri il moto roto-traslazionale di un corpo rigido con un punto fisso si
procede come per il caso senza punto fisso (2.1.5) introducendo le reazioni vincolari. Con
riferimento alla Fig. 2.1.13, B rappresenta un sdr con origine nel centro di massa C del corpo rigido
e solidale a quest'ultimo, sia f V la reazione vincolare in corrispondenza del punto fisso, indicando
con BW la forza peso agente nel centro di massa del corpo rigido, l'equazione traslazionale (2.16)
diventa:
m B vC + B ω B ,A × B vC = Bf V + BW
(
)
(2.1.9
mentre l'equazione di Eulero (2.14) per il moto rotazionale assume la seguente forma:
29
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
I ω B , A + B ω B , A × BI Bω B , A
B B
B
−r B
= (CO)× BfV
(2.1.10
B
dato che la coppia applicata è dovuta alla forza vincolare B f V che agisce con braccio ( CO) =− Br .
Trattandosi di un moto rigido la formula fondamentale dei moti rigidi (1.2.3) espressa nel sdr B
solidale al corpo rigido diventa:
B
0
B
vC = vO + B ω B , A × B r = B ω B , A × B r
(2.1.11
Punto fisso
ω B ,A
ZB
B
O
r
fV
C
ZA
YB
vC
XB
XA
YA
Fig. 2.1.13 Schematizzazione di un corpo rigido roto-traslante con un punto fisso.
La derivata della velocità del centro di massa B vC presente nella (2.1.9) viene effettuata nel sdr B
(vedi le considerazioni che precedono la (1.2.2)), pertanto derivando la (2.1.11) in tale sdr si ha:
B
0
C B C
B B B
v C = ω B , A × r + ω B , A × rC = B ωC B , A × B r
(2.1.12
L'equazione traslazionale (2.1.9) risolta in termini della reazione vincolare
(2.1.11) e (2.1.12), diventa:
B
fV = m B ω B , A × B r + B ω B , A ×
[
(
B
ω B , A × B r − BW
)]
B
f V , in virtù delle
(2.1.13
questa sostituita nell'equazione rotazionale (2.1.10) porge:
30
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
{[
}
I Bω B , A + B ω B , A × BI Bω B , A =− B r × m B ω B , A × B r + B ω B , A × B ω B , A × B r − BW =
− m B r × B ω B , A × B r − m B r × B ω B , A × B ω B , A × B r + B r × BW
B
(
[
)
)]
(
)]
(
(2.1.14
Portando a primo membro i termini comuni a B ω B , A ed esprimendo la forza peso secondo la (2.1.7)
B
W = ABR AW la precedente diventa:
(
)
I B ω B , A + m B r × B ω B , A × B r =
− B ω B , A × B I B ω B , A −m B r × B ω B , A ×
B
[
(
B
ω B , A × B r + B r × AB R AW
(2.1.15
)]
Il secondo termine del primo membro della (2.1.15) rappresenta un termine aggiuntivo all'inerzia
rotazionale, può essere scritto come un opportuno tensore d'inerzia addizionale I m :
mB r ×
(
B
)
ω B , A × B r = I m B ω B , A
(2.1.16
l'equazione rotazionale (2.1.15) diventa allora:
[
B
I + Im
]
B
ω B , A =− B ω B , A × B I B ω B , A −m B r ×
[
B
ω B ,A ×
(
B
ω B , A × B r + B r × AB R AW
)]
(2.1.17
Quindi il sistema (2.1.6), valido per un corpo rigido libero nello spazio, assume la seguente forma
nel caso in cui vi sia un punto fisso:
( Dinamica rotaz . sdr B )

Bω
B −1
B B B
B
B B B
B B A
=
I
−
ω
×
I
ω
−
m
r
×
ω
×
ω
×
r
+
r
×
R
W
B ,A
Tot .
B ,A
B ,A
B ,A
B ,A
A

( Cinematica rotaz . sdr B )


q
q
 0
 0

 q 
B
T

− ω B , A   q1 
 1  1  01,3

  = B
~  q 

q 2  2  ω B , A − B ω
B ,A  2 




q 3 
q 3 

( Cinematica trasl . sdr A )


A A
PC = B R B ω B , A × B r

[
[
(
Essendo
B
−1
I Tot
. =
(
B
I + Im
)
−1
(
)]
]
(2.1.18
)
. I passaggi descritti dalla (2.1.9) alla (2.1.18) sono stati sviluppati
mediante l'm-file dynarm ("arm" dall'inglese "braccio", per indicare il moto di un membro
vincolato):
% Determinazione dell'equazione del moto di un corpo rigido vincolato in un punto mediante
% una cerniera sferica. Le equazioni sono ottenute mediante l'approccio di Newton-Eulero
% non iterativo, nel senso che le forze trasmesse dal vincolo sul corpo vengono
% determinate senza le iterazioni in avanti ed indietro
clear all
M=sym('m'); % Massa
31
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% Accelerazione gravitazionale
G=sym('[gx;gy;gz]');
G=symmul(M,G);
% Posizione per il calcolo della velocità ed accelerazione (nel sdr B)
R=sym('[r;0;0]');
% Posizione per il calcolo della coppia dovuta alle reazioni vincolari (nel sdr B)
% (è semplicemente -R)
Rf=sym('[-r;0;0]');
W=sym('[Wx;Wy;Wz]'); % Velocità angolare (sdr B)
AW=sym('[AWx;AWy;AWz]'); % Accelerazione angolare (sdr B)
I=sym('[Ix,Ixy,Ixz; Ixy,Iy,Iyz;Ixz,Iyz,Iz]'); % Tensore d'inerzia (sdr B)
% Calcolo della velocità ed accelerazione del centro di massa (sdr B)
V=esterno(W,R);
dVdt=esterno(AW,R);
% Calcolo delle forze vincolari applicate dai vincoli sul corpo (sdr B)
F=symmul(M,symadd(dVdt,esterno(W,V)));
F=symsub(F,G)
% Calcolo della coppia applicata al corpo rigido, tiene conto della coppia
% dovuta alle reazioni fincolari F e dell'inerzia rotazionale.
TAU=expand(symsub(esterno(Rf,F),esterno(W,symmul(I,W))));
% Procedura per la determinazione della matrice di massa Im
tau1=sym(TAU,1,1);
tau2=sym(TAU,2,1);
tau3=sym(TAU,3,1);
ajoint1=sym(AW,1,1);
ajoint2=sym(AW,2,1);
ajoint3=sym(AW,3,1);
Im=sym(3,3,'0');
% Calcolo degli elementi diagonali
Im=sym(Im,1,1,diff(collect(tau1,ajoint1),ajoint1));
Im=sym(Im,2,2,diff(collect(tau2,ajoint2),ajoint2));
Im=sym(Im,3,3,diff(collect(tau3,ajoint3),ajoint3));
% Calcolo degli elementi extra diagonali
Im=sym(Im,1,2,diff(collect(tau1,ajoint2),ajoint2));
Im=sym(Im,1,3,diff(collect(tau1,ajoint3),ajoint3));
Im=sym(Im,2,3,diff(collect(tau2,ajoint3),ajoint3));
Im=sym(Im,2,1,diff(collect(tau2,ajoint1),ajoint1));
Im=sym(Im,3,1,diff(collect(tau3,ajoint1),ajoint1));
Im=sym(Im,3,2,diff(collect(tau3,ajoint2),ajoint2));
Im=simple(Im);
% Matrice di massa totale
Itot=symsub(I,Im)
% Calcolo del secondo membro dell'equazione del moto. E' il secondo membro
32
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% della (2.1.17)
TAU2=symsub(TAU,symmul(Im,AW))
Come si vede dalla definizione del vettore congiungente il punto fisso con il centro di massa, l'asse
x del sdr solidale al corpo rigido è disposto secondo tale congiungente, cioè B i B // Br . Con il
comando dynarm si ottiene, rispettivamente, per le reazioni vincolari f V , per il momento d'inerzia
−1
totale B I Tot
. e per il secondo membro della (2.1.17):
F =
[m*(-Wz^2*r-Wy^2*r)-m*gx]
[ m*(AWz*r+Wx*Wy*r)-m*gy]
[m*(-AWy*r+Wx*Wz*r)-m*gz]
Itot =
[ Ix,
Ixy,
Ixz]
[Ixy, Iy+r^2*m,
Iyz]
[Ixz,
Iyz, Iz+r^2*m]
TAU2 =
[Wz*Ixy*Wx+Wz*Iy*Wy+Iyz*Wz^2-Wy*Ixz*Wx-Iyz*Wy^2-Wy*Iz*Wz]
[-Wz*Ixy*Wy+r^2*m*Wx*Wz-r*m*gz-Wz*Ix*Wx+Wx*Iz*Wz-Ixz*Wz^2+Ixz*Wx^2+Wx*Iyz*Wy]
[Ixy*Wy^2-r^2*m*Wx*Wy+r*m*gy+Wy*Ix*Wx-Wx*Iyz*Wz+Wy*Ixz*Wz-Ixy*Wx^2-Wx*Iy*Wy]
−1
Si osservi come il momento d'inerzia totale B I Tot
. rappresenta il momento d'inerzia del corpo rigido
ripetto al punto fisso.
Il prodotto esterno simbolico viene effettuato mediante la funzione esterno. È l'equivalente
simbolico delle funzione cross di MATLAB.
function [vris]=esterno(u,v)
%
% Prodotto esterno simbolico vris=uxv
%
% Creazione della matrice utilde
eval(['utilde=sym(''[0,',symmul(sym(u,3,1),-1),',',sym(u,2,1),';',sym(u,3,1),',0,',symmul(sym(u,1,1),1),';',symmul(sym(u,2,1),-1),',',sym(u,1,1),',0]'');'])
% Calcolo del prodotto utilde v
vris=symmul(utilde,v);
Il sistema di equazioni differenziali (2.1.18) viene integrato numericamente mediante l'm-file
dy_arm che provvede a graficare la velocità angolare, il momento angolare, le reazioni vincolari, il
sdr solidale B, nonché il moto del corpo rigido. Per chiarezza di rappresentazione è stato scelto di
rappresentare il corpo rigido come un disco vincolato in un punto della circonferenza. Il vettore di
stato, in base al sistema (2.1.18), assume la seguente forma:
1
x = ω x

2
ωy
3
ωz
4
5
6
q0
q1 q 2
7
8
9
q3
PCx
PCy
P Cz 

10
T
% dy_arm.m : integrazione di un'equazione differenziale con
%
la funzione ode45 dell'equazione del moto di un corpo rigido
%
nel caso in cui le equazioni dinamiche siano determinate mediante
%
le equazioni di Newton_Eulero scritte però in termini di velocità
%
angolare e parametri di Eulero.
33
(2.1.19
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
%
Il modello rappresenta il moto di un disco vincolato ad un punto
%
della circonferenza mediante un giunto sferico.
%
Rispetto all'approccio di Newton-Eulero iterativo risula molto
%
più agevole la scrittura delle equazioni del moto.
%
%
Il tempo di integrazione viene diviso in sotto-intervalli, per
%
ognuno dei quali la condizione finale diventa iniziale
%
per quello successivo.
%
x0
: vettore delle condizioni iniziali
%
Contiene le velocità angolari, i parametri di Eulero,
%
la posizione del baricentro.
%
%
x0=[Wx Wy Wz q0 q1 q2 q3 Px Py Pz]'
%
%
all'istante iniziale.
%
La velocità angolare è determinate nel sdr solidale al corpo rigido,
%
la posizione è calcolata nel sdr fisso.
%
%
toll : tolleranza di integrazione. Consigliata 1e-4 ma se si aumenta
%
la velcotà di spin del corpo rigido (Nturn) per valori elevati
%
(>10000 g/min) si consiglia di ridurla a 1e-8. Questo rallenta
%
l'esecuzione ma aumenta decisamente l'accuratezza
%
nell'integrazione numerica.
%
comememo : =1 si ottiene la memorizzazione in tutti gli istanti
%
di integrazione come generati da ode45.
%
=0 la memorizzazione nel vettore XS avviene per i soli
%
istanti finali dei sotto-intervalli.
%
sys_d : nome del file con la dinamica del sistema,
%
ossia del file che permette il calcolo del secondo membro
%
dell'equazione differenziale descrivente la dinamica del sistema.
%
La chiamata alla funzione ode45 viene fatta come segue:
%
%
[t,xs]=ode45('sys_d',time(i),time(i+1),x0,tol,0);
%
%
tempo : vettore degli istanti di integrazione.
%
XS
: matrice contenente il risultato dell'integrazione numerica
%
per colonne. Le colonne corrispondono agli istanti di integrazione
%
memorizzati nel vettore tempo.
%
% Dati per graficare il disco
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
%
Nturn : giri al minuto del rotore [g/min], la veloctà angolare
%
in [rad/s] risulta pi*Nturn/30
clear all
H=0.025/3;
R=0.1;
N=25;
Nturn=0;
comememo=1;
% Questa parte serve a definire le condizioni iniziali. Per la definizione
% dei parametri di Eulero iniziale si ricorre dapprima alla definizione della
% matrice di rotazione utilizzando gli angolo di Eulero, quindi da essa si
% determinano i parametri di Eulero.
% Rotazioni (alfa,z), (beta,y), (gamma,x) secondo gli assi solidali.
34
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% con la function rot_tr
% ATTENZIONE ! il seguente tensore d'inerzia deve essere identico a quello
%
utilizzato nella funzione arm.m, necessaria per la definizione
%
dell'equazione differenziale del sistema, in quantom non viene
%
passato a tale funzione.
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
Ix=0.0031;
Iy=0.0031;
Iz=0.0062;
Ixy=Ix*0.0;
Ixz=Ix*0.0;
Iyz=Iz*0.0;
m=1.2;
Inerzia=[[Ix Ixy Ixz];[Ixy Iy Iyz];[Ixz Iyz Iz]];
W0=[pi*Nturn/30 0 0]';
alfa=0; % rotazioni in gradi
beta=90;
gamma=0;
RB00=rot_tr(alfa,beta,gamma); % Matrice di rotazione iniziale
q0=quatr(RB00); % Calcolo dei quaternioni, o parametri di Eulero, iniziali
P0=[0 0 0]'; % Posizione iniziale (sdr A)
x0=[W0;q0;P0];
tol=1e-6;
time=[0:0.01:50]'; % costruzione dei sotto-intervalli
for i=1:max(size(time))-1; % inizio integrazione
time(i)
[t,xs]=ode45('arm',time(i),time(i+1),x0,tol,0);
%
nxs=size(xs);
if i==1,
% istante iniziale
if comememo==0
XS=[xs(max(nxs),:)];
tempo=t(max(nxs));
else
XS=[xs];
tempo=t;
end
end
if i>1,
if comememo==0
% istanti successivi
XS=[XS;xs(max(nxs),:)];
tempo=[tempo;t(max(nxs))];
else
XS=[XS;xs(2:max(nxs),:)];
tempo=[tempo;t(2:max(nxs))];
end
end
x0=xs(max(nxs),:)'; % La condizione iniziale per l'istante i+1 diventa quella
% finale per l'istante i
% A questo punto è possibile inserire un'eventuale funzione per graficare il moto
35
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% oppure plottare (o salvare) le colonne del vettore XS assieme al tempo contenuto
% nel vettore tempo.
%
figure(1)
fkinarm(x0(4:7),x0(8:10),H,R,N)
RBA=rquat(x0(4:7)); % Calcolo della matrice di rotazione B-->A mediante i
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA. Per mostrare il gettone con
% l'esse z orizzontale RBA deve essere premoltiplicata per [[0 1 0];[0 0 1];[1 0 0]];
TA0=trasm([[0 1 0];[0 0 1];[1 0 0]],[0 0 0]');
TBA=trasm(RBA,x0(8:10));
% Calcolo del momento angolare del corpo rigido, espresso nel sdr B.
Mang=Inerzia*[x0(1) x0(2) x0(3)]';
% Plottaggio del momento angolare (indicato dal nome 'h')
plvect(TA0*TBA,Mang,[0 0 0]',5,'r',4,'h')
% Plottaggio della velocità angolare (indicato dal nome 'W')
WB=[x0(1) x0(2) x0(3)]';
plvect(TA0*TBA,WB,[0 0 0]',0.02,'m',4,'W')
% Plottaggio del vettore velocità del baricentro del gettone, indicato dal nome 'V'
VBO=cross(WB,[R 0 0]'); % Velocità dell'origine del sdr solidale al corpo rigido
VrelB=[0 0 0]'; % Velocità relativa del sdr solidale al corpo rigido
pvelocit(TA0*TBA,VBO,VrelB,WB,[0 0 0]',0.35,'k',4,'V')
% Plottaggio del vettore accelerazione del punto [0 0 0]' indicato dal nome 'A'.
% Il calcolo dell'accelerazione angolare viene effettuato con la funzione arm.m.
yprime=arm(0,x0);
AWB=yprime(1:3); % I primi tre elementi di yprime sono l'acc. angolare.
ABO=cross(AWB,[R 0 0]')+cross(WB,cross(WB,[R 0 0]'));
% Acc. dell'origine del sdr solidale al
corpo rigido
ArelB=[0 0 0]'; % Acc. relativa del sdr solidale al corpo rigido
paccel(TA0*TBA,ABO,ArelB,VrelB,WB,AWB,[0 0 0]',0.01,'m',4,'A')
% Plottaggio delle reazioni vincolari
% L'acc. di gravità è calcolata come RBA'*[-9.81 0 0]', dove [-9.81 0 0]'
% rappresenta l'acc. di gravità aspressa nel sdr A.
Fvinc=forvinc(WB,AWB,RBA'*[-9.81 0 0]',m,R);
plvect(TA0*TBA,Fvinc,[-0.1 0 0]',0.01,'r',4,'Fvinc')
hold off
pause(0.01) % pausa di 0.01 secondi, serve unicamente per mostrare l'immagine
figure(2)
subplot(221)
plot(tempo,XS(:,4))
xlabel('t [s]')
ylabel('q0 ')
subplot(222)
plot(tempo,XS(:,5))
xlabel('t [s]')
ylabel('q1')
subplot(223)
plot(tempo,XS(:,6))
xlabel('t [s]')
ylabel('q2')
subplot(224)
plot(tempo,XS(:,7))
xlabel('t [s]')
ylabel('q3')
36
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
figure(3)
subplot(221)
plot(tempo,XS(:,8))
xlabel('t [s]')
ylabel('x [m]')
subplot(222)
plot(tempo,XS(:,9))
xlabel('t [s]')
ylabel('y [m]')
subplot(223)
plot(tempo,XS(:,10))
xlabel('t [s]')
ylabel('z [m]')
subplot(224)
plot(XS(:,9),XS(:,10))
xlabel('y [m]')
ylabel('z [m]')
% Con la seguente linea è possibile plottare la somma dei quaternioni, se
% l'integrazione numerica è corretta deve essere pari ad 1.
%plot(tempo,XS(:,4).^2+XS(:,5).^2+XS(:,6).^2+XS(:,7).^2)
if i==1 pause;end % serve per allargare la finestra con il mouse
end
Il secondo membro della (2.1.18) viene valutato con la funzione arm.
function yprime=arm(t,X)
%
% Viene valutato il primo membro dell'equazione differenziale dinamica e cinematica
% del moto di un corpo rigido con un punto fisso. Per la parte cinematica si sfruttano
% i parametri di Eulero. Per la determinazione dell'equazione del moto si veda
% il programma dynarm.m.
%
% X : vettore di stato. Contiene le velocità angolari e i parametri di Eulero:
%
%
X=[Wx Wy Wz q0 q1 q2 q3 Px Py Pz]'
%
% t : tempo
Wx=X(1);
Wy=X(2);
Wz=X(3);
% La seguente definizione dei quaternioni serve a prevenire eventuali errori
% di arrotondamento che possono portare a violare la condizione:
%
%
q0^2+q1^2+q2^2+q3^2=1
%
% Pag. 32 Wittenburg
q(1,1)=X(4)/norm(X(4:7));
q(2,1)=X(5)/norm(X(4:7));
q(3,1)=X(6)/norm(X(4:7));
q(4,1)=X(7)/norm(X(4:7));
RBA=rquat(q);
gA=[-9.81 0 0]';
gB=RBA'*gA;
gy=gB(2);
gz=gB(3);
37
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
% Caratteristiche inerziali di un disco in acciaio (dens 7850 kg/m^3)
% diametro 0.2 m, spessore 0.005 m, calcolate con in_cil.m
Ix=0.0031;
Iy=0.0031;
Iz=0.0062;
Ixy=Ix*0.0;
Ixz=Ix*0.0;
Iyz=Iz*0.0;
m=1;
r=0.1;
% Tensore d'inerzia totale
Itot =...
[[ Ix,
Ixy,
Ixz];...
[Ixy, Iy+r^2*m,
Iyz];...
[Ixz,
Iyz, Iz+r^2*m]];
% Secondo membro
TAU2 =...
[[Wz*Ixy*Wx+Wz*Iy*Wy+Iyz*Wz^2-Wy*Ixz*Wx-Iyz*Wy^2-Wy*Iz*Wz];...
[-Wz*Ixy*Wy+r^2*m*Wx*Wz-r*m*gz-Wz*Ix*Wx+Wx*Iz*Wz-Ixz*Wz^2+Ixz*Wx^2+Wx*Iyz*Wy];...
[ Ixy*Wy^2-r^2*m*Wx*Wy+r*m*gy+Wy*Ix*Wx-Wx*Iyz*Wz+Wy*Ixz*Wz-Ixy*Wx^2-Wx*Iy*Wy]];
if t>=0.05 & t<=0.06;
TAUE=[0 0 0]';
else
TAUE=[0 0 0]';
end
Eventuali coppie esterna
yprime(1:3,1)=inv(Itot)*[TAU2+TAUE];
% Eq. dinamica rotazionale (sdr B)
yprime(4:7,1)=qdot([Wx Wy Wz]',q);
% Eq. cinematica rotazionale (sdr B)
yprime(8:10,1)=rquat(q)*cross([Wx Wy Wz]',[r 0 0]'); % Eq. cinematica traslazionale dP/dt=v (sdr A)
Il plottaggio del moto del disco vincolato avviene mediante la funzione fkinarm.
function a=fkinarm(q,P,H,R,N)
% fkinarm.m : Funzione per la visualizzazione 3D di un copro rigido
%
mediante i parametri di Eulero tenendo conto anche del moto
%
traslazionale, definito dal vattore P.
%
Questa funzione è una modifica di fkinbqt.m per graficare
%
il moto di un disco vincolato.
% Dati per graficare il corpo del disco
%
H : altezza del disco
%
R : raggio del disco
%
N : numero di facce del disco
%
% Questo programma permette di impostare gli angoli e vedere il risultato a video.
RBA=rquat(q); % Calcolo della matrice di rotazione B-->A mediante i
% parametri di Eulero q. A è il sdr fisso, B quello solidale
% al corpo rigido.
% Costruzione della matrice di trasformazione TBA. Per mostrare il disco con
% l'esse z orizzontale RBA deve essere premoltiplicata per [[0 1 0];[0 0 1];[1 0 0]];
TBA=trasm(RBA,P);
TA0=trasm([[0 1 0];[0 0 1];[1 0 0]],[0 0 0]');
TCB=trasm(eye(3),[-0.1 0 0]'); % sdr con origine nel punto di contatto C
TCA=TBA*TCB;
pltassi(TA0,'g','A',1,0.3) % sdr A (fisso)
38
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
hold on
view([1 1 0.2])
%view([1 0 0])
axis([-1 1 -1 1 -1 1]*0.4)
pltassi(TA0*TBA,'b','B',1,0.3) % sdr B con origine nel centro di massa
pltassi(TA0*TCA,'c','C',1,0.15) % sdr con origine nel punto di contatto C
plroto(eye(4),TA0*TBA,'m',H,R,N) % corpo del disco
Il computo delle reazioni vincolari secondo la (2.1.13) viene effettuato dalla funzione forvinc.
function F=forvinc(W,AW,g,m,r)
% Funzione per il calcolo delle reazioni vincolari dovute al moto di
% un copro rigido vincolato in un punto mediante un giunto sferico.
% W : velocità angolare del corpo rigido espressa nel sdr B (solidale al corpo)
% AW : accelerazione angolare del corpo rigido espressa nel sdr B (solidale al corpo)
% g : vettore dell'acc. di gravità espresso nel sdr B
% m : massa del corpo
% r : lunghezza che definisce la posizione del baricentro del corpo rispetto al vincolo
% F : Forze vincolari, espresse nel sdr B
Wx=W(1);
Wy=W(2);
Wz=W(3);
AWx=AW(1);
AWy=AW(2);
AWz=AW(3);
gx=g(1);
gy=g(2);
gz=g(3);
F =...
[[m*(-Wz^2*r-Wy^2*r)-m*gx];...
[ m*(AWz*r+Wx*Wy*r)-m*gy];...
[m*(-AWy*r+Wx*Wz*r)-m*gz]];
Vengono presentati alcuni esempi di applicazione dei programmi realizzati.
Esempio 2.1.1: Analizzare il moto di un pendolo composto schematizzato come un disco
incernierato con un giunto sferico.
Viene presentato il moto con il disco inizialmente con asse verticale. Le condizioni iniziali
sull'assetto sono (vedi il dy_arm) (α ,β , γ ) = ( 0,90° ,0) . La Fig. E.2.1.1.1 mostra quattro
configurazioni in altrettanti istanti. Si fa notare che tale figura è stata leggermente modificata
rispetto a quella originale ottenuta con MATLAB per questioni di chiarezza. Si ricorda, inoltre, che
le uscite a video sono a colori.
39
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0.4
xA
zB
0.3
0.2
0.4
xA
0.3
0.2
zC
Fvinc
0.
xC
W
h Fvinc
yC V
A
xB
yA
B
0
-
0
zA
-0.2
-0.3
-0.3
-0.4
-0.4
-0.4
-0.4
-0.2
0
0.2
0
0.2
0.4 0.4
yA
-
-0.2
-0.2
-0.4
0.4
0.
0.
A
yC
zC
yA
-0.2
yB
zB
-0.3
V
-0.2
0
0.2
zA
xC
zB
-0.2
0
0.2
0.3
0.2
-
A
h
xB
0.4 0.4
0.2
0
-0.2
-0.4
t=0.27 s
0.2
0
yC
0.4
xA
Fvinc
0.3
W
yB zC
t=0.01 s
-0.4
-0.4
V
0.
zB
zC
xB
yA
B
0
zA
-
hW
xC
xA
xC
Fvinc
W
h
zA
y CV
A
-0.2
-0.3
0.4 0.4
xB
0.2
0
-0.2
-0.4
-0.4 -0.2
-0.4
0
0.2
0.4 0.4
0.2
0
-0.2 -0.4
t=0.6 s
t=0.86 s
Fig. E.2.1.1.1 Moto tridimensionale di un disco con punto fisso in quattro istanti
ottenuto con dy_arm.
La Fig. E.2.1.1.2 mostra l'andamento temporale delle coordinate del centro di massa espresse nel sdr
fisso e la traiettoria nel piano x,y (sdr fisso).
40
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0
0
x 10
-9
-1
x [m ] -0 .0 5
y [m ] -2
-3
-0 .1
0
0 .5
t [s]
-4
1
0 .3
0 .3
0 .2
0 .2
0 .1
z [m ]
0 .1
z [m ]
0
0
0 .5
t [s]
0
0 .5
t [s]
0
-4
1
-2
y [m ]
1
0
x 10
-9
Fig. E.2.1.1.2 Coordinate del centro di massa di un disco con punto fisso (sdr A, fisso)
e sua traiettoria nel piano z,y ottenuto con dy_arm.
-8
q0
1
1
0.5
0.5
0
-1
0
0
q1
-0.5
x 10
-0.5
0.5
t [s]
-1
0
1
-9
1
8
0.9
7
x 10
0.5
t [s]
1
0.5
t [s]
1
q3
q2
0.8
0.7
0
6
0.5
t [s]
5
0
1
Fig. E.2.1.1.3 Andamento dei parametri di Eulero ottenuto con dy_arm.
La Fig. 2.1.1.3 contiene l'andamento temporale dei parametri di Eulero.
La visualizzazione del moto in tempo reale ottenuta in MATLAB permette una maggiore esaustività
rispetto a questo poche figure riportate. Per osservare il moto lasciare correre la simulazione. Per
interromperla digitare ctrl C.//
41
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Esempio 2.1.2: Analizzare il moto di un pendolo composto schematizzato come un disco
incernierato con un giunto sferico quanto fra gli istanti 0.15 e 0.2 s viene applicata una coppia
esterna pari a 2 Nm secondo l'asse x solidale.
Partendo dalle stesse condizioni iniziali dell'esempio precedente (vedi il listato di dy_arm)
(α ,β , γ ) = (0,90° ,0) nella funzione arm al posto di:
if t>=0.05 & t<=0.06;
TAUE=[0 0 0]';
else
TAUE=[0 0 0]';
end
inserire:
if t>=0.15 & t<=0.2;
TAUE=[2 0 0]';
else
TAUE=[0 0 0]';
end
0.4
xA
zB
0.3
0.2
0.4
xA
0.3
0.2
zC
Fvinc
zB
zC
0.
0.
xB
yA
B
0
-
xC
W
h Fvinc
yC V
A
0
zA
-0.2
-0.3
-0.3
-0.4
-0.4
-0.4
-0.4 -0.2
0
0.2
0
0.2
0.4 0.4
-0.2
-0.4
zA
A
hx C
W
yB
-0.2
-0.2
yC
yA
-
xB
0
0.2
V
0.2
0.4 0.4
t=0.15 s
t=0.01 s
0.4
0.4
xA
0.3
0.2
0
yC
0.
yC
yB
0
zA
A
yB
0.2
yA
-
xA
0.3
V
zB
Fvinc
zC
0.
yA
-
xC
-0.2
-0.2
Fvinc
zC
zA
zB xC
A
V
-0.3
-0.4
-0.4
-0.2 -0.4
0
h
0
0.2
0.4 0.4
0.2
xB
W
-0.3
xB
W
-0.2
h
0
-0.2
-0.4
-0.4 -0.2
-0.4
0
0.2
0.4 0.4
0.2
0
-0.2 -0.4
t=0.83 s
t=0.3 s
Fig. E.2.1.2.1 Moto tridimensionale di un disco con punto fisso in quattro istanti con coppia
secondo x di 2 Nm applicata nell'intervallo 0.15-0.2 s, ottenuto con dy_arm.
42
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0
0 .1
0 .0 5
x [m ]
-0 .0 5
0
y [m ]
-0 .0 5
-0 .1
z [m ]
0
0 .5
-0 .1
1
0 .2
0 .2
0 .1 5
0 .1 5
0 .1
z [m ] 0 .1
0 .0 5
0 .0 5
0
0
0 .5
t [s ]
0
0
-0 .1
1
0 .5
t [s ]
1
0
y [m ]
0 .1
Fig. E.2.1.2.2 Coordinate del centro di massa di un disco con punto fisso (sdr A, fisso)
e sua traiettoria nel piano z,y con coppia secondo x di 2 Nm applicata nell'intervallo
0.15-0.2 s, ottenuto con dy_arm.
q0
1
1
0 .5
0 .5
-0 .5
q2
q1
0
0
0 .5
t [s ]
0
-0 .5
1
1
1
0 .5
0 .5
0
q3
-0 .5
-1
0
0 .5
t [s ]
1
0
0 .5
t [s ]
1
0
-0 .5
0
0 .5
t [s ]
-1
1
Fig. E.2.1.2.3 Andamento dei parametri di Eulero con coppia secondo x di 2 Nm
applicata nell'intervallo 0.15-0.2 s, ottenuto con dy_arm.
Da queste figure è immediato come il moto sia molto più perturbato rispetto al caso trattato
nell'esempio precedente.//
Esempio 2.1.3: Analizzare il moto di una disco spinnato secondo l'asse di rotazione corrispondente
al diametro.
43
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
Ora le condizioni iniziali saranno (vedi il dy_arm) (α ,β , γ ) = ( 0,1° ,0) . L'inclinazione di 1° rispetto
alla verticale serve per evidenziare l'effetto stabilizzante dovuto all'effetto giroscopico. Si impone il
moto di spin secondo l'asse x solidale mediante la variabile Nturn. La configurazione iniziale viene
riportata nella Fig. E.2.1.3.1 per il caso con Nturn=0.
xA
xB
0.4
0.3
0.2
Fvinc
xC
0.1
0
yA
-0.1
V
A
W
h
zB
zA
yB
zC
yC
-0.2
-0.3
-0.4
-0.4
-0.2
0
0.2
0.4
0.4
0.2
0
-0.2
-0.4
Fig. E.2.1.3.1 Configurazione iniziale, disco non spinnato ottenuto con dy_arm.
Nelle Fig. E.2.1.3.2-E.2.1.3.6 sono mostrati l'andamento delle coordinate del centro di massa e la
sua traiettoria, rispettivamente per i casi Nturn=0,100,500,700 e 1000 g/min.
x [m ]
0
1
-0 .0 5
0 .5
- 0 .1
y [m ] 0
-0 .1 5
-0 .5
- 0 .2
0
1
t [s ]
2
-1
0 .2
0 .2
0 .1
0 .1
z [m ]
0
0
z [m ]
- 0 .1
0
1
t [s ]
2
0
-0 .1
-1
1
t [s ]
2
0
y [m ]
1
Fig. E.2.1.3.2 Coordinate del centro di massa di un disco con punto fisso (sdr A,
fisso) e sua traiettoria nel piano z,y con disco non spinnato, ottenuto con
dy_arm.
44
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0
0 .0 5
-0 .0 5
x [m ] -0 .1
y [m ]
0
-0 .1 5
-0 .2
0
z [m ]
0 .5
1
t [s ]
1 .5
- 0 .0 5
0
2
0 .1
0 .1
0 .0 5
0 .0 5
z [m ]
0
-0 .0 5
0 .5
1
t [s ]
1 .5
2
0
- 0 .0 5
-0 .1
0
0 .5
1
t [s ]
1 .5
-0 .1
-0 .0 5
2
0
y [m ]
0 .0 5
Fig. E.2.1.3.3 Coordinate del centro di massa di un disco con punto fisso (sdr A,
fisso) e sua traiettoria nel piano z,y Nturn=100 g/min, ottenuto con dy_arm.
0
0 .0 5
-0 .0 5
0
x [m ]
-0 .1
y [m ]
- 0 .0 5
-0 .1 5
0
0 .5
1
-0 .1
1 .5
0
t [s ]
0 .5
1
1 .5
t [s ]
0 .2
0 .2
0 .1
0 .1
0
z [m ] 0
z [m ]
-0 .1
0
0 .5
1
1 .5
t [s ]
-0 .1
-0 .1
0
y [m ]
Fig. E.2.1.3.3 Coordinate del centro di massa di un disco con punto fisso (sdr A,
fisso) e sua traiettoria nel piano z,y Nturn=500 g/min, ottenuto con dy_arm.
45
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0
0 .1
-0 .0 2
0 .0 5
-0 .0 4
x [m ]
-0 .0 6
-0 .0 8
0
y [m ]
-0 .0 5
0
1
t [s ]
-0 .1
2
0 .1
0 .1
0 .0 5
0 .0 5
z [m ]
0
-0 .1
1
t [s ]
2
0
y [m ]
0 .1
0
z [m ]
-0 .0 5
0
-0 .0 5
0
1
t [s ]
-0 .1
-0 .1
2
Fig. E.2.1.3.5 Coordinate del centro di massa di un disco con punto fisso (sdr A,
fisso) e sua traiettoria nel piano z,y Nturn=700 g/min, ottenuto con dy_arm.
2
x [m ]
x 10
-5
4
0
2
-2
y [m ] 0
-4
-2
-6
6
0
x 10
-3
1
t [s ]
-4
2
6
4
-3
0
x 10
-3
1
t [s ]
2
4
z [m ]
z [m ]
2
0
-2
x 10
2
0
0
1
t [s ]
-2
-5
2
0
y [m ]
5
x 10
-3
Fig. E.2.1.3.6 Coordinate del centro di massa di un disco con punto fisso (sdr A,
fisso) e sua traiettoria nel piano z,y Nturn=1000 g/min, ottenuto con dy_arm.
Si osservi da queste figure come lo spostamento secondo la coordinata x (che manifesta la caduta
del disco) all'aumentare dello spin attorno all'asse x tenda ad annullarsi. Si osservi, inoltre, come la
traiettoria del centro di massa si chiuda man mano che aumenta lo spin.
Per completezza si riporta il moto del disco in quattro istanti diversi e per il caso con Nturn=1000
g/min nella Fig. E.2.1.3.7.
46
DINAMICA DEL CORPO RIGIDO, by Roberto Da Forno, [email protected]
0.4
0.4
xx B
A
0.3
0.2
0.
0
-
0.
zB
0
zA
zC
yC
-0.2
-0.3
-0.3
-0.2
0
0.2
0.4
0
0.2
0.4
yB
yA
-
-0.2
-0.4
-0.4
W
h
0.2
xC
VFvinc
A
yB
yA
xx B
A
0.3
W
h
-0.2
-0.4
-0.4
-0.4
-0.2
0
xC
Fvinc
A
V
0.2
0.4 0.4
0
0.2
-0.2
-0.4
-0.2
-0.4
t=0.03 s
t=0.01 s
0.4
0.4
xx AB
0.3
0.
zC
-
0.
yB
zA
0
yC
-0.2
-0.3
-0.3
0
0.2
0.4
0.4
0.2
yA
-
-0.2
-0.2
W
h
0.2
xC
Fvinc
V
A
zB
yA
0
xxBA
0.3
W
h
0.2
-0.4
-0.4
zA
zB
yC zC
0
-0.2
-0.4
-0.4
-0.4
xC
Fvinc
A
V
yB
yC
-0.2
0
0.2
0.4 0.4
zB
zA
zC
0.2
0
t=0.15 s
t=0.1 s
Fig. E.2.1.3.7 Moto tridimensionale di un disco spinnato secondo x con punto fisso in quattro
istanti con Nturn=1000 g/min, ottenuto con dy_arm.
Il lettore apprezzerà ancor più l'effetto giroscopico simulando direttamente l'influenza dello spin
secondo all'asse x. Si ricordi di modificare opportunamente i fattori di scala per il plottaggio della
velocità angolare e del momento angolare quando viene variato lo spin.//
I metodi finora presentati sono particolarmente utili per lo studio del moto di un singolo corpo
rigido, sia esso ad esempio un aereo, un satellite o un razzo, si tratta di definire opportunamente le
forze e coppie applicate dipendenti dal moto.
Sono state ricavate le equazioni del moto attraverso un metodo non iterativo che in via generale mal
si presta a sistemi di corpi rigidi interconnessi quali i robot per i quali un approccio di tipo iterativo
sarebbe senza dubbio migliore.
Nei capitoli che seguiranno verranno introdotti i concetti di cinematica e dinamica dei sistemi di
corpi rigidi interconnessi fino allo sviluppo completo dell'approccio iterativo di Newton-Eulero
attraverso il quale la scrittura delle equazioni del moto per sistemi di corpi rigidi interconnessi
risulta agevole ed automatizzabile.
47