Skip to main content

Viam Robotics Python SDK

Project description

Viam Python SDK

PyPI PyPI - Python Version documentation build status license

The Viam Python SDK allows you to build robots, access existing Viam robots, and manage your fleet of Viam robots.

If you would like a blueprint on setting up a Python environment with Viam from scratch, you can follow our Setup guide.

If you would like to develop and contribute to Viam's Python SDK, take a look at the Development portion of the README.

Installation

Currently, we have pre-built binaries for macOS (both Intel x86_64 and Apple Silicon) and Linux (x86, aarch64, armv6l) that you can install using pip:

pip install viam-sdk

If you want to install on Windows, you can install from github directly with pip:

pip install git+https://github.com/viamrobotics/viam-python-sdk.git

Note that only direct gRPC connections are supported on Windows; you will need to disable webrtc or else connection will fail. Full support (including webRTC) does exist on WSL.

If you intend to use the MLModel service, use the following command instead, which installs additional required dependencies:

pip install 'viam-sdk[mlmodel]'

You can also run this command on an existing Python SDK install to add support for the ML model service. See the ML (machine learning) model service documentation for more information.

Upgrading

To upgrade, simply run the pip install command with the -U option: pip install -U viam-sdk

Installing from Source

The Viam Python SDK uses native libraries to support communication over WebRTC, which will allow you to connect to robots that are not on the same network. In order to facilitate that communication, there is a rust-utils repo that contains the necessary protocols. Therefore, to build from source, you will need both the Rust utils and the Rust compiler.

  1. Download/clone this repository
  2. Download/clone the rust-utils
  3. Install Rust if not already available
  4. From the rust-utils directory, run cargo build
    • You can optionally provide the --release flag: cargo build --release
  5. Find the compiled library in rust-utils/target/debug/libviam_rust_utils.*
    • If you provided the --release flag, the enclosing directory will be release: rust-utils/target/release/libviam_rust_utils.*
    • The extension of the executable will depend on your operating system. For example, on macOS it will be libviam_rust_utils.dylib, whereas on Linux it will be libviam_rust_utils.so
  6. Copy the compiled library to the directory viam-python-sdk/src/viam/rpc/
  7. From the viam-python-sdk directory, run uv build --wheel to create an installable package
  8. Find the newly created installable package located in viam-python-sdk/dist/ and pip install it directly, for example: pip install viam-python-sdk/dist/viam_sdk-0.1.0-py3-none-any.whl

If you have a macOS or Linux based operating system and do not want to build rust-utils manually, you can also look for the executable in the releases page of the rust-utils library.

If you do NOT need communication over WebRTC (and thus, do not need the native library), the steps are:

  1. Download/clone this repository
  2. Run uv build --wheel from the viam-python-sdk directory
  3. Find the newly created installable package located in viam-python-sdk/dist/ and pip install it directly, for example: pip install viam-python-sdk/dist/viam_sdk-0.1.0-py3-none-any.whl
  4. Ensure that every connection has the option disable_webrtc set to True: viam.rpc.dial.DialOptions(disable_webrtc=True)

Configure a client application at app.viam.com

Your client application does not directly interact with your hardware. Instead, your client application makes calls to the viam-server which can then issue commands to your hardware or read from sensors.

To create a client application, to navigate to app.viam.com. After you log in, perform these steps:

  1. Create a location (for example home)

  2. Create a robot (for example arduino)

  3. Follow the steps on the setup tab:

    1. Setup machine cloud credentials on Single Board Computer (SBC)

    2. Download and Install Viam Server

    3. Wait until the robot shows as connected. If this doesn't happen try restarting the viam-server:

      sudo systemctl restart viam-server
      

Next, select the CONNECT tab in the Viam Web UI, and copy the boilerplate code from the section labeled Python SDK.

To ensure the installation succeeded and the systems are functional, save and run this simple program. If the program runs successfully, the python-sdk is properly installed, the viam-server instance on your robot is alive, and the computer running the program is able to connect to that instance.

