Programme d’exemple 16 : MM_S16_Viz_GetDirection
Introduction du programme
Description |
Après que le robot a obtenu la trajectoire planifiée et terminé la saisie, il adopte différentes stratégies de pose en fonction de l’orientation du groupe d’objets de travail. |
||
File path |
Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier en utilisant le chemin
|
||
Project |
Projet Mech-Vision et projet Mech-Viz (l’outil est un préenseur à vide de dépalettisation) |
||
Prerequisites |
|
| Ce programme d’exemple est fourni uniquement à titre de référence. Avant d’utiliser le programme, veuillez le modifier en fonction du scénario réel. |
Description du programme
Cette partie décrit le programme d’exemple MM_S16_Viz_GetDirection.
| Par rapport au programme d’exemple MM_S15_Viz_GetDoList, ce programme d’exemple ne contient que la modification suivante (le code de cette modification est en gras). En conséquence, seule la modification est décrite dans la section suivante. Pour les parties de MM_S16_Viz_GetDirection identiques à celles de MM_S15_Viz_GetDoList, voir Programme d’exemple 15 : MM_S15_Viz_GetDoList. |
MODULE MM_S16_Viz_GetDirection
!----------------------------------------------------------
! FUNCTION: trigger Mech-Viz project, then get planned path
! and get box direction using command 210
! Mech-Mind, 2023-12-25
!----------------------------------------------------------
!define local num variables
LOCAL VAR num pose_num:=0;
LOCAL VAR num status:=0;
LOCAL VAR num vis_pose_num:=0;
LOCAL VAR num count:=0;
LOCAL VAR num box_direction:=0;
LOCAL VAR num movetype{5}:=[0,0,0,0,0];
LOCAL VAR num toolnum{5}:=[0,0,0,0,0];
LOCAL VAR num speed{5}:=[0,0,0,0,0];
!define local joint&pose variables
LOCAL CONST jointtarget home:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL CONST jointtarget snap_jps:=[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS robtarget camera_capture:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL VAR robtarget pickpoint:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL VAR robtarget drop_waypoint_1:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL VAR robtarget drop_1:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL VAR robtarget drop_waypoint_2:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL VAR robtarget drop_2:=[[302.00,0.00,558.00],[0,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
LOCAL PERS jointtarget jps{5}:=
[
[[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[1.2008,45.8522,-13.6729,0.1512,57.8163,176.689],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[1.1835,39.2938,-17.0883,0.1382,67.7901,176.701],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[36.2634,-36.6956,48.5019,-1.0197,78.1304,356.473],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],
[[0,0,0,0,90,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]
];
!define local tooldata variables
LOCAL PERS tooldata gripper1:=[TRUE,[[0,0,0],[1,0,0,0]],[0.001,[0,0,0.001],[1,0,0,0],0,0,0]];
PROC Sample_16()
!set the acceleration parameters
AccSet 50, 50;
!set the velocity parameters
VelSet 50, 1000;
!move to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
!initialize communication parameters (initialization is required only once)
MM_Init_Socket "127.0.0.1",50000,300;
!move to image-capturing position
MoveL camera_capture,v1000,fine,gripper1;
!open socket connection
MM_Open_Socket;
!trigger Mech-Viz project
MM_Start_Viz 2,snap_jps;
!get planned path
MM_Get_PlanData 0, 3, pose_num, vis_pose_num, status;
!check whether planned path has been got from Mech-Viz successfully
IF status <> 2100 THEN
!add error handling logic here according to different error codes
!e.g.: status=2038 means no point cloud in ROI
Stop;
ENDIF
!get gripper control signal list
MM_Get_Dolist 0,0;
!close socket connection
MM_Close_Socket;
!save waypoints of the planned path to local variables one by one
FOR i FROM 1 TO pose_num DO
count:=i;
MM_Get_PlanJps count,3,JPS{count},movetype{count},toolnum{count},speed{count};
ENDFOR
!follow the planned path to pick
FOR j FROM 1 TO pose_num DO
count:=j;
MoveAbsJ jps{count},v1000,fine,gripper1;
!set gripper control signal when current waypoint is picking waypoint
IF count=vis_pose_num THEN
!add object grasping logic here
Stop;
!set gripper control signal
!MM_Set_DoList 0, 1, go16_1;
!MM_Set_DoList 0, 2, go16_2;
!MM_Set_DoList 0, 3, go16_3;
!MM_Set_DoList 0, 4, go16_4;
ENDIF
ENDFOR
!get box direction status from planned results
box_direction:=MM_Plan_Results{17};
!place the box according to its direction
IF box_direction=0 THEN
!move to intermediate waypoint of placing
MoveJ drop_waypoint_1,v1000,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop_1,0,0,-100),v1000,fine,gripper1;
!move to placing waypoint
MoveL drop_1,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_1, 0;"
Stop;
!move to departure waypoint of placing
MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
ELSE
!move to intermediate waypoint of placing
MoveJ drop_waypoint_2,v1000,z50,gripper1;
!move to approach waypoint of placing
MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
!move to placing waypoint
MoveL drop_2,v300,fine,gripper1;
!add object releasing logic here, such as "setdo DO_1, 0;"
Stop;
!move to departure waypoint of placing
MoveL RelTool(drop_2,0,0,-100),v1000,fine,gripper1;
ENDIF
!move back to robot home position
MoveAbsJ home\NoEOffs,v3000,fine,gripper1;
ENDPROC
ENDMODULE
Le flux de travail correspondant au code du programme d’exemple ci-dessus est illustré dans la figure ci-dessous.
Le tableau ci-dessous décrit le code en gras. Vous pouvez cliquer sur l’hyperlien du nom de la commande pour en afficher la description détaillée.
| Feature | Code and description | ||
|---|---|---|---|
Obtenir l’orientation du groupe d’objets de travail |
Le robot obtient les données Vision Move des points de passage en exécutant la commande MM_Get_PlanData, puis enregistre les données Vision Move des points de passage qui sont stockées dans la mémoire du robot dans le tableau global MM_Plan_Results en exécutant la commande MM_Get_PlanJps. Dans le tableau global MM_Plan_Results, MM_Plan_Results{17} spécifie la relation d’orientation entre le groupe d’objets de travail et le côté long du préenseur à vide. 0 indique parallèle, tandis que 1 indique vertical. Le code ci-dessus indique que si MM_Plan_Results{17} est affecté à la variable box_direction, la variable box_direction indiquera l’orientation du groupe d’objets de travail. |
||
Adopter une stratégie de pose en fonction de l’orientation du groupe d’objets de travail |
Le code ci-dessus indique que si le groupe d’objets de travail est parallèle au côté long du préenseur à vide (c.-à-d. box_direction est défini sur 0), le groupe d’objets de travail sera posé à drop_1 ; sinon, le groupe d’objets de travail sera posé à drop_2. |