Agents

class vista.entities.agents.Car.Car(world: <module 'vista.core.World' from '/home/amini/projects/vista/vista/core/World.py'>, car_config: Dict)[source]

The class of a car agent. This object lives in the World and is attached to a trace object that provides pointers to dataset for data-driven simulation and zero or one or more sensor objects that synthesize sensory measurement. The update of vehicle state is handled in this object.

Parameters
  • world (World) – The world that this agent lives in.

  • car_config (Dict) –

    Configuration of the car. An example (default) is,

    >>> DEFAULT_CONFIG = {
        'length': 5.,
        'width': 2.,
        'wheel_base': 2.78,
        'steering_ratio': 14.7,
        'lookahead_road': False,
        'road_buffer_size': 200,
    }
    

Example Usage (always make sure reset is called first to initialize vehicle state or pointer to the dataset for data-driven simulation):

>>> car = world.spawn_agent(car_config)
>>> car.spawn_camera(camera_config)
>>> world.reset()
>>> car.step_dynamics(action) # update vehicle states
>>> car.step_sensors() # do sensor capture
>>> observation = car.observations # fetch sensory measurement
>>> car.step_dataset() # simply get next frame in the dataset without synthesis
spawn_camera(config: Dict)vista.entities.sensors.Camera.Camera[source]

Spawn and attach a camera to this car.

Parameters

config (Dict) – Configuration of camera and rendering. For more details, please check the doc of Camera sensor.

Returns

a vista camera sensor object spawned.

Return type

Camera

spawn_lidar(config: Dict)vista.entities.sensors.Lidar.Lidar[source]

Spawn and attach a LiDAR to this car.

Parameters

config (Dict) – Configuration of LiDAR. For more details, please check the doc of Lidar sensor.

Returns

a vista Lidar sensor object spawned.

Return type

Lidar

spawn_event_camera(config: Dict)vista.entities.sensors.EventCamera.EventCamera[source]

Spawn and attach an event camera to this car.

Parameters

config (Dict) – Configuration of event camera. For more details, please check the doc of EventCamera sensor.

Returns

a vista event camera sensor object spawned.

Return type

EventCamera

reset(trace_index: int, segment_index: int, frame_index: int, initial_dynamics_fn: Optional[Callable] = None, step_sensors: Optional[bool] = True) → None[source]

Reset the car. This involves pointing to somewhere in the dataset for later-on data-driven simulation, initializing vehicle state, and resetting all sensors attached to this car. If lookahead_road = True, the road cache will also be reset.

Parameters
  • trace_index (int) – A pointer to which trace to be simulated on.

  • segment_index (int) – A pointer to which segment in a trace to be simulated on.

  • frame_index (int) – A pointer to which frame in a segment to be simulated on.

  • initial_dynamics_fn (Callable) – A function to initialize vehicle state. The function takes x, y, yaw, steering (tire angle), and speed as inputs. Default is set to None, which initialize vehicle with the same state as the dataset.

  • step_sensors (bool) – Whether to step sensor; default is set to True.

step_dataset(step_dynamics=True)[source]

Step through the dataset without rendering. This is basically fetching the next frame from the dataset. Normally, it is called when doing imitation learning.

Parameters

step_dynamics (bool) – Whether to update vehicle state; default is set to True.

Raises

NotImplementedError – if any attached sensor has no implemented function for stepping through dataset.

step_dynamics(action: numpy.ndarray, dt: Optional[float] = 0.03333333333333333, update_road: Optional[bool] = True) → None[source]

Update vehicle state given control command based on vehicle dynamics and update timestamp, which is then used to update pointer to the dataset for data-driven simulation.

Parameters
  • action (np.ndarray) – Control command (curvature and speed).

  • dt (float) – Elapsed time.

  • update_road (bool) – Whether to update road cache; default is set to True.

step_sensors() → None[source]

Update sensor measurement given current state of the vehicle.

property trace

The Trace currently associated with the car.

property sensors

All sensors attached to this car.

property relative_state

Relative transform between ego_dynamics and human_dynamics.

property ego_dynamics

Current simulated vehicle state.

property human_dynamics

Vehicle state of the current pointer to the dataset (human trajectory).

property length

Car length.

property width

Car width.

property wheel_base

Wheel base.

property steering_ratio

Steering ratio.

property speed

Speed of simulated trajectory (this car) in current timestamp.

property curvature

Curvature of simulated trajectory (this car) in current timestamp.

property steering

Steering angle of simulated trajectory (this car) in current timestamp.

property tire_angle

Tire angle of simulated trajectory (this car) in current timestamp.

property human_speed

Speed of human trajectory in current timestamp.

property human_curvature

Curvature of human trajectory in current timestamp.

property human_steering

Steering angle of human trajectory in current timestamp.

property human_tire_angle

Tire angle of human trajectory in current timestamp.

property timestamp

Current timestamp (normally ROS timestamp). This serves as a continuous pointer to the dataset as opposed to trace_index, segment_index, and frame_index.

property frame_number

