This example shows how to work with tracking targets using the PST SDK. Note that at this moment tracking targets can not be trained or imported using the PST SDK. In order to add new tracking targets, please use the PST Client together with the pst_sdk_enable_shared_memory() fuction, or use the stand-alone PST Server to configure the tracking targets.
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.).
#ifdef WIN32
#include <windows.h>
#else
#include <unistd.h>
#endif
static void Exithandler(int sig);
#ifdef WIN32
BOOL WINAPI ConsoleHandler(DWORD CEvent)
{
Exithandler(CEvent);
return TRUE;
}
#endif
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <signal.h>
static sig_atomic_t running = 1;
static const uint32_t numberOfSamplesToGrab = 100;
{
static uint32_t samplesGrabbed = 0;
if (samplesGrabbed++ >= numberOfSamplesToGrab)
{
running = 0;
}
{
}
}
static void Exithandler(int sig)
{
running = 0;
}
void PrintLastErrorMessage()
{
char* last_error_message = NULL;
{
last_error_message = "Failed to allocate memory error.";
}
printf("last error message: %s \n", last_error_message);
}
{
{
PrintLastErrorMessage();
exit(status);
}
}
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
#ifdef WIN32
#else
CheckErrorCode(
pst_tracker_init4(&ctracker,
"",
"config.cfg",
"models.db", argv[1]));
#endif
char* version_string;
printf("Running PST Server version %s \n", version_string);
printf("Put the Reference card in front of the PST in order to see tracking results.\n\n");
size_t number_of_statuses;
printf("Found %zu tracking targets:\n", number_of_statuses);
for (int i = 0; i < number_of_statuses; ++i)
{
printf("%s\t%s\n", statuses[i].target.name, statuses[i].status ? "true" : "false");
}
printf("\n");
printf("3D marker positions making up the Reference target:\n");
{
}
printf("\n");
while (running == 1)
{
#ifdef WIN32
Sleep(100);
#else
usleep(100000);
#endif
}
printf("Press enter to continue...\n");
getchar();
return 0;
}
EPstErrorStatus pst_tracker_get_target_markers(const PstTracker *ctracker, const char *name, PstTargetMarkers *marker_list)
Get 3D marker positions of stored tracking target.
EPstErrorStatus pst_tracker_alloc_and_get_target_list(const PstTracker *ctracker, PstTargetStatus **statuses, size_t *number_of_statuses)
Get TargetStatuses object containing all tracking targets and their status.
EPstErrorStatus pst_tracker_init(PstTracker *ctracker)
This function initializes the tracker object.
EPstErrorStatus pst_alloc_and_get_last_error_message(char **cstring)
This function returns the last error message that was recorded by the system.
EPstErrorStatus pst_tracker_init4(PstTracker *ctracker, const char path[], const char config_file[], const char db_file[], const char grabber_name[])
This function initializes the tracker object.
void pst_tracker_destroy(PstTracker *ctracker)
void pst_sdk_shutdown()
Shutdown the tracking system, stopping tracking.
EPstErrorStatus pst_tracker_alloc_and_get_version_info(const PstTracker *ctracker, char **version_string)
Get version information of the SDK.
EPstErrorStatus pst_tracker_set_target_status(PstTracker *ctracker, const char *name, bool set_active)
Set status of a single tracking Target.
void pst_free(void *data)
Free data allocated by the PST SDK.
EPstErrorStatus pst_tracker_start(PstTracker *ctracker)
Start tracking.
void pst_target_markers_init(PstTargetMarkers *marker_list)
void pst_target_markers_destroy(PstTargetMarkers *marker_list)
EPstErrorStatus pst_tracker_add_tracker_data_callback(PstTracker *ctracker, void(*on_tracker_data)(const PstTrackerData *, EPstErrorStatus))
Add a callback function for tracker data.
EPstStatusMessage pst_tracker_system_check(const PstTracker *ctracker)
Check if the tracker is running correctly.
EPstErrorStatus
Tracker error messages enum class.
Definition pstsdk_c.h:44
@ PST_ERROR_STATUS_OK
Definition pstsdk_c.h:45
char name[128]
Definition pstsdk_c.h:134
float coordinates[3]
Definition pstsdk_c.h:217
Collection struct for PstTargetMarker.
Definition pstsdk_c.h:229
size_t number_of_markers
Definition pstsdk_c.h:231
PstTargetMarker * markers
Definition pstsdk_c.h:230
PstTarget target
Definition pstsdk_c.h:200
Tracking target status.
Definition pstsdk_c.h:152
Tracking information retrieved from tracker.
Definition pstsdk_c.h:248
size_t number_of_targets
Definition pstsdk_c.h:251
PstTargetPose * targetlist
Definition pstsdk_c.h:253
Main PST SDK struct for tracker communication.
Definition pstsdk_c.h:264