5 Software Overview

5.1 Connecting to the Robot

The included iPad can be connected to multiple RO1 robots (if needed) after pairing with them.

The home screen of the Standard Bots app shows the list of paired robots and their connection status. Tapping on the “…” button for a robot allows you to: * delete that robot * re-configure it (i.e. to change its network settings, PIN, etc) * show a details screen that can allow you to troubleshoot connectivity issues.

If a robot is powered on but not showing up here, after confirming the tablet is on the same network, check its details and contact customer support.

To connect to your robot, enter your PIN to log in. The default PIN is 0000:

Logging in to a robot

5.1.1 Top Bar

One connected to an RO1, the software has a set of global controls in the header of every page:

Global navigation

There are several important features worth calling out:

Element Name Description
Tabs Tabs Switch between jogging robot and editing routines
E-Stop E-Stop Trigger an emergency stop and brake the robot
Robot menu Robot Menu See status of current robot and access settings (see below)
Notifications Notifications Contains a log of failures, errors, and other notifications that have occurred when running the robot. If there are unread items here, there will be a red dot on this icon. Robot Statuses

The robot menu displays the name of the robot and may show several status indicators:

Status Description
DISCONNECTED The tablet is not able to connect to the robot.
LOADING The tablet is trying to connect to the robot.
MOVING The robot is being manually jogged now.
ANTI-GRAVITY The robot is being moved in Anti-Gravity (hand-guided) mode.
RECOVERING The robot has exceeded joint limits and can be moved back within limits now.
RUNNING The robot is running a routine.
PAUSED The robot is paused in a previously-running routine. You can press ‘Play’ to resume it.
E-STOP The robot is in Emergency Stop mode. Reset the E-Stop button on the control box and any external E-stop buttons.
BRAKED The robot is braked (either from having manually braked it or from a previous E-Stop). It can be unbraked in the Move screen.
FAILED The robot has encountered a collision or has been affected by some other hardware issue.
(blue dot) A software update is available. Check “Software Update” under “Settings.”
INSTALLING The robot is installing a software update.

5.2 Jogging the Robot

The “Move Robot” tab brings you into the Move page.

This shows a visualization of the RO1. The switch on the bottom allows you to switch between visualizing (and controlling) the real robot or a simulated robot.

Move page

At the bottom of this screen are several useful tabs:

Icon Tab Name Description
Tooltip Tooltip Jogs robot’s tooltip in Cartesian space
Joint Joints Controls position of individual joints
Gripper Gripper Controls any connected gripper
Space Space Allows defining points and grids that can be referenced in the routine
I/O I/O Shows the status of the I/O ports and allows manually toggling them

5.2.1 Jogging Tooltip

When jogging the tooltip, you are able to control the X, Y, Z coordinates of the tooltip, as well as the roll, pitch, and yaw.

This can be switched between “Base” (where the reference frame is the robot base) and “Tooltip” (where the reference frame is on the robot’s tool flange). Moving to tooltip mode can be useful for maneuvering the tooltip in and out of tight spaces.

For safety, manually jogging the robot is always capped at a speed below the maximum that will apply when running. To make the robot jog even slower, you can change the global speed % slider in the robot menu.

5.2.2 Jogging Joints

The robot’s joints can also be moved directly. This can be useful in avoiding collisions and in planning moves to minimize cycle time.

5.2.3 Entering Exact Values

When jogging in either mode, if you want to enter a more precise value, you can press the blue mode button in the top right. Once you’ve entered the values you want, hold down the “Hold to Apply Changes” button at the bottom of the panel.

Entering exact values for tooltip Entering exact values for joint positions

5.3 Managing Equipment

To manage equipment in the cell, including grippers, 7th axis devices, CNC machines, and more, open “Equipment” from the robot menu.

Robot equipment menu

The equipment configured on the robot can be seen in the list on the left. To add new equipment, press the “Add Equipment” button in the bottom left. Various settings for each connected device can be controlled on the left.