The RobotClient & connectivity

The main entry point for using the SDK as a client is the RobotClient class. This class can manage resources, operations, frames, etc., for the robot. It can also manage connectivity and behavior around sessions and reconnection through the RobotClient.Options nested class.

The RobotClient will attempt to refresh its resources at a set interval (customizable via Options).

In the event that connection is lost to the robot, the RobotClient will attempt to reconnect at a set interval. There are two options available for customizing this behavior: how often the client checks the connection status (RobotClient.Options.check_connection_interval), and how often the client attempts to reconnect upon detecting a loss of connection (RobotClient.Options.attempt_reconnect_interval).

Upon a loss of connection, outstanding requests are NOT terminated and can possibly error with a GRPCError whose status is DEADLINE_EXCEEDED. When connection is restored, existing built-in clients will automatically receive the new connection - no need to re-obtain the client. Tasks initiated by Viam will automatically resume, but any user-defined tasks that depend on the connection should be checked and potentially restarted.

The Viam Python SDK utilizes gRPC and, optionally WebRTC (defaults to on). gRPC is provided purely in python, but WebRTC is provided by the external viam Rust utils library. WebRTC settings can be changed using the appropriate attributes in viam.rpc.dial.DialOptions. These options can be passed to the RobotClient through RobotClient.Options.dial_options.

Sessions

Sessions are a safety feature that automatically cancel operations made by the python client if it loses connection to a robot. Sessions are enabled by default but can be disabled by setting RobotClient.Options.disable_sessions = True. Please see the RDK session documentation for more details and server-side configuration options.

Examples

Read the Example Usage page, to learn how to access a component, build a custom component, and expose custom components as a remote to existing robots.

More examples can be found in the examples directory.

Documentation

Documentation, like this entire project, is under active development, and can be found at python.viam.dev.


Development

To contribute to the python SDK, please see the contribution guidelines.

Adding new resource types

The SDK provides a number of abstract base components and services (collectively: resources). To add more abstract resources, follow these steps:

  1. Create a new directory in viam.components or viam.services with the name of the new component
  2. Create 4 new files in the newly created directory:
    1. Define all requirements of the resource in {RESOURCE_NAME}.py
    2. Implement the gRPC service for the new resource in service.py
    3. Create a gRPC client for the new resource in client.py
    4. Register the API and define package exports in __init__.py
  3. Write tests for the new resource and add the resource to tests.mocks.{components|services}
  4. If the resource is a component, add the component to examples.server.v1.components and its corresponding concrete type in examples.server.v1.server

License

Copyright 2021-2024 Viam Inc.

Apache 2.0 - See LICENSE file

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

viam_sdk-0.72.0b0-py3-none-win_amd64.whl (6.5 MB view details)

Uploaded Python 3Windows x86-64

viam_sdk-0.72.0b0-py3-none-musllinux_1_2_x86_64.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

