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.0-py3-none-win_amd64.whl (6.5 MB view details)

Uploaded Python 3Windows x86-64

viam_sdk-0.72.0-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.0-py3-none-musllinux_1_2_i686.whl (7.7 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

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

Uploaded Python 3macOS 10.16+ x86-64

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

Uploaded Python 3

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: viam_sdk-0.72.0-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.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 1a9aa68a37038615780f63832f61b90c69945f3c68e8edca6e625c9a512b44a4
MD5 d4437a11dfd458bd2e820c5bd1380fb4
BLAKE2b-256 5e1c7f97e0801b04668044cbff3d44f548e663e3dde60af0624c4a3f3714ddd9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 58f1ce280e01757bed43ed8c82595367f2d83603df5cff3f4d35910e19aee522
MD5 c70634cfc70e97e704fb10147c6b9c36
BLAKE2b-256 0fc625ec0ccd8735c20e8b849894799a8e4a03ade01944d6af204d412efba301

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 bcee64975f97185d279f41cb03e23a39648422989e6b6a99212ad8bd0efa42ee
MD5 e8e81139d9424be35203bccd2cd6b198
BLAKE2b-256 2dc1efac4bd68b1783872520472812d54be9307932879b0c01aac5c60a7d4a2f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 d5d9b34abff40be2c0275212532f5d94a811459fc6664079deeafdf89de001e1
MD5 3e819f9a3a102853d3defcfcacd6e1a3
BLAKE2b-256 83152436a2d6bac1fdb87baa9ddb7cc543ccddbb3f9dd03fc4b94d8d556e7dca

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 7a42a6aef0f83547ed841a448f3430b4b1056a647ca1ccdd51fd06bbb97a7640
MD5 0cb3be9aa9d6238d1202c17a7d9722f0
BLAKE2b-256 836cadb513a4a0220956c83d881cf054f0c8bf4d18eb85b45307155f3f043b82

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b8a4dcd029c42497ae323ae907bbc03fef8c4651d4938016f2c4e72aa21c34c8
MD5 f7270d821abe4e261844228ebb76f7bd
BLAKE2b-256 8c5016c270baf17eeac961e96a6d55dd4ed875a546797137d0059dd984a21cf4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bc33f99c6a92cf8fea47b40ccc907f8b497a58931fee2e5797bf4b5ca286143d
MD5 d529122fda787ea4fc2ac89158eca0c0
BLAKE2b-256 e73cef84b597cdacc25fe103b92c808feb834ff54fcaf14b2bd8adb1bb506983

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed8b8717b27dde209c97ce9edf98acd509fa5bacd046eb332170156457ab4591
MD5 6775e37a86d26929558987ebd5fdef38
BLAKE2b-256 3254b3951b1982239631780fc4f2388fa8eace695b5cd8a171c59cd42efc3427

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 60bc94cb3eedc8d9e268d09fa82c59ed7ab92a735c0bc728108ca79b69454068
MD5 603d35a2b8f0836481286b40f3fc6a7a
BLAKE2b-256 f1a04bd5fc3153b0ea94a70ab5fdd3027ddfb3e7d8a991632422e448f0444b2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 1c6e6bf40b3e65a09c6fb2e0dfec44d1050df26c9836fd5c0fe0bcb4ac29b486
MD5 87603dcff3f4aab37ae57d8215cfbfb6
BLAKE2b-256 53f39abafdc502ef964f98950b202e5d8b49ec1331bc87b28831af8256ae040f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.72.0-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 88200b7d35e607be820ae13d1ecde07e3db2d906f5cab10ffbe2b6263bc9f2e6
MD5 62f7b47ba5899da925aa1ded02cc76db
BLAKE2b-256 a49ce716b1dc98cf9c3e1455b41fdd16233f8578b97415a722b7a45a9a4aba6c

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