{"id":29651915,"url":"https://github.com/cyberorigin2077/open_cyber_glove","last_synced_at":"2025-07-22T06:02:42.390Z","repository":{"id":303358225,"uuid":"1013668893","full_name":"CyberOrigin2077/open_cyber_glove","owner":"CyberOrigin2077","description":"Python SDK for OpenCyberGlove 🧤","archived":false,"fork":false,"pushed_at":"2025-07-22T02:42:08.000Z","size":56806,"stargazers_count":20,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-22T04:28:59.781Z","etag":null,"topics":["ai","motion-capture","motion-tracking","robotics","simulation","vr","vrchat"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CyberOrigin2077.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-04T09:16:38.000Z","updated_at":"2025-07-22T02:41:46.000Z","dependencies_parsed_at":"2025-07-07T07:46:46.232Z","dependency_job_id":null,"html_url":"https://github.com/CyberOrigin2077/open_cyber_glove","commit_stats":null,"previous_names":["cyberorigin2077/open_cyber_glove"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/CyberOrigin2077/open_cyber_glove","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberOrigin2077%2Fopen_cyber_glove","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberOrigin2077%2Fopen_cyber_glove/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberOrigin2077%2Fopen_cyber_glove/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberOrigin2077%2Fopen_cyber_glove/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CyberOrigin2077","download_url":"https://codeload.github.com/CyberOrigin2077/open_cyber_glove/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CyberOrigin2077%2Fopen_cyber_glove/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266437356,"owners_count":23928226,"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","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["ai","motion-capture","motion-tracking","robotics","simulation","vr","vrchat"],"created_at":"2025-07-22T06:01:05.520Z","updated_at":"2025-07-22T06:02:42.356Z","avatar_url":"https://github.com/CyberOrigin2077.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenCyberGlove SDK\n\n\u003cdiv align=\"center\" style=\"line-height: 1;\"\u003e\n  \u003ca href=\"https://discord.gg/jAujSRAK\" target=\"_blank\"\u003e\u003cimg alt=\"Discord\" src=\"https://img.shields.io/badge/Discord-%235865F2.svg?style=for-the-badge\u0026logo=discord\u0026logoColor=white\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://open-cyber-glove.notion.site/OpenCyberGlove-Intro-21d7a9fbe9288032b0c6c5fab62d21b1\" target=\"_blank\"\u003e\u003cimg alt=\"Notion\" src=\"https://img.shields.io/badge/Notion-%23000000.svg?style=for-the-badge\u0026logo=notion\u0026logoColor=white\"/\u003e\u003c/a\u003e\n    \u003ca href=\"https://CyberOrigin2077.github.io/open_cyber_glove/\" target=\"_blank\"\u003e\u003cimg alt=\"Website\" src=\"https://img.shields.io/badge/Google%20Chrome-4285F4?style=for-the-badge\u0026logo=GoogleChrome\u0026logoColor=white\"/\u003e\u003c/a\u003e\n   \u003cbr\u003e\n  \u003ca href=\"https://github.com/CyberOrigin2077/open_cyber_glove\" target=\"_blank\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/CyberOrigin2077/open_cyber_glove?style=social\"/\u003e\u003c/a\u003e\n  \u003ca href=\"https://opensource.org/licenses/BSD-3-Clause\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-BSD_3--Clause-blue.svg\"/\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\nAn open-source Python SDK for interfacing with data gloves, supporting real-time sensor data acquisition, calibration, and extensible inference. Designed for robotics, VR/AR, and HCI applications.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/imgs/ocg_banner.gif\" alt=\"OpenCyberGlove Banner\"\u003e\n\u003c/div\u003e\n\n## Features\n- Connect to one or two data gloves via serial port (1Mbps baudrate)\n- Real-time sensor data acquisition at 120Hz\n- Comprehensive sensor data including:\n  - 19 tensile sensors\n  - Temperature sensor\n  - Timestamp\n- Extensible inference interface for custom models\n\nFor more product info, refer to [here](https://open-cyber-glove.notion.site/OpenCyberGlove-Intro-21d7a9fbe9288032b0c6c5fab62d21b1).\n\n## Installation\n\n### From Source\n```bash\ngit clone https://github.com/CyberOrigin2077/open_cyber_glove.git\ncd open_cyber_glove\nconda create --name ocg python=3.9\nconda activate ocg\npip install -e .\n```\n\n### Dependencies\nThe package requires:\n- Python 3.7+\n- pyserial\n- numpy\n- matplotlib\n- tqdm\n- open3d\n\n## Usage\n\nHere are a few examples of how to use the `OpenCyberGlove` SDK.\n\n### Basic Usage: Single Glove\n\nThis example shows how to connect to a single glove, calibrate it, and read raw sensor data.\n\n```python\nfrom open_cyber_glove.sdk import OpenCyberGlove\n\n# Initialize SDK for a single left glove.\n# Replace '/dev/ttyUSB0' with your glove's serial port.\nsdk = OpenCyberGlove(left_port='/dev/ttyUSB0')\n\n# Start the background data reader.\nsdk.start()\n\n# Calibrate the glove. This is an interactive process.\nprint(\"Starting calibration...\")\nsdk.calibrate()\nprint(\"Calibration finished.\")\n\n# Get the latest sensor data packet.\nsensor_data = sdk.get_data('left')\nprint(f\"Timestamp: {sensor_data.timestamp}\")\nprint(f\"Tensile data: {sensor_data.tensile_data}\")\nprint(f\"Accelerometer: {sensor_data.acc_data}\")\n\n# Stop the data reader.\nsdk.stop()\n```\n\n### Real-Time 3D Hand Visualization\n\nThe `examples/hello_world.py` script provides a complete demonstration of the SDK's capabilities, including real-time hand pose inference and 3D visualization. It reads data from one or two gloves, feeds it into a pre-trained ONNX model to infer joint angles, and then visualizes the hand's movement in a 3D environment using Open3D.\n\nTo run the example, use the following command structure, providing the serial ports for your gloves and paths to the model files. For model files, you need to download from [here](https://drive.google.com/drive/folders/1LW2z2wBDEpXqcMQsoiB_N38c-V5Sq9XT?usp=drive_link) and put them under `model` directory.\n\n**Example command for dual gloves:**\n```bash\npython3 -m examples.hello_world --right_port ${RIGHT_PORT} --left_port ${LEFT_PORT} --calib_path ${HAND_MODEL} --model_path ${MODEL_PATH}\n```\n\n**You can also run it with a single glove:**\n```bash\npython3 -m examples.hello_world --right_port ${RIGHT_PORT} --calib_path ${HAND_MODEL} --model_path ${MODEL_PATH}\n```\n\nThe script will first guide you through the interactive calibration process for each connected glove. After calibration, a 3D visualization window will appear, showing the real-time movement of the hand(s).\n\n**Note**: The quality of the visualization **significantly** depends on the model and proper calibration.\n\n### ROS2 Wrapper\n\nFor ROS2 integration, we provide a dedicated wrapper package that enables seamless integration with the Robot Operating System 2 (ROS2) ecosystem. This wrapper allows you to publish glove data as ROS2 messages and integrate with other ROS2 nodes.\n\nFor detailed installation instructions, usage examples, and available ROS2 message types, please visit our ROS2 wrapper repository:\n[OpenCyberGlove ROS2 Wrapper](https://github.com/CyberOrigin2077/open_cyber_glove_ros2)\n\nWe also offer a dedicated wrapper for retargeting glove motions to specific robotic hands:\n[OpenCyberGlove Retarget ROS2](https://github.com/CyberOrigin2077/open_cyber_glove_retarget_ros2)\n## Data Structure\nThe `GloveSensorData` class provides structured access to all sensor data:\n- `tensile_data`: Tuple of 19 integers (0-16384)\n- `acc_data`: Tuple of 3 floats (To be added)\n- `gyro_data`: Tuple of 3 floats (To be added)\n- `mag_data`: Tuple of 3 floats (To be added)\n- `temperature`: Float\n- `timestamp`: Integer\n\n## Roadmap\n\n- [x] Core functionality\n- [x] ROS2 wrapper\n- [ ] Glove in simulation\n- [ ] Model finetune pipeline\n\n## License\nBSD 3-Clause License","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberorigin2077%2Fopen_cyber_glove","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyberorigin2077%2Fopen_cyber_glove","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberorigin2077%2Fopen_cyber_glove/lists"}