Current frame number. Note that this is different from frame_index as it is a different pointer based on how we define frame in the master_sensor instead of a pointer to the dataset. There is only one unique pointer to the dataset, which can be mapped to (potentially) different pointers to the frame number in different sensors.

property trace_index

Current pointer to the trace.

property segment_index

Current pointer to the segment in the current trace.

property frame_index

Current pointer to the frame in the current segment.

property observations

Sensory measurement at current timestamp.

property done

Whether exceeding the end of the trace currently associated with the car.

property road

Road cache if lookahead_road = True otherwise None.

property config

Configuration of this car.

property id

The identifier of this entity.

property parent

The parent of this entity.

class vista.entities.agents.Dynamics.StateDynamics(x: Optional[float] = 0.0, y: Optional[float] = 0.0, yaw: Optional[float] = 0.0, steering: Optional[float] = 0.0, speed: Optional[float] = 0.0, steering_bound: Optional[List[float]] = [- 0.75, 0.75], speed_bound: Optional[List[float]] = [0.0, 15.0], wheel_base: Optional[float] = 2.8)[source]

Simple continuous kinematic (bicycle) model of a rear-wheel driven vehicle. Check out Eq.3 in https://www.autonomousrobots.nl/docs/17-schwartig-autonomy-icra.pdf

Parameters
  • x (float) – Position of the car in x-axis.

  • y (float) – Position of the car in y-axis.

  • yaw (float) – Heading/yaw of the car.

  • steering (float) – Steering angle of tires instead of steering wheel.

  • speed (float) – Forward speed.

  • steering_bound (list) – Upper and lower bound of steering angle.

  • speed_bound (list) – Upper and lower bound of speed.

  • wheel_base (float) – Wheel base.

step(steering_velocity: float, acceleration: float, dt: float, max_steps: Optional[int] = 100) → numpy.ndarray[source]

Step the vehicle state by solving ODE of the continuous kinematic (bicycle) model.

Parameters
  • steering_velocity (float) – Steering velocity (of tire angle).

  • acceleration (float) – Acceleration.

  • dt (float) – Elapsed time.

  • max_steps (int) – Maximal step to run the ODE solver; default to 100.

Returns

The updated state (x, y, yaw, tire angle, speed).

Return type

np.ndarray

numpy() → numpy.ndarray[source]

Return a numpy array of vehicle state.

Returns

Vehicle state.

Return type

np.ndarray

copy()[source]

Create a copy.

update(x: float, y: float, yaw: float, steering: float, speed: float) → None[source]

Set state. :param x: Position of the car in x-axis. :type x: float :param y: Position of the car in y-axis. :type y: float :param yaw: Heading/yaw of the car. :type yaw: float :param steering: Steering angle of tires instead of steering wheel. :type steering: float :param speed: Forward speed. :type speed: float

reset() → None[source]

Reset all state to zeros.

property x

Position of the car in x-axis.

property y

Position of the car in y-axis.

property yaw

Heading/yaw of the car.

property steering

Steering (tire) angle.

property steering_bound

Lower and upper bound of steering (tire) angle.

property speed

Speed.

property speed_bound

Lower and upper bound of speed.

vista.entities.agents.Dynamics.curvature2tireangle(curvature: float, wheel_base: float) → float[source]

Convert curvature to tire angle.

Parameters
  • curvature (float) – Curvature.

  • wheel_base (float) – Wheel base.

Returns

Tire angle.

Return type

float

vista.entities.agents.Dynamics.tireangle2curvature(tire_angle: float, wheel_base: float) → float[source]

Convert tire angel to curvature.

Parameters
  • tire_angle (float) – Tire angle.

  • wheel_base (float) – Wheel base.

Returns

Curvature.

Return type

float

vista.entities.agents.Dynamics.curvature2steering(curvature: float, wheel_base: float, steering_ratio: float) → float[source]

Convert curvature to steering angle.

Parameters
  • curvature (float) – Curvature.

  • wheel_base (float) – Wheel base.

  • steering_ratio (float) – Steering ratio.

Returns

Steering (wheel) angle.

Return type

float

vista.entities.agents.Dynamics.steering2curvature(steering: float, wheel_base: float, steering_ratio: float) → float[source]

Convert steering angle to curvature.

Parameters
  • steering (float) – Steering (wheel) angle.

  • wheel_base (float) – Wheel base.

  • steering_ratio (float) – Steering ratio.

Returns

Curvature.

Return type

float

vista.entities.agents.Dynamics.update_with_perfect_controller(desired_state: List[float], dt: float, dynamics: vista.entities.agents.Dynamics.StateDynamics) → None[source]

Update vehicle state assuming a perfect low-level controller. This basically simulate that the low-level controller can “instantaneously” achieve the desired state (e.g., steering (tire) angle and speed) with control command (steering velocity and accleration) in vehicle dynamics.

Parameters
  • desired_state (List[float]) – A list of desired vehicle state.

  • dt (float) – Elapsed time.

  • dynamics (StateDynamics) – Vehicle state.