ReOrienting the Tool
MrRoboto
✭
I am using a banner ultrasonic sensor mounted to my end of arm tooling to detect and pickup pieces of glass in a crate. The problem I am having is the angle the glass is packaged is not always the same. I only have one sensor to detect the glass currently, but is there anyway I could use TWO sensors to detect the surface of the glass and use those signals to reorient the tooling? Any help on this topic would be greatly appreciated! If you need more information, let me know.
Best Regards,
Eric
Regards,
MrRoboto
MrRoboto
0
Comments
-
Hi,You will need at minimum two sensors. Here the routine I use. Notice that some digital inputs used by routine are cross connected somehow with the real sensors used.About the sensors, ultrasonic sensor works fine with flat glasses and when you just need to find glass. With curved glass you will have lot of problems with ultrasonic sensors. I haven't try ultrasonic sensor with reorient, so I can't say will it work (is it accurate enough). I use mechanical contact (sensors) to be sure of accuracy of reorientation.PROC Reorient()
! Routine: Reorient 3.7.2007
! Modified:
! Routine reorient the gripper
!
VAR bool bDoneOnce:=FALSE;
!
SendMsg(100);
PathResol 25;
! Which tool TCP values to use
IF DiToolSizeMax=1 THEN
! Gripper is in its maximum size
toolDownLeftSen:=ToolLeftMax;
toolDownRghtSen:=ToolRightMax;
ELSEIF DiToolSizeMin=1 THEN
! Gripper is in its minimum size
toolDownLeftSen:=ToolLeftMin;
toolDownRghtSen:=ToolRightMin;
ELSE
! Gripper is in middle size
toolDownLeftSen:=ToolLeftMed;
toolDownRghtSen:=ToolRightMed;
ENDIF
!
! Rotate the gripper so both lower sensors touch the glass
! Witch sensor is touching the glass
bDoneOnce:=FALSE;
WHILE DiDownSensors=0 DO
IF DiSenDownRight=1 AND DiSenDownLeft=0 THEN
! Right one is touching
pCurr:=CRobT(Tool:=toolDownRghtSenWObj:=wobjRack);
SearchLSStop, DiSenDownLeft, pCurr, RelTool(pCurr,0,0,0Rx:=10), vRotSlow, toolDownRghtSenWObj:=wobjRack;
bDoneOnce:=TRUE;
ELSEIF DiSenDownRight=0 AND DiSenDownLeft=1 THEN
! Left one is touching
pCurr:=CRobT(Tool:=toolDownLeftSenWObj:=wobjRack);
SearchLSStop, DiSenDownRight, pCurr, RelTool(pCurr,0,0,0Rx:=-10), vRotSlow, toolDownLeftSenWObj:=wobjRack;
bDoneOnce:=TRUE;
ELSEIF DiSenDownRight=1 AND DiSenDownLeft=1 THEN
! Right and left are touching
pCurr:=CRobT(Tool:=toolDownRghtSenWObj:=wobjRack);
pBack.rot:=pCurr.rot;
bDoneOnce:=TRUE;
ELSE
! We don't have lower sensors touching the glass
! Search glass, We haven't yet reorient so search the surface
pCurr:=CRobT(Tool:=ToolGlssDwnEdgeWObj:=wobjRack);
pBack.rot:=pCurr.rot;
SearchLSStop,DiSomeDwnSensor,pCurr,pBack,v20,ToolGlssDwnEdgeWObj:=wobjRack;
bDoneOnce:=FALSE;
ENDIF
!
! If we are done the reoreintation and not have both sensor on glass just push a bit
IF bDoneOnce AND DiDownSensors=0 THEN
! We don't have lower sensors touching the glass
! Search glass, we already have reorient so just push little bit
pCurr:=CRobT(Tool:=ToolGlssDwnEdgeWObj:=wobjRack);
pBack.rot:=pCurr.rot;
SearchLSStop,DiDownSensors,pCurr,pBack,v20,ToolGlssDwnEdgeWObj:=wobjRack;
ENDIF
ENDWHILE
!
! Should we use also the gripper upper vacuum cup
IF DiUseUpCup=1 THEN
! Rotate the upper sensor to touch the glass
IF DiSenUp=0 THEN
! Get the upper sensor on the glass
WaitTime 0.2;
pCurr:=CRobT(Tool:=ToolGripperWObj:=wobjRack);
SearchLSStop, DiSenUp, pCurr, RelTool(pCurr,0,0,0Ry:=7), vRotSlow, ToolGripperWObj:=wobjRack;
ENDIF
!
! Make sure that all sensors are on glass
IF DiAllSensors=0 THEN
! We don't have all sensor touching the glass
! Search glass
pCurr:=CRobT(Tool:=ToolGlssDwnEdgeWObj:=wobjRack);
pBack.rot:=pCurr.rot;
SearchLSStop,DiAllSensors,pCurr,pBack,v20,ToolGlssDwnEdgeWObj:=wobjRack;
ENDIF
ELSE
!
! Make sure that both bottom sensors are on glass
IF DiDownSensors=0 THEN
! We don't have both sensor touching the glass
! Search glass
pCurr:=CRobT(Tool:=ToolGlssDwnEdgeWObj:=wobjRack);
pBack.rot:=pCurr.rot;
SearchLSStop,DiDownSensors,pCurr,pBack,v20,ToolGlssDwnEdgeWObj:=wobjRack;
ENDIF
ENDIF
PathResol 100;
ERROR
IF ERRNO=ERR_WHLSEARCH THEN
! 10 deg angle is not enough - Error
Alarm (100);
VacuumOff;
pCurr:=CRobT(Tool:=ToolGripperWObj:=wobjRack);
MoveL RelTool(pCurr,0,0,-100),v50,z1,ToolGripperWObj:=wobjRack;
bRejectMission:=TRUE;
RETURN;
ENDIF
IF ERRNO=ERR_SIGSUPSEARCH THEN
! Sensor already on
TRYNEXT;
ENDIF
ENDPROCRegards,Mika0 -
I appreciate your information. Is your routine developed for picking up flat sheets of glass? We are using suction cups instead of grippers to pickup our glass sheets. They are 22" x 25" in size. We have 3 suction cups in a triangular formation for picking these up. One other question I have for you is what kind of mechanical sensors are you using to reorient the tool? I was just curious as to who the supplier was.Again, thanks for your input. It might be a little bit before I get to try it out. I am currently on another assignment, but I will let you know as soon as I can how it worked for us.Thanks again.Regards,
MrRoboto0
Categories
- All Categories
- 5.5K RobotStudio
- 396 UpFeed
- 18 Tutorials
- 13 RobotApps
- 297 PowerPacs
- 405 RobotStudio S4
- 1.8K Developer Tools
- 250 ScreenMaker
- 2.8K Robot Controller
- 316 IRC5
- 61 OmniCore
- 7 RCS (Realistic Controller Simulation)
- 800 RAPID Programming
- AppStudio
- 3 RobotStudio AR Viewer
- 18 Wizard Easy Programming
- 105 Collaborative Robots
- 5 Job listings