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

Uploaded Python 3Windows x86-64

viam_sdk-0.78.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.78.0-py3-none-musllinux_1_2_i686.whl (7.8 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

viam_sdk-0.78.0-py3-none-musllinux_1_2_armv7l.whl (7.5 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

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

Uploaded Python 3macOS 10.16+ x86-64

viam_sdk-0.78.0-py3-none-linux_armv7l.whl (7.6 MB view details)

Uploaded Python 3

viam_sdk-0.78.0-py3-none-linux_armv6l.whl (7.6 MB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for viam_sdk-0.78.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 2ec625d4b366e4e03295fad29ca1dabac9cf2ef6f7e27cd049871fa82388e2c3
MD5 b752057dc9f95c69b2054c1a9432bb10
BLAKE2b-256 e0e9edf990cd1783c3f3dd2512058397c56b824186426fa46a244990cbec0ebe

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ee19c97330a0a3f135d97126faaf65a8c761c0aa3c0d23d2184c85ec63881760
MD5 0610fab7f7efa188ee19924eb6cb6994
BLAKE2b-256 e9fa529bd6da859de1887a65603d8657d9a9edd93850f0bd0bd641ff312dd732

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 8b17e450604209cf0778d00269f15f959ea30fb3686b6c8ab04c4d1c3cf8646d
MD5 2d551be8f272e0995b2747bb28f10d93
BLAKE2b-256 d7beacd1c9891ccadd68867c9d3b264216894f1171abe7c6a6713ba20904a1db

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 4d5647427c2c00a3a95c35c59b37c16b6559f885d3b7158351c95c839f4bcb6e
MD5 4b2bab3b93d85e69c16a2bcaffeb95d9
BLAKE2b-256 c328372b07c9ecafa74120fa8d5cb97d7106b53f553f8c64c533c8eb3d22a8e0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1ad88a387cc3ccaebd47f17eda4d132a01f09dacb7f1d9d6d9a29ac59a796b9c
MD5 2156a925c998c3ca1d4a467e84e9aaf5
BLAKE2b-256 9e86fbe196d506f5ddf11236c6dc6485cea79da4ef349394567f09df731aaa48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fd83bcbb16ca2697dda88763bb312e992cd71e56188e19d2879900987a2dd0c2
MD5 e9eec54179d7fae067da2d5d32de2bc9
BLAKE2b-256 9fd57aeb26b3beb5e4a8c05241fac0858963cea152d25c43e4e80b5d24ac7c23

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a439650f51c690aecf800db128a94d03886e367b9fcc8daae3f5092df6227432
MD5 be60e3a4c49cbf61ce5dc0bf6c69cd30
BLAKE2b-256 6994419231d2be920bb146e770208e10f2d7e36b3373a86128b4cd2564bb1231

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0a2d89d3a2eec1d61632b7abc7deabb226e1f2e6592fc6b048c65577136c8462
MD5 04d1ab2ea9d4f7af341d30da0b081f5d
BLAKE2b-256 a377ba6995a3bf494ba6eb40b603528f71e869d8aef1b8f3dfd9b278a56f4013

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 9f0cc15e5f85c4c53e95efb608d949e5a8b7f4e2e6b9a9a3b3e19178de467aff
MD5 485d57265405d05192b7c34c38faf5ec
BLAKE2b-256 d94c58a557f46c8f92cd0ff738132be2ef72d126df18142d7b47383bc596893f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 ac1d902c55b37c829ba24c5df5ac653e39cf648611f149c00cf3cb3b077755e7
MD5 6fd8fb44c0a60b5da68fe33c5cfb87fb
BLAKE2b-256 b72eebfef467c9ef91fd72e56d06f9c3a364ce8c635e05481a3a597b7d5bea97

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.78.0-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 e11ce7013d08826d9cad13a0d7dabdfe9f123e31a37e7201213c3c97357653b6
MD5 5b860697c6d1f7814439b232177f50ba
BLAKE2b-256 e2502981a2a632ad5e56fd451894583c4a8ae29df83b6c806750bc742d97c4b1

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