1 of 24

Robotic Fabrication Control (with ABB)

L.E.A.R.N.

2 of 24

Robot Control

  • Offline control
  • Online control
  • real-time
  • non-real-time

L.E.A.R.N.

3 of 24

Robot Control

  • Offline control
  • Online control
  • real-time
  • non-real-time

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.

4 of 24

Robot Control

  • Offline control
  • Online control
  • real-time
  • non-real-time

L.E.A.R.N.

5 of 24

Example real-time online control

L.E.A.R.N.

6 of 24

Robot control plugins from within CAD design environments

L.E.A.R.N.

7 of 24

ABB CRB 15000 a.k.a GoFa collaborative robot

L.E.A.R.N.

8 of 24

GoFa robot

Controller

Teach Pendant

Tool Changer

Pneumatic gripper

3D printed fingers

L.E.A.R.N.

9 of 24

Robot Studio

L.E.A.R.N.

10 of 24

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.

11 of 24

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.

12 of 24

Installation of dependencies

L.E.A.R.N.

13 of 24

Compas RRC behaviors

Features

  • Live communication
  • Multi-Tasking
  • Multi-Move
  • Multi-Controller
  • Multi-Location

Communication

  • Send ~75ms
  • Send and Wait ~150ms
  • Send and Wait in the Future
  • Send and Subscribe ~75ms

L.E.A.R.N.

14 of 24

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.

15 of 24

Work Objects & Tools

L.E.A.R.N.

16 of 24

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.

17 of 24

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.

18 of 24

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.

19 of 24

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.

20 of 24

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.

21 of 24

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.

22 of 24

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.

23 of 24

Compas RRC Instructions

Instructions

  • Basics
    • Set Tool
    • Set WorkObject
    • Set Max Speed
    • Set Acceleration
  • Motions
    • Get Frame
    • Move to Frame
    • Get Joints
    • Move to Joints
    • Get Robtarget
    • Move to Robtarget
  • Custom
    • Custom instructions

  • Utilities
    • Wait Time (Delay)
    • Stop (Pause)
    • Stop Watch
    • No-op (Ping)
    • Print Text
  • Signals
    • Read analog
    • Set analog
    • Read digital
    • Set digital
    • Pulse digital
    • Read group signal
    • Set group signal

L.E.A.R.N.

24 of 24

Example: Pick & place process

pick approach frame

pick frame

place approach frame

place frame

L.E.A.R.N.