> ## Documentation Index
> Fetch the complete documentation index at: https://scaledfoundations-rebrand.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# VehicleClient

## \_\_init\_\_

<ResponseField
  name="VehicleClient.__init__(
ip=&#x22;&#x22;,
port=41451,
timeout_value=3600,
run_in_background: bool = False,
)"
>
  Initializes the VehicleClient

  <ResponseField name="Arguments">
    <ParamField query="ip" type="str, optional">
      IP address of the server, defaults to localhost
    </ParamField>

    <ParamField query="port" type="int, optional">
      Port number of the server, defaults to 41451
    </ParamField>

    <ParamField query="timeout_value" type="int, optional">
      Timeout value for the connection, defaults to 3600
    </ParamField>

    <ParamField query="run_in_background" type="bool, optional">
      Whether to run the client in background, defaults to False. When true, this client does not print info unless necessary.
    </ParamField>
  </ResponseField>
</ResponseField>

## reset

<ResponseField name="VehicleClient.reset()">
  Reset the vehicle to its original starting state

  Note that you must call [enableApiControl](/simulation/airgen/reference/vehicle-client#enableapicontrol) and [armDisarm](/simulation/airgen/reference/vehicle-client#armdisarm) again after the call to reset
</ResponseField>

## ping

<ResponseField name="VehicleClient.ping()">
  If connection is established then this call will return true otherwise it will be blocked until timeout

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      bool
    </ResponseField>
  </ResponseField>
</ResponseField>

## getClientVersion

<ResponseField name="VehicleClient.getClientVersion()">
  No description provided!
</ResponseField>

## getServerVersion

<ResponseField name="VehicleClient.getServerVersion()">
  No description provided!
</ResponseField>

## getMinRequiredServerVersion

<ResponseField name="VehicleClient.getMinRequiredServerVersion()">
  No description provided!
</ResponseField>

## getMinRequiredClientVersion

<ResponseField name="VehicleClient.getMinRequiredClientVersion()">
  No description provided!
</ResponseField>

## enableApiControl

<ResponseField name="VehicleClient.enableApiControl(is_enabled, vehicle_name=&#x22;&#x22;)">
  Enables or disables API control for vehicle corresponding to vehicle\_name

  <ResponseField name="Arguments">
    <ParamField query="is_enabled" type="bool">
      True to enable, False to disable API control
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to send this command to
    </ParamField>
  </ResponseField>
</ResponseField>

## isApiControlEnabled

<ResponseField name="VehicleClient.isApiControlEnabled(vehicle_name=&#x22;&#x22;)">
  Returns true if API control is established.

  If false (which is default) then API calls would be ignored. After a successful call to [enableApiControl](/simulation/airgen/reference/vehicle-client#enableapicontrol), [isApiControlEnabled](/simulation/airgen/reference/vehicle-client#isapicontrolenabled) should return true.

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      If API control is enabled
    </ResponseField>
  </ResponseField>
</ResponseField>

## armDisarm

<ResponseField name="VehicleClient.armDisarm(arm, vehicle_name=&#x22;&#x22;)">
  Arms or disarms vehicle

  <ResponseField name="Arguments">
    <ParamField query="arm" type="bool">
      True to arm, False to disarm the vehicle
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to send this command to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      Success
    </ResponseField>
  </ResponseField>
</ResponseField>

## simPause

<ResponseField name="VehicleClient.simPause(is_paused)">
  Pauses simulation

  <ResponseField name="Arguments">
    <ParamField query="is_paused" type="bool">
      True to pause the simulation, False to release
    </ParamField>
  </ResponseField>
</ResponseField>

## simIsPause

<ResponseField name="VehicleClient.simIsPause()">
  Returns true if the simulation is paused

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      If the simulation is paused
    </ResponseField>
  </ResponseField>
</ResponseField>

## simContinueForTime

<ResponseField name="VehicleClient.simContinueForTime(seconds)">
  Continue the simulation for the specified number of seconds

  <ResponseField name="Arguments">
    <ParamField query="seconds" type="float">
      Time to run the simulation for
    </ParamField>
  </ResponseField>
</ResponseField>

## simContinueForFrames

<ResponseField name="VehicleClient.simContinueForFrames(frames)">
  Continue (or resume if paused) the simulation for the specified number of frames, after which the simulation will be paused.

  <ResponseField name="Arguments">
    <ParamField query="frames" type="int">
      Frames to run the simulation for
    </ParamField>
  </ResponseField>
</ResponseField>

## getHomeGeoPoint

<ResponseField name="VehicleClient.getHomeGeoPoint(vehicle_name=&#x22;&#x22;)">
  Get the Home location of the vehicle

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to get home location of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="GeoPoint" type="GeoPoint">
      Home location of the vehicle
    </ResponseField>
  </ResponseField>
</ResponseField>

## confirmConnection

<ResponseField name="VehicleClient.confirmConnection()">
  Checks state of connection every 1 sec and reports it in Console so user can see the progress for connection.
</ResponseField>

## simSetLightIntensity

<ResponseField name="VehicleClient.simSetLightIntensity(light_name, intensity)">
  Change intensity of named light

  <ResponseField name="Arguments">
    <ParamField query="light_name" type="str">
      Name of light to change
    </ParamField>

    <ParamField query="intensity" type="float">
      New intensity value
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if successful, otherwise False
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSwapTextures

<ResponseField name="VehicleClient.simSwapTextures(tags, tex_id=0, component_id=0, material_id=0)">
  Runtime Swap Texture API

  <ResponseField name="Arguments">
    <ParamField query="tags" type="str">
      string of "," or ", " delimited tags to identify on which actors to perform the swap
    </ParamField>

    <ParamField query="tex_id" type="int, optional">
      indexes the array of textures assigned to each actor undergoing a swap
    </ParamField>

    <ParamField query="component_id" type="int, optional">
      component\_id
    </ParamField>

    <ParamField query="material_id" type="int, optional">
      material\_id
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[str]" type="list[str]">
      List of objects which matched the provided tags and had the texture swap perfomed
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectMaterial

<ResponseField name="VehicleClient.simSetObjectMaterial(object_name, material_name, component_id=0)">
  Runtime Swap Texture API

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      name of object to set material for
    </ParamField>

    <ParamField query="material_name" type="str">
      name of material to set for object
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if material was set
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectMaterialFromTexture

<ResponseField
  name="VehicleClient.simSetObjectMaterialFromTexture(
object_name, texture_path, component_id=0
)"
>
  Runtime Swap Texture API

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      name of object to set material for
    </ParamField>

    <ParamField query="texture_path" type="str">
      path to texture to set for object
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if material was set
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectMaterialFromTextureURL

<ResponseField
  name="VehicleClient.simSetObjectMaterialFromTextureURL(
object_name, url, component_id=0
)"
>
  Runtime Swap Texture API

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      name of object to set material for
    </ParamField>

    <ParamField query="url" type="str">
      url for texture to set for object
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if material was set
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetTimeOfDay

<ResponseField
  name="VehicleClient.simSetTimeOfDay(
is_enabled,
start_datetime=&#x22;&#x22;,
is_start_datetime_dst=False,
celestial_clock_speed=1,
update_interval_secs=60,
move_sun=True,
)"
>
  Control the position of Sun in the environment

  Sun's position is computed using the coordinates specified in `OriginGeopoint` in settings for the date-time specified in the argument,
  else if the string is empty, current date & time is used

  <ResponseField name="Arguments">
    <ParamField query="is_enabled" type="bool">
      True to enable time-of-day effect, False to reset the position to original
    </ParamField>

    <ParamField query="start_datetime" type="str, optional">
      Date & Time in %Y-%m-%d %H:%M:%S format, e.g. `2018-02-12 15:20:00`
    </ParamField>

    <ParamField query="is_start_datetime_dst" type="bool, optional">
      True to adjust for Daylight Savings Time
    </ParamField>

    <ParamField query="celestial_clock_speed" type="float, optional">
      Run celestial clock faster or slower than simulation clock
    </ParamField>

    <ParamField query="update_interval_secs" type="float, optional">
      Interval to update the Sun's position
    </ParamField>

    <ParamField query="move_sun" type="bool, optional">
      Whether or not to move the Sun
    </ParamField>
  </ResponseField>
