API Commands#
The INavigation Python command APIs are called from the omni.anim.navigation.core module.
NavMesh events#
NavMesh baking and updates are reported via Events 2.0. Subscribe using the event dispatcher and these constants from
omni.anim.navigation.core:
GLOBAL_EVENT_NAVMESH_UPDATED — Fires when the NavMesh finishes updating/baking. Payload:
{'status': bool}(true on success, false on failure or cancellation).GLOBAL_EVENT_NAVMESH_UPDATING — Fires during baking progress, at least once. Payload:
{'progress': float}(0 to 1).Example
import carb.eventdispatcher import omni.anim.navigation.core as nav inav = nav.acquire_interface() def on_navmesh_updated(event): print("NavMesh updated, success:", event.payload.get("status")) dispatcher = carb.eventdispatcher.get_eventdispatcher() sub = dispatcher.observe_event( observer_name="my_observer", event_name=nav.GLOBAL_EVENT_NAVMESH_UPDATED, on_event=on_navmesh_updated ) inav.start_navmesh_baking()
INavigation.start_navmesh_baking#
Starts a task to asynchronously bake a NavMesh for the currently opened stage. Subscribe to NavMesh events (see above) to observe baking progress and completion.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking()
INavigation.start_navmesh_baking_and_wait#
Starts a task to bake a NavMesh for the currently opened stage and waits for baking to complete.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait()
INavigation.cancel_navmesh_baking#
Cancels all pending NavMesh baking tasks.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.cancel_navmesh_baking()
INavigation.is_navmesh_baking#
Checks if the NavMesh is currently baking.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() baking = inav.is_navmesh_baking()
INavigation.get_navmesh#
Returns the currently baked NavMesh if available. The NavMesh is immutable.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh()
INavigation.create_area#
Creates a new area and returns the index of the new area, or -1 if the max area count was exceeded.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() area_index = inav.create_area()
INavigation.destroy_area#
Destroys the area at the specified index.
Arguments
area_index (int): The index of the area to be removed.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() area_index = inav.create_area() inav.destroy_area(area_index)
INavigation.get_area_count()#
Returns the number of navigation areas defined in the stage.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() area_count = inav.get_area_count()
INavigation.find_area#
Finds and returns area index of an area by name, or -1 if no area is found.
Arguments
area_name (str): The name of the area to find.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() not_walkable_area_index = inav.find_area("NotWalkable")
INavigation.get_area_name#
Returns the name of the area at the specified index.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() area_name = inav.get_area_name(0)
INavigation.set_area_name#
Sets the name of the area at the specified index.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1. area_name (str): The new area name.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() new_area_index = inav.create_area() inav.set_area_name(new_area_index, "MyNewArea")
INavigation.get_area_color#
Returns the area color given an area index.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() area_color = inav.get_area_color(0)
INavigation.set_area_color#
Sets the color of the area at the specified
area_indextoarea_colorfor debug visualization.Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1. area_color (int): The color to set the area to for debug visualization.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() new_area_index = inav.create_area() inav.set_area_name(new_area_index, "MyNewArea") def rgb_to_int(red, green, blue): return (red << 16) + (green << 8) + blue inav.set_area_color(new_area_index, rgb_to_int(255, 255, 0))
INavigation.get_area_default_cost#
Returns the default cost of the area at the specified index.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() default_cost = inav.get_area_default_cost(0)
INavigation.set_area_default_cost#
Sets the default cost of the area at the specified index.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1. default_cost (float): The default cost to set the area to. Must be >= 0 or -1 to specify the area is inaccessible.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() new_area_index = inav.create_area() inav.set_area_name(new_area_index, "MyNewArea") inav.set_area_default_cost(new_area_index, 10.0)
INavigation.set_random_seed#
Sets the random seed to allow for deterministic random outputs.
Arguments
randomizer_id (str): Identifies a randomizer to set the seed for. This enables each consumer of randomness to return its own deterministic outcomes. seed (int): The seed to use for the randomizer.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() session = "robots" inav.set_random_seed(session, 12345) inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() random_point = navmesh.query_random_point(session)
INavigation.get_cache_dir#
Returns the directory that stores various cached Navigation files.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() cache_dir = inav.get_cache_dir()
INavigation.clear_cache_dir#
Clears the cached NavMesh files in the cache dir.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.clear_cache_dir()
INavigation.get_area_names#
Returns a list of all navigation area names defined in the stage (same order as area indices).
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() names = inav.get_area_names()
INavigation.reorder_areas#
Atomically reorders the area table. Use this to avoid the destructive overwrite that can occur when reordering via individual set calls. Prim attributes are not renamed because
nav:areastores area names (strings), not indices.Arguments
new_order (list of int): A list of lengthget_area_count().new_order[i]is the old area index that should occupy positioniafter reordering.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() count = inav.get_area_count() # Swap first two areas new_order = [1, 0] + list(range(2, count)) inav.reorder_areas(new_order)
The INavMesh Python command APIs are called from the omni.anim.navigation.core module.
NavAgentDesc#
Agent descriptor used by path and query APIs. Attributes: radius (float), height (float), collision_gap (float). Default constructor uses 0 for all. Pass as the agent argument to
query_shortest_path,query_closest_point, andquery_random_pointwhen you need to override the baked agent bounds.
INavMesh.query_shortest_path#
Queries to find a shortest path on the NavMesh between a start and end position.
Arguments
start_pos (carb.Float3): The starting position of the path. end_pos (carb.Float3): The ending position of the path. agent (NavAgentDesc): Optional. Agent descriptor for the path query; default uses baked agent bounds. area_costs (float[]): Optional. Overridden area costs for the path, or empty array to use default area costs. straighten (bool): True to straighten the shortest path from A*, false to leave as-is. prev_navmesh_path (INavMeshPath or None): Optional. Previous path to reuse for A*; can speed up incremental queries.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end)
INavMesh.query_closest_point#
Queries to find the closest point on the NavMesh to the specified target. Returns a tuple
(point, island_id): the closest point (carb.Float3) and the island id (int), or(None, -1)if not found.The NavMesh can contain several islands for navigation. You can filter by island or area.
Arguments
target (carb.Float3): The target position to be closest to. agent (NavAgentDesc): Optional. Agent descriptor; default uses baked agent bounds. area_indices (int[]): Optional. Array of area indices to restrict the search, or empty array for all areas. search_island_id (int): Island to search, or -1 for any island.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() p = carb.Float3(-100.0, 0.0, -30.0) closest_point, island_id = navmesh.query_closest_point(target=p)
INavMesh.query_random_point#
Queries to find a random point on the NavMesh. Returns a carb.Float3 or None if no point is found.
Arguments
randomizer_id (str): Identifies the randomizer (use withINavigation.set_random_seedfor deterministic results). agent (NavAgentDesc): Optional. Agent descriptor; default uses baked agent bounds. area_probabilities (float[]): Optional. Indexed array of weighted probabilities per area.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() session = "robots" inav.set_random_seed(session, 12345) inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() random_point = navmesh.query_random_point(session)
INavMesh.get_agent_min_height#
Returns the minimum height of the navigation agent for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_min_height = navmesh.get_agent_min_height()
INavMesh.get_agent_min_radius#
Returns the minimum radius of the navigation agent for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_min_radius = navmesh.get_agent_min_radius()
INavMesh.get_agent_max_radius#
Returns the maximum radius of the navigation agent for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_max_radius = navmesh.get_agent_max_radius()
INavMesh.get_agent_max_step_height#
Returns the maximum step height of the navigation agent for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_max_step_height = navmesh.get_agent_max_step_height()
INavMesh.get_agent_max_slope#
Returns the maximum slope angle of the navigation agent for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_max_slope_angle = navmesh.get_agent_max_slope()
INavMesh.get_agent_min_island_radius#
Returns the minimum radius of the island that the agent can navigate for the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_min_island_radius = navmesh.get_agent_min_island_radius()
INavMesh.get_agent_sampling_distance#
Returns the sampling distance of the navigation agent for the baked NavMesh (distance between agent and NavMesh surface).
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() agent_sampling_distance = navmesh.get_agent_sampling_distance()
INavMesh.get_area_count#
Returns the number of areas defined in the baked NavMesh.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() area_count = navmesh.get_area_count()
INavMesh.get_area_name#
Returns the name of the area at the specified index from the baked NavMesh.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() area_name = navmesh.get_area_name(0)
INavMesh.compute_area_costs#
Computes area costs for the baked NavMesh from a list of allowed area names. Areas in the list get cost 0; others get -1 (inaccessible).
Arguments
allowed_area_names (list of str): Optional. Names of areas that are traversable; default uses all areas.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() costs = navmesh.compute_area_costs(allowed_area_names=["Walkable"])
INavMesh.get_draw_triangles#
Returns a list of mesh triangles(carb.Float3) for each point in the triangle needed to visualize the NavMesh surface for a given area index.
Recommended for debug drawing only.
Arguments
area_index (int): The index of the area to access. Should be between 0 andget_area_count()- 1.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() triangles = navmesh.get_draw_triangles(0)
INavMesh.get_draw_lines#
Returns the lines points(carb.Float3) for each line point for visualization of the NavMesh outline.
Recommended for debug drawing only.
Arguments
border_only (bool): True if only the border lines be drawn; false if detailed edges.Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() line_points = navmesh.get_draw_lines(border_only=True)
INavMesh.get_mesh_signature#
Returns a signature to define and encode a hash representation of the mesh data that was baked.
Example
import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() signature = navmesh.get_mesh_signature()
The INavMeshPath Python command APIs are called from the omni.anim.navigation.core module.
INavMeshPath.get_point_count#
Returns the number of points on the path.
Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) count = navmesh_path.get_point_count()
INavMeshPath.get_points#
Returns an array of 2 or more points of type
carb.Float3for the path points/waypoints.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) points = navmesh_path.get_points()
INavMeshPath.closest_distance#
Computes the distance along the path that is closest to the given reference position.
Arguments
position (carb.Float3): Position for which the closest point on the path should be calculated. out_path_position (carb.Float3): Output; pass a carb.Float3 to receive the closest point on the path. out_path_tangent (carb.Float3): Output; pass a carb.Float3 to receive the tangent at that point.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) target = carb.Float3(100.0, 0.0, 100.0) path_position = carb.Float3() path_tangent = carb.Float3() distance = navmesh_path.closest_distance( position=target, out_path_position=path_position, out_path_tangent=path_tangent )
INavMeshPath.length#
Returns the total length of the path.
Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) path_length = navmesh_path.length()
INavMeshPath.evaluate_position#
Evaluates the position at the given distance along the path (0 to
length()).Arguments
distance (float): Distance along the path for which to evaluate the position.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) path_position = carb.Float3() path_tangent = carb.Float3() dist_along_path = navmesh_path.closest_distance( position=carb.Float3(100.0, 0.0, 100.0), out_path_position=path_position, out_path_tangent=path_tangent ) position = navmesh_path.evaluate_position(dist_along_path)
INavMeshPath.evaluate_tangent#
Evaluates the tangent that corresponds to the given distance along the path.
Arguments
distance (carb.Float3): Distance for which the corresponding position is to be evaluated.Example
import carb import omni.anim.navigation.core as nav inav = nav.acquire_interface() inav.start_navmesh_baking_and_wait() navmesh = inav.get_navmesh() start = carb.Float3(-200.0, 0.0, -30.0) end = carb.Float3(250.0, 0.0, 150.0) navmesh_path = navmesh.query_shortest_path(start_pos=start, end_pos=end) target = carb.Float3(100.0, 0.0, 100.0) path_position = carb.Float3() path_tangent = carb.Float3() distance = navmesh_path.closest_distance( position=target, out_path_position=path_position, out_path_tangent=path_tangent ) tangent = navmesh_path.evaluate_tangent(distance)
The authoring Python command APIs available from the omni.anim.navigation.core module.
CreateNavMeshVolumeCommand#
Creates a NavMesh Volume prim of
includeorexcludevolume type.Arguments
parent_prim_path (Sdf.Path): The parent prim path in the stage where to add the NavMesh volume. volume_type (int): Use 0 forinclude, 1 forexclude. ConstantsNAVMESH_VOLUME_INCLUDEandNAVMESH_VOLUME_EXCLUDEare available fromomni.anim.navigation.core.scripts.command. position (Gf.Vec3d): Optional. World position for the new volume. usd_context_name (str): Optional. Name of the USD context. layer (Sdf.Layer): Optional. Layer to create the volume on; defaults to the stage edit target.Example
import omni.kit.commands import omni.usd from pxr import Sdf stage = omni.usd.get_context().get_stage() omni.kit.commands.execute( "CreateNavMeshVolumeCommand", parent_prim_path=Sdf.Path("/World"), volume_type=0 )