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:
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.
Once connected to an RO1, the software has a set of global controls in the footer of every page:
There are several important features worth calling out:
Element | Name | Description |
---|---|---|
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 | Trigger an emergency stop and brake the robot | |
Robot Menu | See status of current robot and access settings (see below) | |
Loaded Routine | Shows what routine is loaded onto the robot |
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. |
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.
At the right of this screen are several useful tabs:
Icon | Tab Name | Description |
---|---|---|
Move | Menu to access the “Joints” and “Tooltip” Tabs | |
Joints | Controls position of individual joints. | |
Gripper | Controls any connected gripper | |
Space | Allows defining points and grids that can be referenced in the routine | |
I/O | Shows the status of the I/O ports and allows manually toggling them. Hidden behind the three dots icon. | |
Tooltip | Jogs the robot’s tooltip in Cartesian space |
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.
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.
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.
The robot’s joints can also be moved directly. This can be useful in avoiding collisions and in planning moves to minimize cycle time.
When jogging in either mode, if you want to enter a more precise value, you can press the 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.
To manage equipment in the cell, including grippers, 7th axis devices, CNC machines, and more, open “Equipment” from the robot 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.
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.
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.
Settings for the robot are accessed via the robot menu. User interface settings are accessed separately within settings via the hamburger 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. |
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.
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.
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.
To create a new routine, give it a name under Routine Name.
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.
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.
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.
Click Add Step to begin creating the routine.
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.
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.
Editable description for this Step.
Specify the position for the robot to go to based on the current position.
Specify the position for the robot to go to based on a saved position from the Space.
Specify the position for the robot to go to based a math function and/or variables.
Edit the position for the robot to go to based on the current robot position.
Go to this position in a straight line (from the Tooltip perspective),
The robot can sometimes reach a point in multiple ways, this tells the robot to use this exact orientation when going to this point.
Reduces the motion smoothing like overshooting or false collisions.
Set the speed as a % of maximum defined in the Edit Motion Limits Settings.
Shows that the position has been saved.
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.
The indicated drop down will have all the positions from the Space listed. We have not defined any yet.
Select the Manage Space button to go to the Move Robot view.
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.
Select Single Position to create a new saved position.
Give the position a name.
Select Create.
Go Here will drive the robot to the saved position if held down.
Use the Tooltip jogging area to move the robot to the desired initial position.
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 the robot to the desired position using the arrows.
If needed, use the menu to change the robot speed.
Once you are in the desired position, use the Space icon to return to the Space positions.
Set the position to the variable “Position 1”.
Select the back arrow to go back to the routine.
Select our new saved position “Position 1” from the drop down.
We now have our first step at the beginning of the routine.
Click + Add Step to add our next step.
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.
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.
Set the GRIP DIRECTION to inward.
Set the gripper WIDTH, since we are opening, we will set it wide open
Set the FORCE to grip with. We will leave at 20N as we are opening.
Set the PAYLOAD for the target. Since we are just opening, this will be left at 0kg
Set the TOLERANCE for the gripper to be considered successful. This will be left at 2mm.
Click Configure End Effector Target.
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.
Select + Add Step as we did for the last two steps to add another step.
Select Loop.
Click on the Loop step to be able to edit the step.
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.
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.
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.
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.
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
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.
Select another Move Arm command.
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.
Select From Space.
Set the target as our new position Pick Position.
Ensure Match Joint Angles Specified is not checked as this is not allowed inside of an offset.
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 ).
Next we will be adding another Actuate Gripper command.
Select the three dot icon on our new Move Arm Step.
Select Add Step Below.
Choose Actuate Gripper.
Configure the tool as shown, which will close the tool on a part with 80N of force.
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.
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.
To test the routine, select the Play Routine icon.
Select Start Routine Visualizer.
The robot will start completing the routine in a virtual environment.
The step the robot is currently completing will show on the left side of the screen.
The value of all Variables is shown in the upper right.
The routine will only loop once the first time. If you hit the “resume routine” button again it will loop indefinitely.
1.The Gripper menu can be selected to show the tool settings as the routine is running.
If the routine looks correct, it is ready to run on the physical robot. Select the blue Next button.
Select Run Pre-flight Checks.
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.
Click the blue Test Run button.
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.
Click and hold the Hold to Move Arm to Position button to move the robot to the first position in the routine.
Watch the robot to ensure there are not going to be collisions during this move.
The routine will run at the specified reduced speed once and stop.
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.
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.
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.
To use a variable in the routine, click the “Fx expressions” 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 expressions” button and then go to the three dots icon to find what variable you want to use (custom variables made will be found in “Environment Variables”). Do not manually type it in. Manually typing the variable will not include the correct prefix and will result in an error.
Here is an example of how to “add 1” to the value of a variable:
select the “set variable” step
select the variable you wish to add to (this example uses a variable named “index”)
select the three dots icon and click “environmental variables”.
Then select the variable you wish to change, it should automatically appear in the value bar. Notice how it’s shown as “Environment_…”, typing in the name of your variable into the bar will not work.
Then put “+1” in the value bar.
Now every time the routine gets to this step, the value of “index” will increase by one.
This doesn’t have to be only for addition, other math functions can be done as well.
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.
You can access the above help menu by clicking “Fx” in any text window in the routine editor and selecting “Expressions Reference”.
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.
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.
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.
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.
Give a name to the Grid Position List.
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.
Select “Generate Position List”.
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.
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.
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.
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.
Give the position list a name.
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.
You can touch up the positions using “Go Here” and “Replace” (which is hidden behind the three dots icon). Once finished simply exit.
To go to the positions in order, use a Move Arm command and select the list from the 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”.
Push Mode allows you to perform actions while the robot is pushing against an object. The first move arm step will have the robot push against an object until the custom force requirement was reached. That step is finished once the force requirement is reached. Then the next step would be moving the robot away from the object. The steps are performed without the collision detection, allowing the robot to detect the needed amount of force.
Here is an example of implementing Push Mode into a routine:
Step 1 in this example is used to move the robot into the initial position to push the object.
Step 2 in this example is enabling the push mode. Set the required amount of force for the robot to stop.
Step 3 in this example is the robot pushing the object to it’s final position. The robot will stop when it detects the selected force percentage. It is required that “move in a straight line” is selected for this step to work.
Step 4 in this example is the robot arm backing away from the object. This step is done still under Push Mode because Push Mode turns off collision detection. Once the routine is out of Push Mode, collision detection is back on and if the robot is still pushed against the object an error will happen. “Move in a straight line” will still need to be selected for this step.
Once the robot is backed away from the pushed object, the steps after can leave Push Mode.
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:
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.
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:
Ensure program numbers 6000.nc-6005.nc are available on the Haas machine.
Load Standard Bots sample NC files onto the Haas machine.
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.
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.
Enable machine data collect on the Haas (settings 143) and set the port to 5551.
If you are using a wired connection without DHCP, use the Standard Bots tablet application to set the IP address. You may need to log out of the User Interface by going to robot name menu in the bottom left then selecting Logout.
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”.
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).
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.
Go back and edit Step 4, Run Haas Program.
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”.
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”.
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.
Start program 6000.nc on the Haas using the standard cycle start button on the Haas.
Start the sample program on the robot by running the routine.
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.
One way for the robot to communicate with other devices is through Modbus, one of the oldest and most widely used communication protocols in industrial settings. Modbus provides a common language that enables different devices to communicate with each other (such as an Allen Bradley PLC talking to a Siemens PLC), allowing devices from different manufacturers to work together. A Modbus Controller initiates communication and manages the data exchange between the compatible devices.
Modbus can operate over various physical layers, including serial communication methods like RS-232, RS-485, and RS-422, as well as Ethernet. Modbus TCP allows Modbus communication to occur over TCP/IP networks, enabling it to coexist alongside other Ethernet protocols.
Modbus can be used to send commands to the Robot, which would allow the Robot to integrate into the automation system. Modbus uses master-slave architecture for communication. In this setup, the Modbus Controller sends requests to the slave devices (such as the Robot) and manages the communication flow. Each slave device responds to requests from the Controller, allowing for data exchange. This architecture simplifies the network.