In order to be able to run this example, the PST Tracker has to be initialized first. This can be done by starting the PST-Server and the PST-Client applications and making sure the calibration files have been downloaded and a tracking target is available. The tracking target can be the default Reference target or a newly trained or imported target. For more information, please see the Initialization section or check the PST Manual.
When compiling and running this example, please make sure that the required dependencies can be found by the executable (e.g. by copying the Redist directory into the build directory. When the PST SDK has been installed through the PST Software Suite installer the Redist folder can be found in the Development folder.). On Windows, the Visual Studio project files are configured to use a relative path to the Redist directory as the working directory. If the examples have been copied, please ensure the working directory is still valid.
#ifdef WIN32
#include <windows.h>
#else
#include <csignal>
#endif
static void Exithandler(int sig);
#ifdef WIN32
BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
Exithandler(CEvent);
return TRUE;
}
#endif
#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
{
for (int y = 0; y < 4; ++y)
{
for (int x = 0; x < 4; ++x)
{
std::cout << mat[x + y * 4] << "\t";
}
std::cout << "\n";
}
}
static std::atomic<bool> running(true);
static std::atomic<bool> restart(false);
static const uint32_t numberOfSamplesToGrab = 100;
{
virtual void OnTrackerData(
const PSTech::pstsdk::TrackerData& td)
override
{
static uint32_t samplesGrabbed = 0;
if (samplesGrabbed++ >= numberOfSamplesToGrab)
running = false;
{
std::cout <<
"Pose for " << td.
targetlist[d].name <<
"\n";
PrintMatrix(mat);
}
}
{
switch(mode)
{
std::cout << "Tracker tracking" << std::endl;
break;
std::cout << "Tracker paused" << std::endl;
break;
std::cout << "Tracker disconnected" << std::endl;
break;
std::cout << "Tracker reconnected" << std::endl;
restart = true;
break;
default:
std::cout << "Mode " << static_cast<int>(mode) << std::endl;
break;
}
}
public:
virtual ~MyListener() override
{
}
} listener;
static void Exithandler(int sig)
{
running = false;
}
int main(int argc, char *argv[])
{
#ifdef WIN32
SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler, TRUE);
#else
signal(SIGTERM, Exithandler);
signal(SIGKILL, Exithandler);
signal(SIGQUIT, Exithandler);
signal(SIGINT, Exithandler);
#endif
try
{
#ifdef WIN32
#else
#endif
{
std::cout << "\nNo calibration information could be found in the configuration directory. "
"Please use the PST Server and PST Client application to initialize the PST Tracker and create/import a tracking target. "
"More information can be found in the Initialization section of the PST SDK manual and the PST Manual.\n\n";
std::cout << "Press enter to continue...\n";
std::cin.get();
return 1;
}
std::cout <<
"Running PST Server version " << pst.
GetVersionInfo() <<
"\n";
std::cout << "Put the Reference card in front of the PST in order to see tracking results.\n\n";
std::cout <<
"System check: " << (int)pst.
Systemcheck() <<
"\n";
std::cout <<
"Frame rate set to " << pst.
GetFramerate() <<
"\n";
while (running)
{
if(restart)
{
restart = false;
}
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
}
{
std::cout << "Press enter to continue...\n";
std::cin.get();
}
return 0;
}
virtual const char * full_description() const
Definition TrackerExceptions.h:54
Abstract listener class for receiving tracking information and tracking mode updates.
Definition pstsdk_cpp.h:38
virtual void OnTrackerData(const TrackerData &data)
Callback function receiving tracking information from the tracker.
Definition pstsdk_cpp.h:49
virtual void OnTrackerMode(const TrackerMode mode)
Callback function receiving tracking mode updates from the the tracker.
Definition pstsdk_cpp.h:61
Main PST SDK class implementing tracker communication.
Definition pstsdk_cpp.h:101
void Start()
Start tracking.
Utils::PstString GetVersionInfo() const
Get version information of the SDK.
StatusMessage Systemcheck() const
Check if the tracker is running correctly.
static void Shutdown()
Shutdown the tracking system, stopping tracking.
double GetFramerate() const
Get current frame rate.
static void AddTrackerListener(Listener *listener)
Add a listener for receiving tracker data and tracking mode updates.
static void RemoveTrackerListener(Listener *listener)
Remove a listener for receiving tracker data and tracking mode updates.
void SetFramerate(double fps)
Set tracker frame rate.
Utils::PstVector< Utils::PstString > GetUncalibratedCameraUrls(bool silent=false) const
Check if cameras of the connected PST Tracker are calibrated.
TrackerMode
Tracker mode enum class.
Definition PstTypes.h:262
@ LOWPOWER
Definition PstTypes.h:263
@ RECONNECT
Definition PstTypes.h:268
@ TRACKING
Definition PstTypes.h:265
@ DISCONNECT
Definition PstTypes.h:267
TargetPoses targetlist
Definition PstTypes.h:176