Skip to content

Changelogs

A "changelog" keeps track of the notable changes for each new version of a project that is released. The changelogs for Stretch's software projects can be found below.

Changelog for Stretch Body

The changes between releases of Stretch Body are documented here.

0.7.13 - May 7, 2024

  • This PR robot process protection to multi-user setup. Currently, if you have an ongoing connection to the robot, and attempt to launch another application that needs to connect to the USB hardware, the second attempt will not connect and will let the user know that an ongoing connection already exists. This is because only one connection to the hardware can safely communicate at a time. Therefore, this protects the first connection from experiencing dropouts or interruptions. The warning also informs the user that they can kill the first connection using the stretch_free_robot_process.py CLI.
  • All of the above protections work well on single user set-ups, which is the default Stretch ships with. However, it's common in developer teams that are sharing the robot to want to create multiple Unix users on the robot. This PR enables all of the same protections and CLIs that worked previously to now work with multi-user setups.

0.7.11 - Feburary 20, 2024

  • Introduce the stretch_configure_tool.py tool (pr #287)
    • This PR introduces a new CLI called stretch_configure_tool.py. It eliminates a pain point around changing the robot.tool parameter and updating the URDF (and exported URDF).
    • This tool supports all three models, all officially supported tools, Ubuntu 20.04 and 22.04.
  • Add "Tool" section to the system check
  • Add the ability to change the formatter for the logging params

0.7.2 - January 26, 2024

  • Fix for wait_command() timeout not being respected (issue #255)
  • Improvements to the System Check tool, including:
    • Check if hello stepper self recognize correctly
    • Check if OV9782 camera seen for Stretch 3s
    • Update pip recommendations
    • Hide verbose printout
    • Add battery section to hardware check

0.7.0 - January 25, 2024

  • Introduces P5 firmware protocol support
  • Revamped system check tool
  • Revamped wrist/tool management system
  • Started development on a self collision avoidance system
  • Utilities and CLI to introspect UVC cameras
  • Support for Dex Wrist 3

0.6.8 - December 7, 2023

  • Deprecate robot.is_calibrated() and introduce robot.is_homed() to match homing nomenclature used elsewhere (details)
  • Added a robot.wait_command() method to easily block process execution until motion is completed (details)
  • Added Dex Wrist URDF visualization to the stretch_robot_urdf_visualizer.py tool
  • Automatic checking for updates in background while homing + user notification about out-of-date software in stretch_robot_system_check.py (details)
  • Add mutex locking on Stretch Body + introduce stretch_free_robot_process.py tool (details)

0.6.2 - September 11, 2023

  • Introduces the new set of Gamepad modules to teleop stretch using the provided physical gamepad or any other UI input devices. This gamepad controller primarily uses velocity control.
  • The stretch_gamepad_teleop.py tool is added and we are deprecating the old position control based stretch_xbox_teleop_controller.py
  • The new controller now has a precision mode, allowing users to make fine-grain robot motions.

0.6.0 - October 7, 2023

This is the initial productioon release that supports Prince batch. - Introduces the P4 firmware protocol support - Adds Prince batch params and new pimu IMU support

0.5.0 - July 11, 2023

  • Introduces the use_asyncio mode that will enable using asynchronous IO call methods to perform robot push/pull commands and RPC transactions with the help of asyncio to speed up the USB device communications. This mode can be toggled back to use the regular non-async IO calls by changing the stretch params use_asyncio.
  • By default, the asyncio mode is enabled.
  • Adds the P3 protocol support for all the Arduino devices (stepper, pimu, wacc).
  • Also, for the asynchronous transport layer to work, the devices firmware will need to support V1 transport protocol that is supported with firmware only above v0.5.0p3 for all hello-* arduino devices. For older firmwares, the async_io would be disabled automatically
  • The DXLStatusThread of robot class is now separated into two threads: DXLHeadStatusThread and DXLEndofArmStatusThread (Both threads run at 15Hz).
  • Now the robot monitor, trace, sentry, and collision manager handles stepping is moved out of the NonDXLStatusThread. Instead, it is moved to a new separate thread called SystemMonitorThread is used to step these handles, which also runs at 25Hz.
  • The Robot class can be startup() with the optional parameters to turn off some threads to save system resources.
  • Added status_aux pull status RPCs feature for all the devices. motor_sync_cnt and motor_sync_queues status messages are populated with AUX pull status
  • Now the RPC transactions queues is deprecated, instead do_pull_transaction_vX() and do_push_transaction_vX() methods are used from the SyncTransactionHandler.
  • Asynchournous RPC transactions are handled by AsyncTransactionHandler that create analougus async methods to the one present in SyncTransactionHandler.

0.4.8 - Sept 14, 2022

This is the initial production release that supports the Stretch RE2 (Mitski batch).

  • This includes the robot_params_RE2V0.py which are the initial robot settings for the RE2 version of the product.

  • It introduces the PrismaticJoint class which consolidates the common Arm and Lift functionality.

  • It changes the units for guarded contact motion from approximate Newtons (suffix _N) to effort_pct - the pecentage [-100,100] of maximum current (A) that a joint should stop at. This change requires RE1 users to migrate their code and robot parameters. See the forum post for more details.

  • It introduces mkdocs.yaml to support serving the repository documenation via MKDocs.

It introduces several new features and fixes several bugs, notably:

0.3.4 - July 20, 2022

Release to add minor features and fix minor bugs:

0.3.0 - June 21, 2022

This release moves Stretch Body to use a new parameter management format. This change will require older systems to migrate their parameters to the new format. For systems that haven't yet migrated, Stretch Body will exit with a warning that they must migrate first by running RE1_migrate_params.py. See the forum post for more details.

Features:

0.2.1 - January 6, 2022

Release to fix two bugs:

0.2.0 - December 28, 2021

This release brings support for waypoint trajectories into master. Support for waypoint trajectories was built up over the last year in the feature/waypoint_trajectories_py3 branch, however, this branch couldn't be merged because the new functionality had flaky performance due to subtle bugs. This branch also attempted to introduce support for Python3 and timestamp synchronization. Support for Python3 and other features were merged in v0.1.0. The remaining features from this branch have been broken into 7 PRs, each targeting a specific device and squashing any previous bugs through functional and performance testing. They are:

This release also fixes several bugs. They are:

Testing:

Each PR in this release was tested on multiple robots, but was primarily tested on G2, on Python 2.7/Ubuntu 18.04.

0.1.11 - October 4, 2021

This release gives Stretch Body the ability to support multiple firmware protocols, which at this moment is P0 and P1 firmware. P1 firmware builds on P0 to add waypoint trajectory support and a refactoring of controller functionality into classes. Additionally, this PR fixes how Dynamixel motors calculate velocity from encoder ticks.

Features:

Bugfixes:

0.1.10 - September 23, 2021

This release introduces 3 features:

  1. #68 and #95: Introduces two new Jupyter notebooks that can be used to interactively explore working with Stretch. See forum post for details.
  2. #94: Introduces Github Action files and docs. Will be enabled in the future to automatically test PRs.
  3. #66: Improves the statistics captured on Stretch Body's performance. Will be used to measure improvements to Stretch Body's communication with low level devices.

Bugfixes:

  1. #90: Patches a bug where triggering pimu.trigger_motor_sync() at to high of a rate puts the robot into Runstop mode.
  2. #101: Fixes bugs on startup of Dynamixel devices, ensures status is populated on startup of all devices, and add bool to robot.startup()

Testing:

All unit tests run on Python 2.7.17 on Ubuntu 18.04 on a Stretch RE1.

0.1.6 - August 26, 2021

This release introduces these features:

  • Revised soft limits and collision avoidance
  • Added velocity interfaces for arm and lift

Bugfixes:

  • Better error handling for DXL servos and their tools
  • Fix bug where dxls maintain previous motion profile

0.1.4 - July 20, 2021

This release introduces six features and several bugfixes. The features are:

Bugfixes:

0.1.0 - May 30, 2021

This release introduces eight major features and several bugfixes. The features are:

  1. Python param management
  2. Configurable baud rate/GroupRead on Dynamixels
  3. Pluggable end effector tools
  4. Pluggable end effector support in Xbox Teleop
  5. Python logging
  6. Soft motion limit
  7. Self collision management
  8. Unit testing framework - as part of each PR

Bugfixes:

  1. Multiturn enable_pos bug (#12) & unit tests
  2. Misc bugs
  3. Other - as part of the features

Testing:

All unit tests run on Python 2.7.17 on Ubuntu 18.04 on a Stretch RE1.

Changelog for Stretch Factory

The changes between releases of Stretch Factory is documented here.

0.5.4 - Feburary 7, 2024

This release adds a new tool REx_xrandr_display.py that allows users to programmatically change and revert the display resolution.

Example Usage:

$ REx_xrandr_display.py --current
For use with S T R E T C H (R) from Hello Robot Inc.
---------------------------------------------------------------------

Display Name:       HDMI-1
Display Resolution: 1920x1080x60.00
$ REx_xrandr_display.py --set-720p
For use with S T R E T C H (R) from Hello Robot Inc.
---------------------------------------------------------------------

$ REx_xrandr_display.py --current
For use with S T R E T C H (R) from Hello Robot Inc.
---------------------------------------------------------------------

Display Name:       HDMI-1
Display Resolution: 1280x720x60.00
$ REx_xrandr_display.py --revert
For use with S T R E T C H (R) from Hello Robot Inc.
---------------------------------------------------------------------

0.5.3 - Feburary 3, 2024

This release adds a new tool REx_camera_set_symlink.py that allows the user create a USB symlink to any USB camera that is plugged into the robot. The symlink is assigned by generating an Udev rule that records the following USB attributes of the plugged in camera: [idVendor,idProduct,serial].

Example Usage: By addressing a camera port:

$ REx_camera_set_symlink.py --port /dev/video6 --symlink hello-new-camera
For use with S T R E T C H (R) from Hello Robot Inc.
---------------------------------------------------------------------

Linking usb port: /dev/video6 to symlink port: /dev/hello-new-camera
Successfully generated udev rule at path: /etc/udev/rules.d/86-hello-new-camera.rules
Successfully Identified device at port: /dev/hello-new-camera

0.5.2 - Feburary 2, 2024

There was a bug with the firmware updater tool, instead of before looking for the orginal dev/ttyACM port of the device when it is in bootloader state, it's been changed to look for the arduino zero device and use the associated dev/ttyACM port instead.

0.5.0 - January 24, 2024

This release introduces the concept of "stepper types" to the Stretch Factory package. In P5 firmware, we introduced the ability for the uC on a stepper PCB to know which kind of stepper it is (i.e. arm, lift, right wheel, left wheel). In this release, the firmware updater checks if the stepper already knows its stepper type before erasing the flash memory through a new firmware flash. It saves the stepper_type, flashes the new firmware, then writes the stepper_type to flash memory. This release also introduces the new tool called REx_stepper_type.py tool for Hello Robot support members to be able to assist Stretch users in flashing their stepper_type bits.

There's a couple benefits to each stepper knowing its stepper_type at the firmware level:

  1. The wheels on newer Stretch robots can take advantage of better runstop by actually disconnecting the H bridge from the motor. This makes it easier to backdrive the robot around by tilting the robot and pushing it like a vacuum cleaner.
  2. The system check tool can verify that the UDEV rules for each stepper agree with the stepper_type of the stepper. In case the UDEV rules get corrupted, this provides an additional level of redundancy.

0.4.13 - December 13, 2023

This release eliminates a failure case in the firmware updater where Hello devices are left in a soft-bricked (i.e. can be hardware reset) state from a failed firmware update attempt. The fix has been tested with 800+ firmware flashes on a variety of Stretch robots.

0.3.11 - January 17, 2023

This release adds the tool REx_discover_hello_devices.py. This tool will enable users to find and map all the robot-specific USB devices (i.e. Lift, Arm, Left wheel, Right wheel, Head, Wrist/End-of-arm) and assign them to the robot by updating UDEV rules and stretch configuration files. This tool would require Stretch Body v0.4.11 and above.

0.3.10 - January 16, 2023

This release (and previous releases since 0.3.0) makes a number of small improvements to the following tools:

  • REx_dynamixel_jog.py - Jog tool can put dxl in multi-turn, position, pwm, and velocity modes
  • REx_calibrate_range.py - Add error checking for failed homing
  • REx_calibrate_guarded_contact.py - Support RE1 robots
  • REx_base_calibrate_imu_collect.py - Fix bug

There are also organization changes to the docs and READMEs.

0.3.0 - September 1, 2022

This release moves Stretch Factory to use a new naming scheme for its tools. The prefix REx is now used instead of RE1. This semantic change is in anticipation of the release of future versions of Stretch (e.g. RE2).

In addition, two new tools are introduced:

  • REx_calibrate_guarded_contact.py: Measure the efforts required to move througout the joint workspace and save contact thresholds to Configuration YAML
  • REx_calibrate_range.py: Measure the range of motion of a joint and save to the Configuration YAML.

These new tools move the the effort_pct contact model as supported by Stretch Body 0.3

Additional features;

0.2.0 - June 21, 2022

Adds new parameter management format. This change will require older systems to migrate their parameters to the new format. For systems that haven't yet migrated, Stretch Body will exit with a warning that they must migrate first by running RE1_migrate_params.py. See the forum post for more details.

0.1.0

  • Introduce the RE1_firmware_update.py tool

0.0.2 - May 13, 2020

This is the initial release of Stretch Factory. It includes tools to support debug and testing of the Stretch Hardware.