Getting Started

What’s In Box

The Fetch and Freight Research Edition robots each ship in reusable ATA cases. Inside each case you will find the robot, toolkit, and power supply for charging the robot.

Fetch and Freight

Please watch the video below for unpacking Fetch or Freight. The video covers unpacking the robot, connecting the batteries, turning on the robot, and driving the robot via the provided joystick.


The toolkit contains the tools, accessories, and fasteners needed to use the Fetch and Freight. The picture below shows packaged toolkit.


Inside the toolkit box you will find:

Item # Item Name QTY Purpose
1 Metric Hex Key Set 1 For removing screws and attaching accessories
2 Right Angle USB Connector 1 To prevent USB connector damage while driving
3 Wireless Joystick 1 For teleoperating the robot
4 USB Cable 1 For charging the wireless joystick
5 Finger Tip Covers 4 To replace damaged finger tips
6 M5x10mm SHCS 4 For attaching accessories to the base mount points
7 M4x10mm SHCS 4 For attaching accessories to the head mount points
8 M3x14mm Standoffs 4 For attaching accessories to the gripper
9 3ft Ethernet Cable 1 For connecting the robot to the network
10 Fetch Robotics Stickers 5 For your laptop :)
11 Mircofiber Lens Cloth 1 For cleaning optics of the robot

Robot Power Supply

The robot power supply is shown below in the packaging:


The robot plug end is shown below, when removing the charge plug from the robot always grab the plug by the housing and not the cable.



Pulling on the charge plug cable instead of the handle can cause damage to the cable assembly over time and could potentially cause injury to the robot or user.

Running Fetch and Freight

Turning on Fetch and Freight

To turn on the robot, set the Power Disconnect Switch (the red one on the lower back of the robot) to the ON position and then press the power switch on the access panel until it lights up.

Logging In

Once the robot is turned on and the robot is on the network, ssh into the computer of the robot using the default fetch user account:

>$ ssh fetch@<robot_name_or_ip>

robot_name_or_ip will be either an IPv4 network address, or a network name, depending on the configuration of your local network. If your computer and network is setup for multicast DNS (mDNS) then you may be able to use fetchXYZ.local as the network name where XYZ will be the serial number of your robot (remove any leading zeros from the serial number).

Connecting a Monitor (Optional)

If you are unable to access the robot through ssh due to your network settings you will need to connect an HDMI monitor, USB keyboard and USB mouse to the side panel ports. Then use them to select your network from the networking menu, it looks like an empty quarter circle pointed downward when disconnected, in the upper right hand corner of the screen. Once it is set it should remain connected through all reboots.


Monitor cables that conform to HDMI specifications will fit the robot’s monitor port. But some cheaper cables have overmolding that is too large given the spec and may not seat properly. Please ensure the HDMI cable you are using is the correct size.


If you are still having difficulty connecting to your robot you will need to contact your network administrator for specific instructions on how to connect the robot to your network.

Once connected then create your user account as shown below.

Default User Account

Each robot ships with a default user account, with username fetch and password robotics. It is recommended to change the password when setting up the robot.

Creating User Accounts

It is recommended that each user create their own account on the robot, especially when developing from source. To create an account on the robot, ssh into the robot as the fetch user, and run the following commands:

>$ sudo adduser USERNAME
>$ sudo usermod -G adm,cdrom,sudo,dip,plugdev,lpadmin,sambashare USERNAME

Tucking Fetch’s Arm


The tuck arm server is a new feature released in fetch_teleop and fetch_bringup 0.6.0. The deadman became required in fetch_teleop 0.7.0.

To tuck the arm, press and hold button 6, as shown in the image of the controller below, for one second. This will trigger the tuck_arm server to tuck the arm. While tucking the arm, Fetch will avoid collisions with itself, however it will not be using any active perception, so be sure to keep the space in front of the robot clear when running the tuck arm. While the arm is tucking, you will have to hold the deadman. Releasing the deadman will stop the tucking action.

Driving Fetch and Freight with a Joystick

Each Fetch and Freight ship with a robot joystick. Whenever the robot drivers are running, so is joystick teleop. The joystick is capable of controlling the movement of the robot base, torso, head and gripper.

Button # Function (details below)
0 Open gripper
1 Control robot turning
2 Control forward/backward driving
3 Close gripper
4 Disable motor position holding
5 Not used
6 Arm tuck
7 Not used
8 Head control deadman
9 Not used
10 Primary deadman
11 Not used
12 Torso up
13 Not used
14 Torso down
15 Not used
16 Pair/unpair with robot

To pair the controller with the robot, press the middle button (16) once the robot has powered on. The controller will vibrate once successful. To unpair, hold the button for 10 s. The LED indicator on top will turn off.

To drive the robot base, hold the primary deadman button (button 10 above) and use the two joysticks. The left joystick controls turning velocity while the right joystick controls forward velocity.


Whenever driving the robot, always lower the torso and tuck the arm to avoid potentially unstable operation.

To control the head, release the primary deadman and hold the head deadman (button 8). The left joystick now controls head pan while the right joystick controls head tilt.

To move the torso up, hold the primary deadman and press the triangle button (12). To move the torso down, hold the primary deadman and press the X (14).

To close the gripper, hold the primary deadman and press the close button (3). To open, hold the primary deadman and press the open button (0).

Some controllers, such as the arm and head controllers, will attempt to hold position indefinitely. Sometimes this is not desired. Holding button (4) for 1 second will stop all controllers except the base controller and the arm gravity compensation.

Moving the Base with your Keyboard


You will need a computer with ROS installed to properly communicate with the robot. Please consult the ROS Wiki for more information. We strongly suggest an Ubuntu machine with ROS Indigo installed.

To teleoperate the robot base in simulation, we recommend using the script from teleop_twist_keyboard package.

>$ export ROS_MASTER_URI=http://<robot_name_or_ip>:11311
>$ rosrun teleop_twist_keyboard

Software Runstop

In addition to the runstop button on the side of the robot, similar software functionality is also available, allowing for button presses on the PS3 controller or a program to disable the breakers. This functionality is available in release 0.7.3 of the fetch_bringup package. The teleop portion is disabled by default.

Using Software Runstop

To activate the software runstop, publish True to the /enable_software_runstop topic.

Alternately, with the teleop runstop enabled, pressing both of the right trigger buttons (buttons 9 and 11) will activate the software runstop. The script in fetch_bringup can be modified to change the button(s) for the software runstop.

Once activated, the software runstop can be deactivated by (1) toggling the hardware runstop, or (2) disabling the software runstop by passing False to the /enable_software_runstop topic.

Enable Teleop Software Runstop


In order to edit the robot.launch file, you will need to use a terminal editor (such as nano or vim), or use the -X flag with SSH to use a graphical editor (such as gedit). Additionally, the editor must be launched with sudo. Instructions below use nano.

To enable the software runstop, first SSH into the robot, and then modify the robot drivers launch file to use it.

We need to modify the robot.launch file to pass the correct arg to the software runstop script:

>$ sudo nano /etc/ros/indigo/robot.launch

In this file there should be a Software Runstop entry near the end. By default this entry contains an args line, with a value of “-a -b -g”. To add teleop control, add the “-t” flag as well. This section will then look like the below. If your robot is an older one and does not have a Software Runstop entry, you will want to simply copy the block the below.

<!-- Software Runstop -->
<include file="$(find fetch_bringup)/launch/include/runstop.launch.xml">
  <arg name="flags" value="-a -b -g -t" />

Note that the -a, -b, -g flags correspond to letting the software runstop control the arm, base and gripper breakers, respectively.

Additionally, if completely disabling the software runstop functionality is desired, the above section in robot.launch can be commented out or removed.

Finally, restart the drivers so that our changes take effect:

>$ sudo service robot stop && sudo service robot start

Re-pairing Robot Joystick that Won’t Connect

If the bluetooth robot joystick will no longer connect to the robot, it can easily be re-paired to the robot by connecting it to the robot with a USB cable, and then running:

>$ sudo sixpair

This situation is most often caused by charging the robot joystick from the USB port of another computer.

Using Deadzone Parameter to Correct Drift

Some controllers have poorly-zeroed joysticks, meaning that they send a nonzero value when the joystick is untouched and ought to send a zero value. This will be apparent if you press the deadman button on the controller, and the robot slowly moves without any input to the joysticks.

This behavior can be compensated for by using a rosparameter: joy/deadzone (ROS docs), which defines the amount by which the joystick has to move before it is considered to be off-center, specified relative to an axis normalized between -1 and 1.

Add/set the parameter in /etc/ros/DISTRO/robot.launch:

<!-- Teleop -->
  <include file="$(find fetch_bringup)/launch/include/teleop.launch.xml"/>
  <param name="joy/deadzone" value="0.1"/>

You can inspect the output of rostopic echo /joy with the controller connected to choose an appropriate value for your controller.

Visualizing Data

>$ export ROS_MASTER_URI=http://<robot_name_or_ip>:11311
>$ rosrun rviz rviz


You will need a computer with ROS installed to properly communicate with the robot. Please consult the ROS Wiki for more information. We strongly suggest an Ubuntu machine with ROS Indigo installed.

You can now manually set up your RVIZ visualization or re-run RVIZ with a configuration file using the command line. The default .rviz configuration file for Fetch can be loaded using:

>$ roscd fetch_navigation/config
>$ export ROS_MASTER_URI=http://<robot_name_or_ip>:11311
>$ rviz -d navigation.rviz

Using the Runtime Monitor

Fetch and Freight publish ROS diagnostics messages. These are human-readable messages that inform users of the robot system state. The runtime_monitor, part of rqt_robot_plugins can be used to view diagnostics from your desktop computer:

>$ export ROS_MASTER_URI=http://<robot_name_or_ip>:11311
>$ rosrun rqt_runtime_monitor rqt_runtime_monitor

The runtime monitor will have one entry per motor controller board (MCB), as well as one entry per breaker. Each of these entries will be classified as either stale, an error, a warning, or OK. In the above image, the supply_breaker is disabled because the robot is not plugged in – this is only a warning, and not actually an issue.

Common errors that can be detected are overly hot motors or breakers, breakers that have tripped. When the runstop on Fetch is pressed, a number of breakers become disabled and the motor controller boards are turned off, causing them to go stale. The below image shows what a runstopped Fetch might look like:


Putting Fetch and Freight Away

Before turning the robot off, it is recommended that you tuck the arm. When power is shut off, the arm will want to slowly fall and will be more difficult to backdrive when in the off configuration.

To turn the robot off, press and hold the illuminated power button on the access panel until it starts blinking. The power button will continue blinking until the computer has successfully shut down, and then power will be disconnected.