Skip to content

Commit

Permalink
re PlusToolkit#241: Defining the Atracsys API wrapper classes
Browse files Browse the repository at this point in the history
  • Loading branch information
markasselin committed Jun 29, 2018
1 parent 770d576 commit c0b273c
Show file tree
Hide file tree
Showing 7 changed files with 321 additions and 18 deletions.
38 changes: 38 additions & 0 deletions src/PlusDataCollection/Atracsys/AtracsysConstants.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*=Plus=header=begin======================================================
Program: Plus
Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
See License.txt for details.
=========================================================Plus=header=end*/

#ifndef __AtracsysConstants_h
#define __AtracsysConstants_h

namespace Atracsys
{
const int FTK_MAX_FIDUCIALS = 4;

enum ATRACSYS_ERROR
{
ERROR_NONE = 0,
ERROR_UNABLE_TO_GET_FTK_HANDLE = 1
};

enum OPTIONS
{
OPTION_DATA_SENDING = 20,
OPTION_WIRELESS_PAIRING_ENABLE = 40,
OPTION_IR_STROBE = 50,
OPTION_LOST_FRAME_COUNT = 60,
OPTION_RESET_LOST_FRAME_COUNT = 69,
OPTION_LED_RED_COMPONENT = 90,
OPTION_LED_BLUE_COMPONENT = 91,
OPTION_LED_GREEN_COMPONENT = 92,
OPTION_LED_ENABLE = 93,
OPTION_EPIPOLAR_MIN_DISTANCE = 2001,
OPTION_MATCHING_TOLERANCE = 3002,
OPTION_MAX_REGISTRATION_MEAN_ERROR = 3003,
OPTION_MAX_MISSION_POINTS = 3004,
OPTION_MAX_TRACKING_RANGE = 3005
};
}
#endif
34 changes: 34 additions & 0 deletions src/PlusDataCollection/Atracsys/AtracsysMarker.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*=Plus=header=begin======================================================
Program: Plus
Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
See License.txt for details.
=========================================================Plus=header=end*/

#include "AtracsysMarker.h"

using namespace Atracsys;

ATRACSYS_ERROR Marker::GetID(int& id)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Marker::GetGeometryID(int& geometryID)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Marker::GetGeometryPrecsenceMask(int& geometryMask)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Marker::GetTransformToTracker(vtkSmartPointer<vtkMatrix4x4> MarkerToTracker)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Marker::GetFiducialRegistrationErrorMm(float& fre)
{
return ERROR_NONE;
}
40 changes: 40 additions & 0 deletions src/PlusDataCollection/Atracsys/AtracsysMarker.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*=Plus=header=begin======================================================
Program: Plus
Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
See License.txt for details.
=========================================================Plus=header=end*/

#ifndef __AtracsysMarker_h
#define __AtracsysMarker_h

#include "AtracsysConstants.h"
#include <vtkSmartPointer.h>
#include "vtkMatrix4x4.h"

namespace Atracsys
{
class Marker
{
public:
ATRACSYS_ERROR GetID(int& id);
ATRACSYS_ERROR GetGeometryID(int& geometryID);
ATRACSYS_ERROR GetGeometryPrecsenceMask(int& geometryMask);
ATRACSYS_ERROR GetTransformToTracker(vtkSmartPointer<vtkMatrix4x4> MarkerToTracker);
ATRACSYS_ERROR GetFiducialRegistrationErrorMm(float& fre);
private:
int id; /*!< Tracking id */
int geometryId; /*!< Geometric id, i.e. the unique id of the used
* geometry. */
int geometryPresenceMask; /*!< Presence mask of fiducials expressed as
* their geometrical indexes */
int fiducialCorresp[FTK_MAX_FIDUCIALS]; /*!< Correspondence between
* geometry index and 3D
* fiducials indexes or
* INVALID_ID */
float rotation[3][3]; /*!< Rotation matrix: format [row][column] */
float translationMM[3]; /*!< translation vector (unit mm) */
float registrationErrorMM; /*!< Registration mean ATRACSYS_ERROR (unit mm) */
};
}

#endif
104 changes: 104 additions & 0 deletions src/PlusDataCollection/Atracsys/AtracsysTracker.cxx
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
/*=Plus=header=begin======================================================
Program: Plus
Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
See License.txt for details.
=========================================================Plus=header=end*/

#include "AtracsysTracker.h"
#include <iostream>

using namespace Atracsys;

Tracker::Tracker()
{

}

Tracker::~Tracker()
{

}

ATRACSYS_ERROR Tracker::Connect()
{
// initialize SDK
this->FtkLib = ftkInit();

if (this->FtkLib == NULL)
{
return ERROR_UNABLE_TO_GET_FTK_HANDLE;
}

// testing
std::cout << "connected to tracker" << std::endl;
}

ATRACSYS_ERROR Tracker::EnableDataSending()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::DisableDataSending()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::EnableIRStrobe()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::DisableIRStrobe()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::GetDroppedFrameCount()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::ResetLostFrameCount()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::SetUserLEDState(int red, int green, int blue, int frequency)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::GetUserLEDState(int& red, int& green, int& blue, int& frequency)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::EnableUserLED()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::DisableUserLED()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::LoadMarkerGeometry(std::string filePath)
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::EnableWirelessMarkerPairing()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::DisableWirelessMarkerPairing()
{
return ERROR_NONE;
}

