• Non ci sono risultati.

Sono stati eseguiti esperimenti per molle con 6 rigidezze diverse, da 0.15N/mm a 1N/mm. Gli eseprimenti sono stati eseguiti ri- spettando la seguente procedura: il robot viene lasciato cadere da un’angolo θ2 = 60deg con velocità iniziale orizzontale nulla e an-

golo di attacco α = 90deg. Non appena viene detettao il contatto, il motore esegue uno spostamento con controllo in retroazione pro- porzionale di un angolo comandato pari a 30deg, per compensare gli attriti e gli effetti inerziali dovuti alla sua dinamica. Quando viene meno il contatto con il suolo il motore torna alla posizione iniziale.

Per il controllo in retroazione del motore è utilizzato il sensore di posizione sul giunto attuato θ3.

In figura 4.18 sono riportati i grafici delle misure fornite dal sen- sore di forza e delle posizioni angolari rilevate dagli encoder posi- zionati sui giunti rotoidali θ1, θ2 e θ3.

8.2 8.3 8.4 8.5 150 200 250 Force contact [ s ] Proporitional Force 8.2 8.3 8.4 8.5 −15 −10 −5 0 Motor Angle [ s ] degree 8.2 8.3 8.4 8.5 −15 −10 −5 0 5 10

Vertical Joint: JUMP

[ s ] [ degree ] 8.1 8.2 8.3 8.4 8.5 30 40 50 60 70

Horizontal Joint: HOP

[ s ]

[ degree ]

Figura 4.18: Grafici della misura fornita dal sensore di forza (alto a sinistra), dell’angolo del- l’albero di uscita del motore (alto a destra), dell’angolo del giunto rotoidale relativo allo spo- stamento verticale e del giunto rotoidale relativo allo spostamento orizzontale. I dati sono stati ottenuti per il prototipo realizzato, con una molla di rigidezza 0.5N/mm, una massa superiore equivalente di circa 637g, una massa della gamba di circa 123g. Il punto rosso rappresenta l’istante in cui viene detettato il contatto

Conclusioni

E’ stato realizzato un nuovo algoritmo di calcolo per la traiettoria del sistema, al quale é stata adattata una nuova strategia di con- trollo per il moto passivo del sistema. Dai risultati ottenuti si evi- denziano miglioramenti delle prestazioni del sistema nel suo moto passivo.

Sviluppi Futuri

Studiando la fase di volo è possibile migliorare ulteriormente le prestazioni del sistema ed eliminare la dipendenza dalla fase di contatto.

Un nuovo modello matematico per la fase di contatto che tenga conto del rapporto tra l’angolo di attacco e l’angolo della velocità iniziale.

Realizzare una struttura a due gambe per provare la legge di con- trollo definita per valutarne le prestazioni.

Capitolo 5

Appendice A

In questa sezione sono riportati i listati principali dei modelli cal- colati.

5.1 (

Modello SLIP considerato il punto di stacco dal terreno la coordi- nata verticale del centro di massa)

% Cunsolo Davide Salvatore % matricola 419766

clc clear all close all

% Initial Step for Runge-Kutta method

Step = odeset('InitialStep',0.00001,'MaxStep',0.01); tf = 2; % final time % System Note m = 1; % mass g = 9.81; % acceleration gravity L = 1; % length leg k = 950; % stifness

alpha_attack = 85; % angle attack alpha = deg2rad(alpha_attack);

beta_gradi = 45; % angle initial velocity beta = deg2rad(beta_gradi);

x0 = -L*cos(alpha); % initial position x axis y0 = sqrt((L^2)-(x0^2)); % initial position y axis Vi = 3; % initial velocity

Vx = Vi*cos(beta); % initial velocity x axis Vy = -Vi*sin(beta); % initial velocity y axis

% funzione-handle

fhandle = str2func('modello'); %%%%%%% Dynamic Touchdown (TD)

[ t, output ] = ode45( @modello, [ 0 tf ], condizioni_iniziali, Step, k, L, m, g ); % t: time vector

% output: output matrix where

% output(:,1) x-axis position

% output(:,2) x-axis speed

% output(:,3) y-axis position

% output(:,4) y-axis speed