Alt text

Currently, only one gripper can be added at a time (except when using the onRobot Dual Quick Changer). When adding a single tool on a single changer, you do not need to define a changer and instead simply add the tool.

src/images/edit_equipment.png Alt text

To remove equipment select edit.

Missing image

Then select the trach icon on the equipment you would like to remove.

5.4 Robot Settings

Settings for the robot are accessed via the robot menu. User interface settings are accessed separately via the hamburger menu.

Robot settings menu

The following options are available on the RO1:

Section Name Description
Safety Speed limits, configuration of safeguard devices connected to I/O ports, and collision sensitivity settings
PIN Update the robot’s PIN
Robot Name Name displayed in UI to distinguish it from any other RO1s you may be using.
Software Update Allows checking for and installing any available software updates
Backups Allows making and restoring from backups via external disk connected to USB
Interface Settings Allows switching between imperial and metric units for displaying lengths in the UI
Box Robot Places robot into pose that allows it to fit in Standard Bots’ provided foam case in case it needs to be returned.

5.5 Singularities

A singularity is a configuration in which the robot end-effector becomes blocked in certain directions. A robot is unable to maintain a constant velocity while passing one.

The RO1 handles this by never planning motion paths through singularities. If the robot is programmed in a manner in which it will encounter a singularity, the UI will display a “Motion Planning Failed” error and the robot will not attempt the movement.


To ensure routines are not created in which the robot will encounter a singularity, the user interface requires a play-through of any new routine in a simulation mode before running it on a real system. This ensures all motion plans are valid before running on a physical robot arm.

5.6 Routines

Standard Bots uses an intuitive “no-code” approach to programming the RO1 robot. The programs in the robots are referred to as “Routines”. The routine reads as a story. Routines can be developed and tested in simulation without moving the actual robot. The robot can store multiple routines. Routines contain all information the robot needs to complete the programmed task including moves, speeds, setting/reading IO, communicating with external equipment and more.

5.6.1 Routine Creation Example

Routine Access

To get to the Routines area of the interface, select Routines from the upper left of the Move Robot view.

Routine Creation

Existing Routines will be shown in the main window, and can be viewed and edited by clicking on them. To create a new routine select New Routine.

Routine Name

To create a new routine, give it a name under Routine Name. Optionally, give the routine a description under Routine Description. Leave Blank Routine checked to start a new routine.

Routine Interface

1.Return to the Space.

2.Return to Routine list.

3.The Routine name.

4.Go to the Space.

5.Add variable to use in the Routine.

6.Lock or unlock editing.

7.Load this Routine onto the robot.

8.Add a new Step into the Routine.

9.List of Steps in the Routine

10.List of Step types that can be added to the routine.

If you are using a Standard Bots-supported tool, first add it using the manage equipment button. If you are not using a supported tool, no need to add it. It will be controlled over I/O directly.

Routine Equipment
Add Equipment

[Add Equipment] (src/images/Routine_6_5_Creation.png) {width=80%}

You will be directed back to the Space to add the equipment. Click the +add to add the equipment. Select the equipment you have from the list. For our example, select OnRobot 3FG15. When adding a single tool on a single changer, you do not need to define a changer and instead simply add the tool.

Return to Routine

Select the back arrow to return to the Routine.

Add Step

Click Add Step to begin creating the routine.

Move Arm

The menu will show all available step types with descriptions. For the sample routine, we will start with a Move Arm Step. A Move Arm step is how you tell the robot to go to a position. Click the Move Arm step to add it to the Routine.

Move Arm Added

The Move Arm step will be added to the first line of the Routine. The yellow ! Indicates that the step needs to be configured. Click the indicated pencil button to edit the step.

