psychopy.org | Reference | Downloads | Github

Eye tracking (GP3 HD) using Iohub

Anyone that has integrated a GP3 HD into Psychopy recently? Iohub doesn’t even recognize the yaml file.

Sorry for the late reply. Did you sort this out? I only have a standard GP3 to test with and it runs fine for me on win10. Based on user feedback from about a year ago I know the GP3HD use to also work based, but if you are still having problems please send me the example you are using so I can take a closer look. Thanks.

Hi @sol .Thanks for getting backing to me. Yes, I managed to find a solution to this. You have done an amazing job on putting the iohub thing altogether. The only issue I am still having is that I made a gaze-contingent task, so that each trial ends ONLY after participant clicks on a stimulus + they fixate on that stimulus (I am using eyetracker.getPosition() to detect gaze coordinates). If tested separately,mouse click and gaze detection work perfectly fine, but when I try to implement both as outlined above, the trial doesn’t end (gaze detection works fine as indicated by pressing g and watching the corresponding point of gaze on the screen but the mouse click doesn’t seem to work properly). I am using the mouse component from the builder not the mouse module from iohub and I suspect that this might cause the issue. I can send you the example to have a look if you want to.

Yes, could you please send me the example you are working with? Thank you.

Hi @sol ,
Attached you can find the example. It’s a simple visual search task. Participants have to search for a star within images. Once they find it they have to do a mouse click to enable the mouse cursor and then do a second click on the star to indicate its location. During the second click, I want also to check whether gaze coordinates fall within an imaginary boundary of 100 pixels around the star, and if yes to end the trial. However, this doesn’t work. I have tried different things, so have a look and let me know what you think.
I have one more question related to iohub message events. At the moment, I am sending messages only when the trial started and ended, but I was thinking about sending messages during the trial as well (in the each frame tab). However, when I did so I realized that there were no trial end event messages, just trial start and main trial messages. Is this because each frame runs based on display’s frame rate which is different from the sampling rate of the eye tracker?

Thanks for your time.

I took a look at your project (very nice). When I run it:

  1. The GP3 calibtraion runs.
  2. I use the mouse to press the button on the intro screen to start a trial.
  3. I can then click the mouse to make the cursor visible on the trial screen.
  4. Clicking on the star does not work / progress the trial.

Is this the behaviour you are getting?

Thanks again.

Thanks for your prompt reply, @sol. Yep, what you describe is exactly the behavior I am getting.

Is the issue that the mouse click on the star is not working, or that some gaze control logic is not working like you mentioned when sending the project file, or both? I’m just trying to narrow down what I should be looking at in the project. Thanks again.

I believe that the mouse click on the star is working because if you check the Builder’s .csv it includes all the information from the clicks. Furthermore, if you press G, the square corresponding to gaze coordinates is being displayed properly, which means this is also working fine. I suspect that the issue has to do with the multiple AND operators I use to implement the end of the trial (e.g. gaze_coordinates within a prespecified boundary and mouse click 1 and mouse click 2 etc.). To check this you can have a closer look at the code (each frame tab) of the “Practise Trials” routine.

Hi @sol . I managed to find what was going wrong on my example. Instead of calculating the distance between the gaze coordinates and the star, I was calculating the distance between the gaze coordinates and the center of the screen (this was the default iohub demo implementation). So, on the each frame tab of the Practise Trials routine, I changed this line of code:

d=np.sqrt(x**2+y**2)

to this:

d=np.sqrt(abs(x-p_Star_x)**2+abs(y-p_Star_y)**2)

where p_Star_x and p_Star_y are the screen coordinates of the star on each trial!

Thanks a lot for your time!