PB is composed of multiple components that talks with each other through the network. A full PB network is composed of:
- One pb-master executing tracking tasks
- One or more pb-tracker on machines connected to tracking devices
- One or more pb-receiver on machines using the tracking information from the pb-master
PB-terminal is only used when there is a need to manipulate the current layout used by the master.
All applications can run on the same machine. As long as they are on the same network, they will connect with each other automatically. Network operations rely on Boost Asio, information is sent using Protobuf for compression and standardization.
Every component except pb-terminal works on macos and linux; pb-terminal works only on macos.
Each component of PB executes a specific task
This is a dynamic library used by pb-tracker, pb-master and pb-broadcaster. It contains the networking codes, skeleton structures and more.
pb-common relies on multiple libraries:
- Boost: for networking,
libboost_system
must be embedded - Gflags: Command-line parameters
- Protobuf: For networking compression
The pb-master preforms tracking operations on bodies it receives from connected pb-trackers. These operations merge bodies that are coming from different devices but who represent the same person. This allows for continuous tracking across multiple devices.
Tracking operations require a Layout defining the placement of each tracking device in the real world. Layouts are created and updated with the pb-terminal application. A pb-terminal can set the layout then disconnect, the layout will stay active.
pb-master relies only on the pb-common library.
The pb-terminal application purpose is to offer a convenient interface for building layouts used by pb-master, and monitoring activity on the master. An active connection to a pb-master is required for the application for execute.
When opening a layout on the terminal, the master start using it for tracking operations.
Layouts are stored on the master machine.
The pb-terminal uses the Swift Packet Manager for its dependencies. Xcode 11 handles this for you.
The pb-tracker handles the Human Pose Estimation (HPE) part of the application. It searches for compatible tracking devices connected to the machine on which it is running (for now, only Kinects V2 are supported), connects to them, and then stream the detected bodies to the master application.
pb-tracker relies on multiple libraries:
- pb-common
- OpenNI2 with libfreenect2 driver: Connection to the Kinects)
- NiTE2: HPE for OpenNI2 devices
- OpenCV: Live view of the device (Todo)
At this stage of development, the pb-tracker application isn't very stable as the NiTE library tends to segfault without warning.
To handle this, the tracker launcher will restart the pb-tracker if it crashes. Since the components autoconnects with each other automatically, downtime is limited. Work is planned, to stabilize the tracker.
The tracker launcher relies only on Boost headers.
The pb-broadcaster task is to take the output of the master and display a visual representation of it.
This hasn't been developed yet.