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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3musllinux: musl 1.2+ i686

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

Uploaded Python 3musllinux: musl 1.2+ ARMv7l

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

Uploaded Python 3musllinux: musl 1.2+ ARM64

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

Uploaded Python 3

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

Uploaded Python 3

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

Uploaded Python 3macOS 11.0+ ARM64

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

Uploaded Python 3macOS 10.16+ x86-64

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

Uploaded Python 3

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: viam_sdk-0.77.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.12

File hashes

Hashes for viam_sdk-0.77.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b07bbf170c8d6a2ff3f5585e72a3776757ce1457f1a25baee6933e1bece39a61
MD5 93b92b1a609cd2d61d3cfbcf7b7c03e8
BLAKE2b-256 d800d318d94b9490e74a949d446453636f28a4c4e1e15fb2c0fff00969cd7f29

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 65fb2d19f7e00c2c9f8a8ede40eebd838e07046c117aade2080f69a78b102fe8
MD5 404f62ebb41511f9163edaed5ff65838
BLAKE2b-256 5a1bbdea7763dee0886c7707e4d7652f1e141773a4ee19bace177dc5634cd8a5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-musllinux_1_2_i686.whl
Algorithm Hash digest
SHA256 f1d80bc19c8fd439aa75cca75954e237afeb0fc738464be333b49c4d7c8f40d1
MD5 186c79c6a38ce85ad637792b9ed5fe5c
BLAKE2b-256 a911aeb555beccf8bf0e16ede4236007de837afa6aa019c1f3d8ea0ed9732bf9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-musllinux_1_2_armv7l.whl
Algorithm Hash digest
SHA256 010073d196ebceb129e3a505d0608468ca8749842826ec1a30ba6f7636d5aaf2
MD5 113b8e77e124890171797498d8570ee1
BLAKE2b-256 bc6a6473606531c2b5060bdddc4d3b9d098c0a912fa58229799caa70c1bae068

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 9688cb9ace1f4ee4c89e1e27c1dac47814f62eeee99ef0104f055d2ca8b6d6b6
MD5 3876e0e5789459af76652e7abedc0780
BLAKE2b-256 6df5bd504e6ff90a52db22832d824a32569a1602eb75fc423d899b40ab45cb9d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 205f7a6bbdd0f1de190177c2bc4f9b09699f3d84c4af99189f965d724f02d517
MD5 ff6250a714d475ebb9f34b219a35d87a
BLAKE2b-256 366849fa28f9d7ab0f7aafccebbb88cb481d7a299b282ae65c92e37da9a4ea95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 988d302661ac815e2b441a70a614002eb274017087d4e985e604cb4f6caebf78
MD5 b4798650c2484d1abcc4d43e9d81b937
BLAKE2b-256 5a46c9af636d7f6377fc4ce876bdfeca3f193bc0861303a46c41911fddc1f550

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 cda064fe5bd238e27bdd54872a1bca8c4e62ed9345d99025ecd4458098934927
MD5 7bedf267c2be10fa985c1e8386885b69
BLAKE2b-256 94af6515da615f6b70031ebd9756c2951038f51e837c13b5685b45b59dee14e8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-macosx_10_16_x86_64.whl
Algorithm Hash digest
SHA256 f93995500b2ac5a2fea7cd08db56d8f14b33f60f06746709cd80c4bd1d70c01b
MD5 7340dcd22f19df80b776cd67bfaf92f3
BLAKE2b-256 66eac8483c481f12c59050005ed36c9267e67ecc98246c9abd49da6fc52b9b27

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-linux_armv7l.whl
Algorithm Hash digest
SHA256 b0689716018ee9af87496f4668447ff0dcc93bb2a837cf4b7700a3df9ba2530d
MD5 dd83c7e789e7236cb0de8051270d297e
BLAKE2b-256 3f908d602c394e0bb2bf026311ee4218e8f769cf9ec3ecf5380419ff23c4c396

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for viam_sdk-0.77.0-py3-none-linux_armv6l.whl
Algorithm Hash digest
SHA256 a853ae72cbbbe35dc5e76cdd51845e307375bca92e4938e0c4ec513520fd9e4c
MD5 360af2be91fc0f0351c2cce8a8c9c099
BLAKE2b-256 d5a1867d199896c04614c4220785cc2e240f9018dfdb0ffebe89bd8b7e697208

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