The Stretch robot comes with a set of command line tools that are helpful for introspection during general use or while troubleshooting issues. This page provides an overview of these tools. If you like, visit the [stretch_body](https://github.com/hello-robot/stretch_body/tree/master/tools/bin) repository to have a look under the hood.
You can execute these commands from anywhere in the terminal. We recommend you to execute these commands as we follow each one of them. You can also find the description for the utility each tool provides by passing the optional '-h' flag along with the tool name in the terminal. For example, from anywhere in the terminal execute:
```console
You can execute these commands from anywhere in the terminal. We recommend you execute these commands as we follow each one of them. You can also find the description for the utility each tool provides by passing the optional '-h' flag along with the tool name in the terminal. For example, from anywhere in the terminal execute:
```{.bash .shell-prompt}
stretch_about.py -h
```
@ -21,23 +21,23 @@ This script prints the version information for various software packages on the
This tool prints the Stretch parameters to the console.
### stretch_robot_monitor.py
This tool runs the Robot Monitor and prints to console.
This tool runs the Robot Monitor and prints to the console.
### stretch_robot_urdf_visualizer.py
This tool allows you to visualize robot URDF.
## Introspection
### stretch_robot_system_check.py
This tool checks that all robot hardware is present and reporting sane values.
This tool checks that all robot hardware is present and is reporting sane values.
### stretch_robot_battery_check.py
This is a tool to print battery state to console.
This is a tool to print the battery state to the console.
### stretch_hardware_echo.py
This tool echoes the robot and computer hardware details to the console.
### stretch_robot_dynamixel_reboot.py
This tool reboots all Dynamixel servos on robot.
This tool reboots all Dynamixel servos on the robot.
### stretch_pimu_scope.py
This tool allows you to visualize Pimu (Power+IMU) board data with an oscilloscope. Pass the '-h' flag along with the command to see optional arguments.
@ -59,7 +59,7 @@ This tool allows you to test the audio system.
This tool calibrates the robot by finding zeros for all robot joints.
### stretch_gripper_home.py
This tool calibrates the gripper position by closing until motion stops.
This tool calibrates the gripper position by closing until the motion stops.
### stretch_wrist_yaw_home.py
This tool calibrates the wrist_yaw position by moving to both hardstops.
@ -72,7 +72,7 @@ This tool calibrates the lift position by moving to the upper hardstop.
## Jogging Joints
### stretch_robot_jog.py
This tool prints all robot data to console.
This tool prints all robot data to the console.
### stretch_gripper_jog.py
This tool allows you to jog the griper from the keyboard.
@ -97,7 +97,7 @@ This tool allows you to jog the head from the keyboard.
This tool allows you to command and query the Wacc (Wrist Accelerometer) board from the keyboard.
### stretch_pimu_jog.py
This tool allows you to comnmand and query the Pimu (Power+IMU) board from the keyboard.
This tool allows you to command and query the Pimu (Power+IMU) board from the keyboard.
### stretch_rp_lidar_jog.py
This is a tool to control the RP-Lidar. Pass the '-h' flag along with the command to see optional arguments.
@ -107,10 +107,10 @@ This tool allows you to test out splined trajectories on the various joint from
## Teleoperation
### stretch_robot_stow.py
This tool moves robot to stow position.
This tool moves the robot to stow position.
### stretch_robot_keyboard_teleop.py
This tool allows you to control the robot base, lift, arm, head, and tool from the keyboard.
### stretch_xbox_controller_teleop.py
This tool allows you to jog the robot from an XBox Controller.
This tool allows you to jog the robot from an Xbox Controller.
@ -72,7 +72,8 @@ Stretch comes ready to run out of the box. The Xbox Teleoperation demo will let
![](./images/xbox.png)
**Note**: You will find the USB Dongle already plugged into the USB port of the base trunk.
!!! note
You will find the USB Dongle already plugged into the USB port of the base trunk.
To start the demo after unboxing:
@ -80,7 +81,9 @@ To start the demo after unboxing:
* Wait for about 45 seconds. You will hear the Ubuntu startup sound, followed by two beeps (indicating the demo is running).
* Hit the Connect button on the controller. The upper two LEDs of the ring will illuminate.
* Hit the Home Robot button. Stretch will go through its homing calibration routine.
* **Note**: make sure the space around the robot is clear before running the Home function
!!! warning
Make sure the space around the robot is clear before running the Home function
You're ready to go! A few things to try:
@ -111,10 +114,11 @@ Log in to the robot computer. The default user credentials came in the box with
Python is the easiest way to begin writing code for the robot. This section will give you a quick look at Stretch Body, which is the low-level Python interface to the robot. Detailed information on the [Stretch Body Interface](../stretch_body/README.md) can be found here.
**NOTE**: Stretch is configured to run the XBox Controller demo in the background at startup. To run your own code you'll need to kill this process so that it doesn't contend with your code.
!!! note
Stretch is configured to run the Xbox Controller demo in the background at startup. To run your own code you'll need to kill this process so that it doesn't contend with your code.
```{.bash .shell-prompt}
$ pkill -f stretch_xbox*
pkill -f stretch_xbox*
```
While you're at it, disable this autoboot feature. You can always turn it back on later.
@ -126,26 +130,24 @@ Search for 'Startup' from Ubuntu Activities. Uncheck the box for 'hello_robot_xb
Now open up a Terminal. From the command line, first, verify that that all of the hardware is present and happy
```{.bash .shell-prompt}
$ stretch_robot_system_check.py
stretch_robot_system_check.py
```
You may see a few joints reported in red because they haven't yet been calibrated. If so, home the robot
```{.bash .shell-prompt}
$ stretch_robot_home.py
stretch_robot_home.py
```
Once the robot has homed, let's write some quick test code:
```{.bash .shell-prompt}
$ ipython
Python 2.7.17 (default, Apr 15 2020, 17:20:14)
...
ipython
```
Now let's move the robot around using the Robot API. Try typing in these interactive commands at the iPython prompt:
```python
```{.python .no-copy}
import stretch_body.robot
robot=stretch_body.robot.Robot()
robot.startup()
@ -182,7 +184,7 @@ robot.stop()
Finally, we recommend that you change the login credentials for the default user, hello-robot.
```{.bash .shell-prompt}
$ sudo passwd hello-robot
sudo passwd hello-robot
```
If you'd like to set up a new user account, check out the [Stretch Installation Guide](https://github.com/hello-robot/stretch_install/blob/master/README.md). In a lab setting, it's useful for lab members to have their own user accounts to run experiments.
@ -94,7 +94,8 @@ The [Stretch Unpowered Best Practices Video](https://youtu.be/mQdOGEksdYM) provi
* Manually moving the head and wrist. They will move but they want to go at their own speed.
* The lift will slowly descend when the robot is powered off. If the arm is retracted it may come to rest the tool on the base. If desired to hold the arm up when un-powered, the provided 'clip-clamp' can be clipped onto the mast below the shoulder to support it.
**NOTE**: The Stretch 2 lift descends faster than the Stretch RE1. For Stretch 2 we recommend always attaching the clip-clamp before powering down the NUC computer
!!! note
The Stretch 2 lift descends faster than the Stretch RE1. For Stretch 2 we recommend always attaching the clip-clamp before powering down the NUC computer
**Things that can hurt the robot**:
@ -121,6 +122,7 @@ Please review the [Battery Maintenance Guide](https://docs.hello-robot.com/0.2/s
## Get Plugged In
Let's get plugged in.
* Power up the robot
* Plug in a mouse, keyboard and HDMI monitor to the robot trunk
* Plug in the battery charger
@ -132,10 +134,11 @@ Log in to the robot computer. The default user credentials came in the box with
Python is the easiest way to begin writing code for the robot. This section will give you a quick look at Stretch Body, which is the low-level Python interface to the robot. Detailed information on the [Stretch Body Interface](../stretch_body/README.md) can be found here.
**NOTE**: Stretch is configured to run the Xbox Controller demo in the background at startup. To run your own code you'll need to kill this process so that it doesn't contend with your code.
!!! note
Stretch is configured to run the Xbox Controller demo in the background at startup. To run your own code you'll need to kill this process so that it doesn't contend with your code.
```{.bash .shell-prompt}
$ pkill -f stretch_xbox*
pkill -f stretch_xbox*
```
While you're at it, disable this autoboot feature. You can always turn it back on later.
@ -147,26 +150,24 @@ Search for 'Startup' from Ubuntu Activities. Uncheck the box for 'hello_robot_xb
Now open up a Terminal. From the command line, first, verify that all of the hardware is present and happy
```{.bash .shell-prompt}
$ stretch_robot_system_check.py
stretch_robot_system_check.py
```
You may see a few joints reported in red because they haven't yet been calibrated. If so, home the robot
```{.bash .shell-prompt}
$ stretch_robot_home.py
stretch_robot_home.py
```
Once the robot has homed, let's write some quick test code:
```{.bash .shell-prompt}
$ ipython
Python 3.8.10 (default, Jun 22 2022, 20:18:18)
...
ipython
```
Now let's move the robot around using the [Stretch Body Robot API](https://github.com/hello-robot/stretch_body/blob/master/body/stretch_body/robot.py). Try typing in these interactive commands at the iPython prompt:
Now let's move the robot around using the [Stretch Body Robot API](https://docs.hello-robot.com/0.2/stretch-tutorials/stretch_body/tutorial_stretch_body_api/). Try typing in these interactive commands in the iPython prompt:
```python
```{.python .no-copy}
>>$ ipython
...
import stretch_body.robot
@ -205,7 +206,7 @@ robot.stop()
Finally, we recommend that you change the login credentials for the default user, hello-robot.
```{.bash .shell-prompt}
$ sudo passwd hello-robot
sudo passwd hello-robot
```
If you'd like to set up a new user account, check out the [Stretch Installation Guide](https://github.com/hello-robot/stretch_install/blob/master/README.md). In a lab setting, it's useful for lab members to have their own user accounts to run experiments.
The Stretch robots are potentially dangerous machines with safety hazards. **If improperly used they can cause injury or death.**
* **All users must carefully read the following safety information prior to using the robot.**
* **All users must carefully read the following safety information before using the robot.**
* Anyone near the robot who has not read this safety information must be closely supervised at all times and made aware that the robot could be dangerous.
* Only use the robot after inspecting the surrounding environment for potential hazards.
@ -16,29 +16,28 @@ The Stretch robots are potentially dangerous machines with safety hazards. **If
As described later in this document, we have designed Stretch to be safer than previous commercially-available human-scale mobile manipulators, so that researchers can explore the future of mobile manipulation. For example, we have made it smaller and lighter weight with backdrivable torque-sensing joints that can stop when they detect contact.
Nonetheless, Stretch is a research robot that can be dangerous. It is essential that researchers use Stretch carefully to avoid damage, injury, or death. Here, we list a number of safety hazards that researchers must consider prior to use and during use of Stretch.
Nonetheless, Stretch is a research robot that can be dangerous. Researchers must use Stretch carefully to avoid damage, injury, or death. Here, we list several safety hazards that researchers must consider before and while using Stretch.
### Stretch Can Put People And Animals At Risk
As described in more detail later, Stretch can put people and animals at risk. People and animals near the robot must be closely supervised at all times. At all times, an experienced researcher must carefully monitor the robot and be prepared to stop it. Any people near the robot must be made aware that the robot could be dangerous. Prior to any use of the robot near people or animals, researchers must carefully assess and minimize risks.
As described in more detail later, Stretch can put people and animals at risk. People and animals near the robot must be closely supervised at all times. At all times, an experienced researcher must carefully monitor the robot and be prepared to stop it. Any people near the robot must be made aware that the robot could be dangerous. Before any use of the robot near people or animals, researchers must carefully assess and minimize risks.
**Researchers who use the robot near children, animals, vulnerable adults, or other people do so at their own risk. Researchers must take appropriate precautions and obtain required approvals from their organizations.**
**Researchers who use the robot near children, animals, vulnerable adults, or other people do so at their own risk. Researchers must take appropriate precautions and obtain the required approvals from their organizations.**
### Stretch Can Topple Onto A Person
The robot may drive off stairs, push or pull itself over with its telescoping arm, fall over while attempting to traverse a threshold, or encounter obstacles that cause it to fall on or otherwise collide with people, causing injury.
The robot may drive off stairs, push or pull itself over with its telescoping arm, fall over while attempting to traverse a threshold or encounter obstacles that cause it to fall on or otherwise collide with people, causing injury.
**Operate the robot only on flat surfaces away from stairs or other obstacles that may cause it to topple, and do not allow the robot to push or pull itself over.**
### Stretch Should Not Be Lifted By A Single Person
Stretch with the standard gripper weighs about 23Kg (50.5lb), so two or more people should lift and carry the robot. A single person can move the robot around by enabling the runstop button, tilting it over, and rolling it on flat ground.
Stretch with the standard gripper weighs about 23 kg (50.5 lb), so two or more people should lift and carry the robot. A single person can move the robot around by enabling the runstop button, tilting it over, and rolling it on flat ground.
**At least two people should lift and carry the robot when needed.**
### Stretch Can Cause Lacerations
The robot wrist and tool have sharp edges that can cause lacerations or punctures to skin or the eyes.
The robot's wrist and tool have sharp edges that can cause lacerations or punctures to the skin or the eyes.
**Operate the robot away from eyes and other sensitive body parts.**
@ -46,7 +45,7 @@ The robot wrist and tool have sharp edges that can cause lacerations or puncture
The robot has moving joints that can trap, crush or pinch hands, fingers, or other body parts. The robot could also injure a person or animal by driving over a body part.
**Keep body parts away from trap, crush, and pinch points during robot motion, including underneath the wheels.**
**Keep body parts away from the trap, crush, and pinch points during robot motion, including underneath the wheels.**
### Stretch Can Entrap Loose Clothing Or Hair
@ -76,7 +75,7 @@ Stretch is a versatile robot capable of performing many actions, including actio
Stretch is an open platform with user-modifiable and user-extensible hardware and software. User changes to the hardware or software can entail serious risks. For example, when shipped, the robot has conservative settings that restrict its speed and the forces it applies to reduce the risks associated with the robot. By modifying the robot, users could enable the robot to move at unsafe speeds and apply unsafe forces. As another example, improper electrical connections could result in a fire.
**Researchers who choose to modify or extend the robot’s hardware or software do so at their own risk, and should be careful to understand the implications of their modifications or extensions. Changes to the robot could result in dangerous situations that cause injury or death.**
**Researchers who choose to modify or extend the robot’s hardware or software do so at their own risk and should be careful to understand the implications of their modifications or extensions. Changes to the robot could result in dangerous situations that cause injury or death.**
## Additional Risks
@ -107,28 +106,23 @@ Stretch is a complex device that includes many mechanical, electrical, and compu
We have considered safety from the outset in the design of Stretch.
* **Runstop**: The illuminated runstop button on Stretch’s head can be used to pause operation of the four primary joints (base, lift, and arm) of the robot when it is in motion.
* **Lightweight design:** The overall mass of Stretch with the standard gripper is 23Kg (50.5lb), and the majority of the mass is in the base. The carbon fiber arm and aluminum mast make for a remarkably lightweight upper body. While this reduces the risk of crushing, crushing injury can still occur and should be carefully monitored.
* **Runstop**: The illuminated runstop button on Stretch’s head can be used to pause the operation of the four primary joints (base, lift, and arm) of the robot when it is in motion.
* **Lightweight design:** The overall mass of Stretch with the standard gripper is 23Kg (50.5lb), and the majority of the mass is in the base. The carbon fiber arm and aluminum mast make for a remarkably lightweight upper body. While this reduces the risk of crushing, crushing injuries can still occur and should be carefully monitored.
* **Gravity friendly**: Due to Stretch’s design, its actuators don't have to counteract gravity on a large lever arm. As a result, the motors and gearboxes are lower torque and lower weight than a conventional mobile manipulator with a comparable reach, avoiding the often dangerously strong shoulder joints of typical robot arms.
* **Low gear ratio**: The primary joints of Stretch (base, lift, and arm) have low gear-ratios (approx 5:1), allowing for backdriving of joints when powered off. A low gear-ratio also reduces the effective inertia of each joint, limiting the impacted force during undesired contacts with people and the environment.
* **Low gear ratio**: The primary joints of Stretch (base, lift, and arm) have low gear-ratios (approx 5:1), allowing for backdriving of joints when powered off. A low gear-ratio also reduces the effective inertia of each joint, limiting the impacted force during undesired contact with people and the environment.
* **Contact Sensitivity**: The four primary joints of Stretch (base, lift, and arm) have contact sensitivity. We measure motor currents to estimate contact forces. Because Stretch is a low gear-ratio robot, current sensing provides a fairly sensitive measure of contact forces.
* **Firmware limits**: Motor torques are limited at the lowest level of the firmware to configured bounds.
* **Velocity limits**: Fast motions of the base are restricted when the arm is up high and the tool is outside the base footprint. This limits the likelihood of toppling or snagging the tool during base motion.
* **Tilt detection**: The robot can detect when its body is tilted beyond a safe threshold. The robot can be configured to trigger a runstop event during an over-tilt event.
* **Tilt detection**: The robot can detect when its body is tilted beyond a safe threshold. The robot can be configured to trigger a runstop event during an over-tilt event.
## Safety Markings
Stretch has the following safety markings:
Top of shoulder, indicating potential pinch point between rollers and mast.
Top of the shoulder, indicating potential pinch point between rollers and mast.
![](./images/hand_crush_rs.png)
Top of base, indicating potential pinch point between arm and base.
Top of the base, indicating potential pinch point between arm and base.
![](./images/hand_crush2_rs.png)
@ -138,7 +132,8 @@ Top of base, indicating potential pinch point between arm and base.
The runstop allows the user to pause the motion of the four primary actuators (base, lift, and arm) by tapping the illuminated button on the head. An experienced operator should always keep the runstop within reach, allowing them to stop the motion of the robot if it is deemed unsafe.
**NOTE: The runstop is not equivalent to an Emergency Stop found on industrial equipment and no safety guarantees are made by its function**.
!!! warning
The runstop is not equivalent to an Emergency Stop found on industrial equipment and no safety guarantees are made by its function.
When the runstop is enabled, these actuators are in a ‘Safety Mode’ that inhibits the motion controller at the firmware level. Disabling the runstop allows normal operation to resume.
@ -176,13 +171,14 @@ The Stretch robot is a piece of laboratory equipment. As such, its structure has
### Toppling
Stretch is a relatively lightweight robot. In some kinematic configurations a high center of gravity can make it prone to toppling. Toppling can occur when:
Stretch is a relatively lightweight robot. In some kinematic configurations, a high center of gravity can make it prone to toppling. Toppling can occur when:
* The mobile base is moving at moderate or fast speed and hits a bump, threshold, or other change in floor property.
* The arm is raised up high and pushes or pulls on the environment with sufficient force.
* The robot drives over a drop-off such as a stair or curb.
* The mobile base is moving at a moderate or fast speed and hits a bump, threshold, or other change in floor property.
* The arm is raised high and pushes or pulls on the environment with sufficient force.
* The robot drives over a drop-off such as a stair or a curb.
**NOTE: While Stretch has cliff sensors, they do not currently inhibit motion of the base. During typical use, the robot will not attempt to stop itself at a cliff, and can fall down stairs and hurt itself or a person.**
!!! warning
While Stretch has cliff sensors, they do not currently inhibit motion of the base. During typical use, the robot will not attempt to stop itself at a cliff, and can fall down stairs and hurt itself or a person.
@ -31,7 +31,7 @@ If more than one instance of Stretch Body's [Robot](https://github.com/hello-rob
These errors can appear as
```
```{.bash .no-copy}
Transport RX Error on RPC_ACK_SEND_BLOCK_MORE False 0 102
---- Debug Exception
--------------- New RPC -------------------------
@ -41,7 +41,7 @@ Framer sent RPC_START_NEW_RPC
or as
```
```{.bash .no-copy}
IOError(None): None
...
```
@ -49,7 +49,7 @@ IOError(None): None
To check if an instance of [Robot](https://github.com/hello-robot/stretch_body/blob/master/body/stretch_body/robot.py) is already instantiated, you may use the Unix [top](https://www.unixtutorial.org/commands/top) command to monitor active processes. You may use the Unix [pkill](https://linuxize.com/post/pkill-command-in-linux/) command to end the background instance of Robot.
```{.bash .shell-prompt}
$ pkill -9 python
pkill -9 python
```
As shipped, Stretch launches [stretch_xbox_controller_teleop.py](https://github.com/hello-robot/stretch_body/blob/master/tools/bin/stretch_xbox_controller_teleop.py) upon boot. It is necessary to turn off this automatic launch feature, otherwise, your own Robot instance will conflict with this script. Additionally, if you are logged into multiple accounts, a Robot instance may be active in another user account.
@ -16,13 +16,13 @@ This is the recommended approach if you are running Windows or MacOS. This metho
While Stretch is tethered to the monitor, keyboard, and mouse setup, first verify that the robot is connected to the wireless network then install Vino VNC server using the following command:
```{.bash .shell-prompt}
$ sudo apt install vino
sudo apt install vino
```
Go to System Settings. Select the Sharing tab and turn it on then, turn on Screen Sharing and choose a password. If you plan to connect to the robot from a Windows or MacOS machine, then open a terminal and run the following command.
```{.bash .shell-prompt}
$ sudo gsettings set org.gnome.Vino require-encryption false
sudo gsettings set org.gnome.Vino require-encryption false
```
Finally, we need the robot's IP address, username, and password. Open a terminal and run `ifconfig`, which will print out the network information of the machine. In the wireless section (typically named wlp2s0), look for something that looks like "inet 10.0.0.15". The four numbers represent the IP address of the robot on the local network. The robot's default username and password are printed on papers that came in the tools box alongside the robot.
@ -44,7 +44,7 @@ The first step is to identify the robot's IP address on the local network. While
To SSH into the robot, run the following. It will require the password and may ask you to add the robot to the known hosts.
```{.bash .shell-prompt}
$ ssh -X username@ip-address
ssh -X username@ip-address
```
Now that you're SSH-ed into the robot, you can disconnect any wires from the robot. You can accomplish any of the same tasks through the terminal. For example, you can type in `ipython` and interact with the robot using Stretch Body, as explained in the [Quick Start Guide](./quick_start_guide_re2.md#start-coding).
@ -57,12 +57,12 @@ It's common to need to move files to/from the robot wirelessly and a tool simila
To send the files from your computer to the robot, run:
It will prompt you to enter a password. If you do, you'll need it to use the private key when you SSH into the robot. Next, we give the robot the public key. Linux and MacOS machines can run:
This requires you to know the username and IP address of the robot. Instructions on how to find this information are found in the [SSH & X Server](#ssh-x-server) section. You may now SSH into the robot as normal, and no prompt for the robot's password will appear.
@ -14,7 +14,8 @@ Each Stretch is shipped with firmware, a Python SDK, and ROS packages developed
Stretch ROS is the [Robot Operating System](https://www.ros.org/about-ros/) (ROS) interface to the robot. Many robotics developers find ROS useful to bootstrap their robotics software developments. Depending on whether you want to set up a ROS or ROS 2 workspace, the easiest way to download the most recent updates in the stretch_ros and stretch_ros2 code repositories, while resolving all source-built dependencies at the same time, is by following the instructions in the [Creating a New ROS Workspace](https://github.com/hello-robot/stretch_install/blob/master/docs/ros_workspace.md) section in the stretch_install repo.
**Warning**: Before you proceed, please ensure that all your personal files in the catkin or ament workspace have been backed up safely. This is important because executing the following set of commands deletes your existing workspace and replaces it with a fresh one.
!!! warning
Before you proceed, please ensure that all your personal files in the catkin or ament workspace have been backed up safely. This is important because executing the following set of commands deletes your existing workspace and replaces it with a fresh one.
To download the stretch_install repo, execute:
```{.bash .shell-prompt}
@ -26,19 +27,16 @@ git pull
To replace the ROS Melodic catkin_ws in Ubuntu 18.04, execute:
The firmware and the Python SDK (called Stretch Body) communicate on an established protocol. Therefore, it is important to maintain a protocol match between the different firmware and Stretch Body versions. Fortunately, there is a script that handles this automatically. In the command line, run the following command:
```{.bash .shell-prompt}
$ REx_firmware_updater.py --status
REx_firmware_updater.py --status
```
This script will automatically determine what version is currently running on the robot and provide a recommendation for the next step. Follow the next steps provided by the firmware updater script.
@ -77,8 +75,8 @@ This script will automatically determine what version is currently running on th
The operating system upon which Stretch is built is called Ubuntu. This operating system provides the underlying packages that power Stretch's software packages. Furthermore, users of Stretch depend on this operating system and the underlying packages to develop software on Stretch. Therefore, it is important to keep the OS and these underlying packages up to date. In the command line, run the following command:
```{.bash .shell-prompt}
$ sudo apt update
$ sudo apt upgrade
sudo apt update
sudo apt upgrade
```
[Apt](https://en.wikipedia.org/wiki/APT_(software)) is the package manager that handles updates for all Ubuntu packages.
@ -89,7 +87,7 @@ $ sudo apt upgrade
When working with Stretch Body, if you see the following error:
```
```{.bash .no-copy}
----------------
Firmware protocol mismatch on /dev/XXXX.
Protocol on board is pX.
@ -102,7 +100,7 @@ Please upgrade the firmware and/or version of Stretch Body.
This error appears because the low-level Python SDK and the firmware cannot communicate with each other. There is a protocol mismatch preventing communication between the two. Simply run the following script and follow its recommendations to upgrade/downgrade the firmware as necessary to match the protocol level of Stretch Body.