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

Uploaded Python 3Windows x86-64

viam_sdk-0.69.0-py3-none-musllinux_1_2_x86_64.whl (7.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

viam_sdk-0.69.0-py3-none-musllinux_1_2_i686.whl (7.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ i686

viam_sdk-0.69.0-py3-none-musllinux_1_2_armv7l.whl (7.6 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

viam_sdk-0.69.0-py3-none-musllinux_1_2_aarch64.whl (7.9 MB view details)

Uploaded Python 3musllinux: musl 1.2+ ARM64

viam_sdk-0.69.0-py3-none-manylinux2014_x86_64.whl (7.8 MB view details)

Uploaded Python 3

viam_sdk-0.69.0-py3-none-manylinux2014_aarch64.whl (7.9 MB view details)

Uploaded Python 3

viam_sdk-0.69.0-py3-none-macosx_11_0_arm64.whl (7.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

viam_sdk-0.69.0-py3-none-macosx_10_16_x86_64.whl (7.3 MB view details)

Uploaded Python 3macOS 10.16+ x86-64

viam_sdk-0.69.0-py3-none-linux_armv7l.whl (7.7 MB view details)

Uploaded Python 3

viam_sdk-0.69.0-py3-none-linux_armv6l.whl (7.7 MB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: viam_sdk-0.69.0-py3-none-win_amd64.whl
  • Upload date:
  • Size: 6.7 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.69.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 c5549f6f92558ce3bbfbc88fa2180073ce283b06b74144603ec7c4e576d7a8fa
MD5 eb525b1a8666fdc548a6cb8f76b30d84
BLAKE2b-256 2bcca63a64dbb6a1c1730317811a27315411c425fb22bef1e37968453e75601f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 046127f4367707e593da3eea63e65ee992ca67ffdb719fd6278aff43a4a72b0f
MD5 db8335cd8696fe4c1d995ffe014bf285
BLAKE2b-256 ee1ec583e7c4647871bc93f2c7a47b62e5f1b8fc37e7a2a53cf01f36b91354d3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 bc7bbf16dab0a35848a2eeafb5cd3f4cc6fb7f3f72a521638d44bf13957f897d
MD5 986a59631711d0443c7f28f91601dceb
BLAKE2b-256 32ec476fe1332313d1bb5ec26b5708b69a6ca2f9a3f41f1a9da39419283d52f2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 c950e3addc2f53cf3b7f492628ecb4f6579905aefff44139515e4c8deb4da804
MD5 1e9f285cd48305f74fcfe9feed669ffd
BLAKE2b-256 580b48547e660616f52206120f67b0ac1bb52b9746c6cf15837f5a73a55d52f8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 42315a454d29f4ea962a83c1177b64bc6d39899f14d913bf4b8b4a3780f4bdc3
MD5 d6172bc245f53f041f3281d4dc4268a1
BLAKE2b-256 c1864b4bdb5728ce093e00e73984b30d5e1cf83e4ddd15253d5ce1bdb58ebc93

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6beb5d1375b28a837d60dba3108d871b66c2b1f1f8c434b777ba1d30b9620b9d
MD5 04edca69c535adc4c7653f50e463b708
BLAKE2b-256 0aa679e802e7ea5909c84c9a94561209a5e7e532bd94d19612274657ed428830

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a27a65796a61e136244c964d95e62e0bd2b6c730fb19f49e6a01630df532c533
MD5 bb92a02d543fa14188b7b6038870d55b
BLAKE2b-256 0e4771769f79ae1bf21e2f5317d3fbd22f36e45f5547ec19f0fb44ff2da87ea8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 93bc111e769ab0f992b551a4c9202357b8b9ac6b8e87a1355d211606007589cc
MD5 9a854fbaa448d502161f3f6461ac110d
BLAKE2b-256 c56b5b16e7cf09b5854549c1c62547ae49956b0492b3cb9a2b10cb22575c3195

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 73cf0f55f923ebf29b625863a118337edc214909293733caebafb4ff10a9b0bc
MD5 09d4a036129186be3a938b95ddfe0328
BLAKE2b-256 2cd2ee0e2688b5e0514fef110ff38f9b2f906b061373129701ce53afe2c3267d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 4fb4e86f5ca4324f70f2e9b843af7f0b3db6a367b897799ae076cac5f598e03a
MD5 cb47efdd66e2ac85e13dfd77a6dec3f7
BLAKE2b-256 352ebe3e15a2bd22d55604c065bd9885e6b49bcbc4983dfd7b0b05bcd1254bc3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.69.0-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 9af9514146fa2a2e0a880089e52a9523b581f7585315b8fddfc59355afd1f121
MD5 0caa43b19b8efe4e6af66f1f44c6573a
BLAKE2b-256 fbf522ee6fa421e723475d68fcb37c77f426b0a284afb12a2e57dbbbd6394893

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