For the complete documentation index, see llms.txt. This page is also available as Markdown.

Robot Overview

This documentation is currently in beta. Please proceed carefully, and if you run into issues or need additional information, reach out to Hello Robot directly for support.

System Check

Run a full hardware and software check to confirm the system is ready:

stretch_system_check

If all checks pass, your robot is ready to go. Use stretch_about to print robot identity and configuration, and stretch_params to inspect all robot parameters.

Homing

If your robot needs to be homed, the system check will tell you. The homing procedure takes approximately 30 seconds and finds the zero position of all joints. It must be run once every time the robot is powered on:

To home the robot:

stretch_robot_home

--# insert video of robot homing

The robot will beep when finished. The motors will remember their homing state while the robot remains powered on — using the runstop, backdriving the robot, or restarting the NUC will not require rehoming. Powering the robot down completely will require homing again on the next boot.

To stow the robot to its compact travel pose:

stretch_robot_stow

--# insert video of robot stowing

Runstop

The physical runstop button on the side of the robot's head immediately cuts power to all motors. The stretch_runstop tool lets you toggle the runstop programmatically from the terminal.

--# we already mentioned this in quick start should we point to it?

Monitoring

To monitor all robot devices, sensors, and activity in real time, including joint states, battery, and subsystem status:

This tool provides a unified live dashboard of the robot's state.

--# this tool exists in stretch_production_tools_ii, worth it to port to stretch4_body

Motors and Joints

--# add videos for each

Omnibase

Stretch 4 has a triangular omnibase, consisting of three holonomic closed-loop stepper motors each driving one wheel. Wheel numbering increases counter-clockwise, with wheel 0 to the left of the forward direction. This is consistent with the ROS frame convention where X+ is forward and Y+ is to the left, forming a right-handed coordinate frame.

The omnibase supports full planar motion — forward, sideways, diagonal, and rotation in place, all simultaneously. It also supports guarded contact sensitivity, which can be calibrated and tuned per use case.

To jog the base:

Lift

The lift provides vertical translation of the arm, reaching up to 47 inches high and all the way down to the ground. It is driven by a closed-loop stepper motor through a low gear-ratio belt drive, providing smooth and precise motion.

Arm

The arm comprises 4 telescoping links set on rollers, extending 21.6 inches beyond the base footprint and retracting to stow within it. Its proprietary drivetrain is driven by a stepper motor with closed-loop control and current sensing, enabling contact detection during motion. In combination, the lift, arm, and mobile base provide three orthogonal axes of motion — a Cartesian system for end-effector placement.

Contact Sensitivity (Guarded Contact)

Stretch's lift, arm, and omnibase joints have a contact detection system called Guarded Contact. This safety feature limits the forces Stretch can apply to a person or its environment, and can be tuned for your application.

Guarded Contact uses current sensing to detect when actuator effort exceeds a user-specified threshold during motion. When triggered, the safety controller halts the joint until a new movement command is received.

Feetech Motors

The wrist and gripper joints use Feetech servo motors, controlled over a TTL serial bus. To monitor Feetech motor status:

Feetech Errors and Reset

Feetech motors can enter an error state from over-force or over-temperature events. When in this state, the motor becomes backdrivable, stops responding to commands, and the LED on the motor body blinks red.

Powering the robot down completely will clear this error. Note: rebooting only the NUC will NOT clear it, as the Feetech motors remain powered. A faster way to clear the error:

This reboots all Feetech motors and resets their error status. You will need to re-run homing after doing this since the wrist_yaw and gripper joints lose their homed positions.

Head Cameras

Stretch 4 has a Luxonis OAK-FFC-3P camera module mounted in the head with three cameras:

Camera
Type
Resolution
Target FPS

Left

Fish-eye wide angle

1920×1200

30

Right

Fish-eye wide angle

1920×1200

30

Center

High-resolution color

4032×3040

10

The left and right cameras are fish-eye wide-angle cameras providing a broad environmental field of view. The center camera is a high-resolution color camera. All three are angled to maximize combined visual coverage in every frame.

To display any combination of camera feeds and open them in rerun or opencv :

  1. use either --rerun or --opencv (not both) in conjunction with the choice of camera combination.

  2. use the flag -h to see all options

Emulated RGBD from Head Cameras

The head cameras can be fused with the head Hesai lidars to produce RGBD (color + depth) point clouds. To visualize this:

Camera Focus and Calibration

Camera focus is adjusted and intrinsics are calibrated using the factory calibration pipeline. After calibration, cross-calibration between cameras and lidars is also performed during the bringup process to align all sensor modalities spatially.

Dexterous Wrist

