Callbacks
A callback is a segment of code that will run only when a certain condition is satisfied. For the Swarm Platform, the callbacks we use are triggered by the VRPN communications protocol used by the Camera System. Whenever the Client receives a new packet of data from the Camera System the callback will be triggered.
Registering a Callback
Before we can do anything we need to set up a callback that executes when new data is present.
- 1. Use the VRPN Library to create a Connection and Tracker_Remote object pointers (code in vrpn.cpp):
vrpn_Connection *connection; vrpn_Tracker_Remote *trackerHand; vrpn_Tracker_Remote *tracker; vrpn_Tracker_Remote *tracker2; vrpn_Tracker_Remote *tracker3; vrpn_Tracker_Remote *tracker4;
- Note: We need a Tracker_Remote object for each constellation we want to track (Hand and each Crazyflie in the Swarm)
- 2. Now we create a function to:
- Register the connection to the Server computer
- Assign each Tracker_Remote object to a valid constellation name on the Server computer
- Link that constellation to a callback (code in vrpn.cpp):
void vrpn_init(std::string connectionName, void (*callbackHand)(void*, const vrpn_TRACKERCB), void (*callback)(void*, const vrpn_TRACKERCB), void (*callback2)(void*, const vrpn_TRACKERCB), void (*callback3)(void*, const vrpn_TRACKERCB), void (*callback4)(void*, const vrpn_TRACKERCB), char *key) { connection = vrpn_get_connection_by_name(connectionName.c_str()); #if USE_HAND trackerHand = new vrpn_Tracker_Remote("hand", connection); #endif tracker = new vrpn_Tracker_Remote("Crazyflie21", connection); tracker2 = new vrpn_Tracker_Remote("Crazyflie2", connection); tracker3 = new vrpn_Tracker_Remote("Crazyflie22", connection); tracker4 = new vrpn_Tracker_Remote("Crazyflie23", connection); #if USE_HAND trackerHand->register_change_handler(0, callbackHand); #endif tracker->register_change_handler(0, callback); tracker2->register_change_handler(0, callback2); tracker3->register_change_handler(0, callback3); tracker4->register_change_handler(0, callback4); usleep(2000); }
- Note 1: We pass in the following as inputs to the function:
- string connectionName is the IP address of the Computer running the Camera System
- A callback pointer for each constellation we want to track (These will be established in the Using a Callback section)
- Note 2: Notice the names of each tracker match the names of the constellations in the Camera System Software (shown below):
- Note 1: We pass in the following as inputs to the function: