Skip to content

About

Python SDK for TNY-Robotics robots

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

10 Commits

Folders and files

Repository files navigation

tny-robotics-sdk

PyPI version License: MIT Python

The official Python SDK for all TNY Robotics robots

🌐 Website • 📦 PyPI Package • 💬 Discord


🚀 Overview

tny-robotics-sdk provides a clean, asynchronous API to communicate with your TNY Robotics robot.

It handles all the complex binary WebSocket framing and event loop bindings under the hood using asyncio, letting you focus on building advanced robotics applications, telemetry scripts, or AI/control algorithms.

✨ Features

  • Native Async: Built entirely on top of asyncio and websockets for high-performance, non-blocking I/O.
  • Fully Typed: Strict type hints and TypedDict implementations for excellent auto-completion and Developer Experience (DX) in VS Code, PyCharm, etc.
  • Modular: Access robot features cleanly through dedicated modules (robot.system, robot.joint, robot.power, etc.).

📦 Installation

Install the package using pip (or your preferred environment manager like poetry or pipenv):

pip install tny-robotics-sdk

💻 Quick Start

Here is a simple example to connect to your TNY-360 and test the connection latency:

import asyncio
import time
from tny_robotics import TNY360

async def main():
    print('Creating TNY-360 instance...')
    # Replace with your robot's IP address
    robot = TNY360('192.168.4.1')

    try:
        print('Connecting to TNY-360...')
        await robot.connect()
        print('Connected successfully!')
    except Exception as err:
        print('Connection error:', err)
        return

    # Ping test
    print('Sending pings...')
    start = time.time()
    for _ in range(10):
        await robot.system.ping()
    end = time.time()
    
    # Calculate average time in milliseconds
    avg_time = ((end - start) * 1000) / 10
    print(f"Average response time: {avg_time:.2f} ms.")
    
    # Clean disconnect
    await robot.disconnect()

if __name__ == '__main__':
    asyncio.run(main())

🧩 API Structure

The SDK is organized into intuitive modules. Here are some examples of what you can do:

System & Settings

# Get robot statistics
stats = await robot.system.get_statistics()
print(f"Temperature: {stats['temp_c']}°C, CPU0 Usage: {stats['cpu_usage']['core0']}%")

# Change AutoLife mode
from tny_robotics import AutoLifeLevel
await robot.system.set_auto_life_level(AutoLifeLevel.Safeguard)

Motion & Joints

import math
from tny_robotics import MotorId

# Set the front-right knee joint to 30 degrees (converted to radians)
await robot.joint.set_angle(MotorId.FrontRightKneePitch, 30 * (math.pi / 180))

# Get the current angle of the back-left hip roll joint
cur_angle = await robot.joint.get_feedback_angle(MotorId.BackLeftHipRoll)
print(f"Current Hip Roll Angle: {cur_angle * (180 / math.pi):.2f} degrees")

Sensors & Telemetry (Coming soon)

# Subscribe to continuous Lidar distance updates
# (Implementation in progress)

🤝 Contributing

This SDK is part of the open-source TNY-Robotics ecosystem. Found a bug or want to add a new module? Open an Issue or submit a Pull Request!

📄 License

This SDK is licensed under the MIT License. You are free to use it in your open-source or commercial applications, just include the copyright notice.

Need help? Contact us by mail or join our Discord.

About

Python SDK for TNY-Robotics robots

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages