using ruud meulenbroek david rosenbaum, mary klein breteler, bert steenbergen 12 may 2005 in a...

37
Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Upload: pamela-green

Post on 16-Dec-2015

217 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Using

Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen

12 May 2005

in a Prehension Study

Page 2: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Overview1. Sneak Preview

• Report of experimental results to colleagues2. Use of Matlab

• Principle• File I/O• Data preprocessing• Finding relevant time indices in behaviour• Plotting• Calculating critical performance variables• Time-normalizing functions• Creating a data matrix for statistical analyses• Write output file for SPSSX

Page 3: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Topic: “Hand shaping in grasping”

• Background– Maximum aperture is linearly scaled to object size

(Jeannerod 1981; Paulignan et al. 1991,1997; Smeets, 1999)

• Research questions– Also when being blindfolded?– What about the rotations of the joints in the hand?

Newell, K. M., Scully, D. M., McDonald, P. V., & Baillargeon, R.  (1989).  Task constraints and infant grip configurations.  Developmental Psychobiology, 22, 817-832.

Sneak preview- Report of experimental results to colleagues -

Page 4: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Theory

• Motion planning– Entails goal-posture selection– Tuned to multiple task constraints

Rosenbaum, D. A., Meulenbroek, R.G.J., Jansen, C., Vaughan, J. (2002).Posture-based motion planning: Applications to grasping.Psychological Review, 108, 708-734.

Meulenbroek, R.G.J., Kappers, A.L., & Mutsaarts, M. (2001). Does haptic space play a role in the planning and execution of grasping movements? Poster presented at the 'Neural control of space coding and action production' meeting in Lyon (France), March 22-24, 2001

Sneak preview

Page 5: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Simulation

Slow movementFast movement

The orientation of the‘opposition axis’

reflects the final arm-hand posture

Sneak preview

Page 6: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Experiment

• 10 Participants• 9 Objects (cylinders of appr. 20 cm height and a

diameter of 0.3, 1.3, 2.3, 3.3, 4.3, 5.3, 6.3, 7.3, 8.3 cm)

• 2 Modality Conditions: (Vision present versus absent; eyes open versus closed; ABBA counterbalancing)

• 10 Replications (resulting in 180 trials per subject)

Sneak preview

Page 7: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Experimental Task– The participant sat comfortably at a table...

– with the left and right hand on two pieces of sandpaper fixated on the table top, appr. 20 cm in front of left and right shoulder

– At the start of each trial the experimenter placed a cylinder in the non-dominant hand of the participant

– The participant held the bottom half of the cylinder with opposing thumb and fingers (of the non-dominant hand)

– An acoustic go-signal was presented

– The participant’s task was to grasp with the dominant hand the top half of the cylinder that he/she held in the non-dominant hand

– In half the trials the participant was asked to close his/her eyes before the cylinder was placed in his/her non-dominant hand

Sneak preview

Page 8: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Method

Optotrak 3020 (NDI, Canada)

Infrared cameras

Data acquisition

Infrared light emitting diodes

Trunk Hand Finger joints

ForearmUpper arm

Pen

“Rigid bodies”

Bouwhuisen, C.F., Meulenbroek, R.G.J., & Thomassen, A.J.W.M. (2002). A 3D motion-tracking method in graphonomic research: Possible applications in future handwriting recognition studies. International Journal of Pattern Recognition, 35(5), 1039-1047 .

Sneak preview

Page 9: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Data acquisition

– Optotrak 3020; two time-locked camera systems– 8 IREDs on the joints of the hand– Sampling rate of 200 Hz– Recording interval of 3 s– Preprocessing: low-pass filtering (<8 Hz)

+

Sneak preview

Page 10: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

IRED configuration and aperture index

1

2

3

4

57

6

8

Aperture (‘opposition axis’ )

Sneak preview

Page 11: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab

KISS : Keep It Simple Stupid (David Rosenbaum)

Principle

Page 12: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Constants, loop parameters, toggle switches

% segmentation.m%clear all;

% constantsFs=200; % Hzsec=1/Fs;filtfreq_low=8;filtfreq_high=0.0;

% number of subjects and data filesibsubject=1;iesubject=12;ibfile=1;iefile=180;

% toggle switchesiplot=1;filter=1;outputwanted=1;