%%%%% Dynamic Takeoff (TO) dim_pos_y = size( output(:,3) ); val_tempo = zeros(1,dim_pos_y(1,2));

for i = 1:dim_pos_y(1,1)

if ( ( output( i, 3 ) > output( 1, 3) ) && (val_tempo==0)) val_tempo = i;

end end

tfinale = 2 * output( val_tempo, 4 )/g;

tempo2 = ( t( val_tempo, 1 ): tfinale/50 : tfinale + t( val_tempo, 1 ) )';

parabola_X = output( val_tempo, 1 ) + output( val_tempo, 2 ).*( tempo2 - t( val_tempo, 1 ) ); parabola_Y = output( val_tempo, 3 ) + ( output( val_tempo, 4 ).*( tempo2 - t( val_tempo, 1 ) ) )-...

( 1/2*g*( ( tempo2 - t( val_tempo, 1 ) ).^2 ) ); tempotot = [ t( (1:val_tempo), 1 ); tempo2 ];

ytot = [ output( 1:val_tempo, 3 ); parabola_Y ]; xtot = [ output( 1:val_tempo, 1 ); parabola_X ];

averagespeed_axis = ( parabola_X(end,1) - x0 )/( tempo2(end,1) - t(1,1) ) ; disp([ 'average speed axis = ' num2str(averagespeed_axis) ])

% FIGURE: Mass Displacement on Y axis vs Time figure

plot( tempotot, ytot, 'b', 'LineWidth', 1.5 ) xlabel('Time')

ylabel('Y-displacement') title('Center of Mass Gait') grid on

% FIGURE: Mass Displacement on X axis vs Time figure

plot( tempotot, xtot, 'b', 'LineWidth', 1.5 ) xlabel('Time')

ylabel('X-displacement') title('Center of Mass Gait') grid on

(

Modello SLIP considerato il punto di stacco dove si annulla la forza elastica della molla)

% Cunsolo Davide Salvatore % matricola 419766

clc clear all close all

% Initial Step for Runge-Kutta method

Step = odeset('InitialStep',0.00001,'MaxStep',0.01); tf = 2; % final time % System Note m = 1; % mass g = 9.81; % acceleration gravity L = 1; % length leg k = 950; % stifness

alpha_attack = 85; % angle attack alpha = deg2rad(alpha_attack);

beta_gradi = 45; % angle initial velocity beta = deg2rad(beta_gradi);

x0 = -L*cos(alpha); % initial position x axis y0 = sqrt((L^2)-(x0^2)); % initial position y axis Vi = 3; % initial velocity

Vx = Vi*cos(beta); % initial velocity x axis Vy = -Vi*sin(beta); % initial velocity y axis

condizioni_iniziali = [x0 Vx y0 Vy]; % initial condition % funzione-handle

fhandle = str2func('modello');

%%%%%%% Dynamic Touchdown (TD)

[ t, output ] = ode45( @modello, [ 0 tf ], condizioni_iniziali, Step, k, L, m, g ); % t: time vector

% output: output matrix where

% output(:,1) x-axis position

% output(:,2) x-axis speed

% output(:,3) y-axis position

% output(:,4) y-axis speed

% EVALUATION OF THE END TO THE CONTACT PHASE % take the values of deltaL=0

L1 = sqrt(output(:,1).^2 + output(:,3).^2); % length spring in touchdown phase. deltaL = L1 - L; % variable stiffness.

deltaL_bool = deltaL(20:end) > 0; % variable stiffness boolean value. % deltaL1(20:end): take twenty-first element of the vector because it is % very different from zero

endcontactindex = find(deltaL_bool == 1,1,'first') + 19; % index instant final Touchdown phase. In this the force is egual zero. % EVALUETION FORCE AND ENERGY SYSTEM DURING THE TOUCHDOWN PHASE

FspringTD = k*deltaL(1:endcontactindex,1); % force spring gait in touchdown phase.

VTD = ( output(1:endcontactindex,2).^2 + output(1:endcontactindex,4).^2 ); % velocity gait in touchdown phase. ETD = 1/2*(m*VTD) + m*g*sin(alpha); % kinetic energy in touchdown phase.

UTD = 1/2*k*deltaL(1:endcontactindex,1); % potential energy in touchdown phase.

