Skip to content

ILLIXR v4.0.0 Release

Choose a tag to compare

@astro-friedel astro-friedel released this 28 Mar 21:09
· 10 commits to master since this release
183f7e0

ILLIXR v4.0 (2025-03-28)


Note: This release contains bugs in the hand tracking and zed plugins. These have been addressed in v4.0.1.

  • Release Notes
    This release of ILLIXR brings many new features and capabilities. A good potion of the code base has been refactored/reorganized to both standardize the code and group similar parts together. There were a total of 16 pull requests merged which introduced 10 new plugins, overhauled several others, and addressed 13 issues. The new plugins include remote rendering, hand tracking, and ORB_SLAM. Vulkan is now the default display back-end, and due to this, some of the OpenGL based plugins may not work on every system. See below for more detailed notes on the changes.
  • Plugins
    • Introduces a new ORB_SLAM3 based plugin. By @hungdche in PR #407
    • Deployed four new plugins: hand_tracking, webcam, hand_tracking.viewer, and zed.data_injection, reworked the zed plugin, and a zed_capture executable.
      • hand_tracking: detects and reports the positions of joints and fingertips; if depth information is available, or distances can be calculated by parallax, the reported coordinates are real-world in millimeters, otherwise they are in pixel coordinates
      • webcam: captures images from a webcam and publishes them to the webcam topic
      • hand_tracking.viewer: gui based interface for visualizing the output of the hand_tracker in real time
      • zed.data_injection: reads in data from disk and publishes it as if it were the zed plugin, good for debugging and testing
      • zed: now publishes information about the camera (pixels, field of view, etc.) which is required for some modes of depth sensing; also now publishes the pose corresponding to the current images; these are in addition to the images and IMU information it has always published
      • zed_capture: a standalone executable used to capture the images and poses from the zed camera and write them to disk (currently does not capture depth information); the products of this executable are intended to be used by the zed.data_injection plugin
        By @astro-friedel in PR #428
    • The hand tracking plugin now can be used as an OpenXR API Layer, where it will intercept calls to get hand tracking data. It has been tested with Monado, but should be generally compatible. Adheres to OpenXR-1.0 standards. By @astro-friedel in PR #436
    • Deployed the following plugins:
      • tcp_network_backend: a backend for Switchboard using TCP to transmit topics between two connected ILLIXR instances
      • offload_rendering_server: encodes OpenXR frames with FFMPEG and transmits them across the Switchboard network backend
      • offload_rendering_client: decodes frames transmitted from an offload_rendering_server instance and adds decoded frames to a buffer pool
      • openwarp_vk: an implementation of OpenWarp, 6-DoF asynchronous reprojection, in ILLIXR
      • lighthouse: uses libsurvive to connect with Valve Index lighthouses for head tracking native_renderer has been reworked so that external applications can run asynchronously with reprojection.
        By @qinjunj, @Jebbly, @shg8 in PR #437
  • Infrastructure
    • File loading is used by several plugins, each with their own code. The file loading code has been centralized into data_loading.hpp. By @astro-friedel in PR #416
    • Fixed an issue where plugins needed to be specified in the correct order, or they would throw an exception. By @astro-friedel in PR #417
    • Fixed an issue when changing a profile name and re-running CMake. By @astro-friedel in PR #418
    • The Runge-Kutta code was replicated several times in the code base. This code has now been centralized and rewritten to make it compatible with the current ILLIXR license. By @astro-friedel in PR #421
    • Updated the tcp socket code so that it can be distributed under the current ILLIXR license. By @williamsentosa95 in PR #424
    • The hand tracking plugin introduced a large number of breaking and non-breaking changes to the base structures used by ILLIXR.
      • breaking: the cam_type structures have been completely overhauled
        • all now inherit from a cam_base_type base struct, allowing for the cam_base_type to be used as a function argument type, letting a single function handle several different types of image input
        • all cam_base_type based structs are now defined in the common headers (under include/illixr) rather than in some plugins
        • there are now the following types: binocular_cam_type, monocular_cam_type, rgb_depth_type, depth_type, and cam_type_zed
      • breaking: the header data_format.hpp was getting too large and complex; it has been broken up into multiple headers under the data_format directory, with all struts and functions inside the ILLIXR::data_format namespace
        • camera_data.hpp: structures used to describe the physical characteristics of a camera (# pixels, field of view, etc.)
        • coordinate.hpp: enums for labelling the coordinate reference axes (e.g. LEFT_HANDED_Y_UP, RIGHT_HANDED_Y_UP, RIGHT_HANDED_Z_UP_X_FWD)
        • frame.hpp: the rendered_frame struct
        • hand_tracking_data: structs for holding positional information of points of a hand
        • imu.hpp: all imu related structs
        • misc.hpp: definitions that didn't fit with anything else
        • opencv_data_types.hpp: most cam_base_type structs
        • point.hpp: various structs for holding information about a point in 3D space
        • pose.hpp: all pose related structs
        • shape.hpp: structs related to shapes (e.g. rectangle)
        • template.hpp: common templated functions
        • unit.hpp: enums and functions related to units of measure
        • zed_cam.hpp: the cam_type_zed struct; this is kept separate from the other cam_base_type due to potential dependencies on ZED headers, which not all systems have
      • The pose structures were expanded to hold additional information used by the hand_tracking code, these additions do not affect current uses of these structures
        By @astro-friedel in PR #428, #440
    • Environment variable handling has been introduced to the switchboard. Calls to std::getenv have been replaced with calls to swithchboard->get_env, switchbaord->get_env_char, or switchbaord->get_env_bool and calls to std::setenv have been replaced with calls to switchboard->set_env. This change allows the switchboard to act as a broker for all environment variables. Additionally, environment variables can now be specified on the command line or in a yaml file, and will be made available to all plugins via the switchboard. By @astro-friedel in PR #430
  • Misc
    • Breaking: Policies for contributing to the ILLIXR code base, as well as a general coding style guide have been introduced. The entire code base was overhauled to bring it into compliance with the style guide. By @astro-friedel in PR #419
    • General documentation updates for ILLIXR. By @astro-friedel in PR #422
    • Updated CMakeLists.txt to cleanly handle newer FindBoost capabilities, updated tags on some external packages, cleaned up CMake output, added some include lines required by newer gcc compiler versions, and added all.yaml profile for testing that the code fully builds. By @astro-friedel in PR #431
    • Updated several external packages ILLIXR builds from source to newer versions. Official support for CentOS, Fedora, and Ubuntu 20 and below has been dropped, support for Ubuntu 24 has been added. By @astro-friedel in PR #439
    • Added automated release note generation by @astro-friedel in PR #441
    • Major documentation updates, including up-to-date plugin listing and descriptions and more internal links to data types. By @astro-friedel in PR #447
  • Issues
    The following issues have been addressed and closed by this release:
    • #151 Openwarp by PR #437
    • #245 Automate changelog generation by PR #441
    • #368 Integrate TCP implementation for offloading VIO by PR #437
    • #371 Bringing Configurable Parameters to Current iteration of ILLIXR by PR #430
    • #401 Reduce or remove the use of environment variables to pass information between main and plugins by PR #430
    • #408 Dependency handling for plugin loader by PR #417
    • #410 Re-running CMake with different profile file results in old profile file being used by PR #418
    • #412 Enable Headless Rendering in Vulkan by PR #437
    • #415 Generate Guidelines and Procedures by PR #419
    • #427 Broken Fedora 38 (only?) build by PR #439
    • #443 Add CMake to the dependencies by PR #422
    • #89 Integrate ORB-SLAM3 by PR #407
    • #96 Push mkdocs and doxygen on merge to master by PR #441