Move Arm Details
  1. Editable description for this Step.

  2. Specify the position for the robot to go to based on the current position.

  3. Specify the position for the robot to go to based on a saved position from the Space.

  4. Specify the position for the robot to go to based a math function and/or variables.

  5. Set the position for the robot to go to based on the current robot position.

  6. Go to this position in a straight line (from the Tooltip perspective),

  7. The robot can sometimes reach a point in multiple ways, this tells the robot to use this exact orientation when going to this point.

  8. A Waypoint means go to this point but do not stop there.

  9. Set the speed as a % of maximum defined in the Safety Settings.

  10. Save this step configuration.

Add from Space

For our example we are going to select From Space. Defining a point in the Space allows you to use it in multiple places in the routine. Defining a point in the Space also lets you more easily modify the point in the future.

Add from Space Details
  1. The indicated drop down will have all the positions from the Space listed. We have not defined any yet.

  2. Select the Manage Space button to go to the Move Robot view.

Adding Variable Position

You will be brought back to the Move Robot view under the Space option in the lower right. Click the + button to add a new variable position.

Add Single Position

Select Single Position to create a new saved position.

Add From Space Details
  1. Give the position a name.

  2. Select Create.

Set Position
  1. Set will set the position named Initial Position to the current robot location.

  2. Go Here will drive the robot to the saved position if held down.

  3. Use the Tooltip jogging area to move the robot to the desired initial position.

  4. We are going to set a safe position above our work area for the robot to go to every time we start the routine.

Jog Robot
  1. Jog the robot to the desired position using the arrows.

  2. If needed, use the menu to change the robot speed.

  3. Once you are in the desired position, use the Space icon to return to the Space positions.

Set Position
  1. Select Set to save the position to the variable Initial Position.

  2. Select the back arrow to go back to the routine.

Save Position
  1. Select our new saved position Initial Position from the drop down.

  2. Save the current step.

Next Step
  1. We now have our first step at the beginning of the routine.

  2. Click + Add Step to add our next step.

Actuate Gripper

Often you will want to set your tool configuration at the beginning of the routine as you do not know how it will be left every time the robot stops. Select Actuate Gripper.

Edit Step

Select the pen icon to edit the step.

Actuate Gripper Details
  1. Set the PAYLOAD for this step. In our case 0 kg as we are opening.

  2. Set the GRIP KIND. We will use an inward grasp (moving the fingers in to close on the outside of a part).

  3. Set the FORCE to grip with. We will leave at 10 as we are opening.

  4. Set the DIAMETER, since we are opening, we will set it wide open.

  5. If we want to close the tool with some force select the Grip object with force checkbox. Since we are opening we will leave unchecked.

  6. Click Save Changes.

Add Loop Step
  1. Select + Add Step as we did for the last two steps to add another step.

  2. Select Loop.

  3. On the Loop step, select the pencil button to edit as we did for the last two steps.

Loop Details


For Loop under Basic Options you can choose to:

•Loop Forever: Loop until the program is stopped by the user.

•Loop x times: Loop the number of times specified before going to the next step.

•Use Rules: Allows you to use math and variables to set the number of times the loop runs.

For our case leave as Loop Forever

•Under Main Loop you can choose:

•Automatically assign Main Loop: Set the loop that is to count the number of times the routine runs as the one index most left in the routine window.

•Manually assign Main Loop: Set the loop that is to count the number of times the routine runs manually in the Loop setting using the checkbox below.

For our case leave as Automatically assign Main Loop.

Loop in Routine

The Loop will have a warning that steps are required below it when first added to the routine. Steps that are indexed to the right will loop according to what we set as the Loop parameters. If we add a step that is in line with our last Actuate Gripper instead of indexed over to the right, they would happen after the loop. Click Add Step in the transparent area below the loop to add a new step.

Add Offset

Often you want to approach a position from an offset based on the end position, for example when picking a part. If you do not set an in between point to ensure you approach the part from the top, you may approach it from the side and knock into it with the tool. Select Add Offset to add an offset to our next move. Click the pen icon in the added step to edit our newly added Add Offset.

Add Offset Details

You can offset the part in X, Y or Z by a positive or negative offset.

  1. We will be picking from above the part, so add a .1 meter offset in Z.

  2. Select Save Changes.

