Metadata-Version: 2.4
Name: telekinesis-isaacsim-client
Version: 0.4.1
Summary: Python bindings for the Telekinesis Isaac Sim bridge client with C++ core.
Author-Email: Telekinesis <support@telekinesis.ai>
License-Expression: LicenseRef-Proprietary
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries
Project-URL: Homepage, https://telekinesis.ai
Project-URL: Documentation, https://docs.telekinesis.ai
Requires-Python: >=3.9
Requires-Dist: numpy>=1.20
Provides-Extra: dev
Requires-Dist: pybind11-stubgen; extra == "dev"
Requires-Dist: pylint; extra == "dev"
Requires-Dist: ruff; extra == "dev"
Provides-Extra: dev-windows
Requires-Dist: delvewheel; extra == "dev-windows"
Provides-Extra: docs
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
Requires-Dist: mkdocs-material<10,>=9; extra == "docs"
Requires-Dist: mkdocstrings[python]<1,>=0.25; extra == "docs"
Requires-Dist: mkdocs-awesome-pages-plugin<3,>=2; 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-isaac-sim)](https://pypi.org/project/telekinesis-isaac-sim/)
[![License](https://img.shields.io/pypi/l/telekinesis-isaac-sim)](https://pypi.org/project/telekinesis-isaac-sim/)
[![Python versions](https://img.shields.io/pypi/pyversions/telekinesis-isaac-sim)](https://pypi.org/project/telekinesis-isaac-sim/)
[![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux-blue)](https://pypi.org/project/telekinesis-isaac-sim/)
[![Platform](https://img.shields.io/badge/macOS-coming%20soon-lightgrey)](https://pypi.org/project/telekinesis-isaac-sim/)

</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 Isaac Sim

**Telekinesis Isaac Sim** is a Python client for the Telekinesis Isaac Sim bridge,
built on a C++ core.

## Installation

It's highly recommended to install into a dedicated Conda environment:
```powershell
conda create -n isaacsimclient python=3.12
conda activate isaacsimclient
```

Then install the package:
```powershell
pip install telekinesis-isaacsim-client
```

## Example Usage

```python
from telekinesis.isaacsim_client import IsaacSimClient

client = IsaacSimClient(
    api_key="",
    base_url="http://127.0.0.1:8766",
    websocket_base_url="ws://127.0.0.1:8766",
)

created = client.articulation.create("/World/ur10e")
print(created["articulation_id"])

client.articulation.set_joint_positions(created["articulation_id"], [0.0] * created["num_dof"])
```

Suction grippers have their own group. `close()` blocks until the grip settles,
so the status it returns is the settled one:

```python
gripper = client.surface_gripper.create("/World/suction_gripper")
result = client.surface_gripper.close(gripper["surface_gripper_id"])
print(result["status"], result["gripped_objects"])
```

Cameras are registered the same way. `capture()` blocks until the frame is
current, so the outputs it returns are that frame's own, and it activates any
supported render output the camera isn't producing yet. Each output is a numpy
array, because the bridge sends pixels as raw bytes rather than as JSON numbers:

```python
camera = client.camera.create("/World/camera", resolution=[320, 240])
print(camera["active_data_types"], camera["supported_data_types"])

# depth isn't active on a new camera, so this first capture activates it.
frame = client.camera.capture(camera["camera_id"], ["rgb", "depth"])
print(frame["rgb"].shape, frame["depth"].dtype)

# A captured pointcloud is relative to the camera; ask for stage coordinates
# with world_frame=True.
frame = client.camera.capture(camera["camera_id"], ["pointcloud"])
```

More examples will soon be available on [Telekinesis IsaacSim Examples](https://github.com/telekinesis-ai/isaacsim-examples)

## Resources

- [Documentation](https://docs.telekinesis.ai): full API reference and guides.

## Support

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

## License

Proprietary. © Telekinesis. All rights reserved.
