{"id":16801131,"url":"https://github.com/rib/ouvrt","last_synced_at":"2025-07-15T04:31:39.481Z","repository":{"id":143042724,"uuid":"37826465","full_name":"rib/ouvrt","owner":"rib","description":"A playground to understand how the Oculus Rift DK2 positional tracking works","archived":false,"fork":false,"pushed_at":"2015-03-22T11:24:34.000Z","size":188,"stargazers_count":2,"open_issues_count":0,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-08T22:02:54.375Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rib.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-06-21T21:20:15.000Z","updated_at":"2021-01-28T00:20:46.000Z","dependencies_parsed_at":"2023-03-25T00:06:51.725Z","dependency_job_id":null,"html_url":"https://github.com/rib/ouvrt","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/rib/ouvrt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rib%2Fouvrt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rib%2Fouvrt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rib%2Fouvrt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rib%2Fouvrt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rib","download_url":"https://codeload.github.com/rib/ouvrt/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rib%2Fouvrt/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265402833,"owners_count":23759237,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-13T09:35:57.821Z","updated_at":"2025-07-15T04:31:39.116Z","avatar_url":"https://github.com/rib.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"ouvrt\n=====\n1. About\n2. Setup\n3. ouvrtd\n4. Tools\n5. Todo\n\n1. About\n--------\nouvrt is a playground to understand how the Oculus Rift DK2 positional tracking\nworks. Its main component is the ouvrtd daemon that detects the Rift DK2 USB\nHID device and the Positional Tracker DK2 UVC camera, sets up synchronized\nexposure, and captures video frames of the DK2's IR LEDs.\n\nCurrently, features are limited to enabling the IR LEDs, setting up the camera\nsensor for synchronized exposure, and capturing video frames into a GStreamer\npipeline for debugging.\n\n2. Setup\n--------\n\nFirst of all, make sure the prerequisites libraries and development packages\nare installed:\n\n - libudev\n - GStreamer 1.0\n\nNow configure the build system and build everything:\n\n  $ ./configure\n\nWhen building from git, you also need autotools. Use autogen.sh to generate\nthe configure script with autoreconf and execute it:\n\n  $ ./autogen.sh\n\nNow build everything:\n\n  $ make\n\n3. ouvrtd\n---------\n\nMake sure you have permissions to access the /dev/hidraw and /dev/video devices\ncorresponding to the Rift DK2 and the DK2 Positional Tracker. Then run ouvrtd:\n\n  $ ./ouvrtd\n\nThe daemon will create a shared memory socket /tmp/ouvrtd-gst and write frames\ninto it as soon as a GStreamer shmsrc connects to it. To see the captured\nframes, run:\n\n  $ gst-launch-1.0 shmsrc socket-path=/tmp/ouvrtd-gst ! video/x-raw,format=BGRx,width=752,height=480,framerate=60/1 ! ximagesink\n\n4. Tools\n--------\n\nThe dump-eeprom tool reads the Positional Tracker DK2 EEPROM and writes it to\na file or stdout:\n\n  $ ./dump-eeprom camera-dk2-rom.bin\n\n  $ ./dump-eeprom - | hexdump -C\n\n4. Todo\n-------\n\n  - Add blob detection and tracking\n  - Enable Rift DK2 IR LED blinking patterns\n  - Add individual blinking LED detection to the blob tracker\n  - Add a 3D model of the tracking LEDs, readout from the Rift\n  - Add support for camera intrinsic and lens distortion parameters, readout\n    from the Rift and/or camera EEPROM\n  - Add a PnP solver to estimate the pose from 3D-2D point correspondences\n  - Add RANSAC PnP solver support for the initial pose estimation\n  - Feed the projection of the estimated pose back as starting points for the\n    PnP solver and blob tracker\n  - Add Rift DK2 IMU support to estimate the pose from integrated gyro and\n    acceleration sensor readouts\n  - Add sensor fusion, correcting the IMU pose from the camera pose regularly,\n    use the fused pose estimate to feed back into PnP solver and blob tracker\n  - Implement proper time handling for all of this\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frib%2Fouvrt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frib%2Fouvrt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frib%2Fouvrt/lists"}