%%%%% Dynamic Takeoff (TO)

timeTDend = t( endcontactindex, 1 ); % final instant Touchdown timeTO = 2*( output( endcontactindex, 4 )/g ); % final instant Takeoff time_fly = ( timeTDend : timeTO/50 : timeTDend + timeTO )'; % time fly

% x axis: position_x = x_end_touchdown + x_initial_takeoff

parabola_x = output( endcontactindex, 1 ) + ( output( endcontactindex, 2 ).*( time_fly - t( endcontactindex, 1 ) ) ); % y axis: position_y = y_end_touchdown + y_initial_takeoff

parabola_y = output( endcontactindex, 3 ) + ( output( endcontactindex, 4 ).*( time_fly - t( endcontactindex, 1 ) ) ) - ... ( 1/2*g*( ( time_fly - t( endcontactindex, 1 ) ).^2 ) );

Time = [ t( ( 1:endcontactindex ), 1 ); time_fly ]; X = [ output( ( 1:endcontactindex ), 1 ); parabola_x ]; Y = [ output( ( 1:endcontactindex ), 3 ); parabola_y ];

averagespeed = ( parabola_x(end,1) - x0 )/( timeTO + t(endcontactindex,1) ) ; disp(['average speer = ', num2str(averagespeed) ])

% FIGURE: Mass Displacement Y axis vs Time figure

plot( Time, Y, 'LineWidth', 1.5 ) xlabel('Time [ s ]')

ylabel('Y-displacement [ m ]') title('Center of Mass Gait') grid on

% FIGURE: Mass Displacement X axis vs Time figure

plot( Time, X, 'LineWidth', 1.5) xlabel('Time [ s ]')

ylabel('X-displacement [ m ]') title('Center of Mass Gait') grid on

% FIGURE: Mass Displacement X axis vs Y axis figure

plot( X, Y, 'LineWidth', 1.5) xlabel('x-displacement [ m ]') ylabel('y-displacement [ m ]') title('Center of Mass Gait') grid on

TimeTD = t(1:endcontactindex,1); % FIGURE: Force Spring gait figure

plot( TimeTD, FspringTD, 'LineWidth', 1.5) xlabel('time [ s ]')

ylabel('Force sping [ m ]')

title('Force Spring Gait in touchdown') grid on

% FIGURE: Kinetic Energy gait figure

plot( TimeTD, ETD, 'Linewidth', 1.5) xlabel('time [ s ]')

ylabel('Kinetic Energy [ N m ] ') title('Kinetic Energy Gait in touchdown') grid on

% FIGURE: Potential Energy gait figure

plot( TimeTD, UTD, 'Linewidth', 1.5) xlabel('time [ s ]')

ylabel('Potential Energy [ N m ]')

title('Potential Energy Gait in touchdown') grid on

(

Implementazione in C++ )

Software di comunicazione C++

// Hopping Robot: Manuel Bonilla - Manolo Garabini - Davide Salvatore Cunsolo // librerie del c++ #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <getopt.h> #include <string.h> #include "qbmoveAPI/qbmove_packages.h" #include "qbmoveAPI/qbmove_communications.h" #include <time.h> #include <windows.h> // Tempo di campionamento: 7 mms int main (int argc, char **argv) {

// Definizione delle variabili

comm_settings comm_settings_t;// definizione delle varibili di comunicazione short int measurements1[3];

short int measurements2[3]; short int inputs[2];

// Definizione delle variabili ausiliarie per l'inizializzazione dei sensori short int degr;

short int contact_up; short int contact_down; short int zero1; short int zero2; short int zero3;

short int measurements_mem;

// variabili per la misura del tempo dell'esperimento clock_t t1, t2, t3, t4;

double indelay;

degr = 30; // angolo di attacco inputs[0] = 0;

inputs[1] = 0;

// inizializzazione della comunicazione openRS485(&comm_settings_t, "COM5"); commGetMeasurements(&comm_settings_t, 2, measurements1); commGetMeasurements(&comm_settings_t, 1, measurements2); inputs[0] = measurements1[1]; inputs[1] = measurements1[1]; commSetInputs(&comm_settings_t, 2, inputs); commActivate(&comm_settings_t, 2, TRUE); printf("enter to begin\n"); getchar(); t1 = clock();

