Hey all,
Here’s a quick round-up of some of the new software that’s been released for Stretch these past few weeks.
Firebase networking for the web interface
When you call your robot using the web interface, you’re using a protocol called WebRTC. This streams the robot’s cameras, microphone, and carries button presses (movement commands) back to the robot. WebRTC connects the two “peers”, your browser and the robot, using a process called signaling. We’ve supported local signaling for a while, which is why Ngrok (i.e. tunneling) is required when calling your robot over the internet. We’re introducing a new method of signaling, based on Google’s Firebase; specifically using Firebase’s realtime database feature. This will enable better error handling and connectivity with the robot, and eliminates the need for a dedicated signaling server if you’re looking to use Stretch in long-term deployments.
Implementation details can be found in the source code. The default is still local signaling. If you’re interested in the Firebase signaling, please reach out!
New login & homepages in the web interface
In the same vein, we’ve introduce two new pages to the web interface that should make it easier to deploy the web interface safely to the internet. The Login page uses Firebase Auth to authenticate users against a database of invited users. The Homepage allows the users to call their robots using the aforementioned signaling approach. Additionally, if a robot is already in use by another operator, it appears as “occupied” in the homepage.
These pages should be considered “alpha” code (i.e. work in-progress). Details can be found in the source code.
Better OS upgrades
When using Stretch Install to upgrade to a new Stretch Operating System, Harish at UIUC discovered some bugs around file permissions and parameter migration. Thanks to Harish’s work to report the bugs and propose fixes, these edge cases are now fixed. In particular, we found a very difficult bug around UNIX file permissions where calibration data copied off a USB can sometimes be missing the READ permission. Therefore, files don’t get copied and other parts of the upgrade fail. Big props to Harish for working on this! His code contributions can be found here.
Shoulder CAD
CAD files for the Stretch shoulder can be found on the tool share. Drawing of the hardware mounting points have been added to the Extending Stretch with Additional Hardware guide.
Fix trajectory mode in ROS2
Stretch’s ROS2 driver has a “trajectory mode” that can track waypoint trajectory splines. In this fix, we’ve fixed a bug where the hardware would start to track the trajectory, but fail within the first second. Details can be found in the PR.
For examples on using trajectory mode, check out the unit tests here.
Tutorial for debugging in ROS2
The new Debugging in ROS tutorial explains how to use GDB and the VS Code ROS extension to debug ROS2 nodes in the IDE. Furthermore, it shows how to run unit tests through Colcon’s testing framework.
Fix for action server timeouts in ROS2
Stretch’s ROS2 action server enables motion commands for each of the robot’s joints to be initiated and monitored to completion programmatically. For the wrist pitch joint in particular, there was a bug around the success criteria for whether the joint had completed its motion, and in turn, the action server would report that the joint failed the goal. Details on the fix here.
Get the fix by updating your ROS workspace.
Many small fixes in Stretch’s Python libraries
See each PR for details:
- Added docstrings to enable_sync_mode and disable_sync_mode to explain what they do. by hello-robot-shehab · Pull Request #363 · hello-robot/stretch_body · GitHub
- base.status['effort'] is now updated in __update_status() by hello-robot-shehab · Pull Request #371 · hello-robot/stretch_body · GitHub
- Added a null-check on the output of get_wheel_segments() to avoid an unhandled exception. by hello-robot-shehab · Pull Request #372 · hello-robot/stretch_body · GitHub
- Base::stop_trajectory() now resets the wheel positions to allow follow_trajectory() to be called again. by hello-robot-shehab · Pull Request #369 · hello-robot/stretch_body · GitHub
- Disallow 1M baud for dxl_set_baud CLI by hello-binit · Pull Request #101 · hello-robot/stretch_factory · GitHub
Get the fixes by updating your Python libraries.
Many small fixes in ROS2 packages
See each PR for details:
- Update manipulation planning gripper links mapping by hello-fazil · Pull Request #195 · hello-robot/stretch_ros2 · GitHub
- Set QT Plugin path from Streth Driver launch by hello-fazil · Pull Request #191 · hello-robot/stretch_ros2 · GitHub
- Default to uncalibrated urdf / params by hello-binit · Pull Request #186 · hello-robot/stretch_ros2 · GitHub
- Remove Unused Teleop Type Param in Mapping Launches by hello-vinitha · Pull Request #183 · hello-robot/stretch_ros2 · GitHub
- Remove Teleop Twist Joystick in Mapping Launches by hello-fazil · Pull Request #165 · hello-robot/stretch_ros2 · GitHub
Get the fixes by updating your ROS workspace.