Difference between revisions of "EyeSeeCam SCI"

From biophysics
Jump to navigation Jump to search
Line 6: Line 6:
  
 
===Matlab interface===
 
===Matlab interface===
%todo
+
The recorded data is read from an LSL stream.
 +
<pre>
 +
% todo: LSL streaming parameters
 +
</pre>
 +
The lsldata is a struct and has the following fields:
 +
*escdata
 +
*escmetadata
 +
*escstr
 +
*evdata0
 +
*evdata1
 +
*evdata2
 +
*evdata3
 +
*evdata4
 +
 
 +
 
 +
The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.
 +
 
 +
 
 +
<pre>
 +
%Eye data
 +
 
 +
RightEyePosX = 46;
 +
RightEyePosY = 47;
 +
RightEyePosZ = 48;
 +
 
 +
xeye = lsldata.escdata.Data(46,:);      % right 46, left 32
 +
yeye = lsldata.escdata.Data(47,:);      % right 47, left 33
 +
zeye = lsldata.escdata.Data(48,:);      % right 48, left 34
 +
 
 +
% Head data
 +
HeadInertialVelXCal = 27;
 +
HeadInertialVelYCal = 29;
 +
HeadInertialVelZCal = 31;
 +
 
 +
xh = lsldata.escdata.Data(27,:);      % calibrated torion velocity data HEAD
 +
yh = lsldata.escdata.Data(29,:);      % calibrated vertical velocity data HEAD
 +
zh = lsldata.escdata.Data(31,:);      % calibrated horizontal velocity data HEAD
 +
</pre>
  
 
===Converting rotation speed===
 
===Converting rotation speed===

Revision as of 10:15, 1 May 2024

EyeSeeCam SCI

Description

The EyeSeeCam SCI is a combined eye tracker and head movement tracker.

Matlab programming

Matlab interface

The recorded data is read from an LSL stream.

% todo: LSL streaming parameters

The lsldata is a struct and has the following fields:

  • escdata
  • escmetadata
  • escstr
  • evdata0
  • evdata1
  • evdata2
  • evdata3
  • evdata4


The lsldata.escdata contains the eye and head data. The data contains a matrix for with a row for every parameter. The total of parameters is 63. The field lsldata.escmetadata.channel lists all the names of the parameters.


%Eye data

RightEyePosX = 46;
RightEyePosY = 47;
RightEyePosZ = 48;

xeye = lsldata.escdata.Data(46,:);       % right 46, left 32
yeye = lsldata.escdata.Data(47,:);       % right 47, left 33
zeye = lsldata.escdata.Data(48,:);       % right 48, left 34

% Head data
HeadInertialVelXCal = 27;
HeadInertialVelYCal = 29;
HeadInertialVelZCal = 31;

xh = lsldata.escdata.Data(27,:);       % calibrated torion velocity data HEAD
yh = lsldata.escdata.Data(29,:);       % calibrated vertical velocity data HEAD
zh = lsldata.escdata.Data(31,:);       % calibrated horizontal velocity data HEAD

Converting rotation speed

%make a coordinate object 
mycoordinates_XYZ = coordinates_XYZ(startingGaze);

% initialize R_total to 3D unit matrix
R_total = [1,0,0;0,1,0;0,0,1];

%loop through al timesteps
for i = (timeRange)

    % determine the angle changes between time t(i)-delta_t/2 to t(i)+delta_t/2
    delta_angleX = Vx(i)*delta_t;
    delta_angleY = Vy(i)*delta_t;
    delta_angleZ = Vz(i)*delta_t;

    %create a rotation matrices
    delta_Rx = Rx(delta_angleX);
    delta_Ry = Ry(delta_angleY);
    delta_Rz = Rz(delta_angleZ);

    %multiply rotation matrices (order is not important if angles are small enough) 
    delta_R = delta_Rx * delta_Ry * delta_Rz;

    % determine new R_total 
    % rotation in device coordinates, order: R_total * delta_R    
    R_total = R_total * delta_R;

    %rotate startingpoint with R_total
    newpoint = R_total * startingGaze;

    %add new position to list of coordinates
    mycoordinates_XYZ.add(newpoint);    
end

% transform XYZ to RAS coordinates with EyeSeeCam definition
mycoordinates_RAS = transform_XYZ2RAS(mycoordinates_XYZ, definition_XYZ2RAS_EyeSeeCam_Sci);
mycoordinates_DP  = transform_RAS2DP(mycoordinates_RAS);