Robotic Fabrication Control (with ABB)
L.E.A.R.N.
Robot Control
L.E.A.R.N.
Robot Control
Vendor | Language | Software |
ABB Staubli UR KUKA | RAPID VAL3 URScript KRL | ABB RobotStudio Staubli Robotics Suite URSim KUKA WorkVisual |
Proprietary language and tools:
L.E.A.R.N.
Robot Control
L.E.A.R.N.
Example real-time online control
L.E.A.R.N.
Robot control plugins from within CAD design environments
L.E.A.R.N.
ABB CRB 15000 a.k.a GoFa collaborative robot
L.E.A.R.N.
GoFa robot
Controller
Teach Pendant
Tool Changer
Pneumatic gripper
3D printed fingers
L.E.A.R.N.
Robot Studio
L.E.A.R.N.
compas_ags
Algebraic Graph Statics
compas_assembly
Block Assemblies
compas_ml
Machine Learning
compas_3gs
3D Graphic Statics
compas_dem
Discrete Element Modeling (3DEC)
compas_rocking
Collapse Mechanisms
compas_tna
Thrust Network Analysis
compas_knit
Spatial Knitting
compas_bend
Bending Active Structures
compas_fea
Finite Element Analysis
compas_dr6
6DOF Dynamic Relaxation
compas_ctrl
Active On-site Control
compas_fab
Robotic Fabrication
compas_rrc
Robotic Control
compas_pattern
Mesh Topology Finding
L.E.A.R.N.
compas_ags
Algebraic Graph Statics
compas_assembly
Block Assemblies
compas_ml
Machine Learning
compas_3gs
3D Graphic Statics
compas_dem
Discrete Element Modeling (3DEC)
compas_rocking
Collapse Mechanisms
compas_tna
Thrust Network Analysis
compas_knit
Spatial Knitting
compas_bend
Bending Active Structures
compas_fea
Finite Element Analysis
compas_dr6
6DOF Dynamic Relaxation
compas_ctrl
Active On-site Control
compas_fab
Robotic Fabrication
compas_rrc
Robotic Control
compas_pattern
Mesh Topology Finding
L.E.A.R.N.
Installation of dependencies
L.E.A.R.N.
Compas RRC behaviors
Features
Communication
L.E.A.R.N.
non-blocking and blocking send
import compas_rrc as rrc
ros = rrc.RosClient()
ros.run()
abb = rrc.AbbClient(ros, "/rob1")
abb.send(rrc.PrintText("Hello"))
abb.send_and_wait(rrc.PrintText("LEARN!"), timeout=5)
ros.close()
import compas_rrc as rrc
ros = rrc.RosClient()
ros.run()
abb = rrc.AbbClient(ros, "/rob1")
future = abb.send(rrc.PrintText("Hello", feedback_level=rrc.FeedbackLevel.DONE))
# FeedbackLevel.DONE = 1, FeedbackLevel.NONE = 0
print("Execute other code.")
done = future.result(timeout=3.0)
ros.close()
14
14
L.E.A.R.N.
Work Objects & Tools
L.E.A.R.N.
Compas RRC Instructions - Basics
rrc.SetTool("tool0")
rrc.SetWorkObject("wobj0")
acc = 100 # Unit [%]
ramp = 100 # Unit [%]
rrc.SetAcceleration(acc, ramp)
override = 100 # Unit [%]
max_tcp = 2500 # Unit [mm/s]
rrc.SetMaxSpeed(override, max_tcp)
16
16
L.E.A.R.N.
Compas RRC Instructions - Motions - Joints, Frames & Robtarget
GetJoints
MoveToJoints
Robot and external axes as axes values, in degrees
GetFrame
MoveToFrame
Robot in cartesian space as a frame, in millimeters
The external axes (if any) stay in the same position
For MoveToFrame, the IK is computed by the controller and end up with weird robot movements
GetRobtarget
MoveToRobtarget
Robot in cartesian space with explicit external axes values
L.E.A.R.N.
Motion
Zones
There are two types of zones: fine and fly-by.
If zone is FINE, the movement terminates as a stop point, and the program execution will not continue until robot reach the stop point. For all other zones, the movement terminates as a fly-by point, and the program execution continues about 100 ms before the robot reaches the zone.
FINE = -1 (Fine point)
Z0 = 0.3 mm
Z1 = 1 mm
Z5 = 5 mm
Zx = x mm
LINEAR
Moves the robot linearly to the specified position.
JOINT
Moves the robot not linearly to the specified position by coordinating all joints to start and end together.
This type of motion can be faster than LINEAR motion.
L.E.A.R.N.
Compas RRC Instructions - Motions
speed = 100
frame = abb.send_and_wait(rrc.GetFrame()
frame.point[0] -= 50
abb.send_and_wait(rrc.MoveToFrame(frame, speed, rrc.Zone.FINE, rrc.Motion.LINEAR))
robot_joints, external_axes = abb.send_and_wait(rrc.GetJoints())
robot_joints.rax_1 += 15
abb.send_and_wait(rrc.MoveToJoints(robot_joints, external_axes, speed, rrc.Zone.FINE)
frame, external_axes = abb.send_and_wait(rrc.GetRobtarget())
frame.point[0] -= 50
abb.send_and_wait(rrc.MoveToRobtarget(frame, external_axes, speed, rrc.Zone.FINE)
19
19
L.E.A.R.N.
Compas RRC Instructions - Utilities
abb.send_and_wait(rrc.Noop()) # ping
abb.send_and_wait(rrc.PrintText("Print my text on the FlexPendant"))
abb.send_and_wait(rrc.WaitTime(5.0))
abb.send_and_wait(rrc.Stop(feedback_level=rrc.FeedbackLevel.DONE))
abb.send_and_wait(rrc.ReadWatch())
20
20
L.E.A.R.N.
Compas RRC Instructions - Signals
abb.send_and_wait(rrc.ReadAnalog("ai_1"))
abb.send_and_wait(rrc.ReadDigital("di_1"))
abb.send_and_wait(rrc.ReadGroup("gi_1"))
abb.send_and_wait(rrc.SetAnalog("ao_1", -3.33))
abb.send_and_wait(rrc.SetDigital("do_1", 1))
abb.send_and_wait(rrc.SetGroup("go_1", 33))
abb.send_and_wait(rrc.PulseDigital("do_1", 2.5))
21
21
L.E.A.R.N.
Compas RRC Instructions - Custom instructions
# Custom instruction name (RAPID Procedure name), max 80 char
instruction = "r_RRC_CustomInstruction"
# string value list of max. 8 strings, max 80 char per string
string_values = ["Mytext Text"]
# float value list of max. 36 floats
float_values = [42]
# Custom instruction
done = abb.send_and_wait(rrc.CustomInstruction(instruction, string_values, float_values))
22
22
L.E.A.R.N.
Compas RRC Instructions
Instructions
L.E.A.R.N.
Example: Pick & place process
pick approach frame
pick frame
place approach frame
place frame
L.E.A.R.N.