{"id":28885121,"url":"https://github.com/rhoban/vive_provider","last_synced_at":"2025-10-24T11:07:20.600Z","repository":{"id":88123560,"uuid":"176329928","full_name":"Rhoban/vive_provider","owner":"Rhoban","description":"Vive position tracking provider","archived":false,"fork":false,"pushed_at":"2023-10-31T12:36:38.000Z","size":2471,"stargazers_count":1,"open_issues_count":1,"forks_count":2,"subscribers_count":12,"default_branch":"master","last_synced_at":"2023-10-31T13:33:39.776Z","etag":null,"topics":["openvr","tracking","vive"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rhoban.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-03-18T16:48:07.000Z","updated_at":"2023-10-31T13:33:39.977Z","dependencies_parsed_at":"2023-06-05T05:30:55.887Z","dependency_job_id":null,"html_url":"https://github.com/Rhoban/vive_provider","commit_stats":null,"previous_names":[],"tags_count":3,"template":null,"template_full_name":null,"purl":"pkg:github/Rhoban/vive_provider","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rhoban%2Fvive_provider","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rhoban%2Fvive_provider/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rhoban%2Fvive_provider/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rhoban%2Fvive_provider/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rhoban","download_url":"https://codeload.github.com/Rhoban/vive_provider/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rhoban%2Fvive_provider/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":261025908,"owners_count":23099092,"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":["openvr","tracking","vive"],"created_at":"2025-06-20T22:04:19.709Z","updated_at":"2025-10-24T11:07:20.596Z","avatar_url":"https://github.com/Rhoban.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Vive provider (Version 2.0 - Last update : Sept, 27 2022)\n\nThis OpenVR based code can be used to grab positions from the HTC Vive, allow you to calibrate\nit, and to run a server that broadcasts the positions over the network. You can also visualize data save in .bin file \nfor analysis purpose. \n\n## Get the dependencies\n\n### Steam and SteamVR\n\nYou need to install steam and SteamVR.\n\n*Note: There is possibilities that it doesn't create `udev` rules properly, if the file\n`/lib/udev/rules.d/60-HTC-Vive-perms.rules` is not created by the process, you can\nuse the one from `misc/`.*\n\n### Python\n\nIn this repository python3.* must be used.\n\nYou need to install the following dependencies:\n\n    pip install -r requirements.txt\n\n## How to use SteamVR ##\n\n### Install the beta version of SteamVR ###\n\nGo to Steam -\u003e SteamVR -\u003e Properties -\u003e Betas. And choose beta - SteamVR Beta Update\n\n### Remove the need of headset\n\nAdd the following options to `~/.steam/steam/config/steamvr.settings`:\n\n```json\n\"steamvr\"{\n    \"requireHmd\" : false,\n    \"forcedDriver\": null,\n    \"activateMultipleDrivers\": true\n},\n\"driver_null\" : {\n    \"enable\" : true\n}\n```\n\n### If you have intel graphics ###\n\nIntel graphics are not supported by SteamVRV.\nError (306) : install mesa-vulkan-drivers (needed ?)\nError (307) : you can track with this error\n\nAfter lunching steam, you might need to kill the process vrcompositor.\n\n## Usage\n\n### Calibration\n#### Old calibration version with `vive_field_calibration.py` and `vive_server.py`\nFirst, you can edit `field_points.json` to set up your ground truth positions. Then, run\n`vive_field_calibration.py`. You need to have a paired controller then, and to go to each\nposition one by one (indicated in the 3D viewer by an arrow) to tag them.\n\nThe `field_points.json` should contain at least 3 points, and formatted as following:\n\n```json\n[\n    [x1, y1, z1],\n    [x2, y2, z2],\n    [x3, y3, z3],\n    ...\n    [xn, yn, zn]\n]\n```\n\nAlternatively, you can pass a file path to `vive_field_calibration.py` with `-p my_field_points.json`.\n\nIf a consistency error occurs, the joystick will vibrate, and you should start the calibration\nover.\n\n#### New calibration version\nIn the new calibration version, a new file `field_points_trackers.json` is created with each tracker used to calibrate the field.\n```json\n{\n  \"LHR-42A22618\": [-2.5, -2, 0],\n  \"LHR-815E4573\": [1, 0, 0],\n  \"LHR-52015056\": [-2.5, 2, 0],\n  ...,\n  \"\u003ctrackers_id\u003e\": [xn, yn, zn]\n}\n```\nIt's recommended not to place trackers on point of interest.\n\n### Running the viewer\n\nYou can run the viewer using `vive_bullet.py` script. This will display the trackers and the\ncontrollers positions.\n\n### Running the server\n\nThe script `vive_server_auto_calib.py` (old version : `vive_server.py`) is a server that broadcasts the positions through the network\nusing UDP and protobuf definition from `proto/vive.proto`.\n\n**Note: to avoid spamming, we broadcast UDP messages to `192.168.0.255` by default, this can be changed\nusing `-b` flag, you can pass `\u003cbroadcast\u003e` to send the packets to all possible addresses**\n\nTo check, you can also run the `vive_bullet_client.py` that listens to the network instead of\nusing directly the OpenVR API.\n\nAfter you killed a server. A binary file with all data from all tracker, base station, and controller are saved in two different file.\nThe first one contain data uncalibrated and the second with the calibrated ones.\n\n## Re-generate protobuf\n\nYou can use `generate_protobuf.sh` to regenerate protobuf files\n\n## Vive trackers frame\n\nOpenVR output seems to be different with what is explained in the official guidelines. Thus, we referred\nto the `vr_tracker_vive_1_0.stl` file. The frame we provide is modified so that:\n\n- the origin point is at the bottom of the sensor, centered on the screw hole\n- `z` is upward\n- `x` is facing the board LED\n\n## Data visualization \n\nWhen you closed `vive_server_auto_calib.py`, two files are generated. The first one is the uncalibrated version and the \nother one (with _auto_calib at the end) is the file with all data calibrated. \nTo visualize data from a .bin file, you can launch \n```bash \n    python vive_data_visualization.py -l logs/\u003cyour log\u003e.bin\n```\nExample : \n```bash \n    python vive_data_visualization.py -l logs/2022_09_27-11h32m48s_vive_auto_calib.bin\n```\nor\n```bash \n    python vive_data_visualization.py -l logs/2022_09_27-11h32m48s_vive.bin\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhoban%2Fvive_provider","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frhoban%2Fvive_provider","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frhoban%2Fvive_provider/lists"}