ILLIXR plugins
This page details the structure of ILLIXR's plugins and how they interact with each other.
Default Plugins
-
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 (seenative
configuration).Topic details:
- Calls
pose_prediction
.
- Calls
-
debugview
: Renders incoming frames from the graphics pipeline for debugging live executions of the application.Topic details:
- Calls
pose_prediction
. - Asynchronously reads
fast_pose
onimu_raw
topic. (IMU biases are unused). - Asynchronously reads
slow_pose
onslow_pose
topic. - Synchronously reads
imu
onimu
topic. - Asynchronously reads buffered
cam_type
oncam
topic.
- Calls
-
gldemo
: Renders a static scene (into left and right eye buffers) given the pose frompose_prediction
.Topic details:
- Calls
pose_prediction
. - Publishes
rendered_frame
oneyebuffer
topic. - Asynchronously reads
time_type
onvsync_estimate
topic.
- Calls
-
ground_truth_slam
: Reads the ground truth from the same dataset as theoffline_imu
plugin. Ground truth data can be compared against the measurements fromoffline_imu
for accuracy. Timing information is taken from theoffline_imu
measurements/data.Topic details:
- Publishes
pose_type
ontrue_pose
topic. - Asynchronously reads
imu_type
onimu
topic.
- Publishes
-
gtsam_integrator
: Integrates over all IMU samples since the last published SLAM pose to provide a fast pose every time a new IMU sample arrives using the GTSAM library (upstream).Topic details:
- Publishes
imu_raw_type
onimu_raw
topic. - Synchronously reads/subscribes to
imu_type
onimu
topic. - Asynchronously reads
imu_integrator_input
onimu_integrator_input
topic.
- Publishes
-
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_type
onimu
topic.
- Publishes
-
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
cam_type
oncam
topic. pose_prediction
: Uses the latest IMU value to predict a pose for a future point in time. Implements thepose_prediction
service (defined incommon
), so poses can be served directly to other plugins.
Topic details:
- Asynchronously reads
pose_type
onslow_pose
topic, but it is only used as a fallback. - Asynchronously reads
imu_raw
onimu_raw
topic. - Asynchronously reads
pose_type
ontrue_pose
topic, but it is only used if the client asks for the true pose. - Asynchronously reads
time_type
onvsync_estimate
topic. This tellspose_predict
what time to estimate for.
- Publishes
-
timewarp_gl
: Asynchronous reprojection of the eye buffers. The timewarp ends just after vsync, so it can deduce when the next vsync will be.Topic details:
- Calls
pose_prediction
. - Asynchronously reads
rendered_frame
oneyebuffer
topic. - Publishes
time_type
onvsync_estimate
topic. - Publishes
hologram_input
onhologram_in
topic. - Publishes
texture_pose
ontexture_pose
topic ifILLIXR_OFFLOAD_ENABLE
is set in the env.
- Calls
Below this point, we will use Switchboard terminology. Read the API documentation on Switchboard for more information.
-
In the above figure, ovals are plugins.
-
Solid arrows from plugins to topics represent publishing.
-
Solid arrows from topics to plugins represent synchronous reading. Some action is taken for every event which gets published on the topic.
-
Dashed arrows from topics to plugins represent asynchronous reading. Plugin readers only need the latest event on their topic.
-
Imagine the topic as a trough filling with events from its publisher. Synchronous readers (AKA subscribers) drain the trough, while asynchronous readers just skim fresh events off the top of the trough.
See Writing Your Plugin to extend ILLIXR.
Other Supported Plugins
ILLIXR supports additional plugins to replace some of the default plugins.
-
fauxpose
: An alternate tracking implementation that simply generates "fast_pose" data from a simple mathematical algorithm (circular movement). The intent is for use when debugging other plugins and the developer wants a known pose trajectory without having to configure actual tracking.Topic details: - Publishes
pose_position
onfast_pose
topic. -
hologram
: Adapts the eyebuffer for use on a holographic display. By default, this plugin is disabled, since an NVIDIA GPU is currently required.Topic details:
- Asynchronously reads
hologram_input
onhologram_in
topic. Hologram is too slow to run for every input, so the plugin implements an asynchronous reader which can drop inputs.
- Asynchronously reads
-
offload_data
: Writes frames and poses output from the asynchronous reprojection plugin to disk for analysis.Topic details:
- Synchronously reads
texture_pose
ontexture_pose
topic.
- Synchronously reads
-
open_vins
: An alternate SLAM (upstream) implementation that uses a MSCKF (Multi-State Constrained Kalman Filter) to determine poses via camera/IMU.Topic details:
- Publishes
pose_type
onslow_pose
topic. - Publishes
imu_integrator_input
onimu_integrator_input
topic. - Synchronously reads/subscribes to
imu_type
onimu
topic.
- Publishes
-
pose_lookup
: Implements thepose_predict
service, but uses ground truth from the dataset. The plugin peeks "into the future" to determine what the exact pose will be at a certain time.Topic details:
- Asynchronously reads
time_type
onvsync_estimate
topic. This tellspose_lookup
what time to lookup.
- Asynchronously reads
-
realsense
: Reads images and IMU measurements from the Intel Realsense.Topic details:
- Same interface as
zed
.
- Same interface as
-
rk4_integrator
: Integrates over all IMU samples since the last published SLAM pose to provide a fast pose every time a new IMU sample arrives using RK4 integration.Topic details:
- Same interface as
gtsam_integrator
.
- Same interface as
-
zed
: Reads images and IMU measurements from the ZED Mini. Unlikeoffline_imu
,zed
additionally has RGB and depth data. Note that this plugin implements two threads: one for the camera, and one for the IMU.Topic details:
- Publishes
imu_type
onimu
topic. - Publishes
rgb_depth_type
onrgb_depth
topic.
- Publishes
See Getting Started for more information on adding plugins to a profile file.