案例/模板说明
机械臂主控主函数说明
机械臂主控的 api 调用示例在 Main_example 子程序中。
以下为机械臂主控模板代码,注意对工控机返回的 err_code 进行判断。
轨迹移动同步模板
1 CALL: xyzConnectSocket() ; 连接工控机
2 (* "" *)
3 flow_name := "traj_sync.t" ;
4 CALL: err_code := xyzSwitchFlow(flow_name) ; 切换任务为轨迹移动同步
5 IF err_code <> 0 THEN
6 MESSAGE ("Failed") ;
7 ENDPROG ;
8 END_IF ;
9 (* "" *)
10 ws_id := 0 ;
11 item_codename := "item1" ;
12 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
13 IF err_code <> 0 THEN
14 MESSAGE ("Failed") ;
15 ENDPROG ;
16 END_IF ;
17 (* "" *)
18 io.setDOut(1, false) ; io 初始化
19 MJOINT (POINTJ(0, 0, 0, 0, -90, 0), v50, fine, tool0) ; 机械臂回到初始位置
20 (* "" *)
21 (* "" *)
22 WHILE true DO
23 ws_id := 0 ;
24 CALL: err_code := xyzReqPickPlace(ws_id) ; 请求计算注册抓取
25 IF err_code <> 0 THEN
26 MESSAGE ("Failed") ;
27 ENDPROG ;
28 END_IF ;
29 (* "" *)
30 ws_id := 0 ;
31 CALL: err_code,num,pipeline_num,register_num := xyzGetPickIn(ws_id) ; 获取抓取入筐轨迹
32 IF err_code <> 0 THEN
33 MESSAGE ("Failed") ;
34 ENDPROG ;
35 END_IF ;
36 IF num < 1 THEN
37 GOTO clear_tote_exit ; 无可抓取工件,退出
38 END_IF ;
39 CALL: xyzExecutePickInTraj(num) ; 执行抓取入筐轨迹
40 io.setDOut(1, true) ; 抓取工件
41 (* "" *)
42 ws_id := 0 ;
43 CALL: err_code,num,pipeline_num,register_num := xyzGetPickOut(ws_id) ; 获取抓取出筐轨迹
44 IF err_code <> 0 THEN
45 MESSAGE ("Failed") ;
46 ENDPROG ;
47 END_IF ;
48 CALL: xyzExecutePickOutTraj(num) ; 执行抓取出筐轨迹
49 (* "" *)
50 ws_id := 0 ;
51 CALL: err_code,num,pipeline_num,register_num := xyzGetPlaceIn(ws_id) ; 获取放置入筐轨迹
52 IF err_code <> 0 THEN
53 MESSAGE ("Failed") ;
54 ENDPROG ;
55 END_IF ;
56 CALL: xyzExecuteTraj(num) ; 执行放置入筐轨迹
57 io.setDOut(1, false) ; 放置工件
58 (* "" *)
59 ws_id := 0 ;
60 CALL: err_code,num,pipeline_num,register_num := xyzGetPlaceOut(ws_id) ; 获取放置出筐轨迹
61 IF err_code <> 0 THEN
62 MESSAGE ("Failed") ;
63 ENDPROG ;
64 END_IF ;
65 CALL: xyzExecuteTraj(num) ; 执行放置出筐轨迹
66 (* "" *)
67 END_WHILE ;
68 LABEL clear_tote_exit :
轨迹移动异步模板
1 CALL: xyzConnectSocket() ; 连接工控机
2 (* "" *)
3 flow_name := "traj_async.t" ;
4 CALL: err_code := xyzSwitchFlow(flow_name) ; 切换任务为轨迹移动异步
5 IF err_code <> 0 THEN
6 MESSAGE ("Failed") ;
7 ENDPROG ;
8 END_IF ;
9 (* "" *)
10 ws_id := 0 ;
11 item_codename := "item1" ;
12 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
13 IF err_code <> 0 THEN
14 MESSAGE ("Failed") ;
15 ENDPROG ;
16 END_IF ;
17 (* "" *)
18 io.setDOut(1, false) ; io 初始化
19 MJOINT (POINTJ(0, 0, 0, 0, -90, 0), v50, fine, tool0) ; 机械臂回到初始位置
20 WHILE true DO
21 ws_id := 0 ;
22 CALL: err_code := xyzReqPickPlace(ws_id) ; 请求计算注册抓取
23 IF err_code <> 0 THEN
24 MESSAGE ("Failed") ;
25 ENDPROG ;
26 END_IF ;
27 (* "" *)
28 ws_id := 0 ;
29 CALL: err_code,num,pipeline_num,register_num := xyzGetPickIn(ws_id) ; 获取抓取入筐轨迹
30 IF err_code <> 0 THEN
31 MESSAGE ("Failed") ;
32 ENDPROG ;
33 END_IF ;
34 IF num < 1 THEN
35 GOTO clear_tote_exit ; 无可抓取工件,退出
36 END_IF ;
37 CALL: xyzExecutePickInTraj(num) ; 执行抓取入筐轨迹
38 io.setDOut(1, true) ;
39 (* "" *)
40 ws_id := 0 ;
41 CALL: err_code,num,pipeline_num,register_num := xyzGetPickOut(ws_id) ; 获取抓取出筐轨迹
42 IF err_code <> 0 THEN
43 MESSAGE ("Failed") ;
44 ENDPROG ;
45 END_IF ;
46 CALL: xyzExecutePickOutTraj(num) ; 执行抓取出筐轨迹
47 (* "" *)
48 ws_id := 0 ;
49 CALL: err_code := xyzReqPickPlace(ws_id) ; 提前请求计算下一次注册放置
50 IF err_code <> 0 THEN
51 MESSAGE ("Failed") ;
52 ENDPROG ;
53 END_IF ;
54 (* "" *)
55 ws_id := 0 ;
56 CALL: err_code,num,pipeline_num,register_num := xyzGetPlaceIn(ws_id) ; 获取放置入筐轨迹
57 IF err_code <> 0 THEN
58 MESSAGE ("Failed") ;
59 ENDPROG ;
60 END_IF ;
61 CALL: xyzExecuteTraj(num) ; 执行放置入筐轨迹
62 io.setDOut(1, false) ; 放置工件
63 (* "" *)
64 ws_id := 0 ;
65 CALL: err_code,num,pipeline_num,register_num := xyzGetPlaceOut(ws_id) ; 获取放置出筐轨迹
66 IF err_code <> 0 THEN
67 MESSAGE ("Failed") ;
68 ENDPROG ;
69 END_IF ;
70 CALL: xyzExecuteTraj(num) ; 执行放置出筐轨迹
71 END_WHILE ;
72 LABEL clear_tote_exit :
73 (* "" *)
座标移动基础模板
1 CALL: xyzConnectSocket() ; 连接工控机
2 (* "" *)
3 flow_name := "cart_basic.t" ;
4 CALL: err_code := xyzSwitchFlow(flow_name) ; 切换任务为座标移动基础任务
5 IF err_code <> 0 THEN
6 MESSAGE ("Failed") ;
7 ENDPROG ;
8 END_IF ;
9 (* "" *)
10 ws_id := 0 ;
11 item_codename := "item1" ;
12 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
13 IF err_code <> 0 THEN
14 MESSAGE ("Failed") ;
15 ENDPROG ;
16 END_IF ;
17 (* "" *)
18 io.setDOut(1, false) ; io 初始化
19 MJOINT (POINTJ(0, 0, 0, 0, -90, 0), v50, fine, tool0) ; 机械臂回到初始位置
20 (* "" *)
21 is_eye_in_hand := true ; 是否为眼在手上
22 WHILE true DO
23 IF is_eye_in_hand = true THEN 如果眼在手上
24 (* "move to scan pose when eye is in hand" *) 机械臂移动到拍照位置
25 MLIN (POINTC(476.45, -0.14, 768.17, 180, 0, 180, CFG1), v500, fine, tool0) ;
26 CALL: err_code := xyzSendCurrentCartPose() ; 发送当前位姿
27 IF err_code <> 0 THEN
28 MESSAGE ("Failed") ;
29 ENDPROG ;
30 END_IF ;
31 (* "" *)
32 END_IF ;
33 (* "" *)
34 ws_id := 0 ;
35 CALL: err_code,grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求抓取位姿
36 IF err_code <> 0 THEN
37 MESSAGE ("Failed") ;
38 ENDPROG ;
39 END_IF ;
40 获取抓取位姿
41 CALL: err_code,grasp_pose,num,pipeline_num,register_num := xyzGetGraspPose(grasp_pose_token) ;
42 IF err_code <> 0 THEN
43 MESSAGE ("Failed") ;
44 ENDPROG ;
45 END_IF ;
46 (* "" *)
47 IF num < 1 THEN
48 MESSAGE ("no grasp pose, continue requesting next grasp pose") ; 无可抓取工件,继续请求下一个抓取位姿
49 TIMERSTART (timer1, 5) ;
50 WAIT (TIMERQ(timer1)) ; 等待 5 秒
51 CONTINUE ;
52 END_IF ;
53 (* "" *)
54 MLIN (grasp_pose, v500, fine, tool0) ; 机械臂移动到抓取位姿
55 io.setDOut(1, true) ; 抓取工件
56 (* "move to place pose" *) 机械臂移动到放置位姿
57 MLIN (POINTC(476.45, -0.14, 768.17, 180, 0, 180, CFG1), v500, fine, tool0) ;
58 io.setDOut(1, false) ; 放置工件
59 (* "" *)
60 END_WHILE ;
61 (* "" *)
座标移动二次定位模板
1 CALL: xyzConnectSocket() ; 连接工控机
2 (* "" *)
3 flow_name := "cart_repo.t" ;
4 CALL: err_code := xyzSwitchFlow(flow_name) ; 切换任务为座标移动二次定位任务
5 IF err_code <> 0 THEN
6 MESSAGE ("Failed") ;
7 ENDPROG ;
8 END_IF ;
9 (* "" *)
10 io.setDOut(1, false) ; io 初始化
11 io.setDOut(2, false) ;
12 (* "move to home" *)
13 MJOINT (POINTJ(0, 0, 0, 0, -90, 0), v50, fine, tool0) ; 机械臂回到初始位置
14 (* "" *)
15 (* "camera1 rough position" *) 相机1 粗定位
16 ws_id := 0 ;
17 item_codename := "item1" ;
18 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
19 IF err_code <> 0 THEN
20 MESSAGE ("Failed") ;
21 ENDPROG ;
22 END_IF ;
23 (* "" *)
24 ws_id := 0 ;
25 CALL: err_code,grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求粗抓取位姿
26 IF err_code <> 0 THEN
27 MESSAGE ("Failed") ;
28 ENDPROG ;
29 END_IF ;
30 (* "" *)
31 WHILE true DO
32 (* "camera1 get rough position" *) 相机1 获取粗抓取位姿
33 CALL: err_code,rough_grasp_pose,rough_grasp_pose_num,rough_pipeline_num,rough_register_num := xyzGetGraspPose(grasp_pose_token) ;
34 IF err_code <> 0 THEN
35 MESSAGE ("Failed") ;
36 ENDPROG ;
37 END_IF ;
38 (* "" *)
39 IF rough_grasp_pose_num < 1 THEN 如果无可抓取工件,抓隔板
40 ws_id := 0 ;
41 item_codename := "board" ;
42 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件为隔板
43 IF err_code <> 0 THEN
44 MESSAGE ("Failed") ;
45 ENDPROG ;
46 END_IF ;
47 ws_id := 0 ;
48 CALL: err_code,board_grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求隔板抓取位姿
49 IF err_code <> 0 THEN
50 MESSAGE ("Failed") ;
51 ENDPROG ;
52 END_IF ;
53 (* "camera1 grasp board" *) 相机1 抓取隔板
54 CALL: err_code,board_grasp_pose,board_grasp_pose_num,board_pipeline_num,board_register_num := xyzGetGraspPose(board_grasp_pose_token) ;
55 IF err_code <> 0 THEN
56 MESSAGE ("Failed") ;
57 ENDPROG ;
58 END_IF ;
59 IF board_grasp_pose_num < 1 THEN 如果无可抓取隔板
60 (* "no board, you can change tote" *)
61 ENDPROG ;
62 END_IF ;
63 MLIN (board_grasp_pose, v500, fine, tool0) ; 机械臂移动到隔板抓取位姿
64 io.setDOut(1, true) ; 抓取隔板
65 (* "move to board place pose" *) 机械臂移动到隔板放置位姿
66 MLIN (POINTC(476.45, -0.14, 768.17, 180, 0, 180, CFG1), v500, fine, tool0) ;
67 io.setDOut(1, false) ; 放置隔板
68 (* "camera1 rough position" *) 相机1 粗定位
69 ws_id := 0 ;
70 item_codename := "item1" ;
71 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
72 IF err_code <> 0 THEN
73 MESSAGE ("Failed") ;
74 ENDPROG ;
75 END_IF ;
76 ws_id := 0 ;
77 CALL: err_code,grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求粗抓取位姿
78 IF err_code <> 0 THEN
79 MESSAGE ("Failed") ;
80 ENDPROG ;
81 END_IF ;
82 CONTINUE ;
83 (* "" *)
84 END_IF ;
85 (* "item exists, camera2 reposition" *) 有可抓取工件,相机2 二次定位
86 (* "move to rough grasp pose" *) 机械臂移动到粗抓取位姿
87 MLIN (rough_grasp_pose, v500, fine, tool0) ;
88 CALL: err_code := xyzSendCurrentCartPose() ; 发送当前位姿
89 IF err_code <> 0 THEN
90 MESSAGE ("Failed") ;
91 ENDPROG ;
92 END_IF ;
93 (* "" *)
94 ws_id := 1 ;
95 item_codename := "item1" ;
96 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
97 IF err_code <> 0 THEN
98 MESSAGE ("Failed") ;
99 ENDPROG ;
100 END_IF ;
101 ws_id := 1 ;
102 CALL: err_code,grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求精确抓取位姿
103 IF err_code <> 0 THEN
104 MESSAGE ("Failed") ;
105 ENDPROG ;
106 END_IF ;
107 (* "" *) 获取精确抓取位姿
108 CALL: err_code,fine_grasp_pose,fine_grasp_pose_num,fine_pipeline_num,fine_register_num := xyzGetGraspPose(grasp_pose_token) ;
109 IF err_code <> 0 THEN
110 MESSAGE ("Failed") ;
111 ENDPROG ;
112 END_IF ;
113 IF fine_grasp_pose_num < 1 THEN 如果无可抓取工件,退出
114 ENDPROG ;
115 END_IF ;
116 MLIN (fine_grasp_pose, v500, fine, tool0) ; 机械臂移动到精确抓取位姿
117 io.setDOut(2, true) ; 抓取工件
118 (* "move to item place pose" *) 机械臂移动到放置位姿
119 MLIN (POINTC(476.45, -0.14, 768.17, 180, 0, 180, CFG1), v500, fine, tool0) ;
120 io.setDOut(2, false) ; 放置工件
121 (* "" *)
122 (* "camera1 rough position" *) 相机1 粗定位
123 ws_id := 0 ;
124 item_codename := "item1" ;
125 CALL: err_code := xyzSwitchItem(ws_id, item_codename) ; 切换工件
126 IF err_code <> 0 THEN
127 MESSAGE ("Failed") ;
128 ENDPROG ;
129 END_IF ;
130 ws_id := 0 ;
131 CALL: err_code,grasp_pose_token := xyzReqGraspPose(ws_id) ; 请求粗抓取位姿
132 IF err_code <> 0 THEN
133 MESSAGE ("Failed") ;
134 ENDPROG ;
135 END_IF ;
136 (* "" *)
137 (* "" *)
138 END_WHILE ;
139 (* "" *)
140 (* "" *)