ILLIXR plugins
This page details the structure of ILLIXR's plugins and how they interact with each other.
audio_pipeline
Launches a thread for binaural: recording and one for binaural playback.
Audio output is not yet routed to the system's speakers or microphone,
but the plugin's compute workload is still representative of a real system.
By default, this plugin is enabled (see native configuration).
Topic details:
- Calls
pose_prediction
debugview
Renders incoming frames from the graphics pipeline for debugging live executions of the application.
Topic details:
- Calls
pose_prediction - Asynchronously reads
fast_pose_typefromimu_rawtopic. (IMU biases are unused). - Asynchronously reads
pose_typefromslow_posetopic. - Asynchronously reads
rgb_depth_typefromrgb_depthtopic. - Asynchronously reads buffered
binocular_cam_typefromcamtopic.
depthai
Enables access to the DepthAI library.
Topic details:
- Publishes
imu_typetoimutopic - Publishes
binocular_cam_typetocamtopic` - Publishes
rgb_depth_typetorgb_depthtopic
Details Code
gldemo 1
Renders a static scene (into left and right eye buffers) given the pose
from pose_prediction.
Topic details:
- Calls
pose_prediction - Publishes
rendered_frametoeyebuffertopic. - Publishes
image_handletoimage_handletopic. - Asynchronously reads
time_pointfromvsync_estimatetopic.
ground_truth_slam
Reads the ground truth from the same dataset as the offline_imu plugin.
Ground truth data can be compared against the head tracking results (e.g. from VIO, IMU integrator, or pose predictor) for accuracy.
Timing information is taken from the offline_imu measurements/data.
Topic details:
- Publishes
pose_typetotrue_posetopic. - Publishes
Eigen::Vector3ftoground_truth_offsettopic. - Asynchronously reads
imu_typefromimutopic.
Details Code
gtsam_integrator
Integrates over all IMU samples since the last published visual-inertial pose to provide a fast pose every time a new IMU sample arrives using the GTSAM library (upstream).
Topic details:
- Publishes
imu_raw_typetoimu_rawtopic. - Synchronously reads
imu_typefromimutopic. - Asynchronously reads
imu_integrator_inputtoimu_integrator_inputtopic.
Details Code
hand_tracking
Detects and identifies hands in an image, CPU based calculations. The output from this plugin can be used to track hand movements and recognize hand gestures.
Topic details:
- Synchronously reads one of
monocular_cam_typefromwebcamtopic,binocular_cam_typefromcamtopic, orcam_type_zedfromcam_zedtopic. This is selectable at run time via an environment variable. - Asynchronously reads
camera_datafromcam_datatopic, only once as values are static - If reading from
webcam- Asynchronously reads
pose_typefromposetopic - Asynchronously reads one of
depth_typefromdepthtopic orrgb_depth_typefromrgb_depthtopic, depending on which is available
- Asynchronously reads
- If reading from
cam- Asynchronously reads
pose_typefromposetopic - Asynchronously reads one of
depth_typefromdepthtopic orrgb_depth_typefromrgb_depthtopic, if either is available, but not required
- Asynchronously reads
- If reading from
cam_zed, no additional data are required. - Publishes
ht_frametohttopic.
hand_tracking_gpu
Detects and identifies hands in an image, GPU based calculations. The output from this plugin can be used to track hand movements and recognize hand gestures. This plugin is currently experimental.
Topic details:
- Synchronously reads one of
monocular_cam_typefromwebcamtopic,binocular_cam_typefromcamtopic, orcam_type_zedfromcam_zedtopic. This is selectable at run time via an environment variable. - Asynchronously reads
camera_datafromcam_datatopic, only once as values are static - If reading from
webcam- Asynchronously reads
pose_typefromposetopic - Asynchronously reads one of
depth_typefromdepthtopic orrgb_depth_typefromrgb_depthtopic, depending on which is available
- Asynchronously reads
- If reading from
cam- Asynchronously reads
pose_typefromposetopic - Asynchronously reads one of
depth_typefromdepthtopic orrgb_depth_typefromrgb_depthtopic, if either is available, but not required
- Asynchronously reads
- If reading from
cam_zed, no additional data are required. - Publishes
ht_frametohttopic.
hand_tracking.viewer
Reads the output of the hand_tracking plugin and displays the results on the screen. This is most useful for debugging. The capabilities of this plugin will be merged into the debugview plugin in the future.
Topic details:
- Synchronously reads
ht_framefromhttopic.
lighthouse
Enables lighthouse tracking using the libsurvive library
Topic details:
- Publishes
pose_typetoslow_posetopic. - Publishes
fast_pose_typetofast_posetopic.
native_renderer
Constructs a full rendering pipeline utilizing several ILLIXR components.
Topic details:
- Calls
pose_prediction - Calls
vulkan::display_provider - Calls
vulkan::timewarp - Calls
vulkan::app - Synchronously reads
time_pointfromvsync_estimatetopic.
offline_cam
Reads camera images from files on disk, emulating real cameras on the headset (feeds the application input measurements with timing similar to an actual camera).
Topic details:
- Publishes
binocular_cam_typetocamtopic.
Details Code
offline_imu
Reads IMU data files on disk, emulating a real sensor on the headset (feeds the application input measurements with timing similar to an actual IMU).
Topic details:
- Publishes
imu_typetoimutopic.
Details Code
offload_data
Writes frames and poses output from the asynchronous reprojection plugin to disk for analysis.
Topic details:
- Synchronously reads
texture_posetotexture_posetopic.
Details Code
offload_rendering_client
Receives encoded frames from the network, sent by offload_rendering_server
Topic details:
- Calls
vulkan::display_provider - Calls
pose_prediction - Asynchronously reads
compressed_framefromcompressed_framestopic. - Publishes
fast_pose_typetorender_posetopic.
offload_rendering_server
Encodes and transmits frames to one of the offload_rendering_clients.
Topic details:
- Calls
vulkan::display_provider - Asynchronously reads
fast_pose_typefromrender_pose_topic. - Publishes
compressed_frametocompressed_framestopic.
offload_vio
Four plugins which work in unison to allow head tracking (VIO) to be rendered remotely.
Topic details:
offload_vio.device_rx- Asynchronously reads a string from topic
vio_pose. - Synchronously reads
imu_typefromimutopic - Publishes
pose_typetoslow_posetopic. - Publishes
imu_integrator_inputtoimu_integrator_inputtopic. offload_vio.device_tx- Asynchronously reads
binocular_cam_typefromcam topic - Publishes a string to
compressed_imu_camtopic offload_vio.server_rx- Asynchronously reads a string from
compressed_imu_camtopic - Publishes
imu_typetoimutopic. - Publishes
binocular_cam_typetocamtopic. offload_vio.server_tx- Asynchronously reads
imu_integrator_inputfromimu_integrator_inputtopic. - Synchronously reads
pose_typefromslow_posetopic fromopen_vins - Publishes a string to
vio_posetopic.
openni
Enables an interface to the Openni algorithms.
Topic details:
- Publishes
rgb_depth_typetorgb_depthtopic.
open_vins
An alternate head tracking (upstream) implementation that uses a MSCKF (Multi-State Constrained Kalman Filter) to determine poses via camera/IMU.
Topic details:
- Publishes
pose_typeonslow_posetopic. - Publishes
imu_integrator_inputonimu_integrator_inputtopic. - Synchronously reads/subscribes to
imu_typeonimutopic.
openwarp_vk
Provides a Vulkan-based reprojection service.
Topic details:
- Calls
vulkan::timewarp - Calls
pose_prediction
orb_slam3
Utilizes the ORB_SLAM3 library to enable real-time head tracking.
Topic details:
- Asynchronously reads
binocular_cam_typefromcamtopic. - Synchronously reads/subscribes to
imu_typeonimutopic. - Publishes
pose_typetoslow_posetopic. - Publishes
imu_integrator_inputtoimu_integrator_inputtopic.
passthrough_integrator
Provides IMU integration.
Topic details:
- Asynchronously reads
imu_integrator_inputfromimu_integrator_inputtopic. - Synchronously reads
imu_typefromimutopic. - Publishes
imu_raw_typetoimu_rawtopic.
Details Code
realsense
Reads images and IMU measurements from the Intel Realsense.
Topic details:
- Publishes
imu_typetoimutopic. - Publishes
binocular_cam_typetocamtopic. - Publishes
rgb_depth_typetorgb_depthtopic.
Details Code
record_imu_cam
Writes imu_type and binocular_cam_type data to disk.
Topic details:
- Asynchronously reads
binocular_cam_typefromcamtopic. - Synchronously reads
imu_typefromimutopic.
record_rgb_depth
Writes rgb_depth_type data to disk.
Topic details:
- Synchronously reads
rgb_depth_typefromrgb_depthtopic.
Details Code
rk4_integrator
Integrates over all IMU samples since the last published visual-inertial pose to provide a fast pose every time a new IMU sample arrives using RK4 integration.
Topic details:
- Asynchronously reads
imu_integrator_inputfromimu_integrator_inputtopic. - Synchronously reads
imu_typefromimutopic. - Publishes
imu_raw_typetoimu_rawtopic.
Details Code
tcp_network_backend
Provides network communications over TCP.
Details Code
timewarp_gl 1
Asynchronous reprojection of the eye buffers. The timewarp ends right before vsync, so it can deduce when the next vsync will be.
Topic details:
- Calls
pose_prediction - Publishes
hologram_inputtohologram_intopic. - If using Monado
- Asynchronously reads
rendered_frameoneyebuffertopic, if using Monado. - Publishes
time_pointtovsync_estimatetopic. - Publishes
texture_posetotexture_posetopic ifILLIXR_OFFLOAD_ENABLEis set in the env.
- Asynchronously reads
- If not using Monado
- Publishes
signal_to_quadtosignal_quadtopic.
- Publishes
timewarp_vk
Asynchronous reprojection of the eye buffers. The timewarp ends right before vsync, so it can deduce when the next vsync will be.
Topic details:
- Calls
vulkan::timewarp - Calls
pose_prediction - Asynchronously reads
time_pointfromvsync_estimatetopic.
webcam
Uses a webcam to capture images for input into the hand_tracking plugin. This plugin is useful for debugging and is not meant to be used in a production pipeline.
Topic details:
- Publishes
monocular_cam_typetowebcamtopic.
zed
Reads images and IMU measurements from the ZED Mini.
Unlike offline_imu, zed additionally has RGB and depth data.
Note
This plugin implements two threads: one for the camera, and one for the IMU.
Topic details:
- Publishes
imu_typetoimutopic. - Publishes
binocular_cam_typetocamtopic. - Publishes
rgb_depth_typetorgb_depthtopic. - Publishes
camera_datatocam_datatopic. - Publishes
cam_type_zedoncam_zedtopic.
zed.data_injection
Reads images and pose information from disk and publishes them to ILLIXR.
Topic details:
- Publishes
binocular_cam_typetocamtopic - Publishes
pose_typetoposetopic. - Publishes
camera_datatocam_datatopic.
Below this point, we will use Switchboard terminology. Read the API documentation on Switchboard for more information.
Current dataflow between all plugins and services. Dark blue boxes represent plugins and cyan component boxes represent services. Data types are represented with cylinders and labelled as topic <data_type>. Service data types are represented by octagons. Solid lines point from the plugin/service which publishes them to the data type. Dashed lines point from data types to the plugin/service which reads them synchronously. Dotted lines point from data types to the plugin/service which reads them asynchronously.
See Writing Your Plugin to extend ILLIXR.
Plugin Interdependencies
Some plugins require other plugins to be loaded in order to work. The table below gives a listing of the plugin interdependencies.
| Plugin | Requires | Provided by plugin |
|---|---|---|
| debugview | pose_prediction | fauxpose, pose_lookup, pose_prediction |
| gldemo | pose_prediction | fauxpose, pose_lookup, pose_prediction |
| native_renderer | app | vkdemo |
| display_sink | display_vk | |
| pose_prediction | fauxpose, pose_lookup, pose_prediction | |
| timewarp | timewarp_vk | |
| timewarp_gl | pose_prediction | fauxpose, pose_lookup, pose_prediction |
| timewarp_vk | display_sink | display_vk |
| pose_prediction | fauxpose, pose_lookup, pose_prediction | |
| vkdemo | display_sink | display_vk |
See Getting Started for more information on adding plugins to a profile file.