Add ABB120 demo suite and docs

This commit is contained in:
wangdequan
2026-06-28 20:58:18 +08:00
parent 84a5b54195
commit 65187499d6
820 changed files with 215410 additions and 211 deletions

View File

@@ -0,0 +1,9 @@
language grl 0.1
module W2MinimalModule
const speed v_joint = joint(40 %)
const zone zf = fine
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
proc main()
movej home speed v_joint zone zf
end
end

View File

@@ -0,0 +1,45 @@
language grl 0.1
module W2DataTargetToolFrame
persistent tool gripper = tool {
tcp: pose(0 mm, 0 mm, 100 mm, 0 deg, 0 deg, 0 deg),
mass: 1.25 kg,
cog: [0 mm, 0 mm, 40 mm]
}
persistent frame fixture = frame { origin: pose(800 mm, 0 mm, 0 mm, 0 deg, 0 deg, 0 deg) }
const bool use_fixture = true
const int slot_count = 2
const real blend_scale = 1.5
const string recipe = "w2"
const time settle = 250 ms
const length lift = 80 mm
const angle face = 90 deg
const percent safe_percent = 40 %
const speed vj = joint(safe_percent)
const speed vl = linear(120 mm/s)
const zone z5 = z(5 mm)
const pose safe_pose = pose(500 mm, 0 mm, 100 mm, 0 deg, 0 deg, face)
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
target approach = joint_target {
joints: [0 deg, -22.918312 deg, 28.647890 deg, 0 deg, 11.459156 deg, 0 deg]
}
target pick = pose_target {
pose: pose(500 mm, 0 mm, 0 mm, 0 deg, 0 deg, 90 deg),
config: robot_config(0, 0, 1),
tool: gripper,
frame: fixture
}
target pick_q = pose_target {
pose: poseq(500 mm, 30 mm, 0 mm, 0, 0, 0, 1),
tool: gripper,
frame: fixture
}
proc main()
set_tool gripper
set_frame fixture
set_speed vl
set_zone z5
movej home speed vj zone fine
movej approach speed vj zone z5 tool gripper frame fixture
movel pick_q speed vl zone z5 tool gripper frame fixture
end
end

View File

@@ -0,0 +1,20 @@
language grl 0.1
module W2ExpressionMath
const real blend_base = 5 + 5
const real trig_value = sin(30 deg)
const bool math_ok = (10 mm + 5 mm) > 12 mm and not false
const speed v_pick = linear(100 + 50 mm/s)
const speed v_safe = linear(max(50 mm/s, 200 mm/s / 2))
const zone z_app = z(clamp(blend_base mm, 1 mm, 50 mm))
target home = joint_target {
joints: [0 deg, (10 + 5) deg, -30 deg, 0 deg, abs(-15) deg, round(pi) deg]
}
target pick = pose_target {
pose: pose(400 + 50 mm, 20 * 2 mm, sqrt(90000) mm, 0 deg, 0 deg, atan2(1, 1))
}
proc main()
movej home speed v_safe zone z_app
movel pick speed v_pick zone z_app
wait io.ai[2] > 0.5 timeout 1 + 1 s
end
end

View File

@@ -0,0 +1,21 @@
language grl 0.1
module W2MotionAllTypes
persistent tool gripper = tool { tcp: pose(0 mm, 0 mm, 80 mm, 0 deg, 0 deg, 0 deg), mass: 1 kg }
persistent frame fixture = frame { origin: pose(800 mm, 0 mm, 0 mm, 0 deg, 0 deg, 0 deg) }
const speed vj = joint(45 %)
const speed vl = linear(150 mm/s)
const zone z10 = z(10 mm)
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
target start = pose_target { pose: pose(500 mm, 0 mm, 0 mm, 0 deg, 0 deg, 0 deg), tool: gripper, frame: fixture }
target mid = pose_target { pose: pose(550 mm, 50 mm, 0 mm, 0 deg, 0 deg, 0 deg), tool: gripper, frame: fixture }
target finish = pose_target { pose: pose(600 mm, 0 mm, 0 mm, 0 deg, 0 deg, 0 deg), tool: gripper, frame: fixture }
proc main()
set_tool gripper
set_frame fixture
set_speed vl
set_zone z10
movej home speed vj zone fine
movel start
movec via mid target finish speed linear(100 mm/s) zone fine
end
end

View File

@@ -0,0 +1,26 @@
language grl 0.1
module W2PathEvents
const speed vj = joint(35 %)
const speed vl = linear(120 mm/s)
const zone z10 = z(10 mm)
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
target pick = joint_target { joints: [11.459156 deg, -20.053523 deg, 25.783101 deg, 5.729578 deg, -11.459156 deg, 17.188734 deg] }
target place = joint_target { joints: [-20.053523 deg, -14.323945 deg, 20.053523 deg, -14.323945 deg, 8.594367 deg, -22.918312 deg] }
path generated_path {
source {
type: "cad_curve",
id: "edge_032",
sample_distance: 5 mm
}
defaults { speed: vj, zone: z10 }
point p_home movej home zone fine
event before p_pick io.do[10] = true
point p_pick movej pick speed vj
event after p_pick wait io.di[10] == true timeout 2 s on_timeout alarm "pick sensor timeout"
point p_place movej place speed vj
event at p_place distance 10 mm pulse io.do[11] duration 100 ms
}
proc main()
run_path generated_path
end
end

View File