Add Offset Index

The newly added Add Offset will have a warning that it requires another step below it to offset. Any move below and indexed to the right of our Add Offset will be offset by the .1 meters we set in positive Z. Select Add Step in the translucent step below Add Offset

Offset Move Arm

Select another Move Arm command. As we did in the first step, use the Space to move the robot to the pick position and create a new Single Position as a variable named Pick Position in the space.

Add Offset Details
  1. Select another Move Arm command.

  2. As we did in the first step, use the Space to move the robot to the pick position and create a new Single Position as a variable in the space.

  3. Select From Space.

  4. Set the target as our new position Pick Position.

  5. Ensure Match Joint Angles Specified is not checked as this is not allowed inside of an offset.

  6. Select Save Changes.

Add Another Step
  1. Select the Add Step blue button to add a new step.

  2. We want this step to be within our Loop, but not offset by our Add Offset so we must line it up with the Add Offset step. Click and drag the step with the so it lines up with the Add Offset.

  3. Alternatively, use the hexagon icon on our Add Offset step and select Add Step Below.

Add Actuate Gripper
  1. Select the hexagon icon on our new Move Arm Step.

  2. Select Add Step Below.

  3. Choose Actuate Gripper.

Configure Actuate Gripper

Configure the tool as shown, which will close the tool on a part with 80N of force. Select Save Changes.

Add Another Offset Move

As we did before the pick, configure another offset move to move above the Pick Position. This will ensure we do not drag the part before we move to the place. The routine should look like the image above.

Add Another Offset Move

As we did for the pick, configure another set of steps to go to an offset above a new position, Place Position, go to the Place Position, Actuate the tool, and go to an offset above the Place Position. The routine should look like the image above. This routine should now continuously pick and place until it is manually stopped.

5.6.2 Running Routines

Run Routine

To test the routine, select Load Routine onto a Robot.

Load Routine
  1. Select the robot to load the routine onto under Load onto Robot, there will likely only be one.

  2. Click the Load onto Robot button.

Routine Visualizer

Select View on Routine Visualizer.

Play Visualizer

Select the play button.

Start Visualizer

Select Start Routine Visualizer.

Visualizer Details
  1. The robot will start completing the routine in a virtual environment.

  2. The step the robot is currently completing will show on the left side of the screen.

  3. The value of all Variables is shown in the bottom right.

  4. The routine will only loop once the first time. If you hit the play button again it will loop indefinitely.

IO Menu
  1. The I/O menu can be selected to show the IO values as the routine is running.
Gripper Menu

1.The Gripper menu can be selected to show the tool settings as the routine is running.

Go to Next Step

If the routine looks correct, it is ready to run on the physical robot. Select the blue Next button.

Run pre-flight Checks

Select Run Pre-flight Checks.

Verify Tool

Ensure the tool is in an acceptable position based on the start of your program. In our case we start by opening, so ensure the gripper is empty if you don’t want to drop the product.

Test Run Button

Click the blue Test Run button.

Set Maximum Speed

1.Select the maximum speed you want the end of the arm to move for the initial run by setting Max Tooltip Speed.

2.Click the Start Test Run on Live Robot button.

Run Routine
  1. Click and hold the Hold to Move Arm to Position button to move the robot to the first position in the routine.

  2. Watch the robot to ensure there are not going to be collisions during this move.

  3. The routine will run at the specified reduced speed once and stop.

  4. If the routine looks good, you can now play again, and it will run at the speed specified in the menu in the upper right.

5.7 Advanced Routine Functionality

5.7.1 Variables

Variables can be used to assist with a variety of tasks within a routine such as:


To create a variable, locate the variables are in the routine editor.

Variable Settings

When creating a variable, be sure to set an initial value. If no value is set, the variable will be set to 0. The value in the initial value box will be used set for the variable every time the routine is started.

Using Variables

