May 5, 2025
For this lab, we developed a tool to show how to program the Stretch robot. While our project is not necessarily focused on intricate object manipulation, one of the key aspects of our work is enabling Stretch to assist with patient interaction tasks, here by moving its arm and base to enable range of motion assessments. This implies that the robot needs to be able to reach repeatably and safely a variety of specific locations around the patient.
In order to demonstrate this, we created a demonstration environment using a publisher and listener node with a custom "save_pose" topic. In the demonstration phase, we teleoperate Stretch to a desired pose—e.g., position the arm to a specified height and extension relative to the patient—and send a ROS command publishing the pose name and frame to "save_pose". The listener node will compute the correct transform and save it to a JSON file.
For replaying saved poses, we used a Python script that accepts one or more names of saved poses as an argument. We retrieve the corresponding transforms from the JSON file, transform them to the "base_link" frame if necessary, and have the robot move its base, lift arm, and extension accordingly to replicate the demonstrated pose.
This approach is very relevant to our project by allowing us to rapidly prototype and experiment with patient interaction workflows by having Stretch execute poses that allow clinical range of motion activities. By having the robot capable of moving through repeatable, safe positions relative to a patient, we can better determine how Stretch can be utilized to aid clinicians in executing rehabilitation exercises or assessments. Further, this system enables non-technical users (therapists, for example) to set up Stretch into effective configurations without low-level coding or precise manual setup each time.