Quickstart
Table of contents
Build Instructions
Supported Operating Systems
- Linux (x86-64) - tested on Red Hat Enterprise Linux (RHEL) 9. Other distributions may work but have not been tested
Dependencies
- EPICS Base
- asyn
- ur_rtde (included)
This support module has been tested to work with EPICS base 7.0.4.1, and asyn R4-42 (synApps 6-2-1), and newer versions (synApps 6-3). The minimum required versions of base and asyn have not been tested.
The ur_rtde library comes pre-built for the supported operating systems. See urRobotApp/src/ur_rtde/release.txt for the current included version of the ur_rtde library.
If you need the EPICS urRobot support on another operating system, so long as you have EPICS base and asyn, you’ll just need to build the ur_rtde library for your OS and replace the ur_rtde library files and headrs in urRobotApp/src. Consult the ur_rtde library documentation on how to build it from source.
Build
- Once you have a working installation of EPICS base and asyn, clone or download https://github.com/BCDA-APS/urRobot
- Next, open configure/RELEASE in a text editor and correct the paths to
EPICS_BASEandASYNif necessary - Run
makein the top level directory of the project
Adding UR Robot support to an IOC
After you have successfully built the urRobot support module, follow the steps below to add it to an IOC.
1. Add the path to the urRobot support in configure/RELEASE
# file: configure/RELEASE
URROBOT=/path/to/urRobot
2. Add rules in xxxApp/src/Makefile
# file: xxxApp/src/Makefile
ifdef URROBOT
$(DBD_NAME)_DBD += urRobotSupport.dbd
$(PROD_NAME)_LIBS := urRobot $($(PROD_NAME)_LIBS)
endif
3. In your startup script, load the example script making sure to fill in the correct IP address for your robot.
# file: iocBoot/iocxxx/st.cmd.Linux
iocshLoad("$(URROBOT)/iocsh/urRobot.iocsh", "PREFIX=$(PREFIX), IP=127.0.0.1")
4. If you would like to add support for waypoints and paths, load paths.iocsh. Waypoints and paths require the lua module (for luascript records) and the calc module (for sseq records), both of which are included in synApps. Both must be defined in configure/RELEASE.
# file: iocBoot/iocxxx/st.cmd.Linux
iocshLoad("$(URROBOT)/iocsh/paths.iocsh", "PREFIX=$(PREFIX)")
The number of waypoints, actions, and paths loaded can be controlled with optional macros: N_WP (default 30), N_ACTIONS (default 10), N_PATH (default 10), N_PATH_WP (default 30).
For advanced use, you can copy urRobot.iocsh to your IOC and load only the specific interfaces you need. Note that the RTDE Control interface depends on both the Dashboard and RTDE Receive interfaces being active, but other interfaces (Dashboard, Receive, I/O, Gripper) can be loaded independently.
5. Before starting the IOC, using the teach pendant, make sure the robot is powered on, breaks released, in Automatic mode, and in Remote Control mode. Note, if you are not using the RTDE control interface, all you need to do is make sure the robot controller is powered on.
At this point you should be able to start the IOC. If all went well, your IOC console should report messages (beginning with “[info]”) saying each interface to the robot was successfully connected:
# Load robot support with waypoint and path support
iocshLoad("urRobot.iocsh", "PREFIX=bcur:, IP=164.54.104.148")
# Set up UR Dashboard server
URDashboardConfig("asyn_dash", "164.54.104.148", "0.1")
[2026-03-05 12:46:05.750] [info] Connected to UR Dashboard server
dbLoadRecords("/net/s100dserv/xorApps/epics/synApps_6_3/support/urRobot/db/dashboard.db", "P=bcur:, PORT=asyn_dash, ADDR=0")
# Set up UR RTDE Receive interface
RTDEReceiveConfig("asyn_rtde_recv", "164.54.104.148", "0.02")
[2026-03-05 12:46:06.331] [info] Connected to UR RTDE Receive interface
dbLoadRecords("/net/s100dserv/xorApps/epics/synApps_6_3/support/urRobot/db/rtde_receive.db", "P=bcur:, PORT=asyn_rtde_recv, ADDR=0")
# Set up UR RTDE I/O interface
RTDEInOutConfig("asyn_rtde_io", "164.54.104.148", "0.1")
[2026-03-05 12:46:07.134] [info] Connected to UR RTDE IO interface
dbLoadRecords("/net/s100dserv/xorApps/epics/synApps_6_3/support/urRobot/db/rtde_io.db", "P=bcur:, PORT=asyn_rtde_io, ADDR=0")
# Set up UR RTDE Control interface
RTDEControlConfig("asyn_rtde_ctrl", "164.54.104.148", "0.02")
[2026-03-05 12:46:08.405] [info] Connected to UR RTDE Control interface
dbLoadRecords("/net/s100dserv/xorApps/epics/synApps_6_3/support/urRobot/db/rtde_control.db", "P=bcur:, PORT=asyn_rtde_ctrl, ADDR=0")
If something went wrong, you will see messages in the console (beginning with “[error]”) which should explain the issue. The most common problems are an incorrect IP address or the robot not being powered on and breaks releases (if using RTDE control interface).
6. To start the provided GUIs, use the example urRobot/iocs/urExample/start_urRobot_gui script. You may need to adjust the paths to the display manager executables in this script.