viam_sdk-0.72.0b0-py3-none-musllinux_1_2_i686.whl (7.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

viam_sdk-0.72.0b0-py3-none-musllinux_1_2_armv7l.whl (7.4 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

viam_sdk-0.72.0b0-py3-none-musllinux_1_2_aarch64.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

viam_sdk-0.72.0b0-py3-none-manylinux2014_x86_64.whl (7.7 MB view details)

Uploaded Python 3

viam_sdk-0.72.0b0-py3-none-manylinux2014_aarch64.whl (7.8 MB view details)

Uploaded Python 3

viam_sdk-0.72.0b0-py3-none-macosx_11_0_arm64.whl (7.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

viam_sdk-0.72.0b0-py3-none-macosx_10_16_x86_64.whl (7.2 MB view details)

Uploaded Python 3macOS 10.16+ x86-64

viam_sdk-0.72.0b0-py3-none-linux_armv7l.whl (7.5 MB view details)

Uploaded Python 3

viam_sdk-0.72.0b0-py3-none-linux_armv6l.whl (7.5 MB view details)

Uploaded Python 3

File details

Details for the file viam_sdk-0.72.0b0-py3-none-win_amd64.whl.

File metadata

  • Download URL: viam_sdk-0.72.0b0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 266dd39a8ec1e39f0f159bdb3d0a98e623d5af37bc613086814e667385ad1ab5
MD5 674e62c2de83c32daa28e7544e3e8780
BLAKE2b-256 eedf1963d7c9e80176430738b96aed20cb3b7f925eb45f1b55a8c8f1e670023f

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 59a47dbd602d99f0c2d63ef8857742110e0fe96fd5ef50a5d5eefdadbcdba6c9
MD5 149c2eac4131ca9b2c80d46a86092a6f
BLAKE2b-256 7d4018a8157a0d38c0ea8efbd2b7757cdd49aef303d5eac3e486abec20934be7

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-musllinux_1_2_i686.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 2149ed3cb9c05b97132940dab4f440d97460ce40085866b3a17f7d1f2ac91fc8
MD5 68669ece2652bb069b9adbb00b856e66
BLAKE2b-256 ddf399bdc6dd8ca19b4e0d4dc7786716fd0cf66850818c81d925be5f2438897c

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-musllinux_1_2_armv7l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 679ab86cdd8e0f87bf14eececea8b479efa283544614fc3954334121ac3ee5a3
MD5 2158a0b7ffcc4097fe24e4d937664719
BLAKE2b-256 39e20ad037873833248c5ca8604f2ae97fa9fbf666795896143ce35389fd3d6a

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 eb170c7ab7e0cff11fc2acf5c262ee1d2b6e6b221f8674ec922de83b9315aa26
MD5 a4c0ec8882a0922af4e0a3661c58708a
BLAKE2b-256 3800f54f3a35be0d20cf12c81d194a775a0f2cc365d42bcbeb8f2a0cc69f3ee3

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 92b28963281a3937893d63bb53e9d63905699fcb8bf3b4c69e73f04f46a300c8
MD5 01407f3727c2ef8e0996745219432e50
BLAKE2b-256 d63f355dd9ba9f95bea42c7781c7c32295ee02cc66a3b6e7bad07a991ac8429e

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 efd4511d488b423413fd2a153fa224a406978b26d9566507a1da1046e7ab19f5
MD5 797978313f4782a15a4f9ee53aef727e
BLAKE2b-256 a8fedf894f63d344d9c4637b1e3388feb5ac6b84d77793a921947f85ee92f88d

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f226ec8f2ae0afd35672525914b5a1ea02c388d817bf9e17d0ae1f42dcd8a9c1
MD5 fa56cf33755bc4f414e188854b15586f
BLAKE2b-256 471b198353c492e0d572944e6957cac5b503d7c9b410925527f353732c302101

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-macosx_10_16_x86_64.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 5d0400f5bc405bb0537279a6bf130a8cece5ffe04e1d8493d125885bc01e0384
MD5 641ba34204cd577a288579bc340bba9a
BLAKE2b-256 d68bbed60e332775d6dfefc00501c611cfa8d21e795b0ccf0dd543a3358058da

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-linux_armv7l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 466190a8d37e028511d739d47b6dc87a672b118b7f3cb2b828e4761e17899ebe
MD5 91668dc8578f9bb5ef00152558382fbc
BLAKE2b-256 11c4231f91b766342f36fca9324d8eaf1d39dddfea6b842911b95f650796c9e4

See more details on using hashes here.

File details

Details for the file viam_sdk-0.72.0b0-py3-none-linux_armv6l.whl.

File metadata

File hashes

Hashes for viam_sdk-0.72.0b0-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 be118eb69103321efa6273800b4ee6a6d594882e61257a231b726859bcc6716e
MD5 e21dd5d723d72bf13c6ed67244736490
BLAKE2b-256 c4c627847f2b44ea86ef0911bf177bf40c88082855e092c2fe6cfb18ef975648

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page