To use a variable in the routine, click the “Fx” button in the given area of the step. There are several sets of variables available.

Expressions Reference: Help menu on how to construct expressions

Step Variables: Data from each routine step that can be used, for example the number of times it has been executed in a loop.

Environmental Variables: Variables created by the user in the routine.

IO Input Variables: Access to each of the 16 24VDC inputs, 0 if off 1 if on.

Gripper State: For supported grippers, inputs based on current state, for example closed or open.

Space: Data set in the space, such as saved positions.

Note: If you are using a variable, you must add it using the “Fx” button and not manually type it in. Manually typing the variable will not include the correct prefix and will result in an error.

5.7.2 Javascript

The Standard Bots routine editor provides the necessary instructions that address the requirements for the majority of applications. Should you need to to incorporate more advanced functions, the routine editor allows you to write your own JavaScript into Loops, Add Offsets, Move Arm steps, and more.

Expressions Reference

You can access the above help menu by clicking “Fx” in any text window in the routine editor and selecting “Expressions Reference”.

Row Loop

In the above example, this loop will iterate until the loop has iterated more than the value set in an environmental variable, partsPerRow. After the loop has iterated more times than the value of partsPerRow, the routine will move to the next step after what is contained in this loop.

If Javascript

In the above example, the code is checking if a variable boxCountOnPallet is less than or equal to 16 but more than 8. If the above condition is true, whatever is indented below the If statement in the routine will execute.

5.7.3 Grid Position Lists

Grids are often used in robot programming when a large number of parts needs to be processed by a robot. Using the Grid Position List functionality when creating a routine can save significant time and effort.

Grid Positions

To create a grid, go to the Move Robot area, go to the space (square icon) and select Grid Position List.

Grid Name

Give a name to the Grid Position List.

Grid Creation

To create the grid, first drive the robot to a corner of the grid using the Jog Robot functionality in the Move Robot view. Set the position. Repeat for 3 corners of the grid.

Under Layout, select the number of rows and columns in the grid. This will be the layout of the parts within the grid.

Generate Grid Positions

Select “Generate Position List”.

Grid Tuning

After the grid is generated, you can go to the positions using “Go Here”, tune them by using “replace,” or exit.

Move Arm Grid

To use the grid, use a Move Arm command within a loop and select the grid within the “From Space” option. The robot will move to the positions in the grid, in order, each time the loop executes.

To program a grid with multiple layers, use an “Add Offset” to set an offset to the grid positions based on the number of times the loop has executed.

5.7.4 Freeform Position Lists

A Freeform Position List is a list of positions in an array. This can be useful when programming if you need to go to positions in order in a loop that are not in a grid, or indirectly address positions.

Freeform Position List

To create a grid, go to the Move Robot area, go to the space (square icon) and select Freeform Position List.

Position List Name

Give the position list a name.

Position List Set

You can now drive to your first position using the Jog Robot functionality in the Move Robot view. Set the position. Repeat for the number of positions needed. Create the next position in the list using the “+” icon.

Position List Finished

You can touch up the positions using “Go Here” and “Replace”. Once finished simply exit.

Position List From Space

To go to the positions in order, use a Move Arm command and select the list from the Space.

Position List From Space

To access positions in the list not in order, use the “Expressions” option as shown. In this example we are going to the position in the list based off the environmental variable “index”.


5.7.5 Haas Ethernet Integration Introduction

For Haas machines that support Next Generation control (generally 2017 or newer machines) Standard Bots provides a first-class integration suite that allows for ethernet communication between the Standard Bots robot and Haas machine. This allows for quicker setup and more flexibility with less wiring.

Standard Bots provides a set of sample .nc files to get started with an ethernet Haas integration. The integration works by running a main program on the Haas machine (in the example this program is 6000.nc). It then uses Macros 10850 and 10851 to complete handshaking between the Haas machine and Standard Bots robot as shown below:

HAAS Integration Flowchart

