UR Driver and Control Documentation
A manual for controlling UR robots at a low level.
Contents:
- Chapter 1: Getting Started with UR Robot Control
- 1.1 What Is Universal Robots?
- 1.2 CB Series and e-Series
- 1.3 Ways to Control a UR Robot from Python
- 1.4 What Is the Official RTDE Interface?
- 1.5 SDU Robotics’
ur_rtde - 1.6 Difference from Dashboard Server
- 1.7 Architecture Used in This Documentation
- Next Chapter
- Chapter 2: Installation and Connection Setup
- 2.1 System Configuration
- 2.2 Required Software
- 2.3 Installation by Operating System
- 2.4 Robot IP Address
- 2.5 Verifying Network Connectivity
- 2.6 What Is Remote Control?
- 2.7 Enabling Remote Control
- 2.8 Remote Mode
- 2.9 Connecting from Python
- 2.10 Receive Interface
- 2.11 IO Interface
- 2.12 Common Errors
- 2.13 Connection Checklist
- Next Chapter
- Chapter 3: Architecture of RTDE and
ur_rtde - 3.1 Official Universal Robots RTDE
- 3.2 SDU Robotics
ur_rtde - 3.3 What
RTDEControlInterfaceActually Does - 3.4
RTDEReceiveInterface - 3.5
RTDEIOInterface - 3.6 Dashboard Server
- 3.7 Primary / Secondary Interface
- 3.8 Division of Responsibilities in
URCtrl - Summary
- Chapter 4: RTDEControlInterface
- 4.1 What Is RTDEControlInterface?
- 4.2 Categories of Motion Commands
- 4.3 moveJ
- 4.4 moveL
- 4.5 Difference Between moveJ and moveL
- 4.6 moveP
- 4.7 Acceleration
- 4.8 Speed
- 4.9 Asynchronous Execution
- 4.10 Stop Commands
- 4.11 Return Values
- 4.12 Recommended Pattern
- 4.13 Usage in ur_ctrl.py
- Summary
- Chapter 5: RTDEReceiveInterface
- 5.1 What Is the Receive Interface?
- 5.2 Creating an Instance
- 5.3 Reading Joint Positions
- 5.4 Joint Velocities
- 5.5 Reading the TCP Pose
- 5.6 TCP Speed
- 5.7 TCP Force
- 5.8 Robot Mode
- 5.9 Safety Mode
- 5.10 Runtime State
- 5.11 Digital Input
- 5.12 Digital Output
- 5.13 Joint Temperatures
- 5.14 Determining Motion Completion
- 5.15 Detecting a Stop
- 5.16 The Concept Behind wait_move()
- 5.17 Monitoring Loop
- 5.18 Characteristics of RTDEReceive
- Summary
- Chapter 6: RTDEIOInterface
- 6.1 What Is I/O?
- 6.2 Types of I/O
- 6.3 RTDEIOInterface
- 6.4 Standard Digital Output
- 6.5 Standard Digital Input
- 6.6 Tool Digital Output
- 6.7 Tool Digital Input
- 6.8 Analog Output
- 6.9 Analog Input
- 6.10 Gripper Control Example
- 6.11 Toggle Operation
- 6.12 Combining Motion and I/O
- 6.13 Waiting for an Input
- 6.14 Precautions for I/O Control
- 6.15 Implementation in ur_ctrl.py
- Summary
- Chapter 7: Dashboard Server
- 7.1 What Is the Dashboard Server?
- 7.2 Connection Port
- 7.3 Sending Commands
- 7.4 Power On
- 7.5 Brake Release
- 7.6 Program Load
- 7.7 Program Play
- 7.8 Pause
- 7.9 Stop
- 7.10 Shutdown
- 7.11 Robot Status
- 7.12 Program Status
- 7.13 Safety Status
- 7.14 Protective Stop
- 7.15 Clearing a Protective Stop
- 7.16 Safety Popup
- 7.17 Typical Recovery Sequence
- 7.18 Division of Responsibilities with RTDE
- 7.19 Use in ur_ctrl.py
- 7.20 Basic Sequence for Automatic Operation
- Summary
- Chapter 8: moveJ
- 8.1 What Is moveJ?
- 8.2 Illustration of the Motion
- 8.3 How Does the TCP Move?
- 8.4 Applications
- 8.5 Arguments
- 8.6 q
- 8.7 speed
- 8.8 acceleration
- 8.9 asynchronous
- 8.10 Return Value
- 8.11 Blend Radius
- 8.12 Determining Arrival
- 8.13 Joint Limits
- 8.14 Collision Detection
- 8.15 Advantages of moveJ
- 8.16 Disadvantages of moveJ
- 8.17 Comparison with moveL
- 8.18 Recommended Usage
- Summary
- Chapter 9: moveL
- 9.1 What Is moveL?
- 9.2 Difference from moveJ
- 9.3 What Is the TCP?
- 9.4 Pose
- 9.5 Orientation
- 9.6 Internal Processing
- 9.7 Inverse Kinematics
- 9.8 Singularities
- 9.9 Speed
- 9.10 Acceleration
- 9.11 Blend
- 9.12 Manufacturing Applications
- 9.13 Applications Unsuitable for moveL
- 9.14 Unreachable Poses
- 9.15 Orientation Changes
- 9.16 Choosing Between moveJ and moveL
- 9.17 Common Mistakes
- 9.18 Implementation in ur_ctrl.py
- 9.19 Guidelines for Choosing moveJ or moveL
- Summary
- Chapter 10: speedJ and speedL
- 10.1 Differences from Move Commands
- 10.2 What Is speedJ?
- 10.3 Arguments
- 10.4 qd
- 10.5 time
- 10.6 speedL
- 10.7 speedL Example
- 10.8 speedStop
- 10.9 Characteristics of Velocity Control
- 10.10 Applications
- 10.11 Comparison with Move Commands
- 10.12 Common Mistakes
- 10.13 Design in ur_ctrl.py
- Summary
- Chapter 11: servoJ and servoL
- 11.1 Differences from moveJ
- 11.2 How servoJ Works
- 11.3 Basic Syntax
- 11.4 q
- 11.5 dt
- 11.6 lookahead_time
- 11.7 gain
- 11.8 speed and acceleration
- 11.9 Why Commands Must Be Sent Every Cycle
- 11.10 servoStop()
- 11.11 servoL
- 11.12 Comparison with moveJ
- 11.13 Difference from speedJ
- 11.14 Joystick Control
- 11.15 Visual Servoing
- 11.16 Communication Latency
- 11.17 Common Mistakes
- 11.18 Design in ur_ctrl.py
- 11.19 When to Use servoJ
- Summary
- Chapter 12: Force Mode
- 12.1 Position Control and Force Control
- 12.2 Applications of Force Mode
- 12.3 Basic Sequence
- 12.4 Basic API
- 12.5 task_frame
- 12.6 selection_vector
- 12.7 wrench
- 12.8 force_type
- 12.9 limits
- 12.10 Operation During Force Mode
- 12.11 Reading the Force
- 12.12 Stopping Force Mode
- 12.13 Common Applications
- 12.14 Precautions
- 12.15 Difference from moveJ
- 12.16 Design in ur_ctrl.py
- Summary
- Chapter 13: Freedrive Mode
- 13.1 What Is Freedrive?
- 13.2 Relationship to Teaching
- 13.3 Freedrive on the Teach Pendant
- 13.4 Starting Freedrive from Python
- 13.5 Ending Freedrive
- 13.6 Reading the Current Position
- 13.7 Example Teaching Program
- 13.8 Differences from COBOTTA
- 13.9 Payload Configuration
- 13.10 Safety
- 13.11 Relationship to Remote Control
- 13.12 e-Series
- 13.13 CB Series
- 13.14 Typical Use Case
- 13.15 Python Example
- 13.16 Implementation in ur_ctrl.py
- Summary
- Chapter 14: Coordinate Systems (Base, TCP, Tool, and Feature)
- 14.1 Why Are Coordinate Systems Necessary?
- 14.2 Base Coordinates
- 14.3 Tool Coordinates
- 14.4 TCP
- 14.5 TCP Configuration
- 14.6 Pose
- 14.7 Units
- 14.8 Rotation Vector
- 14.9 Why Not Euler Angles?
- 14.10 Motion in Base Coordinates
- 14.11 Motion in Tool Coordinates
- 14.12 Difference Between Base and Tool
- 14.13 Feature Coordinates
- 14.14 Workpiece Coordinates
- 14.15 Coordinate Transformations
- 14.16 poseTrans()
- 14.17 poseInv()
- 14.18 Common Mistakes
- 14.19 Design in ur_ctrl.py
- 14.20 Practical Considerations
- Summary
- Chapter 15: Forward and Inverse Kinematics
- 15.1 Joint Space and Cartesian Space
- 15.2 Forward Kinematics
- 15.3 Inverse Kinematics
- 15.4 Why Multiple Solutions Exist
- 15.5 Wrist Flip
- 15.6 Why moveL Is Difficult
- 15.7 Unreachable Positions
- 15.8 Joint Limits
- 15.9 Singularities
- 15.10 Wrist Singularity
- 15.11 Elbow Singularity
- 15.12 Differences Between moveJ and moveL
- 15.13 getInverseKinematics()
- 15.14 Forward Kinematics
- 15.15 Safety Check
- 15.16 Typical Usage Example
- 15.17 Implementation in ur_ctrl.py
- 15.18 Common Problems
- Summary
- Chapter 16: Safety, Protective Stops, and Error Recovery
- 16.1 UR States
- 16.2 Robot Mode
- 16.3 Runtime State
- 16.4 Safety Mode
- 16.5 Protective Stop
- 16.6 Emergency Stop
- 16.7 Safeguard Stop
- 16.8 Fault
- 16.9 Detecting Errors
- 16.10 Recovery Through the Dashboard
- 16.11 Recommended Recovery Sequence
- 16.12 RuntimeError
- 16.13 Return Values of Move Commands
- 16.14 wait_move()
- 16.15 reset_error()
- 16.16 turn_on_motor()
- 16.17 Automatic Recovery
- 16.18 State-Monitoring Thread
- 16.19 Design in ur_ctrl.py
- 16.20 Recommended Workflow for Practical Operation
- Summary
A manual covering basic UR control, with particular emphasis on troubleshooting and developing a deeper understanding of the fundamental mechanisms of UR robots.