{"id":37808166,"url":"https://github.com/flexivrobotics/flexiv_tdk","last_synced_at":"2026-01-16T15:31:51.238Z","repository":{"id":243001209,"uuid":"721032120","full_name":"flexivrobotics/flexiv_tdk","owner":"flexivrobotics","description":"TDK (Teleoperation Development Kit) for Flexiv robots. Supports C++ and Python. Compatible with Linux.","archived":false,"fork":false,"pushed_at":"2026-01-15T05:57:06.000Z","size":42878,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-15T12:03:05.156Z","etag":null,"topics":["cpp","force-feedback","haptic-feedback","python","remote-control","teleoperation","transparency"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flexivrobotics.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-20T08:12:31.000Z","updated_at":"2025-11-26T06:29:42.000Z","dependencies_parsed_at":"2024-06-06T06:52:03.520Z","dependency_job_id":"6e00aaaa-23ad-4d67-83e6-66da0b1619af","html_url":"https://github.com/flexivrobotics/flexiv_tdk","commit_stats":null,"previous_names":["flexivrobotics/flexiv_omni_teleop"],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/flexivrobotics/flexiv_tdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_tdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_tdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_tdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_tdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flexivrobotics","download_url":"https://codeload.github.com/flexivrobotics/flexiv_tdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flexivrobotics%2Fflexiv_tdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479409,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["cpp","force-feedback","haptic-feedback","python","remote-control","teleoperation","transparency"],"created_at":"2026-01-16T15:31:51.022Z","updated_at":"2026-01-16T15:31:51.155Z","avatar_url":"https://github.com/flexivrobotics.png","language":"C++","readme":"# Flexiv TDK\n\n[![CMake](https://github.com/flexivrobotics/flexiv_tdk/actions/workflows/cmake.yml/badge.svg)](https://github.com/flexivrobotics/flexiv_tdk/actions/workflows/cmake.yml)\n[![Version](https://img.shields.io/badge/version-1.5-blue.svg)]()\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)\n\n**Flexiv TDK (Teleoperation Development Kit)** is an SDK for building custom robot-to-robot or device-to-robot teleoperation applications with Flexiv's adaptive robots. It enables synchronized, force-guided motion using **high-fidelity perceptual feedback** and supports both **LAN** (Local Area Network) and **WAN** (Internet) connections.\n\n🎬 **[Flexiv's TDK | Teleoperation Made Simple](https://www.youtube.com/watch?v=H0e9FSZIa14)**  \n*(Click image below to play)*  \n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.youtube.com/watch?v=H0e9FSZIa14\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.youtube.com/vi/H0e9FSZIa14/hqdefault.jpg\" alt=\"TDK Demo 1\" width=\"350\" style=\"margin-right:10px;\" /\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://www.youtube.com/watch?v=udkddqxth5Q\" target=\"_blank\"\u003e\n    \u003cimg src=\"https://img.youtube.com/vi/udkddqxth5Q/hqdefault.jpg\" alt=\"TDK Demo 2\" width=\"350\" /\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\n---\n\n## ✅ Compatibility\n\n| OS            | Processor       | Languages   | Compiler Requirements     | Python Versions |\n| ------------- | --------------- | ----------- | ------------------------- | --------------- |\n| Ubuntu 22.04+ | x86_64, aarch64 | C++, Python | GCC ≥ 9.4, CMake ≥ 3.16.3 | 3.8, 3.10, 3.12 |\n\n\u003e💡 Need support for other platforms? [Contact Flexiv](https://www.flexiv.com/contact).\n\n---\n\n## ⚙️ Kernel Options for Real-Time Performance\n\nUbuntu offers multiple kernel variants tailored for different workloads:\n\n| Kernel Type         | Description                                                 | Typical Use Case                             |\n| ------------------- | ----------------------------------------------------------- | -------------------------------------------- |\n| `generic`           | Default kernel: balanced performance \u0026 power management     | General desktop/server use                   |\n| `lowlatency`        | Reduced interrupt latency; better scheduling responsiveness | Robotics, audio processing, soft real-time   |\n| `rt` (`PREEMPT_RT`) | Fully preemptible; hard real-time determinism               | Industrial control, mission-critical systems |\n\n---\n\n## ⚠️ Important Disclaimer\n\nUpgrading to a **low-latency** or **real-time (RT) kernel** may:\n- Break proprietary drivers (e.g., NVIDIA, Wi-Fi modules)\n- Cause system instability or boot failure\n\n**You assume full responsibility** for any issues arising from kernel changes.  \n✅ **Always back up your system** before proceeding.\n\n---\n\n\n## Install Low-Latency or PREEMPT_RT Kernel for Ubuntu/x84-64 \n\n### Option 1: Low-Latency Kernel\n\n1. **Install the kernel**:\n   For Hardware Enablement (HWE) stack (check with `uname -r`; e.g., Ubuntu 22.04 with kernel 6.x), use:\n\n   ```bash\n   sudo apt update \u0026\u0026 sudo apt install --install-recommends linux-lowlatency-hwe-22.04  # replace \"22.04\" with your version\n   ```\n   For the original kernel (5.15), use:\n   ```bash\n   sudo apt update \u0026\u0026 sudo apt install --install-recommends linux-lowlatency\n   ```\n\n2. **Set GRUB to prefer low-latency**:\n   ```bash\n    echo 'GRUB_FLAVOUR_ORDER=\"lowlatency\"' | sudo tee -a /etc/default/grub\n    sudo update-grub\n   ```\n\n3. **Reboot and verify**:\n    ```bash\n    sudo reboot\n    uname -r  # Should show \"...-lowlatency\"\n    ```\n    🔄 To revert to ``generic``, change ``GRUB_FLAVOUR_ORDER=\"generic\"`` and run ``sudo update-grub``.\n\n### Option 2: PREEMPT_RT Kernel\n\nFollow the official guide:  \n🔗 [Real-time Ubuntu Setup (Documentation)](https://www.flexiv.com/software/rdk/manual/realtime_ubuntu.html#ubuntu-22-04-24-04-enable-via-pro-subscription)\n\n\u003e ℹ️ Ubuntu 22.04/24.04 users can enable RT kernel via **free Ubuntu Pro subscription**.  \n\u003e Ubuntu 20.04 requires manual patching (advanced users only).\n\n\u003e ℹ️ For  Nvidia Jetson(**arrch64**), please refer to Nvidia's official documentation.\n---\n\n## 🚀 Quick Start - Python\n\n### 1. Install the Python package\n\nOn all supported platforms, the Python package of TDK and its dependencies for a specific Python version can be installed using the `pip` module:\n\n    python3.x -m pip install spdlog flexivtdk\n\nNOTE: replace `3.x` with a specific Python version.\n\n### 2. Use the installed Python package\n\nAfter the ``flexivtdk`` Python package is installed, it can be imported from any Python script. Test with the following commands in a new Terminal, which should start Flexiv TDK:\n\n    python3.x\n    import flexivtdk\n    flexivtdk.__version__ \n\n### 3.🕒 System Clock Sync \n\nAccurate time sync is critical for teleop over the internet. For WAN teleop, there are two edge computers, one acting as a server and the other as a client, and the system time of these two computers needs to be calibrated. \n\nNote: This is only required for **WAN** Teleoperation, users can skip this section if only using LAN teleoperation.\n\n1. Install \u0026 Start chrony\n```bash\nsudo apt install chrony -y\nsystemctl status chrony  # Should show \"active (running)\"\n```\n2. Check Sync Accuracy\n```bash\nchronyc tracking | grep 'System time\\|RMS offset'\n```\n\nSystem time: the instantaneous offset between local system clock and NTP reference\n\nRMS offset: the long-term average offset (root mean square) over time\n\n| Network Condition | Good (ms) | Acceptable (ms) | Poor (ms) |\n| ----------------- | --------- | --------------- | --------- |\n| System time       | \u003c 1       | 1 - 10          | \u003e 10      |\n| RMS offset        | \u003c 5       | 5 - 20          | \u003e 20      |\n\n\n3. Force Immediate Sync (if needed)\n```bash\nsudo chronyc burst 4/4\nsudo chronyc makestep\n```\n🔄 After network changes (e.g., Wi-Fi → Ethernet), restart:\n\n```bash\nsudo systemctl restart chronyd\nsleep 5\nsudo chronyc makestep\n```\n4. Learn more: [Chrony Documentation](https://chrony-project.org/)\n\n### 4. Enable Real-Time Privileges for Non-root Users\n\nTo allow a regular user to create high-priority (real-time) threads without `sudo`, configure system to apply real-time and nice priority limits:\n\n```bash\necho \"${USER}    -   rtprio    99\" | sudo tee -a /etc/security/limits.conf\necho \"${USER}    -   nice     -20\" | sudo tee -a /etc/security/limits.conf\n```\nLog out and log back in (or reboot) for the settings to take effect.\n\n### 5. Run example Python scripts\n\nTo run an example Python script in this repo:\n\n```bash\ncd flexiv_tdk/example_py\npython3.x \u003cexample_name\u003e.py [arguments]\n```\n\nCheck each example’s source code for usage details.\n\n## 🚀 Quick Start - C++\n\nThe TDK is distributed as a modern CMake project named `flexiv_tdk`.\n\n### 1. Install Build Dependencies\n```bash\nsudo apt install build-essential cmake cmake-qt-gui -y\n```\n\n### 2. Choose an Installation Directory\n\nExample: `~/tdk_install`\n\n### 3. Build \u0026 Install Third-Party Dependencies\n```bash\ncd flexiv_tdk/thirdparty\nbash build_and_install_dependencies.sh ~/tdk_install\n```\n\n### 4. Configure \u0026 Install TDK\n```bash\ncd flexiv_tdk\nmkdir build \u0026\u0026 cd build\ncmake .. -DCMAKE_INSTALL_PREFIX=~/tdk_install\ncmake --build . --target install --config Release\n```\n\u003e 🌐 Internet connection to GitHub is required for  [3. Build \u0026 Install Third-Party Dependencies](#3-build--install-third-party-dependencies) and [4. Configure \u0026 Install TDK](#4-configure--install-tdk).\n\n### 5. Link TDK in Your Project\n\nAfter the TDK library is installed, it can be found as a CMake target and linked to from other CMake projects. Using the provided examples project for instance:\n\n```bash\ncd flexiv_tdk/example\nmkdir build \u0026\u0026 cd build\ncmake .. -DCMAKE_PREFIX_PATH=~/tdk_install\ncmake --build . --config Release -j 4\n```\n\nNOTE: ``-D`` followed by ``CMAKE_INSTALL_PREFIX`` tells the user project's CMake where to find the installed TDK library. \n\n\n\n### 6. Run Examples\n```bash\ncd flexiv_tdk/example/build\n./\u003cprogram_name\u003e [arguments]\n```\n\nCheck each example’s source code for usage details.\n\n## 📚 Generate API Documentation\n\n```bash\nsudo apt install doxygen-latex graphviz\ncd flexiv_tdk\ndoxygen doc/Doxyfile.in\n```\n\nOpen flexiv_tdk/doc/html/index.html in your browser.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexivrobotics%2Fflexiv_tdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflexivrobotics%2Fflexiv_tdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflexivrobotics%2Fflexiv_tdk/lists"}