Discord
@nshlapo/waypoints-simulation
Simulation
1
0
Public

Waypoints Simulation

This library allows users to build more sophisticated spatial navigation by using a network of waypoints that agents can navigate between.

Using the Waypoints library consists of creating Waypoint agents across your simulation, and specifying the appropriate parameters and behaviors on Navigating agents.

Waypoint Agents

Waypoint agents do not need any behaviors to function correctly. They only need to be initialized in the locations you want, with the correct set of properties.

Proper layout of a waypoint network will likely resemble a visibility graph.

Each waypoint agent must contain a map property which provides information to navigating agents. Each waypoint has an entry which specifies the location of the next waypoint an agent should move to, in order to eventually reach the destination waypoint.

For instance, the value for waypoint_b will not necessarily contain the position for waypoint_b. If an agent must first pass through waypoint_c, then it will contain waypoint_c's position.

Waypoint agents may be hidden from view to reduce clutter in your simulation. Set the agent's hidden property to false to remvove it from the 3D Viewer.

Example definition

{
  "agent_name": "waypoint_center",
  "agent_type": "waypoint,
  "map": {
    "waypoint_north": [0, 5, 0],
    "waypoint_east": [5, 0, 0],
    "waypoint_west": [-5, 0, 0],
    "waypoint_south": [0, -5, 0],
  },
  "position": [0, 0, 0],
  "hidden": true
}

Navigating Agents

Navigating agents must contain specific fields and behaviors in order to make use of the waypoints. They navigate with a two-part process, each handled by different behaviors.

Follow Waypoints

Agents first follow the network of waypoints until they reach the waypoint closest to their destination. This is handled by navigate.js, and causes agents to move in straight lines between waypoints.

Whenever it reaches a waypoint, the agent will consult the waypoint agent's map to determine its next destination.

Move to Destination

If you've laid out the waypoints properly, once an agent reaches its destination waypoint, it will now be able to move in a direct line to its destination location. This movement is handled by move.js and will also be based on the speed of the agent.

Agent's will store the location of the final waypoint in prev_waypoint_position in order to help an agent navigate again once it finishes its tasks in the current destination.

Example definition

{
  "behaviors": [navigate.js, move.js],
  "position: [3, 0, 0],
  "direction": [-1, 0, 0],
  "speed": 2,
  "destination_waypoint": "waypoint_north",
  "destination_position": [0, 5, 0]
  "move_to": [0, 0, 0]
}