Skip to main content

Stretch Body low level Python API for Stretch 4 hardware

Project description

Overview

The stretch4_body repository contains the core Python software stack that allows developers to interact with the hardware of Stretch 4 robots. The repository for Stretch 3 and below can be found in the stretch_body repo. This repo provides a robust, soft real-time capable framework for managing low-level motor communication, subsystem coordination, autonomous behaviors, and a high-level API for user applications. This repository is intended to be imported by other code that needs access to these features.

This package can be installed by:

python3 -m pip install -U hello-robot-stretch4-body

Architecture Block Diagram

At its heart, the architecture is built around a Client-Server model. A dedicated RobotServer runs as a background daemon managing the physical hardware at 100Hz, executing safety monitoring, self-collision detection, and hardware command multiplexing. Developers build their applications using the RobotClient, which asynchronously communicates with the server over ZeroMQ. This decouples user scripts from strict hardware timing constraints and allows for safe, concurrent control of the robot.

graph TD
    ClientCode["User Application RobotClient"]
    Server["Robot Server 100Hz Loop"]

    Subsystems["Hardware Subsystems"]
    Arm
    Lift
    Omnibase
    PowerPeriph
    EndOfArm

    Behaviors["Behaviors"]
    Sentries["Sentries Safety Monitors"]
    SafeMotions["Safe Motions Collision Avoidance"]
    Routines["Routines Autonomous Actions"]

    Workers["Background Workers"]
    LineSensorLoop["Line Sensor Loop"]
    CollisionLoop["Self Collision Loop"]
    EOALoop["End Of Arm Loop"]

    ClientCode -->|ZeroMQ Commands and Status| Server

    Server --> Behaviors
    Behaviors --> Sentries
    Behaviors --> SafeMotions
    Behaviors --> Routines

    Server --> Subsystems
    Subsystems --> Arm
    Subsystems --> Lift
    Subsystems --> Omnibase
    Subsystems --> PowerPeriph
    Subsystems --> EndOfArm

    Server --> Workers
    Workers --> LineSensorLoop
    Workers --> CollisionLoop
    Workers --> EOALoop

Technical Primers

For an in-depth understanding of how specific parts of the system are designed, refer to the following technical primers:

Primer Description
Core Architecture Maps out the foundational classes, IPC communication, and file organization of the core library.
Robot Parameters Explains the multi-layered parameter system (default vs user) and dynamic runtime generation.
Robot Client API A guide to using the RobotClient API for reading status and commanding motion asynchronously.
Hardware Subsystems Overview of the primary hardware abstractions (Arm, Lift, Base) and how they are instantiated.
End-Of-Arm EOA Details the dynamically instantiated, multi-process architecture for interchangeable tool attachments.
Line Sensors Details the operation and background processing for the downward-facing Pixart line sensors.
Server Behaviors Explains the plugin architecture for Sentries, Safe Motions, and Routines within the 100Hz server loop.
Self-Collision Details the MuJoCo-based collision checking system, its background loop, and configuration parameters.
Gamepad Teleop Explains how different control schemes can be mapped onto a standard gamepad controller + how to extend it.
Cameras A guide to the cameras on Stretch 4's head and wrist, with an overview of the CLIs and API.

Installation

  1. pip3 install -e .
  2. stretch_body_server --launch

Note: The C++ shared libraries for transport and SCSerial will compile automatically via Meson during the pip install.

If you want to install the object detection dependencies:

pip3 install -e .[object_detection]

Troubleshooting Editable Installs

If you make a C++ syntax error or typo in the source files and attempt to run a command while in editable mode (e.g., launching stretch_body_server), you may encounter an obscure Python exception instead of the actual C++ compiler error message:

subprocess.CalledProcessError: Command '['ninja']' returned non-zero exit status 1.

Because meson-python editable builds run quietly in the background on import, it drops the standard output of the C++ compiler natively, hiding your C++ syntax error. To see the actual compiler output and locate the line where C++ failed, prepend your command with the verbose flag:

MESONPY_EDITABLE_VERBOSE=1 stretch_body_server --launch

Project details


Download files

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

Source Distribution

hello_robot_stretch4_body-2026.7.2.tar.gz (8.7 MB view details)

Uploaded Source

Built Distribution

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

hello_robot_stretch4_body-2026.7.2-py3-none-any.whl (7.4 MB view details)

Uploaded Python 3

File details

Details for the file hello_robot_stretch4_body-2026.7.2.tar.gz.

File metadata

  • Download URL: hello_robot_stretch4_body-2026.7.2.tar.gz
  • Upload date:
  • Size: 8.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for hello_robot_stretch4_body-2026.7.2.tar.gz
Algorithm Hash digest
SHA256 de2fdefdc18c9e0f6132bd36e7903176c272d6b628b2956901d958d1a39970bb
MD5 1b1d48bdae108d8c07246021fb2c7164
BLAKE2b-256 44476250c6bab5d1617ca6fe33981eb0afa935483305fd76e37c20a97fcce2ee

See more details on using hashes here.

File details

Details for the file hello_robot_stretch4_body-2026.7.2-py3-none-any.whl.

File metadata

  • Download URL: hello_robot_stretch4_body-2026.7.2-py3-none-any.whl
  • Upload date:
  • Size: 7.4 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.11 {"installer":{"name":"uv","version":"0.11.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for hello_robot_stretch4_body-2026.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4886f99a6c541edb35ed7fe443658b402b6a2688c3038a5c06f2f5f2c2ab8aa0
MD5 00d2b8543238727ba39558e13f9ae79c
BLAKE2b-256 0896262079ab1fcfc614e6027f2568591d35c3c951bf5c438eb3f8ed7ade4c51

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