We worked on a proof of concept about 18 months ago like this. We stored the data in three lists, two lists contained the x and y center point of each of the positions on the pallet and the third list was rotation so that we could rotate the hand into the correct orientation. Doing this we could then use pose_trans from a known start point (the first point in the pallet) and pick each of the elements in sequence.
Since UR will not allow you to have a list of lists [[1,2,3],[4,5,6]...] you could use a list of poses to store all of the pallet information in a single list but then you would have to pull out the data separately such as this
BeforeStart palletConfig≔[p[0,0,0,0,0,0],p[50,0,0,0,0,0],p[100,0,0,0,0,0],p[25,25,0,0,0,90],p[75,25,0,0,0,90]] positionCounter≔0Robot Program currPalletPosit≔palletConfig[positionCounter]
x≔currPalletPosit[0]/1000 y≔currPalletPosit[1]/1000 rx≔d2r(currPalletPosit[5]) pickPosition≔pose_trans(initialPose,p[x,y,0,0,0,rx]) overPick≔pose_trans(pickPosition,p[0,0,-50/1000,0,0,0]) MoveJ Waypoint_1 overPick pickPosition overPick Waypoint_1 positionCounter≔positionCounter+1 If positionCounter≥length(palletConfig) positionCounter≔0
Here is what that example project looks like running, you can see the 90-degree rotation on the second row of parts. It is picking 3 from the first row, and 2 from the second row. The code is attached below
Has anyone encountered an application that involved a pretty complicated pallet? Like 3 one direction 2 rotated 90 degrees than back to three another direction. If so how did you manage to do it in the programming? Any UR Cap out there?
I was able to make the pallet for the customer however they have about 15 different pallet patterns so I was seeing if anyone had encountered this and figured an easier way. Thank you!