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 Home Page

The Home Page shows the routines, the current robot, and the end effector that is connected to the robot. In the “routines” tab, you are able to load, edit, and create new routines for the robot. In the tab that shows the connected robot, this is where you can go to move the robot.

Home Page


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

Global navigation


There are several important features worth calling out:


Element Name Description
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.
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)
Loaded Routine Loaded Routine Shows what routine is loaded onto the robot

5.1.2.1 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 top allows you to switch between visualizing (and controlling) the real robot or a simulated robot.


Move page


At the right of this screen are several useful tabs:

Icon Tab Name Description
Tooltip Move Menu to access the “Joints” and “Tooltip” Tabs
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. Hidden behind the three dots icon.
Joint Tooltip Jogs the robot’s tooltip in Cartesian space

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.

Base, Tooltip, and Mode icons

Selecting the “Mode” icon allows you to switch between continuous and incremental jogging. With continuous jogging, holding down a move robot icon will allow to robot to move as long as the icon is held down. With incremental jogging, when tapping on a move robot icon, the robot will only move a specified distance, this can be useful when fine tuning positions.

Jog Modes

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 plus sign button in the upper right. Various settings for each connected device can be controlled on the right.

Equipment Page

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.


Add New Equipment Tab

To remove equipment select the equipment that you would like to remove.

Then select the ‘circle with the three dots’ icon at the upper right of the tab to reveal the delete icon.

Delete Equipment Icon

5.4 Robot Settings

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

Robot 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, return to the home page.

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.

New routine
Routine Name

To create a new routine, give it a name under Routine Name.

Routine Interface

The routine interface is where you can add a description of your routine, and to edit and create steps.


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 on the robot page. If you are not using a supported tool, no need to add it. It will be controlled over I/O directly.

Equipment Page
Add Equipment

You will be directed back to the equipment tab to add the equipment. Click the +add to add the equipment. Select the equipment you have from the list. For our example, select OnRobot 2FG7. 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 Home

Select the back arrow in the upper left to go to the Home Page and then select on your routine to return to the Routine Page.

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 an action is required for that step. Click the step 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. Edit 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. Reduces the motion smoothing like overshooting or false collisions.

  9. Set the speed as a % of maximum defined in the Edit Motion Limits Settings.

  10. Shows that the position has been saved.

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 upper 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 “Position 1” to the current robot location.
Go Here
  1. Go Here will drive the robot to the saved position if held down.

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

  3. 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. Set the position to the variable “Position 1”.

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

Save Position

Select our new saved position “Position 1” from the drop down.

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.

Select the Actuate Gripper the step to edit the step.

Actuate Gripper Details
  1. If we want to close the tool with some force select the Grip object with force checkbox. Since we are opening, we will change this option to Move To Position.

  2. Set the GRIP DIRECTION to inward.

  3. Set the gripper WIDTH, since we are opening, we will set it wide open

  4. Set the FORCE to grip with. We will leave at 20N as we are opening.

  5. Set the PAYLOAD for the target. Since we are just opening, this will be left at 0kg

  6. Set the TOLERANCE for the gripper to be considered successful. This will be left at 2mm.

  7. Click Configure End Effector Target.

  8. The live robot page will open. Press the “Hold to Apply Changes” and then “Confirm End Effector Position” in the upper left. You’ll then be brought back to the Routine page.

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

  2. Select Loop.

  3. Click on the Loop step to be able to edit the step.

Loop Details

For Loop under Basic Options you can choose to:

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

•Loop specific number of 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 in the loop. Click the 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.

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

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 that you want, 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.

Add Another Step

Next we want to add another Move Arm step. We want this step to be within our Loop, but not offset by our Add Offset so instead of clicking the +Add Step, select the three dot icon to the right of the Add Offset step, and select Add Step Below (you and also drag and move steps by selecting the orange “Reorder” icon at the top of the page ).

Add Actuate Gripper

Next we will be adding another Actuate Gripper command.

  1. Select the three dot 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.

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.

Final Routine

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 the Play Routine icon.

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 upper right.

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

IO Menu
  1. The I/O menu (hidden behind the three dot icon in the upper right) 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 with the “resume routine” icon that will appear in the upper right, and it will run at the speed specified in the menu in the lower left.

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:

Variables

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 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), select the Plus icon, and then 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 Position” (hidden behind the three dot icon), 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 Freeform Position List, go to the Move Robot area, go to the space (square icon), select the Plus icon, and then 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” (which is hidden behind the three dots icon). 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

5.7.5.1 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.

5.7.5.2 Requirements:

5.7.5.3 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.

5.7.5.4 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., http://192.168.215.175:5551. 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., http://192.168.215.175:5551. 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.