Metadata-Version: 2.4
Name: telekinesis-synapse
Version: 0.7.0
Summary: Official Telekinesis SDK for controlling and communication with industrial robot manipulators and tools.
Author-Email: Telekinesis <support@telekinesis.ai>
License-Expression: LicenseRef-Proprietary
License-File: LICENSE-APACHE-2.0.txt
License-File: LICENSE-THIRD-PARTY.txt
License-File: LICENSE.txt
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Classifier: Topic :: Scientific/Engineering
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Project-URL: Homepage, https://telekinesis.ai
Project-URL: Documentation, https://docs.telekinesis.ai
Requires-Python: <3.13,>=3.11
Requires-Dist: typing_extensions>=4.0.0
Requires-Dist: pybind11>=2.13.6
Requires-Dist: scikit-build-core>=0.10
Requires-Dist: numpy
Requires-Dist: scipy
Requires-Dist: loguru
Requires-Dist: pymodbus==2.5.3
Requires-Dist: trimesh
Requires-Dist: pycollada
Requires-Dist: babyros>=0.1.4
Requires-Dist: rerun-sdk==0.36
Requires-Dist: telekinesis-tf
Requires-Dist: telekinesis-isaacsim-client>=0.3.0; sys_platform != "darwin"
Requires-Dist: requests
Requires-Dist: pyserial
Provides-Extra: dev
Requires-Dist: ruff==0.15.8; extra == "dev"
Requires-Dist: pylint==4.0.5; extra == "dev"
Requires-Dist: build; extra == "dev"
Requires-Dist: twine; extra == "dev"
Requires-Dist: ninja>=1.5; extra == "dev"
Provides-Extra: dev-macos
Requires-Dist: ruff==0.15.8; extra == "dev-macos"
Requires-Dist: pylint==4.0.5; extra == "dev-macos"
Requires-Dist: scikit-build-core>=0.10; extra == "dev-macos"
Requires-Dist: pybind11>=2.13.6; extra == "dev-macos"
Requires-Dist: build; extra == "dev-macos"
Requires-Dist: twine; extra == "dev-macos"
Requires-Dist: ninja>=1.5; extra == "dev-macos"
Requires-Dist: delocate; extra == "dev-macos"
Provides-Extra: dev-linux
Requires-Dist: ruff==0.15.8; extra == "dev-linux"
Requires-Dist: pylint==4.0.5; extra == "dev-linux"
Requires-Dist: scikit-build-core>=0.10; extra == "dev-linux"
Requires-Dist: pybind11>=2.13.6; extra == "dev-linux"
Requires-Dist: build; extra == "dev-linux"
Requires-Dist: twine; extra == "dev-linux"
Requires-Dist: ninja>=1.5; extra == "dev-linux"
Requires-Dist: auditwheel; extra == "dev-linux"
Provides-Extra: dev-windows
Requires-Dist: ruff==0.15.8; extra == "dev-windows"
Requires-Dist: pylint==4.0.5; extra == "dev-windows"
Requires-Dist: scikit-build-core>=0.10; extra == "dev-windows"
Requires-Dist: pybind11>=2.13.6; extra == "dev-windows"
Requires-Dist: build; extra == "dev-windows"
Requires-Dist: twine; extra == "dev-windows"
Requires-Dist: ninja>=1.5; extra == "dev-windows"
Requires-Dist: delvewheel; extra == "dev-windows"
Provides-Extra: docs
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
Requires-Dist: mkdocstrings[python]<1,>=0.25; extra == "docs"
Requires-Dist: mkdocs-awesome-pages-plugin<3,>=2; extra == "docs"
Requires-Dist: mkdocs-multirepo-plugin<0.9.0,>=0.7.0; extra == "docs"
Description-Content-Type: text/markdown

<div align="center">
  <p>
    <a align="center" href="https://telekinesis.ai" target="_blank">
      <img
        width="100%"
        src="https://telekinesis-public-assets.s3.us-east-1.amazonaws.com/Telekinesis+Banner.png"
      >
    </a>
  </p>

  <br>

[Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples) | [Documentation](https://docs.telekinesis.ai)
<br>

[![PyPI version](https://img.shields.io/pypi/v/telekinesis-synapse)](https://pypi.org/project/telekinesis-synapse/)
[![License](https://img.shields.io/pypi/l/telekinesis-synapse)](https://pypi.org/project/telekinesis-synapse/)
[![Python versions](https://img.shields.io/pypi/pyversions/telekinesis-synapse)](https://pypi.org/project/telekinesis-synapse/)
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux-blue)](https://pypi.org/project/telekinesis-synapse/)

</div>

<p align="center">
  <a href="https://github.com/telekinesis-ai">GitHub</a>
  &nbsp;•&nbsp;
  <a href="https://www.linkedin.com/company/telekinesis-ai/">LinkedIn</a>
  &nbsp;•&nbsp;
  <a href="https://x.com/telekinesis_ai">X</a>
  &nbsp;•&nbsp;
  <a href="https://discord.gg/7NnQ3bQHqm">Discord</a>
</p>

# Telekinesis Synapse

**Telekinesis Synapse** is a Python SDK for industrial robot control, providing a unified API across leading robot brands with native support for real hardware and NVIDIA Isaac Sim (Windows and Linux only).

**Key features:**
- Unified Skills across all supported brands
- Offline kinematics: FK and IK work without any hardware or simulator connected
- Live robot state publisher over [BabyROS](https://github.com/telekinesis-ai/babyros) for real-time state streaming

## Table of Contents

- [Telekinesis Synapse](#telekinesis-synapse)
  - [Table of Contents](#table-of-contents)
  - [Installation](#installation)
  - [Getting Started](#getting-started)
  - [Example Usage with Real Hardware](#example-usage-with-real-hardware)
  - [Resources](#resources)
  - [Support](#support)
  - [License](#license)

## Installation

**Requirements:** Python 3.12, Windows / macOS / Linux.

1. Create and activate a Conda environment:

   ```bash
   conda create -n telekinesis-synapse python=3.12
   conda activate telekinesis-synapse
   ```

2. Install `telekinesis-urdfs` (kinematic data):

   ```bash
   cd /path/to/working/directory
   git clone --depth 1 https://github.com/telekinesis-ai/telekinesis-urdfs.git
   cd telekinesis-urdfs
   pip install .
   ```

   > **Note:** `telekinesis-urdfs` is a large repository. The initial clone and wheel build are expected to take several minutes. Do not interrupt the process.

3. Install Telekinesis Synapse:

   ```bash
   pip install telekinesis-synapse
   ```


## Getting Started

Create a robot and read its state offline (no hardware or simulator needed):

```python
from telekinesis.synapse.robots.manipulators import universal_robots

robot = universal_robots.UniversalRobotsUR10E()

print("Joint positions (deg):", robot.get_joint_positions())
print("TCP pose (m, deg):    ", robot.get_cartesian_pose())
```

Move the robot to a target joint configuration offline:

```python
target = robot.default_joint_configuration.copy()
target[0] += 15.0  # rotate base joint 15°
robot.set_joint_positions(target)
print("New TCP pose:", robot.get_cartesian_pose())
```

## Example Usage with Real Hardware

**Prerequisites:**

1. Robot powered on and connected to the same network as your machine.
2. PC on the same subnet as the robot (e.g. robot at `192.168.1.100`, PC in `192.168.1.0/24`). Verify with `ping 192.168.1.100`.
3. Remote control enabled on the teach pendant.


```python
from telekinesis.synapse.robots.manipulators import universal_robots

robot = universal_robots.UniversalRobotsUR10E()
robot.connect(ip="192.168.1.100")

print("Joint positions (deg):", robot.get_joint_positions())
print("TCP pose (m, deg):    ", robot.get_cartesian_pose())

current_tcp_pose = robot.get_cartesian_pose()
target_tcp_pose = current_tcp_pose.copy()
target_tcp_pose[2] += 0.05  # move 1cm in z
robot.set_cartesian_pose(target_tcp_pose)

robot.disconnect()
```

For more examples and full documentation see the [Resources](#resources) section.


## Resources

- [Telekinesis Examples](https://github.com/telekinesis-ai/telekinesis-examples): runnable examples for every supported robot and tool.
- [Documentation](https://docs.telekinesis.ai): full API reference and guides.


## Support

- Open an [issue](https://github.com/telekinesis-ai/synapse/issues) on GitHub.
- Email: support@telekinesis.ai
- [Discord](https://discord.com/invite/7NnQ3bQHqm)


## License

Proprietary. © Telekinesis. All rights reserved.

Synapse redistributes third-party source under separate terms: `ur_rtde` (MIT)
and `Universal_Robots_Client_Library` (Apache-2.0). See
[LICENSE-THIRD-PARTY.txt](LICENSE-THIRD-PARTY.txt).