</ResponseField>

## simEnableWeather

<ResponseField name="VehicleClient.simEnableWeather(enable: bool)">
  Enable Weather effects. Needs to be called before using [simSetWeatherParameter](/simulation/airgen/reference/vehicle-client#simsetweatherparameter) API

  <ResponseField name="Arguments">
    <ParamField query="enable" type="bool">
      True to enable, False to disable
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetWeatherParameter

<ResponseField name="VehicleClient.simSetWeatherParameter(param, val)">
  Enable various weather effects

  <ResponseField name="Arguments">
    <ParamField query="param" type="WeatherParameter">
      ([WeatherParameter](/simulation/airgen/reference/datatypes#weatherparameter)): Weather effect to be enabled
    </ParamField>

    <ParamField query="val" type="float">
      Intensity of the effect, Range 0-1
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetImage

<ResponseField name="VehicleClient.simGetImage(camera_name, image_type, vehicle_name=&#x22;&#x22;, external=False, capture_3d=False, cubemap=False)">
  Get a single image

  Returns bytes of png format image which can be dumped into abinary file to create .png image
  `string_to_uint8_array()` can be used to convert into Numpy unit8 array

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="image_type" type="ImageType">
      ([ImageType](/simulation/airgen/reference/datatypes#imagetype)): Type of image required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle with the camera
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>

    <ParamField query="capture_3d" type="bool, optional">
      Whether to capture 3D images (default: False).
    </ParamField>

    <ParamField query="cubemap" type="bool, optional">
      Whether to capture cubemap images otherwise equirectangular (default: False).
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="Binary" type="Binary">
      string literal of compressed png image
    </ResponseField>
  </ResponseField>
</ResponseField>

## getImages

<ResponseField
  name="VehicleClient.getImages(
camera_name, image_types: List[ImageType], vehicle_name=&#x22;&#x22;, capture_3d=False, cubemap=False
)"
>
  Get multiple images

  <ResponseField name="Arguments">
    <ParamField query="image_types" type="list[ImageType]">
      list\[[ImageType](/simulation/airgen/reference/datatypes#imagetype)]: Images required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle associated with the camera
    </ParamField>

    <ParamField query="capture_3d" type="bool, optional">
      Whether to capture 3D images (default: False).
    </ParamField>

    <ParamField query="cubemap" type="bool, optional">
      Whether to capture cubemap images otherwise equirectangular (default: False).
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[ImageResponse]" type="list[ImageResponse]">
      list\[[ImageResponse](/simulation/airgen/reference/datatypes#imageresponse)]
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetImages

<ResponseField
  name="VehicleClient.simGetImages(
requests: ImageRequest, vehicle_name=&#x22;&#x22;, external=False, capture_3d=False, cubemap=False
)"
>
  Get multiple images

  <ResponseField name="Arguments">
    <ParamField query="requests" type="list[ImageRequest]">
      list\[[ImageRequest](/simulation/airgen/reference/datatypes#imagerequest)]: Images required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle associated with the camera
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>

    <ParamField query="capture_3d" type="bool, optional">
      Whether to capture 3D images (default: False).
    </ParamField>

    <ParamField query="cubemap" type="bool, optional">
      Whether to capture cubemap images otherwise equirectangular (default: False).
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[ImageResponse]" type="list[ImageResponse]">
      list\[[ImageResponse](/simulation/airgen/reference/datatypes#imageresponse)]
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetImagesAlongTrajectory

<ResponseField
  name="VehicleClient.simGetImagesAlongTrajectory(
poses: List[Pose], requests, vehicle_name=&#x22;&#x22;, external=False, capture_3d=False, cubemap=False
)"
>
  Get images along a trajectory (specified by position and pose) when

  <ResponseField name="Arguments">
    <ParamField query="poses" type="list[Pose]">
      list\[[Pose](/simulation/airgen/reference/datatypes#pose)]: A list of poses of the vehicle, at which images are to be requested
    </ParamField>

    <ParamField query="requests" type="list[ImageRequest]">
      list\[[ImageRequest](/simulation/airgen/reference/datatypes#imagerequest)]: Images required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle associated with the camera
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera, defaults to False
    </ParamField>

    <ParamField query="capture_3d" type="bool, optional">
      Whether to capture 3d images (default: False).
    </ParamField>

    <ParamField query="cubemap" type="bool, optional">
      Whether to capture cubemap images otherwise equirectangular (default: False).
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[ImageResponse]" type="list[ImageResponse]">
      list\[[ImageResponse](/simulation/airgen/reference/datatypes#imageresponse)]
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetPresetLensSettings

<ResponseField
  name="VehicleClient.simGetPresetLensSettings(
camera_name: str, vehicle_name: str = &#x22;&#x22;, external: bool = False
)"
>
  Get the preset lens settings for the camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      camera name
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      vechile name. Defaults to "".
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera. Defaults to False.
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="_type_" type="_type_">
      *description*
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetLensSettings

<ResponseField
  name="VehicleClient.simGetLensSettings(
camera_name: str, vehicle_name: str = &#x22;&#x22;, external=False
)"
>
  Get the lens settings for the camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      camera name
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      vechile name. Defaults to "".
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera. Defaults to False.
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetPresetLensSettings

<ResponseField
  name="VehicleClient.simSetPresetLensSettings(
preset_lens_settings,
camera_name: str,
vehicle_name: str = &#x22;&#x22;,
external=False,
)"
>
  No description provided!
</ResponseField>

## simGetPresetFilmbackSettings

<ResponseField
  name="VehicleClient.simGetPresetFilmbackSettings(
camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simSetPresetFilmbackSettings

<ResponseField
  name="VehicleClient.simSetPresetFilmbackSettings(
preset_filmback_settings, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simGetFilmbackSettings

<ResponseField name="VehicleClient.simGetFilmbackSettings(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simSetFilmbackSettings

<ResponseField
  name="VehicleClient.simSetFilmbackSettings(
sensor_width, sensor_height, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simGetFocalLength

<ResponseField name="VehicleClient.simGetFocalLength(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simSetFocalLength

<ResponseField
  name="VehicleClient.simSetFocalLength(
focal_length, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simEnableManualFocus

<ResponseField
  name="VehicleClient.simEnableManualFocus(
enable, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simGetFocusDistance

<ResponseField name="VehicleClient.simGetFocusDistance(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simSetFocusDistance

<ResponseField
  name="VehicleClient.simSetFocusDistance(
focus_distance, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simGetFocusAperture

<ResponseField name="VehicleClient.simGetFocusAperture(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simSetFocusAperture

<ResponseField
  name="VehicleClient.simSetFocusAperture(
focus_aperture, camera_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  No description provided!
</ResponseField>

## simEnableFocusPlane

<ResponseField name="VehicleClient.simEnableFocusPlane(enable, camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simGetCurrentFieldOfView

<ResponseField name="VehicleClient.simGetCurrentFieldOfView(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  No description provided!
</ResponseField>

## simTestLineOfSightToPoint

<ResponseField name="VehicleClient.simTestLineOfSightToPoint(point, vehicle_name=&#x22;&#x22;)">
  Returns whether the target point is visible from the perspective of the inputted vehicle

  <ResponseField name="Arguments">
    <ParamField query="point" type="GeoPoint">
      ([GeoPoint](/simulation/airgen/reference/datatypes#geopoint)): target point
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      Success
    </ResponseField>
  </ResponseField>
</ResponseField>

## simTestLineOfSightBetweenPoints

<ResponseField name="VehicleClient.simTestLineOfSightBetweenPoints(point1, point2)">
  Returns whether the target point is visible from the perspective of the source point

  <ResponseField name="Arguments">
    <ParamField query="point1" type="GeoPoint">
      ([GeoPoint](/simulation/airgen/reference/datatypes#geopoint)): source point
    </ParamField>

    <ParamField query="point2" type="GeoPoint">
      ([GeoPoint](/simulation/airgen/reference/datatypes#geopoint)): target point
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      Success
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetWorldExtents

<ResponseField name="VehicleClient.simGetWorldExtents()">
  Returns a list of GeoPoints representing the minimum and maximum extents of the world

  <ResponseField name="Returns">
    <ResponseField name="list[GeoPoint]" type="list[GeoPoint]">
      list\[[GeoPoint](/simulation/airgen/reference/datatypes#geopoint)]
    </ResponseField>
  </ResponseField>
</ResponseField>

## simRunConsoleCommand

<ResponseField name="VehicleClient.simRunConsoleCommand(command)">
  Allows the client to execute a command in Unreal's native console, via an API.
  Affords access to the countless built-in commands such as "stat unit", "stat fps", "open \[map]", adjust any config settings, etc. etc.
  Allows the user to create bespoke APIs very easily, by adding a custom event to the level blueprint, and then calling the console command "ce MyEventName \[args]". No recompilation of airgen needed!

  <ResponseField name="Arguments">
    <ParamField query="command" type="[string]">
      Desired Unreal Engine Console command to run
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      Success
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetMeshPositionVertexBuffers

<ResponseField name="VehicleClient.simGetMeshPositionVertexBuffers()">
  Returns the static meshes that make up the scene

  <ResponseField name="Returns">
    <ResponseField name="list[MeshPositionVertexBuffersResponse]" type="list[MeshPositionVertexBuffersResponse]">
      list\[MeshPositionVertexBuffersResponse]
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetCollisionInfo

<ResponseField name="VehicleClient.simGetCollisionInfo(vehicle_name=&#x22;&#x22;)">
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the Vehicle to get the info of. This call will also reset the collision info (state of the vehicle) to False.
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="CollisionInfo" type="CollisionInfo">
      CollisionInfo
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetVehiclePose

<ResponseField name="VehicleClient.simSetVehiclePose(pose, ignore_collision, vehicle_name=&#x22;&#x22;, on_ground=False, ground_trace_range_up=13000, ground_trace_range_down=13000, timeout_sec=10)">
  Set the pose of the vehicle

  If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values

  <ResponseField name="Arguments">
    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Desired Pose pf the vehicle
    </ParamField>

    <ParamField query="ignore_collision" type="bool">
      Whether to ignore any collision or not
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to move
    </ParamField>

    <ParamField query="on_ground" type="bool, optional">
      Whether to set the vehicle's altitude to ground level while setting its position
    </ParamField>

    <ParamField query="ground_trace_range_up" type="float, optional">
      From what distance above the Vehicle's current altitude do we start looking for the ground (default is 13 KM)
    </ParamField>

    <ParamField query="ground_trace_range_down" type="float, optional">
      How much distance below the Vehicles's current altitude do we stop looking for the ground (default is 13 KM)
    </ParamField>

    <ParamField query="timeout_sec" type="int, optional">
      Timeout to find ground location (if on\_ground is True)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="msgpackrpc.future.Future" type="msgpackrpc.future.Future">
      future. call .join() to wait for method to finish.
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetVehicleGeoPose

<ResponseField name="VehicleClient.simSetVehicleGeoPose(geopose, ignore_collision, vehicle_name=&#x22;&#x22;, on_ground=False, ground_trace_range_up=13000, ground_trace_range_down=13000, timeout_sec=10)">
  Set the pose of the vehicle

  If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values

  <ResponseField name="Arguments">
    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Desired Pose pf the vehicle
    </ParamField>

    <ParamField query="ignore_collision" type="bool">
      Whether to ignore any collision or not
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to move
    </ParamField>

    <ParamField query="on_ground" type="bool, optional">
      Whether to set the vehicle's altitude to ground level while setting its position
    </ParamField>

    <ParamField query="ground_trace_range_up" type="float, optional">
      From what distance above the Vehicle's current altitude do we start looking for the ground (default is 13 KM)
    </ParamField>

    <ParamField query="ground_trace_range_down" type="float, optional">
      How much distance below the Vehicles's current altitude do we stop looking for the ground (default is 13 KM)
    </ParamField>

    <ParamField query="timeout_sec" type="int, optional">
      Timeout to find ground location (if on\_ground is True)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="msgpackrpc.future.Future" type="msgpackrpc.future.Future">
      future. call .join() to wait for method to finish.
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetGeoReference

<ResponseField name="VehicleClient.simSetGeoReference(geopoint)">
  Set the geo reference of the scene (only valid for Cesium)

  <ResponseField name="Arguments">
    <ParamField query="geopoint" type="GeoPoint">
      ([GeoPoint](/simulation/airgen/reference/datatypes#geopoint)): Desired GeoPoint of the scene
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetVehiclePose

<ResponseField name="VehicleClient.simGetVehiclePose(vehicle_name=&#x22;&#x22;)">
  The position inside the returned Pose is in the frame of the vehicle's starting point

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to get the Pose of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="Pose" type="Pose">
      pose (position and quaternion) of the vehicle
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetTraceLine

<ResponseField name="VehicleClient.simSetTraceLine(color_rgba, thickness=1.0, vehicle_name=&#x22;&#x22;)">
  Modify the color and thickness of the line when Tracing is enabled

  Tracing can be enabled by pressing T in the Editor or setting `EnableTrace` to `True` in the Vehicle Settings

  <ResponseField name="Arguments">
    <ParamField query="color_rgba" type="list">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="thickness" type="float, optional">
      Thickness of the line
    </ParamField>

    <ParamField query="vehicle_name" type="string, optional">
      Name of the vehicle to set Trace line values for
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetObjectPose

<ResponseField name="VehicleClient.simGetObjectPose(object_name)">
  The position inside the returned Pose is in the world frame

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Object to get the Pose of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="Pose" type="Pose">
      pose (position and quaternion) of the object
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectPose

<ResponseField name="VehicleClient.simSetObjectPose(object_name, pose, teleport=True)">
  Set the pose of the object(actor) in the environment

  The specified actor must have Mobility set to movable, otherwise there will be undefined behaviour.
  See [https://www.unrealengine.com/en-US/blog/moving-physical-objects](https://www.unrealengine.com/en-US/blog/moving-physical-objects) for details on how to set Mobility and the effect of Teleport parameter

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Name of the object(actor) to move
    </ParamField>

    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Desired Pose of the object
    </ParamField>

    <ParamField query="teleport" type="bool, optional">
      Whether to move the object immediately without affecting their velocity
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      If the move was successful
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectGeoPose

<ResponseField name="VehicleClient.simSetObjectGeoPose(object_name, geopose, teleport=True)">
  Set the pose of the object(actor) in the environment

  The specified actor must have Mobility set to movable, otherwise there will be undefined behaviour.
  See [https://www.unrealengine.com/en-US/blog/moving-physical-objects](https://www.unrealengine.com/en-US/blog/moving-physical-objects) for details on how to set Mobility and the effect of Teleport parameter

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Name of the object(actor) to move
    </ParamField>

    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Desired Pose of the object
    </ParamField>

    <ParamField query="teleport" type="bool, optional">
      Whether to move the object immediately without affecting their velocity
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      If the move was successful
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetObjectScale

<ResponseField name="VehicleClient.simGetObjectScale(object_name)">
  Gets scale of an object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Object to get the scale of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="airgen.Vector3r" type="airgen.Vector3r">
      Scale
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetObjectScale

<ResponseField name="VehicleClient.simSetObjectScale(object_name, scale_vector)">
  Sets scale of an object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Object to set the scale of
    </ParamField>

    <ParamField query="scale_vector" type="airgen.Vector3r">
      Desired scale of object
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if scale change was successful
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetObjectDimensions

<ResponseField name="VehicleClient.simGetObjectDimensions(object_name)">
  Gets bounds of an object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Object to get the bounds of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="airgen.Vector3r" type="airgen.Vector3r">
      Extents in X, Y, Z
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetObjectCenter

<ResponseField name="VehicleClient.simGetObjectCenter(object_name)">
  Gets the center of an object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Object to get the center of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="airgen.Vector3r" type="airgen.Vector3r">
      Center position
    </ResponseField>
  </ResponseField>
</ResponseField>

## simListSceneObjects

<ResponseField name="VehicleClient.simListSceneObjects(name_regex=&#x22;.*&#x22;)">
  Lists the objects present in the environment

  Default behaviour is to list all objects, regex can be used to return smaller list of matching objects or actors

  <ResponseField name="Arguments">
    <ParamField query="name_regex" type="str, optional">
      String to match actor names against, e.g. "Cylinder.\*"
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[str]" type="list[str]">
      List containing all the names
    </ResponseField>
  </ResponseField>
</ResponseField>

## simListObjectsWithTag

<ResponseField name="VehicleClient.simListObjectsWithTag(tag_regex)">
  Lists the objects present in the environment with the input tag

  Regex can be used to return a list of objects with matching tags

  <ResponseField name="Arguments">
    <ParamField query="tag_regex" type="str">
      Tag to match actor tags against, e.g. "PalmTree" or ".\*Tree"
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[str]" type="list[str]">
      List containing all the actor names
    </ResponseField>
  </ResponseField>
</ResponseField>

## simLoadLevel

<ResponseField name="VehicleClient.simLoadLevel(level_name)">
  Loads a level specified by its name

  <ResponseField name="Arguments">
    <ParamField query="level_name" type="str">
      Name of the level to load
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if the level was successfully loaded
    </ResponseField>
  </ResponseField>
</ResponseField>

## simListAssets

<ResponseField name="VehicleClient.simListAssets()">
  Lists all the assets present in the Asset Registry

  <ResponseField name="Returns">
    <ResponseField name="list[str]" type="list[str]">
      Names of all the assets
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSpawnObject

<ResponseField
  name="VehicleClient.simSpawnObject(
object_name,
asset_name,
pose,
scale,
physics_enabled=False,
is_blueprint=False,
)"
>
  Spawned selected object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Desired name of new object
    </ParamField>

    <ParamField query="asset_name" type="str">
      Name of asset(mesh) in the project database
    </ParamField>

    <ParamField query="pose" type="airgen.Pose">
      Desired pose of object
    </ParamField>

    <ParamField query="scale" type="airgen.Vector3r">
      Desired scale of object
    </ParamField>

    <ParamField query="physics_enabled" type="bool, optional">
      Whether to enable physics for the object
    </ParamField>

    <ParamField query="is_blueprint" type="bool, optional">
      Whether to spawn a blueprint or an actor
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="str" type="str">
      Name of spawned object, in case it had to be modified
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSpawnObjectFromPath

<ResponseField name="VehicleClient.simSpawnObjectFromPath(object_name, path, pose=Pose(), scale=Vector3r(1,1,1), is_unlit=False, physics_enabled=False, use_complex=False, nav_enabled=False)">
  Spawned selected object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Desired name of new object
    </ParamField>

    <ParamField query="asset_name" type="str">
      Name of asset(mesh) in the project database
    </ParamField>

    <ParamField query="pose" type="airgen.Pose, optional">
      Desired pose of object, default is Pose() (no rotation or translation)
    </ParamField>

    <ParamField query="scale" type="airgen.Vector3r, optional">
      Desired scale of object, default is Vector3r(1,1,1) (no scaling)
    </ParamField>

    <ParamField query="is_unlit" type="bool, optional">
      Whether the object should be unlit (default is False)
    </ParamField>

    <ParamField query="physics_enabled" type="bool, optional">
      Whether to enable physics for the object (default is False)
    </ParamField>

    <ParamField query="use_complex" type="bool, optional">
      Whether to use a complex mesh for collision detection (default is False)
    </ParamField>

    <ParamField query="nav_enabled" type="bool, optional">
      Whether the object should have navigation enabled (default is False)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if object was spawned, False otherwise
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSpawnObjectFromURL

<ResponseField name="VehicleClient.simSpawnObjectFromURL(object_name, url, pose=Pose(), scale=Vector3r(1,1,1), is_unlit=False, physics_enabled=False, use_complex=False, nav_enabled=False)">
  Spawned selected object in the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Desired name of new object
    </ParamField>

    <ParamField query="asset_name" type="str">
      Name of asset(mesh) in the project database
    </ParamField>

    <ParamField query="pose" type="airgen.Pose, optional">
      Desired pose of object, default is Pose() (no rotation or translation)
    </ParamField>

    <ParamField query="scale" type="airgen.Vector3r, optional">
      Desired scale of object, default is Vector3r(1,1,1) (no scaling)
    </ParamField>

    <ParamField query="is_unlit" type="bool, optional">
      Whether the object should be unlit (default is False)
    </ParamField>

    <ParamField query="physics_enabled" type="bool, optional">
      Whether to enable physics for the object (default is False)
    </ParamField>

    <ParamField query="use_complex" type="bool, optional">
      Whether to use a complex mesh for collision detection (default is False)
    </ParamField>

    <ParamField query="nav_enabled" type="bool, optional">
      Whether the object should have navigation enabled (default is False)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if object was spawned, False otherwise
    </ResponseField>
  </ResponseField>
</ResponseField>

## simDestroyObject

<ResponseField name="VehicleClient.simDestroyObject(object_name)">
  Removes selected object from the world

  <ResponseField name="Arguments">
    <ParamField query="object_name" type="str">
      Name of object to be removed
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if object is queued up for removal
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetSegmentationObjectID

<ResponseField name="VehicleClient.simSetSegmentationObjectID(mesh_name, object_id, is_name_regex=False)">
  Set segmentation ID for specific objects

  <ResponseField name="Arguments">
    <ParamField query="mesh_name" type="str">
      Name of the mesh to set the ID of (supports regex)
    </ParamField>

    <ParamField query="object_id" type="int">
      Object ID to be set, range 0-255.
    </ParamField>

    <ParamField query="is_name_regex" type="bool, optional">
      Whether the mesh name is a regex. If True, all meshes matching the regex will be set to the same ID
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      If the mesh was found
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetSegmentationInstanceID

<ResponseField name="VehicleClient.simSetSegmentationInstanceID(mesh_name, instance_id, is_name_regex=False)">
  Set segmentation ID for specific instances

  <ResponseField name="Arguments">
    <ParamField query="mesh_name" type="str">
      Name of the mesh to set the ID of (supports regex)
    </ParamField>

    <ParamField query="instance_id" type="int">
      start of instance ID to be set, range 0-255. Gets incremented each time for each instance (mesh)
    </ParamField>

    <ParamField query="is_name_regex" type="bool, optional">
      Whether the mesh name is a regex
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="int" type="int">
      number of instances (meshes) matched with mesh\_id updated
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetSegmentationObjectID

<ResponseField name="VehicleClient.simGetSegmentationObjectID(mesh_name)">
  Returns Object ID for the given mesh name (case-sensitive)

  <ResponseField name="Arguments">
    <ParamField query="mesh_name" type="str">
      Name of the mesh to get the ID of
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="int" type="int">
      Object ID of the mesh
    </ResponseField>
  </ResponseField>
</ResponseField>

## simAddDetectionFilterMeshName

<ResponseField
  name="VehicleClient.simAddDetectionFilterMeshName(
camera_name, image_type, mesh_name, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Add mesh name to detect in wild card format

  For example: simAddDetectionFilterMeshName("Car\_*") will detect all instance named "Car\_*"

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="image_type" type="ImageType">
      ([ImageType](/simulation/airgen/reference/datatypes#imagetype)): Type of image required
    </ParamField>

    <ParamField query="mesh_name" type="str">
      mesh name in wild card format
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetDetectionFilterRadius

<ResponseField
  name="VehicleClient.simSetDetectionFilterRadius(
camera_name, image_type, radius_cm, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Set detection radius for all cameras

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="image_type" type="ImageType">
      ([ImageType](/simulation/airgen/reference/datatypes#imagetype)): Type of image required
    </ParamField>

    <ParamField query="radius_cm" type="int">
      Radius in \[cm]
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simClearDetectionMeshNames

<ResponseField
  name="VehicleClient.simClearDetectionMeshNames(
camera_name, image_type, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Clear all mesh names from detection filter

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="image_type" type="ImageType">
      ([ImageType](/simulation/airgen/reference/datatypes#imagetype)): Type of image required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetDetections

<ResponseField
  name="VehicleClient.simGetDetections(
camera_name, image_type, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Get current detections

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="image_type" type="ImageType">
      ([ImageType](/simulation/airgen/reference/datatypes#imagetype)): Type of image required
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[DetectionInfo]" type="list[DetectionInfo]">
      List of detections
    </ResponseField>
  </ResponseField>
</ResponseField>

## simPrintLogMessage

<ResponseField name="VehicleClient.simPrintLogMessage(message, message_param=&#x22;&#x22;, severity=0)">
  Prints the specified message in the simulator's window.

  If message\_param is supplied, then it's printed next to the message and in that case if this API is called with same message value
  but different message\_param again then previous line is overwritten with new line (instead of API creating new line on display).

  For example, `simPrintLogMessage("Iteration: ", to_string(i))` keeps updating same line on display when API is called with different values of i.
  The valid values of severity parameter is 0 to 3 inclusive that corresponds to different colors.

  <ResponseField name="Arguments">
    <ParamField query="message" type="str">
      Message to be printed
    </ParamField>

    <ParamField query="message_param" type="str, optional">
      Parameter to be printed next to the message
    </ParamField>

    <ParamField query="severity" type="int, optional">
      Range 0-3, inclusive, corresponding to the severity of the message
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetCameraInfo

<ResponseField name="VehicleClient.simGetCameraInfo(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  Get details about the camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="CameraInfo" type="CameraInfo">
      camera info
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetDistortionParams

<ResponseField name="VehicleClient.simGetDistortionParams(camera_name, vehicle_name=&#x22;&#x22;, external=False)">
  Get camera distortion parameters

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="List" type="List">
      (float): List of distortion parameter values corresponding to K1, K2, K3, P1, P2 respectively.
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetDistortionParams

<ResponseField
  name="VehicleClient.simSetDistortionParams(
camera_name, distortion_params, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Set camera distortion parameters

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="distortion_params" type="dict">
      Dictionary of distortion param names and corresponding values
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetDistortionParam

<ResponseField
  name="VehicleClient.simSetDistortionParam(
camera_name, param_name, value, vehicle_name=&#x22;&#x22;, external=False
)"
>
  Set single camera distortion parameter

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera, for backwards compatibility, ID numbers such as 0,1,etc. can also be used
    </ParamField>

    <ParamField query="param_name" type="str">
      Name of distortion parameter
    </ParamField>

    <ParamField query="value" type="float">
      Value of distortion parameter
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Vehicle which the camera is associated with
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetCameraPose

<ResponseField name="VehicleClient.simSetCameraPose(camera_name, pose, vehicle_name=&#x22;&#x22;, external=False)">
  * Control the pose of a selected camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera to be controlled
    </ParamField>

    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Pose representing the desired position and orientation of the camera
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle which the camera corresponds to
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simSetCameraFov

<ResponseField
  name="VehicleClient.simSetCameraFov(
camera_name, fov_degrees, vehicle_name=&#x22;&#x22;, external=False
)"
>
  * Control the field of view of a selected camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera to be controlled
    </ParamField>

    <ParamField query="fov_degrees" type="float">
      Value of field of view in degrees
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle which the camera corresponds to
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simCameraLookAt

<ResponseField name="VehicleClient.simCameraLookAt(camera_name, pose, vehicle_name=&#x22;&#x22;)">
  * Control the pose of a selected camera

  <ResponseField name="Arguments">
    <ParamField query="camera_name" type="str">
      Name of the camera to be controlled
    </ParamField>

    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Pose representing the desired position the camera has to observe
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle which the camera corresponds to
    </ParamField>

    <ParamField query="external" type="bool, optional">
      Whether the camera is an External Camera
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetGroundTruthKinematics

<ResponseField name="VehicleClient.simGetGroundTruthKinematics(vehicle_name=&#x22;&#x22;)">
  Get Ground truth kinematics of the vehicle

  The position inside the returned KinematicsState is in the frame of the vehicle's starting point

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="KinematicsState" type="KinematicsState">
      Ground truth of the vehicle
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetKinematics

<ResponseField name="VehicleClient.simSetKinematics(state, ignore_collision, vehicle_name=&#x22;&#x22;)">
  Set the kinematics state of the vehicle

  If you don't want to change position (or orientation) then just set components of position (or orientation) to floating point nan values

  <ResponseField name="Arguments">
    <ParamField query="state" type="KinematicsState">
      ([KinematicsState](/simulation/airgen/reference/datatypes#kinematicsstate)): Desired Pose pf the vehicle
    </ParamField>

    <ParamField query="ignore_collision" type="bool">
      Whether to ignore any collision or not
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle to move
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetGroundTruthEnvironment

<ResponseField name="VehicleClient.simGetGroundTruthEnvironment(vehicle_name=&#x22;&#x22;)">
  Get ground truth environment state

  The position inside the returned EnvironmentState is in the frame of the vehicle's starting point

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="EnvironmentState" type="EnvironmentState">
      Ground truth environment state
    </ResponseField>
  </ResponseField>
</ResponseField>

## getImuData

<ResponseField name="VehicleClient.getImuData(imu_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;)">
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="imu_name" type="str, optional">
      Name of IMU to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="ImuData" type="ImuData">
      IMU data
    </ResponseField>
  </ResponseField>
</ResponseField>

## getBarometerData

<ResponseField name="VehicleClient.getBarometerData(barometer_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;)">
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="barometer_name" type="str, optional">
      Name of Barometer to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="BarometerData" type="BarometerData">
      Barometer data
    </ResponseField>
  </ResponseField>
</ResponseField>

## getMagnetometerData

<ResponseField
  name="VehicleClient.getMagnetometerData(
magnetometer_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;
)"
>
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="magnetometer_name" type="str, optional">
      Name of Magnetometer to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="MagnetometerData" type="MagnetometerData">
      Magnetometer data
    </ResponseField>
  </ResponseField>
</ResponseField>

## getGpsData

<ResponseField name="VehicleClient.getGpsData(gps_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;)">
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="gps_name" type="str, optional">
      Name of GPS to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="GpsData" type="GpsData">
      GPS data
    </ResponseField>
  </ResponseField>
</ResponseField>

## getDistanceSensorData

<ResponseField
  name="VehicleClient.getDistanceSensorData(
distance_sensor_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;
)"
>
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="distance_sensor_name" type="str, optional">
      Name of Distance Sensor to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="DistanceSensorData" type="DistanceSensorData">
      Distance sensor data
    </ResponseField>
  </ResponseField>
</ResponseField>

## getLidarData

<ResponseField name="VehicleClient.getLidarData(lidar_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;)">
  No description provided!

  <ResponseField name="Arguments">
    <ParamField query="lidar_name" type="str, optional">
      Name of Lidar to get data from, specified in settings.json
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of vehicle to which the sensor corresponds to
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="LidarData" type="LidarData">
      LiDAR data
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetLidarSegmentation

<ResponseField name="VehicleClient.simGetLidarSegmentation(lidar_name=&#x22;&#x22;, vehicle_name=&#x22;&#x22;)">
  NOTE: Deprecated API, use `getLidarData()` API instead
  Returns Segmentation ID of each point's collided object in the last Lidar update

  <ResponseField name="Arguments">
    <ParamField query="lidar_name" type="str, optional">
      Name of Lidar sensor
    </ParamField>

    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle wth the sensor
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[int]" type="list[int]">
      Segmentation IDs of the objects
    </ResponseField>
  </ResponseField>
</ResponseField>

## simFlushPersistentMarkers

<ResponseField name="VehicleClient.simFlushPersistentMarkers()">
  Clear any persistent markers - those plotted with setting `is_persistent=True` in the APIs below
</ResponseField>

## simPlotPoints

<ResponseField
  name="VehicleClient.simPlotPoints(
points,
color_rgba=[1.0, 0.0, 0.0, 1.0],
size=10.0,
duration=-1.0,
is_persistent=False,
)"
>
  Plot a list of 3D points in World NED frame

  <ResponseField name="Arguments">
    <ParamField query="points" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of Vector3r objects
    </ParamField>

    <ParamField query="color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="size" type="float, optional">
      Size of plotted point
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>

    <ParamField query="is_persistent" type="bool, optional">
      If set to True, the desired object will be plotted for infinite time.
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotLineStrip

<ResponseField
  name="VehicleClient.simPlotLineStrip(
points,
color_rgba=[1.0, 0.0, 0.0, 1.0],
thickness=5.0,
duration=-1.0,
is_persistent=False,
)"
>
  Plots a line strip in World NED frame, defined from points\[0] to points\[1], points\[1] to points\[2], ... , points\[n-2] to points\[n-1]

  <ResponseField name="Arguments">
    <ParamField query="points" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of 3D locations of line start and end points, specified as Vector3r objects
    </ParamField>

    <ParamField query="color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="thickness" type="float, optional">
      Thickness of line
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>

    <ParamField query="is_persistent" type="bool, optional">
      If set to True, the desired object will be plotted for infinite time.
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotLineList

<ResponseField
  name="VehicleClient.simPlotLineList(
points,
color_rgba=[1.0, 0.0, 0.0, 1.0],
thickness=5.0,
duration=-1.0,
is_persistent=False,
)"
>
  Plots a line strip in World NED frame, defined from points\[0] to points\[1], points\[2] to points\[3], ... , points\[n-2] to points\[n-1]

  <ResponseField name="Arguments">
    <ParamField query="points" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of 3D locations of line start and end points, specified as Vector3r objects. Must be even
    </ParamField>

    <ParamField query="color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="thickness" type="float, optional">
      Thickness of line
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>

    <ParamField query="is_persistent" type="bool, optional">
      If set to True, the desired object will be plotted for infinite time.
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotArrows

<ResponseField
  name="VehicleClient.simPlotArrows(
points_start,
points_end,
color_rgba=[1.0, 0.0, 0.0, 1.0],
thickness=5.0,
arrow_size=2.0,
duration=-1.0,
is_persistent=False,
)"
>
  Plots a list of arrows in World NED frame, defined from points\_start\[0] to points\_end\[0], points\_start\[1] to points\_end\[1], ... , points\_start\[n-1] to points\_end\[n-1]

  <ResponseField name="Arguments">
    <ParamField query="points_start" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of 3D start positions of arrow start positions, specified as Vector3r objects
    </ParamField>

    <ParamField query="points_end" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of 3D end positions of arrow start positions, specified as Vector3r objects
    </ParamField>

    <ParamField query="color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="thickness" type="float, optional">
      Thickness of line
    </ParamField>

    <ParamField query="arrow_size" type="float, optional">
      Size of arrow head
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>

    <ParamField query="is_persistent" type="bool, optional">
      If set to True, the desired object will be plotted for infinite time.
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotStrings

<ResponseField
  name="VehicleClient.simPlotStrings(
strings,
positions,
scale=5,
color_rgba=[1.0, 0.0, 0.0, 1.0],
duration=-1.0,
)"
>
  Plots a list of strings at desired positions in World NED frame.

  <ResponseField name="Arguments">
    <ParamField query="strings" type="list[String], optional">
      List of strings to plot
    </ParamField>

    <ParamField query="positions" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of positions where the strings should be plotted. Should be in one-to-one correspondence with the strings' list
    </ParamField>

    <ParamField query="scale" type="float, optional">
      Font scale of transform name
    </ParamField>

    <ParamField query="color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotTransforms

<ResponseField
  name="VehicleClient.simPlotTransforms(
poses, scale=5.0, thickness=5.0, duration=-1.0, is_persistent=False
)"
>
  Plots a list of transforms in World NED frame.

  <ResponseField name="Arguments">
    <ParamField query="poses" type="list[Pose]">
      list\[[Pose](/simulation/airgen/reference/datatypes#pose)]: List of Pose objects representing the transforms to plot
    </ParamField>

    <ParamField query="scale" type="float, optional">
      Length of transforms' axes
    </ParamField>

    <ParamField query="thickness" type="float, optional">
      Thickness of transforms' axes
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>

    <ParamField query="is_persistent" type="bool, optional">
      If set to True, the desired object will be plotted for infinite time.
    </ParamField>
  </ResponseField>
</ResponseField>

## simPlotTransformsWithNames

<ResponseField
  name="VehicleClient.simPlotTransformsWithNames(
poses,
names,
tf_scale=5.0,
tf_thickness=5.0,
text_scale=10.0,
text_color_rgba=[1.0, 0.0, 0.0, 1.0],
duration=-1.0,
)"
>
  Plots a list of transforms with their names in World NED frame.

  <ResponseField name="Arguments">
    <ParamField query="poses" type="list[Pose]">
      list\[[Pose](/simulation/airgen/reference/datatypes#pose)]: List of Pose objects representing the transforms to plot
    </ParamField>

    <ParamField query="names" type="list[string]">
      List of strings with one-to-one correspondence to list of poses
    </ParamField>

    <ParamField query="tf_scale" type="float, optional">
      Length of transforms' axes
    </ParamField>

    <ParamField query="tf_thickness" type="float, optional">
      Thickness of transforms' axes
    </ParamField>

    <ParamField query="text_scale" type="float, optional">
      Font scale of transform name
    </ParamField>

    <ParamField query="text_color_rgba" type="list, optional">
      desired RGBA values from 0.0 to 1.0 for the transform name
    </ParamField>

    <ParamField query="duration" type="float, optional">
      Duration (seconds) to plot for
    </ParamField>
  </ResponseField>
</ResponseField>

## startRecording

<ResponseField name="VehicleClient.startRecording()">
  Start Recording

  Recording will be done according to the settings
</ResponseField>

## stopRecording

<ResponseField name="VehicleClient.stopRecording()">
  Stop Recording
</ResponseField>

## isRecording

<ResponseField name="VehicleClient.isRecording()">
  Whether Recording is running or not

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if Recording, else False
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetWind

<ResponseField name="VehicleClient.simSetWind(wind)">
  Set simulated wind, in World frame, NED direction, m/s

  <ResponseField name="Arguments">
    <ParamField query="wind" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Wind, in World frame, NED direction, in m/s
    </ParamField>
  </ResponseField>
</ResponseField>

## simCreateVoxelGrid

<ResponseField name="VehicleClient.simCreateVoxelGrid(position, x, y, z, res, of)">
  Construct and save a binvox-formatted voxel grid of environment

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Position around which voxel grid is centered in m
    </ParamField>

    <ParamField query="res" type="float">
      Resolution of voxel grid in m
    </ParamField>

    <ParamField query="of" type="str">
      Name of output file to save voxel grid as
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if output written to file successfully, else False
    </ResponseField>
  </ResponseField>
</ResponseField>

## simBuildSDF

<ResponseField name="VehicleClient.simBuildSDF(position, x, y, z, res)">
  Construct a signed distance field of the environment centered at position,
  and with dimensions (x, y, z). Internally, the SDF is stored as a special
  case of a voxel grid with floating point distances instead of boolean occupancy.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position around which field is centered in m
    </ParamField>

    <ParamField query="res" type="float">
      Resolution of distance field in m
    </ParamField>
  </ResponseField>
</ResponseField>

## simCheckOccupancy

<ResponseField name="VehicleClient.simCheckOccupancy(position)">
  Check and return occupancy of a point. Requires signed distance field to be
  built beforehand.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position at which occupancy is to be checked (m)
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetSignedDistance

<ResponseField name="VehicleClient.simGetSignedDistance(position)">
  Get signed distance of a point (distance to the closest 'object surface')
  in the environment. Requires signed distance field to be built beforehand.

  Distance is positive if the point is in free space, and negative if the point is
  inside an object.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position at which distance is to be computed (m)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="dist" type="dist">
      (float): Signed distance at the position
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetSignedDistances

<ResponseField name="VehicleClient.simGetSignedDistances(positions)">
  Get signed distance of a list of points (distance to the closest 'object surface')
  in the environment. Requires signed distance field to be built beforehand.

  Distance is positive if the point is in free space, and negative if the point is
  inside an object.

  <ResponseField name="Arguments">
    <ParamField query="positions" type="list">
      List of global positions at which distance is to be computed (m)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="dists" type="dists">
      (list\[float]): Signed distances at the positions
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetSDFGradient

<ResponseField name="VehicleClient.simGetSDFGradient(position)">
  Get the SDF gradient at a point (vector pointing away from the closest
  'object surface') in the environment. Requires signed distance field to be built
  beforehand.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position at which gradient is to be computed (m)
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="gradient" type="gradient">
      [Vector3r](/simulation/airgen/reference/datatypes#vector3r): SDF gradient at the position
    </ResponseField>
  </ResponseField>
</ResponseField>

## simCheckInVolume

<ResponseField name="VehicleClient.simCheckInVolume(position, volume_object_name)">
  Check if a point is inside a volume.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position at which volume is to be checked (m)
    </ParamField>

    <ParamField query="volume_object_name" type="str">
      Name of the volume object
    </ParamField>
  </ResponseField>
</ResponseField>

## simProjectToFreeSpace

<ResponseField name="VehicleClient.simProjectToFreeSpace(position, mindist)">
  Project a given point into free space using the SDF, with a specified minimum clearance
  from existing objects. Returns the same point if the point is already free, else follows
  the SDF gradient to find a free point that satisfies the minimum distance constraint.

  <ResponseField name="Arguments">
    <ParamField query="position" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Global position to project (m)
    </ParamField>

    <ParamField query="mindist" type="float">
      Minimum distance from objects to satisfy when finding the free point
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="free_pt" type="free_pt">
      [Vector3r](/simulation/airgen/reference/datatypes#vector3r): Projected position in free space
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSaveSDF

<ResponseField name="VehicleClient.simSaveSDF(filepath)">
  Save the constructed signed distance field to a file.

  <ResponseField name="Arguments">
    <ParamField query="filepath" type="str">
      Filename to save the SDF to
    </ParamField>
  </ResponseField>
</ResponseField>

## simLoadSDF

<ResponseField name="VehicleClient.simLoadSDF(filepath)">
  Load a saved signed distance field.

  <ResponseField name="Arguments">
    <ParamField query="filepath" type="str">
      Filename to load the SDF from
    </ParamField>
  </ResponseField>
</ResponseField>

## simGetRandomFreePoint

<ResponseField name="VehicleClient.simGetRandomFreePoint(search_radius)">
  Return a random free (unoccupied) point within a radius around the vehicle.

  <ResponseField name="Arguments">
    <ParamField query="search_radius" type="float">
      Radius around the vehicle to search for a free point in m
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="Vector3r" type="Vector3r">
      /None: Free/unoccupied point coordinates if successful, else None
    </ResponseField>
  </ResponseField>
</ResponseField>

## simPlanPathToRandomFreePoint

<ResponseField name="VehicleClient.simPlanPathToRandomFreePoint(search_radius, smooth_path, draw_path)">
  Plan a collision-free path to a random point within a radius around the vehicle and return the intermediate waypoints.

  <ResponseField name="Arguments">
    <ParamField query="search_radius" type="float">
      Radius around the vehicle to search for a free point in m
    </ParamField>

    <ParamField query="smooth_path" type="bool">
      Returns a smooth spline if True, else returns a list of coarse waypoints
    </ParamField>

    <ParamField query="draw_path" type="bool">
      Draws the path in the Unreal environment if True
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[Vector3r]" type="list[Vector3r]">
      List of waypoints if successful, else empty list
    </ResponseField>
  </ResponseField>
</ResponseField>

## simPlanPathToRandomizeGoal

<ResponseField
  name="VehicleClient.simPlanPathToRandomizeGoal(
start, goal, search_radius, num_trials, smooth_path, draw_path
)"
>
  Plan a collision-free path from the current position to a random point within a radius around the goal and return the intermediate waypoints.

  <ResponseField name="Arguments">
    <ParamField query="start" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Start position in airgen coordinates
    </ParamField>

    <ParamField query="goal" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Goal position in airgen coordinates
    </ParamField>

    <ParamField query="search_radius" type="float">
      Radius around the vehicle to search for a free point in m
    </ParamField>

    <ParamField query="num_trials" type="int">
      number of random points to query for a free point
    </ParamField>

    <ParamField query="smooth_path" type="bool">
      Returns a smooth spline if True, else returns a list of coarse waypoints
    </ParamField>

    <ParamField query="draw_path" type="bool">
      Draws the path in the Unreal environment if True
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[Vector3r]" type="list[Vector3r]">
      List of waypoints if successful, else empty list
    </ResponseField>
  </ResponseField>
</ResponseField>

## simPlanPath

<ResponseField name="VehicleClient.simPlanPath(start, goal, smooth_path, draw_path)">
  Plan a collision-free path between start and goal points and return the intermediate waypoints.

  <ResponseField name="Arguments">
    <ParamField query="start" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Start position in airgen coordinates
    </ParamField>

    <ParamField query="goal" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Goal position in airgen coordinates
    </ParamField>

    <ParamField query="smooth_path" type="bool">
      Returns a smooth spline if True, else returns a list of coarse waypoints
    </ParamField>

    <ParamField query="draw_path" type="bool">
      Draws the path in the Unreal environment if True
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="list[Vector3r]" type="list[Vector3r]">
      List of waypoints if successful, else empty list
    </ResponseField>
  </ResponseField>
</ResponseField>

## getNavMeshInfo

<ResponseField name="VehicleClient.getNavMeshInfo()">
  Get NavMesh information, as an array of XYZ center, min and max values in global NED coordinates

  <ResponseField name="Returns">
    <ResponseField name="list[Vector3r]" type="list[Vector3r]">
      List of values if successful, else empty list
    </ResponseField>
  </ResponseField>
</ResponseField>

## isPointInCollision

<ResponseField name="VehicleClient.isPointInCollision(point)">
  Get Collision information about a point. Returns True if point is in collision, else False

  <ResponseField name="Arguments">
    <ParamField query="point" type="Vector3r">
      ([Vector3r](/simulation/airgen/reference/datatypes#vector3r)): Point to be checked in airgen coordinates
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if point is in collision, else False
    </ResponseField>
  </ResponseField>
</ResponseField>

## isAnyPointInCollisionBatch

<ResponseField name="VehicleClient.isAnyPointInCollisionBatch(points)">
  Get Collision information about an array of points. Returns True if any of the points is in collision, else False

  <ResponseField name="Arguments">
    <ParamField query="points" type="list[Vector3r]">
      list\[[Vector3r](/simulation/airgen/reference/datatypes#vector3r)]: List of points to be checked in airgen coordinates
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      True if any of the points is in collision, else False
    </ResponseField>
  </ResponseField>
</ResponseField>

## simAddVehicle

<ResponseField name="VehicleClient.simAddVehicle(vehicle_name, vehicle_type, pose, pawn_path=&#x22;&#x22;)">
  Create vehicle at runtime

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str">
      Name of the vehicle being created
    </ParamField>

    <ParamField query="vehicle_type" type="str">
      Type of vehicle, e.g. "simpleflight"
    </ParamField>

    <ParamField query="pose" type="Pose">
      ([Pose](/simulation/airgen/reference/datatypes#pose)): Initial pose of the vehicle
    </ParamField>

    <ParamField query="pawn_path" type="str, optional">
      Vehicle blueprint path, default empty wbich uses the default blueprint for the vehicle type
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="bool" type="bool">
      Whether vehicle was created
    </ResponseField>
  </ResponseField>
</ResponseField>

## listVehicles

<ResponseField name="VehicleClient.listVehicles()">
  Lists the names of current vehicles

  <ResponseField name="Returns">
    <ResponseField name="list[str]" type="list[str]">
      List containing names of all vehicles
    </ResponseField>
  </ResponseField>
</ResponseField>

## getSettingsString

<ResponseField name="VehicleClient.getSettingsString()">
  Fetch the settings text being used by airgen

  <ResponseField name="Returns">
    <ResponseField name="str" type="str">
      Settings text in JSON format
    </ResponseField>
  </ResponseField>
</ResponseField>

## simCreateWaypoint

<ResponseField name="VehicleClient.simCreateWaypoint(context = &#x22;&#x22;, vehicle_name = &#x22;&#x22;)">
  Creates a waypoint using the vehicle transform.
  The created waypoint will be associated with the specified waypoints-context.

  If context isn't specified, it'll default to the last-used context.
  If there's no context present and context isn't specified, a context named 'defaultWaypoints' will be auto created.

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle
    </ParamField>

    <ParamField query="context" type="str, optional">
      Name of the associated waypoints-context
    </ParamField>
  </ResponseField>
</ResponseField>

## simCreateWaypointFromPose

<ResponseField name="VehicleClient.simCreateWaypointFromPose(pose, context = &#x22;&#x22;)">
  Creates a waypoint using the vehicle transform.
  The created waypoint will be associated with the specified waypoints-context.

  If context isn't specified, it'll default to the last-used context.
  If there's no context present and context isn't specified, a context named 'defaultWaypoints' will be auto created.

  <ResponseField name="Arguments">
    <ParamField query="vehicle_name" type="str, optional">
      Name of the vehicle
    </ParamField>

    <ParamField query="context" type="str, optional">
      Name of the associated waypoints-context
    </ParamField>
  </ResponseField>
</ResponseField>

## simDeleteWaypoints

<ResponseField name="VehicleClient.simDeleteWaypoints(context = &#x22;&#x22;, only_recent = True, keep_context_alive = True)">
  Deletes waypoints for a specified context

  If 'only\_recent' is True, it'll delete the youngest waypoint of the specified waypoints-context.
  If 'only\_recent' is False, it'll delete all waypoints for the specified context.

  If context isn't specified, it'll default to the last-used context.
  If context isn't specified and there's no last-used context, it'll throw an error.

  <ResponseField name="Arguments">
    <ParamField query="context" type="str, optional">
      Name of the associated waypoints-context
    </ParamField>

    <ParamField query="only_recent" type="bool, optional">
      Whether to delete only the youngest waypoint or all of them, for a context
    </ParamField>

    <ParamField query="keep_context_alive" type="bool, optional">
      If this is False, the context and all its associated waypoints will be deleted
    </ParamField>
  </ResponseField>
</ResponseField>

## simDeleteAllWaypoints

<ResponseField name="VehicleClient.simDeleteAllWaypoints()">
  Deletes all waypoints and all waypoint-contexts
</ResponseField>

## simGetWaypointDataAsCsv

<ResponseField name="VehicleClient.simGetWaypointDataAsCsv(context = &#x22;&#x22;)">
  Get the waypoints data of a waypoints-context as a CSV formatted string.
  If context isn't specified, it'll default to the last-used context.
  If context isn't specified and there's no last-used context, it'll throw an error.

  <ResponseField name="Arguments">
    <ParamField query="context" type="str, optional">
      Name of the waypoints-context
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="waypoint_data" type="waypoint_data">
      (str): Waypoint data as a CSV formatted string
    </ResponseField>
  </ResponseField>
</ResponseField>

## simGetWaypointDataAsJson

<ResponseField name="VehicleClient.simGetWaypointDataAsJson(context = &#x22;&#x22;)">
  Get the waypoints data of a waypoints-context as a JSON string.
  If context isn't specified, it'll default to the last-used context.
  If context isn't specified and there's no last-used context, it'll throw an error.

  <ResponseField name="Arguments">
    <ParamField query="context" type="str, optional">
      Name of the waypoints-context
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="waypoint_data" type="waypoint_data">
      (str): Waypoint data as a JSON formatted string
    </ResponseField>
  </ResponseField>
</ResponseField>

## simSetWaypointColor

<ResponseField name="VehicleClient.simSetWaypointColor(color_rgb, index, context = &#x22;&#x22;)">
  Changes the color of a given waypoint.
  If context isn't specified, it'll default to the last-used context.
  If context isn't specified and there's no last-used context, it'll throw an error.

  <ResponseField name="Arguments">
    <ParamField query="color_rgb" type="list">
      desired RGB values from 0.0 to 1.0. e.g. \[1, 1, 1]
    </ParamField>

    <ParamField query="index" type="int">
      The index of the Waypoint. The index of the first waypoint is 0.
    </ParamField>

    <ParamField query="context" type="str, optional">
      Name of the waypoints-context.
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="success" type="success">
      (bool): True if the color change was a success, false otherwise.
    </ResponseField>
  </ResponseField>
</ResponseField>

## simResetWaypointColor

<ResponseField name="VehicleClient.simResetWaypointColor(index, context = &#x22;&#x22;)">
  Resets the color of a given waypoint to the original.
  If context isn't specified, it'll default to the last-used context.
  If context isn't specified and there's no last-used context, it'll throw an error.

  <ResponseField name="Arguments">
    <ParamField query="index" type="int">
      The index of the Waypoint. The index of the first waypoint is 0.
    </ParamField>

    <ParamField query="context" type="str, optional">
      Name of the waypoints-context.
    </ParamField>
  </ResponseField>

  <ResponseField name="Returns">
    <ResponseField name="success" type="success">
      (bool): True if the color reset was a success, false otherwise.
    </ResponseField>
  </ResponseField>
</ResponseField>
