question

Steven Hamoen avatar image
0 Likes"
Steven Hamoen asked Luciano Cavallero commented

Conditional closing of AGV paths

@anthony.johnson

It is possible to define different path classes and in combination with load types you can specify very detailed how an AGV should drive through your system. But we are currently looking for a way that, depending on load type, some paths can not be taken. In this case there are AGV's with a very small height that can drive underneath loads to pick them up but when they picked up a load, a large amount of paths are not available anymore. Is there a solution to block/close paths based on their loads? For instance defining a speed of zero would feel like a nice solution.

FlexSim 20.1.3
agvflexsim 20.1.3pathblocking
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

1 Answer

anthony.johnson avatar image
0 Likes"
anthony.johnson answered Luciano Cavallero commented

Yes, you can customize routing based on a specific AGV's state. However, at this point there's not an easy "user-facing" way to do it. It's all done either through creating your own module or by putting a special "customization delegate" into the tree.

Most of the information you need is in the article I posted: Customizing AGV Speed with Jerk. You would essentially create an AGV customization delegate, either through the tree or in your own module. In this case, though, you would implement the "shouldBuildCustomRoute" and "getPathTravelWeight" functions. shouldBuildCustomRoute is called at the beginning of an AGV travel operation, and should return 1 if you want the AGV functionality to recalculate the path based on your own weightings. The getPathTravelWeight function should return a "weight" for a section of path that the AGV could potentially travel on. This is usually a simple distance along the path, but in your case you would return a very high value for paths that you don't want the AGV to travel on.

You can refer to the header files attached in that article to see what parameters are passed into the tree.

I should note there will be a CPU speed cost to implementing such a strategy. In traditional operation, the routing table is built only once, and AGVs route off of that stored routing table. If you implement custom routing, though, this means that it will re-run dijkstra's algorithm on each AGV's travel operation. The effect on speed could be significant.

· 4
5 |100000

Up to 12 attachments (including images) can be used with a maximum of 23.8 MiB each and 47.7 MiB total.

Steven Hamoen avatar image Steven Hamoen commented ·

@anthony.johnson Thanks for answering altough this is ofcourse not the answer we hoped for ;-) At the moment the travel network and model are quite large so we are affraid the speed penalty is too high (plus we don't have the time now to dive into it)

I hope a simple solution is on the dev list? Because I think with the current AGV developments (smaller and lower) this will be a highly requested feature in the near future.

1 Like 1 ·
Luciano Cavallero avatar image Luciano Cavallero commented ·

@anthony.johnson, I have, like Steven, some agv paths that be crossed only be some AGV types. I tried to use the "getPathTravelWeight" to exclude some path from the route calculation trying return, naively, -1 when not allowed but with no effect. There is another way to excelude completely a path from the custom route calculation?

0 Likes 0 ·
anthony.johnson avatar image anthony.johnson ♦♦ Luciano Cavallero commented ·

This is the only way to do it. And I think -1 wouldn't work. You would need to return a very high value like 100000000.

0 Likes 0 ·
Luciano Cavallero avatar image Luciano Cavallero anthony.johnson ♦♦ commented ·

Thanks Anthony.

0 Likes 0 ·