// Definizione della condizione di contatto e non contatto del sensore di pressione commGetMeasurements(&comm_settings_t, 2, measurements1);

commGetMeasurements(&comm_settings_t, 1, measurements2);

measurements_mem = measurements1[1]; // Definisce il Treshold = soglia del sensore di pressione contact_up = measurements1[2]+20;

zero1 = measurements1[0]; zero2 = measurements1[1]; zero3 = measurements2[2]; inputs[1] = measurements_mem;

commSetInputs(&comm_settings_t, 2, inputs); // Attesa del contatto

while (measurements1[2] < contact_up){

commGetMeasurements(&comm_settings_t, 2, measurements1); }

inputs[0] = measurements_mem + 92*(degr); inputs[1] = measurements_mem + 92*(degr); commSetInputs(&comm_settings_t, 2, inputs); t3 = clock();

t4 = clock();

indelay = (((float)t4 - (float)t3) / 1000000.0F ) * 1000;

// Delay: ritardo per contact detection, per evitarre contatti multipli while (indelay < .08){

t4 = clock();

indelay = (((float)t4 - (float)t3) / 1000000.0F ) * 1000; }

// E' insierito perché c'è il fenomeno fisico che può essere indicato come "chattering" dopo il primo contatto, per evitare // si realizza un'attesa prima di chiedere nuovamente se esiste il contatto e in caso negativo effettuare lo swing

//Attesa della fine del contatto

while (measurements1[2] >= contact_down){

commGetMeasurements(&comm_settings_t, 2, measurements1); }

// Ritorno alle condizioni iniziali. commActivate(&comm_settings_t, 2, TRUE); inputs[1] = measurements_mem;

commSetInputs(&comm_settings_t, 2, inputs); // chiusura della comunicazione

t2 = clock(); commActivate(&comm_settings_t, 2, FALSE); closeRS485(&comm_settings_t); return 0; } PostProcessing in MATLAB clc close all verticaljoint = results(:,1); angle = results(:,2); contact = results(:,3); horizontaljoint = results(:,4); time = results(:,5); rp_rad = 2*pi/(360); x_length = 482;%mm y_length = 407;%mm

a = find(time > data, 1, 'first'); figure

title('Experimntal 1: k = 0.31 N mm^-^1 \alpha = 40') subplot(2,2,1)

plot(time, contact,'k', 'LineWidth', 1 ); title('Force contact')

xlabel('[ s ]')

ylabel('Proporitional Force') grid on

subplot(2,2,2) plot(time,-angle,'k', 'LineWidth', 1 ) title('Motor Angle') xlabel('[ s ]') ylabel(' degree ') grid on %%%%%%%%%%%%%%%%%%%%%%% subplot(2,2,3)

plot( time, -verticaljoint, 'k', 'LineWidth', 2 ) title('Vertical Joint: JUMP')

hold on