Please be sure to review the comments in the sample code. G103 P1 is a required step in the 6000.nc main sample code to ensure the integration that happens through the macros functions correctly. Do not remove this step. If needed, add a G103 P0 as well as several empty lines after to the beginning the machine programs you create to run from the robot (called through macros from 6000.nc) to re-enable lookahead during those programs and ensure the fastest program speed. A P0 will disable block limiting, allowing the machine to look ahead as much as it wants. A number option will limit the number of blocks to look ahead. Requirements: Network Configuration:

In order to ensure a reliable solution the network between the robot and Haas machine must be configured correctly. Setting a static address without consulting the router/network configuration can cause duplicate IP addresses and other issues which will result in the robot not being able to run the Haas programs remotely. The Haas machine must have a known set IP address reachable by the robot for the integration to work through power cycles. There are several acceptable methods to setup a network between the robot and Haas machine:

  1. Configure the Haas machine on a wireless network. The IP address must be set to static on the machine with an address outside of any DHCP range or must be configured to always have the same IP address through the router configuration.
  2. Configure the Haas machine on a wired network with router. The IP address must be set to static on the machine with an address outside of any DHCP range or must be configured to always have the same IP address through the router configuration. Allow the robot to DHCP through the network router.
  3. Run a single cable between the robot and Haas machine. The Haas machine must have a static IP address set manually. Contact Standard Bots Support for assistance setting a static IP address on the robot on the same subnet as the Haas machine. Integration:

  1. Ensure program numbers 6000.nc-6005.nc are available on the Haas machine.

  2. Load Standard Bots sample NC files onto the Haas machine.

    HAAS Network Settings
  3. If using a wired connection, run an ethernet cable from the Ro1 cabinet to the Haas machine cabinet. The ethernet port on the Ro1 box is on the underside of the IO connection points in the box. The ethernet port on the Haas for Machine Data Collect is usually on the upper left when looking at the back of it. To get to the ethernet settings on the Haas navigate to Settings→Network→Wired/Wireless Connection.

  4. Set the Haas machine up to communicate with the robot. The robot and Haas machine must be on the same subnet (3rd set of numbers in IP address) and be on the same wireless or wired network to communicate with each other. To ensure Haas can talk to the robot even through a power cycle the Haas must be set to a static IP address (no DHCP) or have network provisions made to ensure it is always the same IP address.

  5. Enable machine data collect on the Haas (settings 143) and set the port to 5551.

  6. If you are using a wired connection without DHCP, contact Standard Bots support for assistance setting a static IP addess on the physical robot port.

  7. Load the sample “haas test” program provided by Standard Bots into the routine editor by going to Actions-> Edit Routine Schema and pasting the contents of the text file in. Then select “Create Routine”.

    Monitor Haas
  8. Edit the first step of the sample routine. Leave the “Send Haas Cell Safe” button checked. This allows the robot to run routines with the door open, which is often required (IE, when you need to close the door).

  9. Update the IP address of the Monitor Haas Machine step to match the IP address of the Haas. Ensure the port remains at the end of the address. The format is: http://xxx.xxx.xxx.xxx:port . I.e., Save the step.

  10. Go back and edit Step 4, Run Haas Program.

    Run Haas
  11. The “haas test” program will attempt to run 2020.nc. In many Haas machines, this is the spindle warmup program. If needed, change this program number to a different program under “Program Name”.

  12. Leave “Wait until Complete” checked. This will ensure the routine stays at the current step until the Haas has completed the program sent above under “Program Name”.

  13. Update the IP address of the Monitor Haas Machine step to match the IP address of the Haas. Ensure the port remains at the end of the address. The format is: http://xxx.xxx.xxx.xxx:port . I.e., Save the step.

  14. Start program 6000.nc on the Haas using the standard cycle start button on the Haas.

  15. Start the sample program on the robot by running the routine.

  16. The spindle warmup program (or alternative program chosen above) should now run. If it does not work verify the 10850 macro variable is updating. If it is not, verify communication between robot and machine.