Difference between revisions of "EyeSeeCam SCI"
Jump to navigation
Jump to search
(3 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
[[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]] | [[File:EyeSeeCam_SCI2.png|thumb|EyeSeeCam SCI]] | ||
==Description== | ==Description== | ||
− | %todo | + | 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. | ||
+ | <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=== | ||
+ | <pre> | ||
+ | %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); | ||
+ | |||
+ | </pre> |
Revision as of 11:15, 1 May 2024
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);