plot(time(a), -verticaljoint(a), 'o', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r' ) xlabel('[ s ]')

ylabel('[ degree ]') grid on

%%%%%%%%%%%%%%%%%%%%%%% subplot(2,2,4)

plot( time, -horizontaljoint, 'k', 'LineWidth', 2 ) title('Horizontal Joint: HOP')

hold on

plot(time(a),-horizontaljoint(a), 'o', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r' ) xlabel('[ s ]')

ylabel('[ degree ]') grid on

figure

subplot(1,2,1)

plot( time, -horizontaljoint*rp_rad*x_length, 'k', 'LineWidth', 2 ) title('Horizontal Joint: HOP')

hold on

plot(time(a),-horizontaljoint(a)*rp_rad*x_length, 'o', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r') xlabel('[ s ]')

ylabel('[ degree ]') grid on

%%%%%%%%%%%%%%%%%%%%% subplot(1,2,2)

plot( time, -verticaljoint*rp_rad*y_length, 'k', 'LineWidth', 2 ) title('Vertical Joint: JUMP')

hold on

plot(time(a),-verticaljoint(a)*rp_rad*y_length, 'o', 'MarkerEdgeColor', 'r', 'MarkerFaceColor', 'r') xlabel('[ s ]')

ylabel('[ degree ]') grid on

Ringraziamenti

Vivissimi ringraziamenti vanno:

Ai Professori Antonio Bicchi e Marco Gabiccini per la disponibi- lità˘a.

A tutti i ragazzi del Centro Piaggio, in particolare: Manolo Ga- rabini, Giammaria Gasparri, Manuel Bonilla, Manuel Catalano, Andrea Di Basco, Fabio Bonomo, Vinicio Tincani e Alberto Gre- co, per la realizzazione di questo lavoro; Matteo Bianchi, Da- vide Di Baccio e Alexandra Vivas Velasco per la simpatia e la disponibilità.

Ringrazio i Professori Giancarlo Zini, Andrea Caiti e Alberto Lan- di per i consigli dati durante il mio corso di laurea.

Cari ringraziamenti alle persone che mi hanno accompagnato in questo lungo periodo di vita pisana, gli amici: Carlo&Maria Gra- zia, Benedetta & Filippo, Claudio&Alessia, Gaspare&Daniela, Roc- co&Lucrezia, Dante&Andrea, Rocco Bertugno, Salvo&Federica, Roberta Tedeschi, Paolo e Carla Rossi, Valentina Borgianni, An- gelo&Rosmeri, Carmelo&Graziella, Salvo&Lidia, Tonino Romeo. I più cari e affettuosi ringraziamenti a mio fratello Marco, che nel momento peggiore a saputo trovare la soluzione per aiutarmi al quale va doverosamente dedicato questo lavoro, i miei genitori per l’appoggio mai mancato, agli zii Giuseppe e Anna, le mie cugine Eleonora e Simona.

Bibliografia

[1] SEVENTH FRAMEWORK PROGRAM, Variable Impedan- ce ACTuation:systems embodying advanced interaction be- haviORS, Specific Targeted Research or Innovation Pro- ject Seventh Framework Programme Information Society Technologies IST, FP7-ICT-2007-3-231554.

[2] Marc H. Raibert and other (1986) Dinamically Stable Legged Locomotion, Massachusett Institut of Tecnology, Artificial Intelligence Laboratory.

[3] Marc H. Raibert (1989) Legged Robot, Massachusett Institut of Tecnology, leg Laboratory.

[4] Reinhard Blickhan (1989) The Spring-Mass Model for Running and Hopping, Concord Field Station, Harvard University.

[5] Hartmut Geyer, Andre Seyfarth, Reinhard Blickan(2009) Spring-mass running: simple approximate solution and application to gait stability, Journal of Theorical Biology. [6] Michael Ernst, Harumut Geyer, Reinhard Blickhan Spring-

Leggend locomotion on uneven ground: a control approach to keep the running speed constant Swiss Federal Institute of Tecnology Physikstrasse and University of Jena

[7] Katie Byl, Marten Byl, Martin Rutschmann, Brian Satzin- ger, Luois van Blarigan, Giulia Piovan, Jason Cortell (2012) Series-Elastic actuation prototype for Rough Terrain Hop-

ping University of California at Santa Barbara, CA, 93106, USA

[8] Sang-Ho Hyon http://www.cns.atr.jp/~sangho/ Passive/passive_en.htm

[9] ¨Omur¨ Arslan, Uluc Saranli and ¨Omur Morg¨ ul, ICRA (2009)¨ An approximate stance map of the spring mass hopper with gravity correction for nonsymmetric locomotion

[10] Giulia Piovan and Katie Byl, ICRA (2012) Enforced sym- metry of the stance phase for the spring-loaded inverted pendulum

[11] Ajij Sayyad ,B. Seth and P. Seshu, Cambridge Universi- ty Press (2007) Single-legged hopping robotics research - A review

[12] Hamid Reza Vejadani and Jonathan W. Hurst CLA- WAR (2012) Swing leg control for actuated spring-mass robots Oregon State University, Corvallis, Oregon, USA [13] Y Blum S W Lipfert J Rummel and A Seyfarth IOPScien-

ce (2010) Swing leg control in human running Lauflabor Lo- comotion Laboratory, University of Jena, Dornburger strasse 23, 07743 Jena, Germany

[14] M Ernst H Geyer and R Blickhan IOPScience (2012) Exten- sion and customization of self-stability control in compliant legged system Lauflabor Locomotion Laboratory, Universi- ty of Jena, Dornburger strasse 23, 07743 Jena, Germany and Robotics Institute, Carnegie Mellon University, Pittsburg, PA 15213, USA

[15] Sang-Ho Hyon and and Takashi Emura (2003) Energy- preserving control of a passive one-legged running De- partment of Bioengineering and Robotics, Graduate School

of Engineering, Tohoku University, Aramaki-Aza-Aoba 01, Sendai 980-8579,Japan

[16] Felipe Belo (2012) qb Robotics Department of Robotics, ‘E. Piaggio’ Center, University of Pisa, Italy

[17] Anotnio Bicchi(2009) Dispense del corso di Robotica II De- partment of Robotics, ‘E. Piaggio’ Center, University of Pisa, Italy

Bibliografia

[1] Thomas Buschmann, Sebastian Lohmeier, and Heinz Ul- brich. Humanoid robot lola: design and walking control. J Physiol Paris, 103(3-5):141–8.

[2] M. G. Catalano, G. Grioli, M. Garabini, F. A. W. Belo, A. di Basco, N. Tsagarakis, and A. Bicchi. Implementing a variable impedance actuator. In International Conference of Robotics and Automation - ICRA 2012, pages 2666 – 2672, Saint Paul, MN, USA, May 14 - 18 2012.

[3] M.G. Catalano, G. Grioli, M. Garabini, F. Bonomo, M. Man- cinit, N. Tsagarakis, and A. Bicchi. Vsa-cubebot: A modu- lar variable stiffness platform for multiple degrees of free- dom robots. In Robotics and Automation (ICRA), 2011 IEEE International Conference on, pages 5090 –5095, may 2011. [4] Kevin C. Galloway, Jonathan E. Clark, Mark Yim, and Da-

niel E. Koditschek. Experimental investigations into the ro- le of passive variable compliant legs for dynamic robotic locomotion. In ICRA, pages 1243–1249. IEEE, 2011.

[5] D. M. Gan, N. G. Tsagarakis, J. S. Dai, and D. G. Cald- well. Joint stiffness tuning for compliant robots: Protecting the robot under accidental impacts. In 13th World Congress in Mechanism and Machine Science,2011, 2011.

[6] Jonathan W. Hurst, Alfred A. Rizzi, and Matt Mason. The role and implementation of compliance in legged locomotion.

Technical report, 2008.

[7] Kenji Kaneko, Kensuke Harada, Fumio Kanehiro, Gou Miya- mori, and Kazuhiko Akachi. Humanoid robot hrp-3. In IROS, pages 2471–2478. IEEE, 2008.

[8] Matteo Laffranchi, Nikolaos G. Tsagarakis, and Darwin G. Caldwell. A variable physical damping actuator (vpda) for compliant robotic joints. In ICRA, pages 1668–1674. IEEE, 2010.

[9] Hirose Masato and Takenaka Tooru. Development of hu- manoid robot asimo. Honda R&D Tech Rev, 13(1):1–6, 2001.

[10] Shane A. Migliore, Lena H. Ting, and Stephen P. DeWeerth. Passive joint stiffness in the hip and knee increases the energy efficiency of leg swinging. Auton. Robots, 29(1):119–135, 2010.

[11] Y. Ogura, H. Aikawa, Shimomura K., A. Morishima, Hun ok Lim, and A. Takanishi. Development of a new humanoid robot wabian-2. In Robotics and Automation, 2006. ICRA 2006. Proceedings 2006 IEEE International Conference on, pages 76 –81, may 2006.

[12] G.A. Pratt and M.M. Williamson. Series elastic actuators. In Intelligent Robots and Systems 95. ’Human Robot Interac- tion and Cooperative Robots’, Proceedings. 1995 IEEE/RSJ International conference on, volume 1, pages 399 –406 vol.1, aug 1995.

[13] B. Vanderborght, B. Verrelst, R. Van Ham, M. Van Dam- me, D. Lefeber, B. Meira Y. Duran, and P. Beyl. Exploi- ting natural dynamics to reduce energy consumption by con- trolling the compliance of soft actuators. I. J. Robotic Res., 25(4):343–358, 2006.

Documenti correlati