@@ -0,0 +1,26 @@
language grl 0.1
module W2OperationProcess
const speed v = joint(35 %)
const zone zf = fine
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
path op_path {
defaults { speed: v, zone: zf }
point p0 movej home
}
operation pick_op {
kind: handling
path: op_path
process {
gripper: "main_clamp",
dwell_ms: 50 + 50 ms,
clamp_force: max(20, 10)
}
start_action:
io.do[1] = true
end_action:
io.do[1] = false
}
proc main()
run_operation pick_op
end
end

View File

@@ -0,0 +1,23 @@
language grl 0.1
module W2IOWaitPulse
const speed v = joint(35 %)
const zone zf = fine
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
path io_path {
defaults { speed: v, zone: zf }
point p0 movej home
event at p0 distance 5 + 5 mm pulse io.do[20] duration 50 + 50 ms
}
proc main()
io.do[1] = true
io.ao[1] = 0.75
io.go[1] = 3
wait all(io.di[1] == true, io.di[2] == false) timeout 1 s on_timeout alarm "all timeout"
wait any(io.di[3] == true, io.di[4] == true) timeout 1 s
wait rising(io.di[5]) timeout 1 s
wait falling(io.di[6]) timeout 1 s
wait changed(io.di[7]) timeout 1 s
pulse io.do[2] duration 50 + 50 ms
run_path io_path
end
end

View File

@@ -0,0 +1,35 @@
language grl 0.1
module W2ControlFlow
const speed v = joint(30 %)
const zone zf = fine
var bool ready = true
var bool fault = false
var int mode = 2
var int retry = 0
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
proc main()
if ready == true
movej home speed v zone zf
elseif fault == true
alarm FAULT "fault"
else
alarm NOT_READY "not ready"
end
while retry < 1
retry = 1
continue
end
for i = 1 to 2 step 1
movej home speed v zone zf
end
switch mode
case 1
alarm MODE1 "mode 1"
break
case 2
movej home speed v zone zf
default
alarm MODE_OTHER "mode other"
end
end
end

View File

@@ -0,0 +1,26 @@
language grl 0.1
module W2ProcFuncCall
const speed v = joint(30 %)
const zone zf = fine
var int global_count = 0
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
proc read_part(out bool ok)
ok = true
end
proc increment_retry(inout int retry)
retry = 1
end
func bool can_run(in int retry, in int max_retry)
return retry < max_retry
end
proc main()
var bool ok = false
var int retry = 0
call read_part(ok)
call increment_retry(retry)
if retry < 3
movej home speed v zone zf
end
return
end
end

View File

@@ -0,0 +1,25 @@
language grl 0.1
module W2ExceptionAlarm
const speed v = joint(30 %)
const zone zf = fine
target home = joint_target { joints: [0 deg, 0 deg, 0 deg, 0 deg, 0 deg, 0 deg] }
trap recover_trap()
raise E_STOP
end
task background cycle 20 ms
alarm TASK_MONITOR "task boundary"
end
proc main()
alarm START "start" severity info
try
movej home speed v zone zf
raise E_PICK_FAILED
catch E_PICK_FAILED
alarm RECOVER "recovering" severity warning
finally
alarm CLEANUP "cleanup"
end
enable interrupt guard
disable interrupt guard
end
end

View File

@@ -0,0 +1,80 @@
language grl 0.1
module W2FullSpecExample
persistent tool gripper = tool {
tcp: pose(0 mm, 0 mm, 120 mm, 0 deg, 0 deg, 0 deg),
mass: 1.5 kg
}
persistent frame fixture = frame {
origin: pose(800 mm, 0 mm, 200 mm, 0 deg, 0 deg, 0 deg)
}
const speed v_fast = joint(55 %)
const speed v_pick = linear(180 mm/s)
const zone z_pick = z(10 mm)
target home = joint_target {
joints: [0 deg, -20 deg, 40 deg, 0 deg, 30 deg, 0 deg]
}
target pick = pose_target {
pose: pose(500 mm, 120 mm, 300 mm, 180 deg, 0 deg, 90 deg),
config: robot_config(0, 0, 1),
tool: gripper,
frame: fixture
}
target place = pose_target {
pose: pose(650 mm, -100 mm, 320 mm, 180 deg, 0 deg, 90 deg),
config: robot_config(0, 0, 1),
tool: gripper,
frame: fixture
}
path pick_path {
source {
type: "generated_example",
id: "pick_path"
}
defaults {
tool: gripper,
frame: fixture,
speed: v_pick,
zone: z_pick
}
point approach movej home speed v_fast zone fine
point above_pick movel pick offset z 100 mm
point at_pick movel pick zone fine
event after at_pick io.do[1] = true
event after at_pick wait io.di[1] == true timeout 2 s on_timeout alarm "Clamp close timeout"
point leave_pick movel pick offset z 100 mm
}
path place_path {
defaults {
tool: gripper,
frame: fixture,
speed: v_pick,
zone: z_pick
}
point above_place movel place offset z 100 mm
point at_place movel place zone fine
event after at_place io.do[1] = false
event after at_place wait io.di[2] == true timeout 2 s on_timeout alarm "Clamp open timeout"
point leave_place movel place offset z 100 mm
}
operation pick_op {
kind: handling
path: pick_path
process {
gripper: "main_clamp"
}
}
operation place_op {
kind: handling
path: place_path
process {
gripper: "main_clamp"
}
}
proc main()
set_tool gripper
set_frame fixture
run_operation pick_op
run_operation place_op
movej home speed v_fast zone fine
end
end