Stretch 4 has a three degree-of-freedom wrist with yaw, pitch, and roll actuation — all driven by Feetech actuators.

Axis
Raw Servo Range
Notes

Wrist Yaw

310°

range_deg: [-65, 245]

Wrist Pitch

310°

range_deg: [-65, 245] — effective range reduced by self-collision limits

Wrist Roll

310°

range_deg: [-65, 245]

To jog individual wrist joints:

To home all wrist joints:

Individual axis homing is also available with stretch_wrist_yaw_home, stretch_wrist_pitch_home, and stretch_wrist_roll_home.

Gripper

The compliant gripper is a robust single-degree-of-freedom end-effector. A Feetech actuator drives the center of the spring mechanism, which causes the outer fingers to flex and provide a grasping force.

Gripper Cameras

Stretch 4 has two OAK-D-SR (Short Range) cameras mounted at the gripper, providing stereo depth for in-hand manipulation tasks. These are detected as a separate Luxonis device from the head cameras (2-sensor device vs. the 3-sensor head device).

Sensors

Stretch 4 includes the following sensors:

  • Hesai JT128 3D LiDAR × 2 (Left and Right, mounted on the head)

  • Luxonis OAK-FFC-3P Camera Module (Head: 3-camera array) + OAK-D-SR (Gripper: stereo pair)

  • Speaker (mounted at the bottom of the head)

  • Pixart J3 Line Sensor Array (base, floor-facing)

Hesai JT128 3D LiDAR (Head)

Stretch 4 has two Hesai JT128 3D LiDAR units mounted on the head — a left lidar and a right lidar — providing full 3D point cloud coverage of the environment. These are used for mapping, navigation, and RGBD fusion with the head cameras.

Each lidar communicates over Ethernet. The NUC holds a single network profile with two IP addresses to communicate with both lidars and the Jetson simultaneously:

Device
IP Address
Description

Left lidar

192.168.1.202

Hesai JT128 left

Right lidar

192.168.1.201

Hesai JT128 right

NUC (Lidar subnet)

192.168.1.2

Onboard computer — lidar communications

NUC (Jetson subnet)

192.168.1.100

Onboard computer — Jetson communications

Jetson

192.168.1.101

AI co-processor

Speaker and Microphone

The robot has a speaker and noise-cancelling microphone mounted at the bottom of the head, allowing Stretch to communicate from across a room. To test audio output:

Line Sensor Array

Stretch 4 includes a floor-facing GreatScott GS2 line sensor array on the base. This array continuously scans the floor in front of the robot and uses an on-robot model to classify the surface as floor or obstacle, enabling low-latency hazard detection independent of the lidar.

The line sensor runs in a dedicated background worker process at approximately 30 Hz, and its output is used by the omnibase to automatically limit velocity when an obstacle is detected in the direction of travel. To visualize the line sensor:

LED Eyes and Lightbar

The robot head has two LED eye displays. These support a set of built-in animations including idle glow, blinking, directional gaze, rainbow spin, alert, and happy states:

The head also has a programmable RGB LED lightbar. The lightbar can be triggered and tested via stretch_power_periph_jog.

NVIDIA Jetson (AI Co-processor)

Stretch 4 includes an NVIDIA Jetson Orin module as a dedicated AI co-processor, directly connected to the NUC via Ethernet.

Software Environment

The Jetson runs with:

  • OS: Ubuntu 22.04 + JetPack 6.1

  • Custom Docker container with: ROS 2 Jazzy, PyTorch, CUDA (cu129), Zenoh, Ultralytics, and OpenCV Bridge for NVIDIA Jetson

Accessibility

The NVIDIA Jetson boots up automatically whenever the robot is powered on. Passwordless SSH is pre-configured, so you can seamlessly access the Jetson from the NUC using the following command:

Internet Connectivity

To enable system updates and software package installations, there is a Wi-Fi dongle attached directly to the Jetson processor. You can connect the Jetson's Wi-Fi dongle to your local internet using the command line interface (CLI).

Once logged into the Jetson via SSH, use the nmcli network manager to connect to your Wi-Fi network:

Once connected, you can verify internet access by pinging an external server:

GPU Offloading

The Jetson communicates with the NUC via Zenoh for ROS 2 topic bridging. This enables offloading compute-heavy tasks such as YOLO object detection or pose estimation to the Jetson's GPU, while the NUC handles robot control. The Jetson subscribes to image topics published by the NUC and returns inference results.

Software Architecture

Stretch 4 uses a client/server architecture in stretch4_body:

  • stretch_body_server runs a 100 Hz control loop on the NUC, managing all hardware state

  • Application code connects via RobotClient to issue commands

  • A C++ transport backend handles non-blocking USB communication to all motor controllers in parallel

