Home Forums Software Development Tobii Analytics SDK with PCEye GO Problems

Viewing 7 posts - 1 through 7 (of 7 total)
  • Author
    Posts
  • #2616
    Meir Naiman
    Participant

    Hello Everyone,

    I am new to Tobii’s development software and Forums so I am not sure if this is the right place for this question, but here goes. I am trying to use the Tobii Analytics SDK to allow my vb.net program to receive data from a PC EYE GO Tobii device and I am running into some problems.

    I browse for the device via the EyeTrackerBrowser class and connect to it via IEyeTracker class and have managed to get thus far with no issues.(I assume this because I am receiving the PCEye Go device info and I am displaying it in a textbox and I am not triggering any connectionEerror events, so i am assuming it works properly. Additionally if I unplug the the PC Eye Go from the computer it only then triggers a connectionError event).

    My problem starts when I try to start tracking the device to receive data from it using the IEyeTracker.startTracking() method. The program bugs out and I receive an error message saying “Tracker Exception 20000505”. The Tobii Analytics SDK Developers Guide says that the error means that, and I qoute: “The operation cannot be completed without further authorization.”

    Anyone know what that means and/or what I am doing wrong over here? Is there a step I missed that I must do before I can begin tracking? Is it something else?
    I will post all the code at the end of this post.

    Thanks in advance for any help,
    Mike

    My Device’s Information that I am getting in the TextBox:
    Model: PCEye_Go
    Status: ok
    Generation: G5
    Product Id: PCEGO-03……
    Given Name: PCEye_Go
    Firmware Version: 1.1.5.29095.20140325.1225.root

    And here is my code:

    Option Explicit On
    Option Strict On
    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Text
    Imports System.Windows.Forms
    Imports Tobii.EyeTracking.IO
    Public Class Form1
        Dim connectedTracker As IEyeTracker
        Public Sub New()
    
            ' This call is required by the designer.
            InitializeComponent()
            ' Add any initialization after the InitializeComponent() call.
            Library.Init()
    
            Dim _browser As EyeTrackerBrowser = New EyeTrackerBrowser
            AddHandler _browser.EyeTrackerFound, AddressOf EyeTrackerFoundHandler
            
    Try
                _browser.StartBrowsing()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
          End Sub
       
        Private Sub EyeTrackerFoundHandler(sender As Object, e As EyeTrackerInfoEventArgs)
           
          Try
                Dim currentDevice As String
                Dim info As EyeTrackerInfo = e.EyeTrackerInfo
                Dim sb = New StringBuilder()
                sb.AppendLine("Model: " + info.Model)
                sb.AppendLine("Status: " + info.Status)
                sb.AppendLine("Generation: " + info.Generation)
                sb.AppendLine("Product Id: " + info.ProductId)
                sb.AppendLine("Given Name: " + info.GivenName)
                sb.AppendLine("Firmware Version: " + info.Version)
                TextBox1.AppendText(sb.ToString)
                
                'create connection
                'info.Status
                connectedTracker = info.Factory.CreateEyeTracker()
    
                AddHandler connectedTracker.ConnectionError, AddressOf ConnectionErrorEventArgs
                AddHandler connectedTracker.GazeDataReceived, AddressOf GazeDataRecievedHandler
               
                'start tracking
                connectedTracker.StartTracking()
           
                If TextBox1.Text <> "" Then
                       currentDevice = TextBox1.Text
                End If
               
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub ConnectionErrorEventArgs(sender As Object, e As ConnectionErrorEventArgs)
            MsgBox(e.ErrorCode)
        End Sub
    
        Private Sub GazeDataRecievedHandler(sender As Object, e As GazeDataEventArgs)
            Try
                MsgBox(e.GazeDataItem.Timestamp)
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    End Class
    #2622
    Jenny [Tobii]
    Participant

    Hi Mike,

    The problem you see is a compatability problem. Since I do not know what kind of application you are implementing I will give you a summary of the options you have below.

    The Analytics SDK is compatible with the following high tier research eye trackers: Tobii X60/120, Tobii T60/120, Tobii T60 XL, Tobii TX300 and the Tobii X1/X2.

    The Tobii PC Eye Go eye tracker is compatible with the following SDK’s: Tobii TecSDK, Tobii EyeX SDK and Tobii Gaze SDK.

    What SDK or eye tracker you need depends on what kind of application you want to develop.

    The Analytics SDK license allows for developing analysis and research kind of applications that process data from Tobii hardware and software, where eye-gaze data may be stored locally and later be processed and analysed.

    The Tobii TecSDK license allows for developing AAC (Augmentative and Assistive Communication) applications for Tobii hardware. For example, with this SDK you can create an eye controlled application that uses eye-gaze dwell to click on buttons.

    The Tobii EyeX SDK and Gaze SDK licenses allow for developing eye-gaze interaction applications for Tobii hardware. This include AAC but exclude analytic applications. For example, with these SDK’s you can create an application or game that uses eye-gaze as an input for interaction (often in combination with keyboard, mouse or some other input device), and you may filter the eye-gaze data live dynamically to achieve the interaction you want, but you may not store and then later analyse the eye-gaze data. The EyeX SDK is the high-level SDK for eye-gaze interaction applications that should be able to co-exist with other gaze-enabled applications running simultaneously on the computer, the Gaze SDK is a low-level special purpose SDK for stand-alone applications.

    #2634
    Meir Naiman
    Participant

    Thank You very much for your reply. I have now begun developing a program which will be a specialized keyboard and i am using Eyex to make the buttons click-able using the EyeX tracker, to enable the user to type with his/her eyes using the EyeX Engine. The end game is to mimic the keyboards that come included with a MyTobii and the SonoKey. However I have run into a problem with my project.

    I am writing the program in VB.net because the specialized keyboard has already been built in VB.net and I am just adding the EyeX eye tracking interface and usability to the program to enable the user to type with their eyes. I have successfully created an EyeXhost and a FormsEyeXHost and have been able to connect to the device and pull in data form it. I have tested this by successfully obtaining the users eye location using the CreateEyePositionDataStream() method amongst other methods I successfully tested.

    My problems begin when I try to create and add a BehaviorMap() to my project and link the BehaviorMap to the EyeXHost and then add a button to the BehaviorMap and make the button clickable using the EyeX SDK.

    I found the example in the developers manual how to do this in C# and have tried converting it to VB.NET but encounter an error in the Behaviormap.cs file of the EyeXFramework.dll. First when I run the program it gives me a warning saying that the behaviormap.cs source file is different from when the module was built. Then for some reason It throws a “NullReferenceException was unhandled by user” when trying to add behaviormap object I created to the “Components” container. The IContainer called “Components” is equal to null.

    A little background about what I have done to get this far. The EyeXFramework only came in binary so in order to get a usable Dll file a could import as a reference in my program I built and ran one of the included example which created the EyeXFramework.dll file which I use in my program. Also the behaviorMap object was not added to the toolbox when I added the EyeXFramework.dll file to my project so I added one manually in the form code and designer.

    I am including my code at the end of this post. Any help would be greatly appreciated.

    Here is the Program Class:

    Option Strict On
    Option Explicit On
    Imports EyeXFramework
    Imports Tobii.EyeX.Client
    Imports Tobii.EyeX.Framework
    Imports EyeXFramework.Forms
    Public Class Program
        Private Shared _eyeXHost As New FormsEyeXHost()
        Public Shared ReadOnly Property EyeXHost() As FormsEyeXHost
            Get
                Return _eyeXHost
            End Get
        End Property
        <STAThread>
        Private Shared Sub Main()
            _eyeXHost.Start()
    
            Application.EnableVisualStyles()
            Application.SetCompatibleTextRenderingDefault(False)
            Application.Run(New Form1())
    
            _eyeXHost.Dispose()
    
        End Sub
    End Class

    Here is the Form Code:

    Imports EyeXFramework
    Imports Tobii.EyeX.Framework
    Imports EyeXFramework.Forms
    
    Public Class Form1
    
        Public Sub New()
    
            ' This call is required by the designer.
            InitializeComponent()
    
            ' Add any initialization after the InitializeComponent() call.
            Program.EyeXHost.Connect(_behaviorMap1)
            _behaviorMap1.Add(Button1, New ActivatableBehavior(AddressOf OnButton1Activated))
    
        End Sub
        Private Sub OnButton1Activated(sender As Object, e As EventArgs)
            Button1.PerformClick()
        End Sub
    End Class

    And here is the form designer

    <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    Partial Class Form1
        Inherits System.Windows.Forms.Form
    
        'Form overrides dispose to clean up the component list.
        <System.Diagnostics.DebuggerNonUserCode()> _
        Protected Overrides Sub Dispose(ByVal disposing As Boolean)
            Try
                If disposing AndAlso components IsNot Nothing Then
                    components.Dispose()
                End If
            Finally
                MyBase.Dispose(disposing)
            End Try
        End Sub
    
        'Required by the Windows Form Designer
        Private components As System.ComponentModel.IContainer
        Private _behaviormap1 As EyeXFramework.Forms.BehaviorMap
        'NOTE: The following procedure is required by the Windows Form Designer
        'It can be modified using the Windows Form Designer.  
        'Do not modify it using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> _
        Private Sub InitializeComponent()
            Me.Button1 = New System.Windows.Forms.Button()
            Me.SuspendLayout()
            '
            'Button1
            '
            Me.Button1.Location = New System.Drawing.Point(96, 93)
            Me.Button1.Name = "Button1"
            Me.Button1.Size = New System.Drawing.Size(75, 23)
            Me.Button1.TabIndex = 0
            Me.Button1.Text = "Button1"
            Me.Button1.UseVisualStyleBackColor = True
            '
            'Form1
            '
            Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
            Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
            Me.ClientSize = New System.Drawing.Size(284, 262)
            Me.Controls.Add(Me.Button1)
            Me.Name = "Form1"
            Me.Text = "Form1"
            Me.ResumeLayout(False)
    
            Me._behaviormap1 = New EyeXFramework.Forms.BehaviorMap(Me.components)
        End Sub
        Friend WithEvents Button1 As System.Windows.Forms.Button
    
    End Class
    #2638
    Patrik [Tobii]
    Participant

    Hello Meir,

    The problem you’re experiencing is due to the fact that VB.NET project’s do not use regular Program.Main bootstrapping, but got it’s own application framework. If you put a break-point on line 16 (_eyeXHost.Start()) you will se that the break-point is never hit.

    To fix this you will have to do three things:

    1. You’re not instanciating the components collection in your designer code. In the InitializeComponent method, add the following line at the top:

    Me.components = New System.ComponentModel.Container()

    2. Change the access modifier of the Main method in your Program class from Private to Public.

    3. Turn off the VB.NET application framework and tell the compiler that the Main method is the application entry point. To do this, you open the project properties and untick the Enable application framework. After this is done, change Startup object from Form1 to Sub Main or Program.

    Project settings

    Hope this helps.

    / Patrik

    #2639
    Meir Naiman
    Participant

    Thank you for your reply, i will try it as soon as possible. I have one question however. Is there any downside to disabling the built in application framework?

    #2641
    Patrik [Tobii]
    Participant

    You can read more about the built in application framework here. It should answer any questions you might have.

    Best regards
    Patrik

    #2642
    Meir Naiman
    Participant

    Thank you for all your help.

Viewing 7 posts - 1 through 7 (of 7 total)
  • You must be logged in to reply to this topic.