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 introducerobot.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 paramsuse_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
andmotor_sync_queues
status messages are populated with AUX pull status - Now the RPC transactions queues is deprecated, instead
do_pull_transaction_vX()
anddo_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:
- Adds
wait_until_at_setpoint()
to the Arm and Lift classes - Adds use of argparse with all tools
- Moves Robot thread rates to YAML
- Cleans up the splined trajectory interface, enables velocity controlled splined trajectories for the Dynamixels
- Flags a warning for users incorrectly setting the homing offset on DXL servos
0.3.4 - July 20, 2022¶
Release to add minor features and fix minor bugs:
- Add a
range_pad_t
parameter to allow for padding of hardstops for joint homing - Clean up tools and warnings to more consistent and legible #140
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:
- Fix goto commands in the head jog tool #128 - Fixes goto commands in the head jog tool
- Fix port_handler location #121 - Fixes dxl buffer resetting under a serial communication failure
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:
- Introduce waypoint trajectory RPCs #98
- Add individual device threading #105
- Trajectory management classes #106
- Lift and arm trajectories #110
- Dynamixel trajectories #113
- Mobile base trajectories #114
- Whole body trajectories #115
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:
- #68 and #95: Introduces two new Jupyter notebooks that can be used to interactively explore working with Stretch. See forum post for details.
- #94: Introduces Github Action files and docs. Will be enabled in the future to automatically test PRs.
- #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:
- #90: Patches a bug where triggering
pimu.trigger_motor_sync()
at to high of a rate puts the robot into Runstop mode. - #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:
- Robot self-collision model and tutorial
- Add ability to runstop individual DXL servos
- Merged py2 and py3 tools
- Added instructions for developing/testing Stretch Body
- Collision avoidance tutorial
- Improve realsense visualizer
Bugfixes:
0.1.0 - May 30, 2021¶
This release introduces eight major features and several bugfixes. The features are:
- Python param management
- Configurable baud rate/GroupRead on Dynamixels
- Pluggable end effector tools
- Pluggable end effector support in Xbox Teleop
- Python logging
- Soft motion limit
- Self collision management
- Unit testing framework - as part of each PR
Bugfixes:
- Multiturn enable_pos bug (#12) & unit tests
- Misc bugs
- 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:
- 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.
- 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 modesREx_calibrate_range.py
- Add error checking for failed homingREx_calibrate_guarded_contact.py
- Support RE1 robotsREx_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.