The 100 Hz control loop follows this sequence every tick:

  1. Pull status from all devices

  2. Update sentries (safety watchdogs)

  3. Ingest commands from the Robot Client

  4. Run active controllers and behaviors

  5. Compute safe motion limits

  6. Push safe commands to motor controllers

To launch the body server:

Gamepad Teleoperation

Stretch 4 ships with an Xbox controller and supports two control mappings:

1. Joint Space (default)

Direct joint-level control of the robot. All controls are summarized below:

Control
Action

Base Controls

Left Stick

Translate base (XY)

LB / RB

Rotate base

Hold LB + RB, Right Stick

Analog base rotation

RT + Left Stick

Straight-line base movement

Arm Controls

Right Stick

Wrist Pitch (Y) and Yaw (X)

D-Pad Up / Down

Lift up / down

D-Pad Left / Right

Arm retract / extend

A / B Buttons

Close / Open gripper

RT + LB / RB

Wrist Roll

Modifiers

LT

Precision mode (reduce speed)

2. Flying Gripper IK

IK-based Cartesian control of the gripper. Point the gripper toward your target with the Right Stick, then move toward it with the Left Stick:

Control
Action

Left Stick

Move toward target (translation)

Right Stick

Point gripper at target (orientation)

D-Pad Up / Down

Lift up / down

D-Pad Left / Right

Wrist Roll

A / B Buttons

Close / Open gripper

LT

Precision mode (reduce speed)

Special Functions

Input
Action

Y Button (tap)

Cycle control mapping (Joint Space ↔ Flying Gripper IK)

RT + A (tap)

Cycle motion speed profile (Slow / Medium / Fast)

RT + B (tap)

Cycle contact sensitivity profile

Start Button (tap, unhomed)

Home the robot

Start Button (tap, homed)

Switch gripper handedness (without motion)

Start Button (hold 3s, homed)

Switch gripper handedness (with motion)

RT + Select (tap)

Announce current settings (handedness, speed, sensitivity, mapping)

RT + Select (hold 2s)

Stow the robot

X Button (hold 0.5s)

Execute custom function command

To launch gamepad teleoperation:

Developer I/O

Stretch 4 contains additional ports connected to the onboard NUC that can be used for accessories:

  • Trunk: 1× USB-A 3.0 ports, 2x USB-A 2.0 ports, 1× Ethernet port, 1× HDMI port.

  • Head (top): 1× USB-A 2.0 port, 1x USC-C Port

  • End-of-arm: 1× USB-A 2.0 port

  • Wrist: Quick-connect mechanism for tool attachment.

There are also threaded mounting points on the head to add additional sensors.

Key Tools Reference

Tool
Description

stretch_body_server

Start / stop / release the 100 Hz robot control server

stretch_robot_home

Home all robot joints

stretch_robot_stow

Stow the robot to its compact travel pose

stretch_runstop

Toggle the runstop programmatically

stretch_system_check

Full hardware and software system check

stretch_about

Print robot identity and configuration

stretch_params

Print all robot parameters

stretch_battery_check

Check battery state of charge

stretch_status

Live robot status display

stretch_joint_viz

Joint state visualization

stretch_collision_viz

Visualize self-collision safety margins

stretch_gamepad_teleop

Launch Xbox gamepad teleoperation

stretch_puppet_teleop

Launch puppet (backdriving) teleoperation

stretch_omni_base_jog

Jog the omnibase

stretch_lift_jog

Jog the lift

stretch_arm_jog

Jog the arm

stretch_arm_home

Home the arm

stretch_lift_home

Home the lift

stretch_gripper_jog

Jog the gripper

stretch_gripper_home

Home the gripper

stretch_dex_wrist_jog

Jog dex wrist joints

stretch_dex_wrist_home

Home all dex wrist joints

stretch_feetech_reboot

Reboot Feetech motors and clear errors

stretch_feetech_monitor

Monitor Feetech motor status

stretch_camera_show

Live camera feed viewer (configurable)

stretch_rgbd_show

Emulated RGBD from head cameras + lidar

stretch_line_sensor_viz_3d

3D visualization of line sensor data

stretch_power_periph_jog

Manually control power periph (Jetson, fans, lidar, etc.)

stretch_eoa_power

Toggle end-of-arm power

stretch_eye_animations

Run LED eye animations

stretch_audio_test

Test speaker output

stretch_pose_play

Play back recorded robot poses

stretch_pose_record

Record robot poses

stretch_pose_edit

Edit recorded pose files

Last updated

Was this helpful?