The transporters with path-guided type of navigation conduct their movement along paths and nodes connected to create a network. The source and destination points can be located in different networks / levels: transporters can move between these networks / levels through network ports or lifts.
Unlike moving resources defined with ResourcePool block, transporters in this mode avoid collisions and give way at crossroads. In case of collision, they have to wait for a period of time before resuming their movement. These options can be customized in TransporterControl block.
The navigation type, home locations and additional rules of movement for a fleet of transporters are defined in the properties of the TransporterFleet block.
By default, path-guided transporters recognize only transporters of the same type as obstacles. You can make them recognize transporters with free space navigation as well, by selecting the Recognize all transporters option in the properties of the TransporterFleet block.
Transporters can either avoid network nodes with restricted access or ignore the restrictions.
In AnyLogic 8.5.2 the movement algorithm of the transporters with path-guided navigation has been improved for a more realistic performance during possible collisions at the intersections and on neighbouring paths. Transporter's field of vision fully conforms to its movement on the path.
Below you can find the major points of improvement illustrated.
The size of the rectangles in the images matches the dimensions of the transporters. The arrows indicate the direction of movement.
|A transporter that has stopped or is moving slowly|
|An overtaking transporter|
|A possible overlap between the two transporters according to the previously realized logic of the path-guided transporters movement|
The transporters could overlap while moving through different intersections (including the point nodes minimized to single points) as displayed in the images below.
The overtaking transporter can see the transporter in front of it and stop at the distance specified in Min distance to obstacle parameter. This is realized for transporters moving both on the same path and on different paths. The overtaking transporter also slows down as soon as it sees the transporter in front of it.
The transporters meeting at a point node could overlap, but still would move through the intersection without a collision.
If the intersection is implemented with a point node resized to minimum or the diameter of the node is less than the value specified in Min distance to obstacle parameter, then a collision occurs. In the image below the red transporter cannot avoid bumping into the transporter AGV while moving through the intersection.
If the paths in the network were too close to each other, the transporters would overlap and proceed without a collision.
The transporters would stop to resolve a collision.
The collisions could only be resolved inside the nodes, therefore some transporters would wait for the incoming transporter at the node for a long time. When the transporters met at the node, a collision would occur and then the transporters would move along overlapping each other.
A collision can be resolved on the path. In the situation described in the image above, the red transporter doesn't have to wait for the green transporter at the node. They will meet on the path and move along after a timeout specified for collision resolving. Visually, the transporters will stop on the path during the specified timeout and then move along overlapping each other.
By default transporters select the shortest possible route to the destination, but custom routing can be defined in TransporterControl block.
You can specify the conditions that must be met so that the transporter can enter nodes and paths in the network. You can select nodes and paths which the transporter will avoid while still moving along the shortest possible route. These settings will be applied to all transporter fleets with path-guided type navigation.
To specify individual routing rules for a single transporter fleet, you have to select the Custom routing option in the properties of the corresponding TransporterFleet block. These settings will have priority over the settings specified in TransporterControl block.
If an obstacle appears when the transporter is already on its way, you can call the recalculateRoute() function and it will recalculate the transporter's route to avoid collision. Recalculation will still allow for the custom routing algorithm if you have specified one before.
You can obtain the information about the transporter's route from its current location to the destination by calling the transporter's getRouteData() function.
Demo model: Rack System with AGV
Creating a custom route for transporters programmatically
Free space navigation