Give your matlab programme a sensible name!

Clear entire memory!

Set constants

Set loop parameters

Exploit toggle switches (0=Off;1=On)

Page 13: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Windows, name of file with design codes

% windows for plotting purposesif iplot==1 fig1=figure('position',[5 300 400 220]); fig2=figure('position',[400 300 400 220]);end;

% subject loopfor subject=ibsubject:iesubject, pp=subject % without semi-colon to provide feedback in command window! ppstr=int2str(pp);

% read the data from the design file design.txtprefix=['C:\Ruud\Projects\Objectsize\data\pp' ppstr '\'];fname=['design'];ext=['.txt'];filename=[prefix fname ext];eval(['load ' filename]);design=eval(fname);

Page 14: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

% put design information in separate arraystrialnr=design(:,1);vision=design(:,2);cylinder_size=design(:,3);ntrials=length(trialnr);

% data file loop for jfile=1:ntrials,

% feedback on filenumber in command windowfile=trialnr(jfile) % again without semicolon!fstr=int2str(file);

% pick up IRED displacement dataext=['.otd'];if jfile<10 fname=['C#000' fstr]; end;if jfile>9 & jfile<100 fname=['C#00' fstr]; end;if jfile>99 fname=['C#0' fstr]; end;filename=[prefix fname ext];

Use of Matlab Design information, file loop, filename datafile

Page 15: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of MatlabRead data file

% read IRED displacement data from file[hdr,cdata] = fpfread(filename);

X1 Y1 Z1 X2 Y2 Z2

Tim

e (s

ampl

es)

fpread.m is separate m-file

Units: mm

Page 16: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Preprocessing IRED displacement data

% interpolate missing data pointsndim=size(cdata);ns_ireds=ndim(1);for idim=1:ndim(2), h=cdata(:,idim); hi=interpolate_missing_data_points(h); cdata(:,idim)=hi;end;

% convert to cm for idim=1:ndim(2), cdata(:,idim)=cdata(:,idim)./10;end;

% Detect missing data value (-36973140302885665500000000000.0000)% and interpolate linearlyfunction [x]=interpolate_missing_data_points(s);mdv=-36973140302885665500000000000.0000;ns=length(s);

if s(1)==mdv i=1; while s(i)==mdv i=i+1; end; s(1:i)=s(i+1);end;

for i=2:ns-1, if s(i)==mdv ib=i-1; j=i; while ((s(j)==mdv) & (j<ns)) j=j+1; end; ie=j; if ie==ns if ib>1 for k=ib:ie, s(k)=s(ib-1); end; end end; ds=(s(ie)-s(ib))./(ie-ib+1); for k=ib:ie, s(k)=s(ib)+((k-ib+1).*ds); end; end;end;x=s;

Page 17: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Preprocessing IRED displacement data: A. filtering % filter datafor idim=1:ndim(2), h=cdata(:,idim); hf=filteren(h,Fs,filtfreq_low); cdata(:,idim)=hf;end;

• Filter = 3rd-order Butterworth filter• Applied forward and backward to prevent phase shift

function[smooth]=filteren(data,Fs,Fc)

% FILTEREN.M% function file voor filteren met verwijdering van de inslinger-effecten % Fs is de sample frequentie% Fc is de afsnijfrequentie

[m,n]=size(data);Fs=Fs./2;

[B,A]=butter(3,Fc/Fs); % 3e orde filter.

% 6e orde low-pass filter, zero phase lag.for j=1:n smooth(:,j) = filtfilt(B,A,data(:,j));end

Page 18: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Preprocessing IRED displacement data: B. filtering% filter datafor idim=1:ndim(2), h=cdata(:,idim); hf=filteren(h,Fs,filtfreq_low); cdata(:,idim)=hf;end;

Red = raw signalBlue = smoothed signal

• Filter = 3rd-order Butterworth filter• Applied forward and backward to prevent phase shift

Page 19: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Additional arrays to prepare plotting

% number of samples, time axis, y=0 axisns=ndim(1);t=[1:ns].*sec;t=t';y0=zeros(1,ns);y0=y0';

Page 20: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Prepare plotting of top view of hand IRED positions

% put IRED data in separate 3D matrix

for i=1:ndim(1),

for j=1:8,

j1=j;

k=(j1-1).*3+1;

handx(i,j)=cdata(i,k);

handy(i,j)=cdata(i,k+1);

handz(i,j)=cdata(i,k+2);

end;

end;

cdata 600x24 115200 double array

handx 600x8 38400 double array handy 600x8 38400 double array handz 600x8 38400 double array

Page 21: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Plot top view of hand

% Plot XY plot

if iplot==1,

figure(fig1);

set(gcf,'Color','white');

title('Top View');

hold on;

axis equal;

view(2);

for i=1:4:600,

plot3(handx(i,:),handy(i,:),handz(i,:),'k');

end;

xlabel('X (cm)');

ylabel('Y (cm)');

end; % of if iplot==1

Start

End

Page 22: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Determine wrist speed function

12

34

57 68

% Determine wrist speedxw=handx(:,4);yw=handy(:,4);zw=handz(:,4);dxw=afgeleid(xw,Fs);dyw=afgeleid(yw,Fs);dzw=afgeleid(zw,Fs);vw=sqrt(dxw.^2+dyw.^2+dzw.^2);

function [afgeleide]=afgeleid(data,sf)

% AFGELEID.M% dit programma differentieert een willekeurige data set data die staat in een matrix% sf = samplefrequentie in Hz; Ron Jacobs, juli 1989

[m,n]=size(data);afgeleide=zeros(m,n);

for i=3:m-2, afgeleide(i,:)=(-data(i-2,:)*1.5-data(i-1,:)*4+data(i+1,:)*4+data(i+2,:)*1.5)*(sf/14);end

afgeleide(1,:) = afgeleide(3,:); afgeleide(2,:) = afgeleide(3,:);afgeleide(m,:) = afgeleide(m-2,:); afgeleide(m-1,:) = afgeleide(m-2,:);

Page 23: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Check wrist speed function

% Check wrist speed function in command windowplot(vw);xlabel(‘samples’);ylabel(‘wrist speed (cm/s);

Page 24: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Find critical time indices in wrist speed function

% Find start and end of movement and time index of maximum speed[vmax,tvmax]=max(vw);vthreshold=.05.*vmax;ib=tvmax;while vw(ib)>=vthreshold & ib>2 ib=ib-1; end;ie=tvmax;while vw(ie)>=vthreshold & ie<ns-1 ie=ie+1; end;

threshold

ibie

tvmax

Page 25: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Determine aperture-time function

% Determine aperture-time functionfor i=1:ndim(1); dx=handx(i,1)-handx(i,8); dy=handy(i,1)-handy(i,8); dz=handy(i,1)-handy(i,8); aperture(i)=sqrt(dx.^2+dy.^2+dz.^2);end;

12

34

57 68

Page 26: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Check aperture-time function

% Check aperture function in command windowplot(aperture);xlabel(‘samples’);ylabel(‘aperture (cm);

Page 27: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Find critical time indices in aperture-time function

% Find maximum aperture and moment of maximum aperture[maxapt,tmaxapt]=max(aperture);mommaxapt=100.*((tmaxapt-ib)./(ie-ib));

tvmaxapt

maxapt

Page 28: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Calculate amplitude-scaled wrist speed function to plot

simultaneously with aperture-time function

% Calculate amplitude scaled wrist speed functionscalefactor=max(aperture)./max(vw);vws=vw.*scalefactor;

Define reference lines of critical time indices for plotting

% Data for reference line in plotting

tref(1)=tmaxapt;tref(2)=tmaxapt;

aptref(1)=0;aptref(2)=maxapt;

% Data for reference line in plotting

trefv(1)=tvmax;trefv(2)=tvmax;

vwref(1)=0;vwref(2)=max(vws);

Page 29: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Plot aperture-time and normalized speed functions

if iplot==1,

figure(fig2);

set(gcf,'Color','white');

title('Normalized Speed & Aperture')';

hold on;

axis([t(ib) t(ie) 0 max(aperture)]);

plot(t(ib:ie),aperture(ib:ie),'r');

plot(t(tref),aptref,'k');

plot(t(ib:ie),vws(ib:ie),'k-');

plot(t(trefv),vwref,'k');

xlabel('Time (s)');

ylabel('Aperture (cm)');

end; % of if iplot==1

Page 30: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Example: Prehension kinematics

Time (s)

Aperture (cm)

Normalized speed (arbitrary units)

Sneak preview

Page 31: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

IRED configuration and joint angles

1

2

3

4

57

6

8

j1

j2j3

j4j5

j6

Sneak preview

Page 32: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Determine joint angles in hand

% Constants

degtorad=pi./180;

radtodeg=1./degtorad;

% Determine enclosed angle of hand joints (n=6)

for ired=1:6,

for i=1:ns,

pos1(1)=handx(i,ired);

pos1(2)=handy(i,ired);

pos1(3)=handz(i,ired);

pos2(1)=handx(i,ired+1);

pos2(2)=handy(i,ired+1);

pos2(3)=handz(i,ired+1);

pos3(1)=handx(i,ired+2);

pos3(2)=handy(i,ired+2);

pos3(3)=handz(i,ired+2);

joint(i,ired)=angle2d_signed(pos1,pos2,pos3);

end;

end;

function[alfa]=angle2d_signed(pos1,pos2,pos3);

% calculates the 2D joint angle % Mary Klein Breteler, March 2002

% orientation of first segmentth=atan2(pos2(1)-pos1(1),pos2(2)-pos1(2));

% orientation of second segment relative to first segmentRz = [cos(th) -sin(th) 0; sin(th) cos(th) 0; 0 0 1]; vec = pos2(1:2) - pos3(1:2); vec = [vec/norm(vec) 0]; vecrot = (Rz*vec')'; % angle alfa=atan2(vecrot(1),vecrot(2));beta=unwrap(alfa);alfa=beta.*180/pi;

% only positive valuesif alfa < 0, alfa = alfa + 360;end

Page 33: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Example: Joint rotations

j1

j2

j3

j5

j6j4

Note that joint angles may exceed 180 degs, partially due to their placement,i.e. imperfect alignment, and partially due to overextension.

Sneak preview

Page 34: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Calculating critical performance variables, e.g.

% Find start and end of movement

ib=fileib(jfile);

ie=fileie(jfile);

[vmax,tvmax]=max(vw(ib:ie));

tvmax=tvmax+ib;

momvmax=100.*((tvmax-ib)./(ie-ib));

% Determine maximum and moment of maximum joint angles

for j=1:6,

[jointmax,tjointmax]=max(joint(ib:ie,j));

maxjntang(j)=jointmax;

tmaxjntang(j)=100.*((tjointmax)./(ie-ib));

end;

Page 35: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Time normalizing functions

% store time-normalized kinematic functions

n1=ie-ib+1;

n2=50;

vwtn=time_normalize(vw(ib:ie),n1,n2);

% function [tx]=time_normalize(x,n1,n2);%% x = 1-dimensionaal input array (check op rij of kolom array)% n1 = lengte van input array x% n2 = gewenste lengte van outputarray tx%function [tx]=time_normalize(x,n1,n2);

s=1:n1;step=(n1-1)./(n2-1);si=1:step:n1;tx=interp1(s,x,si,'spline');

1. Resample function to 50 data points2. Write resampled function to output file3. Process resampled functions in Excel/SPSSX

Page 36: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab Creating a data matrix for statistical analysis

% clear output arrays

output=zeros(15,1);

if outputwanted==1

output(1)=pp;

output(2)=file;

output(3)=vision(file); % vision

output(4)=objectsize(file); % size

output(5)=(ie-ib).*sec; % MT

output(6)=vmax; % peak speed

output(7)=momvmax; % moment peak speed (%MT)

output(8)=maxapt; % peak aperture (cm)

…Etc.

Page 37: Using Ruud Meulenbroek David Rosenbaum, Mary Klein Breteler, Bert Steenbergen 12 May 2005 in a Prehension Study

Use of Matlab - Write outputfile for SPSSX% Write outputfile of, say 8 variables (independent + dependent) per observation

if outputwanted==1

ext_out=['.dat'];

fnameout=['output_new'];

outname=[prefix fnameout ext_out];

fid=fopen(outname,'a');

f='%8.3f ';

f_last='%8.3f\n';

% Take care number of f's equals number of output variables minus 1

outputformat=([f f f f f f f f_last]);

fprintf(fid,outputformat,output);

fclose(fid);

end; % of outputwanted==1