I'm trying to optimize a pick and place problem based on the previous robot positions.
Let's assume that all the positions, which represents working stations, are numbered from 0 to 5 and there's a SCARA robot between them. Every position does need some fixed time to process that piece and the piece must go to all stations before we can call it done . A PLC controls all of this process so it knows when a piece is ready somewhere inside one of these stations and sends the robot there to pick it.
It is also important to know that stations 2,3,4 do the same process so a part must go either to station 2, 3 or 4 and then to station 5. So the first part comes to position 0 (position 0 generates parts), the robot picks that part and places it to position 1. After a fixed time the robot takes that part and moves it to station 2. Now the position 1 is empty so the robot takes a part from position 0 and puts it into position 1. Every movement of the robot takes a small time but not 0, which affects the whole process cycle time.
I'm trying to include that robot movement time into the parts processing time so when a piece is ready inside a station, the robot should be right there ready to pick it and place it somewhere else.
A real experiment based on 5 stations numbered 0 to 5 gives the following order of the positions:
0-1, 1-2, 0-1, 2-5, 1-2, 0-1, 1-3, 0-1, 2-5, 1-2, 0-1, 1-3
...
The positions can be grouped because once a part is picked (the digit before '-') i know where it will be placed (the digit after) .
How can I estimate the next picking point so that the robot can move itself there before the plc tells it to ?
CodePudding user response:
I don't know if your robot has any resources for this... If it doesn't, you can probably do it on your PLC.
Since the time of your process in each station is fixed, I'm thinking of using 5 or 6 separate timers, one for each station. Once the robot leaves the part in place you could start the specific timer for that station. When the robot is idle, it consults the remaining time of each one and goes to the one with the shortest time to complete.
This could be improved if you have a way to calculate (or look up in a list) the travel time from the current point to the station that is about to end... for example, the robot is at station 0 and station 1 is at 1.0 s from finishing and station 5 is 0.99999s from finishing... it would probably be more efficient to go to position 1 (closer) instead of going to position 5 (far).
Obviously this won't work if you don't know how long the part will take to be available at one of the stations, but in that case if you use a buffer to calculate the average waiting time of a part at a station (in which case you would have a sensor or something to check), you could estimate that the part is about to be ready using timers as well.