Coder Social home page Coder Social logo

illixr / illixr Goto Github PK

View Code? Open in Web Editor NEW
124.0 14.0 43.0 140.27 MB

ILLIXR: Illinois Extended Reality Testbed

License: Other

Shell 0.08% C++ 77.59% C 17.56% Python 0.09% CMake 4.42% Dockerfile 0.18% GLSL 0.07%
vr ar augmented-reality systems computer-architecture extended-reality mixed-reality xr mr openxr

illixr's Issues

Investigate Repo for submodules

Requirements:

  • System should be able to checkout (possibly new branch) the main module and every submodule to a branch of the same name.
  • System should be able to merge the main module and every submodule simultaneously.

Consider:

Replace `std::mutex` with `std::shared_mutex`

A std::shared_mutex permits EITHER n readers OR 1 writer.

  • When a thread reads a datastructure, it only needs to acquire std::shared_lock. This permits parallel reads, since they don't conflict, but locks out all writers.
  • When a thread writes a datastructure, it needs to acquire std::unique_lock. This locks out all other writers and all readers.

Stylistic improvements

  • Header functions should be declared static.
  • Use #pragma once instead of header guard.
  • Either always use _m_field and _p_method or never.

Camera/IMU Calibration Files

  • Standard Camera/IMU calibration format for ILLIXR
  • Have runner or runtime parse this file and give as data structure for a slam implementation

Integrate ORB-SLAM3

Rationale: full VI-SLAM system with loop closure. ORB-SLAM3 has maps that stay persistent across runs, and we will need an efficient mechanism in ILLIXR to store/retrieve them.

Add CI/CD workflow

A workflow needs to run on branches that builds and pushes docker images to ghcr.io and runs the tests in ILLIXR.

Standardize clock in every component

  • In some places we use std::chrono::system_clock; in others we use std::chrono::high_resolution_clock. Which is better?
  • Is there a way we could make this work on Windows?

Configurable ILLIXR timeout

Currently, ILLIXR timesout with 60 seconds. We need a way to configure this time or turn the timeout off. This should probably be set in the config yaml file for runner.py.

Exit gracefully

  • Have a designated way to exit the program (Ctrl+C and handle SIGINT or have a way for a plugin to signal to the runtime "game over").

Run clang-format

  • Deliberate on the format
  • Also standardize naming conventions (always use _m_ for private or never)
  • Figure out how to enforce (make part of CI?)

Implement Pose Prediction

  • See if OpenVINS pose integration will suffice.
  • Rip out the Newtonian mechanics pose prediction from OpenVINS.
  • Expose it through the Phonebook pose_prediction interface.
  • It needs some state and some IMU readings. Inside feed_imu_cam, push the last few IMU readings + relevant state into a topic called integrated_state.
  • Read async integrated_state in the pose prediction.

Sync timing from ILLIXR to Monado

  • Make the application's rendering (ILLIXR/timewarp_gl | Monado) to wake up right after vsync (known by ILLIXR/timewarp_gl).
  • Make xrWaitFrame wait until next vsync period.

Implement Switchboard bag

  • Like ROS bag, but for Switchboard.
  • Maybe we could convert EUROC to that. This would obviate the need for offline_imu_cam and groundtruth_slam.

Expose our pose prediction to OpenXR apps

  • Figure out how Godot queries pose.
  • Confirm that xrLocateViews queries pose in OpenXR apps.
  • Figure out how to handle this call in ILLIXR hmd in monado_integration.

Windows support

  • Windows support for offline IMU Camera
  • Document Panacea plugin translation for Windows
  • Windows support for OpenVINS
  • Investigate what would be necessary for MacOS/iOS?

Separate IMU/camera Switchboard topics

Or explain why we shouldn't.
This currently complicates the ZED code (where the Camera thread has to send frames to the IMU thread, which pairs them and sends them on a Switchboard topic).
This currently simplifies OpenVINS (where we need to process the camera after the IMU).

Add human-readable logging infrastructure

Our record_logger and the CPU timers in #209/#211 are good for computer-readable telemetry. However, we need an infrastructure for data intended to get to a user, such as warnings, error descriptions, and debugging messages.

Perhaps, we should use glog.

  • By default, ILLIXR should not print anything except for really critical stuff (why this is considered "good UNIX style")
    • Logs in a loop can use something like glog's LOG_EVERY_N.
  • Many of the assert(thing && msg) can be replaced with glog's CHECK(thing) << msg.
    • This permits the message to be a dynamically generated string, like CHECK(thing) << getErrorMessage(msg) which would not work with a raw assert.
    • CHECK is not suppressed by NDEBUG, which has caused us bugs in the past (and pesky [[maybe_unused]] annotations).
      • One can still explicitly reserve a check for debug builds by surrounding the CHECK with #ifndef NDEBUG, as we do already in many places (e.g. common/record_logger.hpp).
  • Glog can dump the stacktrace on segfault.
    • We do already have catchsegv. There's not a whole lot of benefit to switching over to glog for that.
  • Glog embeds the filename and line number in all logs.
  • Perhaps we want to "selectively enable" debug flags for different plugins, as in LLVM. This is the only thing not readily avilable in glog.

Add Google Analytics to our websites

  • We use three different generators for our three different sub-sites. Google Analytics tracking codes have to be added to each sub-site.

  • Google Analytics will allows us to track user demographics (motivate translations), popularity over time (evaluate which marketing works), and which order users visit our pages (help lay out the documentation in a user-friendly way).

  • Main website

  • Doxygen site

  • mkdocs site

Set up CI testing

For most components, the best we can do is ensure it builds.
However, some components can also have tests make test.
In the past, broken code (non-compiling) has been pushed to master, so automating this has real benefit.

Fix ZED Cmake

ZED's CMakeLists.txt currently has an additional linkage step which requires us to manually add C++ flags and a fake main(). Need to clean this up.

When dumping images, use timestamp at the _end of the upcoming vsync cycle_ not the _end of timewarp_

  • If timewarp[i] is on time (earlier than vsync[i]), image should bear the timestamp of vsync[i].
  • If timewarp[i] is late, then it should bear the timestamp of vsync[i+1].
    • (However, it may be overwritten by timewarp[i+1], if timewarp[i+1] finishes before vsync[i+1]. The latest timewarp before vsync should be used. This overwriting is how normal file semantics work, so shouldn't complicate the implementation).
  • Use pose_predict to get the timestamp of the next (nearest after now()) vsync.
    • This interface is not yet present; It is being developed by @JeffreyZh4ng .

Fix `install_deps.sh`

  • Install Python3.8 (safely, with pyenv)
  • Install Poetry with Python3.8
  • Install clang-10
  • Make clang-10 default (don't want to export every time).
  • Install curl, zip.

Fix documentation bugs

  • default_plugins.md: Remove "TODOs"
  • default_plugins.md: Remove NVIDIA GPU info from audio
  • writing_your_plugin.md: Doulble-check for correctness with the new build system.

Research Python in Spindle

Can we support dynamic languages like Python?
Python is a bit of a special case, because the interpreter supports embedding into a larger process.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.