ATRACSYS_ERROR Tracker::GetMarkersInFrame(std::vector<Marker>& markers)
{
return ERROR_NONE;
}
76 changes: 76 additions & 0 deletions src/PlusDataCollection/Atracsys/AtracsysTracker.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
/*=Plus=header=begin======================================================
Program: Plus
Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.
See License.txt for details.
=========================================================Plus=header=end*/

#ifndef __AtracsysTracker_h
#define __AtracsysTracker_h

#include "AtracsysConstants.h"
#include <string>
#include <vector>

// Atracsys includes
#include "ftkErrors.h"
#include "ftkEvent.h"
#include "ftkInterface.h"
#include "ftkOptions.h"
#include "ftkPlatform.h"
#include "ftkTypes.h"

namespace Atracsys
{
class Marker;
class Internal;

class Tracker
{
public:
/* Constructor & destructor */
Tracker();
~Tracker();

/*! */
ATRACSYS_ERROR Connect();

/*! */
ATRACSYS_ERROR EnableDataSending();
/*! */
ATRACSYS_ERROR DisableDataSending();

/*! */
ATRACSYS_ERROR EnableIRStrobe();
/*! */
ATRACSYS_ERROR DisableIRStrobe();

/*! */
ATRACSYS_ERROR GetDroppedFrameCount();
/*! */
ATRACSYS_ERROR ResetLostFrameCount();

/*! */
ATRACSYS_ERROR SetUserLEDState(int red, int green, int blue, int frequency);
/*! */
ATRACSYS_ERROR GetUserLEDState(int& red, int& green, int& blue, int& frequency);
/*! */
ATRACSYS_ERROR EnableUserLED();
/*! */
ATRACSYS_ERROR DisableUserLED();

/*! */
ATRACSYS_ERROR LoadMarkerGeometry(std::string filePath);
/*! */
ATRACSYS_ERROR EnableWirelessMarkerPairing();
/*! */
ATRACSYS_ERROR DisableWirelessMarkerPairing();

/*! */
ATRACSYS_ERROR GetMarkersInFrame(std::vector<Marker>& markers);
private:
ftkLibrary FtkLib = 0;
uint64 TrackerSN = 0;

};
}
#endif
21 changes: 17 additions & 4 deletions src/PlusDataCollection/Atracsys/vtkPlusAtracsysTracker.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ See License.txt for details.
// Local includes
#include "PlusConfigure.h"
#include "vtkPlusAtracsysTracker.h"
#include "AtracsysTracker.h"
#include "AtracsysMarker.h"

// VTK includes
#include <vtkSmartPointer.h>
Expand Down Expand Up @@ -312,12 +314,16 @@ class vtkPlusAtracsysTracker::vtkInternal

PlusStatus LoadFtkGeometry(const std::string& filename, ftkGeometry& geom);
bool LoadIniFile(std::ifstream& is, ftkGeometry& geometry);

// here begins the new interface
Atracsys::Tracker* Tracker = new Atracsys::Tracker();
};

//----------------------------------------------------------------------------
std::string vtkPlusAtracsysTracker::vtkInternal::GetFtkErrorString()
{
char message[1024u];
/*
ftkError err(ftkGetLastErrorString(this->ftkLib, 1024u, message));
if (err == FTK_OK)
{
Expand All @@ -326,7 +332,8 @@ std::string vtkPlusAtracsysTracker::vtkInternal::GetFtkErrorString()
else
{
return std::string("ftkLib is uninitialized.");
}
}*/
return std::string(message);
}

struct DeviceData
Expand Down Expand Up @@ -556,6 +563,10 @@ PlusStatus vtkPlusAtracsysTracker::Probe()
//----------------------------------------------------------------------------
PlusStatus vtkPlusAtracsysTracker::InternalConnect()
{
//TODO: testing AtracsysTracker class
this->Internal->Tracker->Connect();


LOG_TRACE("vtkPlusAtracsysTracker::InternalConnect");

// initialize SDK
Expand All @@ -581,8 +592,8 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
return PLUS_FAIL;
}

std::string deviceType;
switch (device.Type)
std::string deviceType("fusionTrack500");
/*switch (device.Type)
{
case DEV_SPRYTRACK_180:
deviceType = "sTk 180";
Expand All @@ -598,14 +609,15 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
break;
default:
deviceType = " UNKNOWN";
}
}*/

this->Internal->TrackerSN = device.SerialNumber;

LOG_INFO("Detected " << deviceType << " with serial number 0x" << std::setw(16u)
<< std::setfill('0') << std::hex << device.SerialNumber << std::dec
<< std::endl << std::setfill('\0'));

/*
// set spryTrack to do onboard image processing
if (device.Type == DEV_SPRYTRACK_180)
{
Expand All @@ -623,6 +635,7 @@ PlusStatus vtkPlusAtracsysTracker::InternalConnect()
return PLUS_FAIL;
}
}
*/

// load passive geometries onto Atracsys
std::map<std::string, std::string>::iterator it;
Expand Down
Loading

0 comments on commit c0b273c

Please sign in to comment.