|
from typing import List
|
|
from nuplan.planning.simulation.trajectory.trajectory_sampling import TrajectorySampling
|
|
from navsim.agents.abstract_agent import AbstractAgent
|
|
from navsim.common.dataclasses import AgentInput, Trajectory, SensorConfig
|
|
|
|
import numpy as np
|
|
|
|
|
|
class ConstantVelocityAgent(AbstractAgent):
|
|
|
|
requires_scene = False
|
|
|
|
def __init__(
|
|
self,
|
|
trajectory_sampling: TrajectorySampling = TrajectorySampling(
|
|
time_horizon=4, interval_length=0.5
|
|
),
|
|
):
|
|
self._trajectory_sampling = trajectory_sampling
|
|
|
|
def name(self) -> str:
|
|
"""Inherited, see superclass."""
|
|
|
|
return self.__class__.__name__
|
|
|
|
def initialize(self) -> None:
|
|
"""Inherited, see superclass."""
|
|
pass
|
|
|
|
def get_sensor_config(self) -> SensorConfig:
|
|
"""Inherited, see superclass."""
|
|
return SensorConfig.build_no_sensors()
|
|
|
|
def compute_trajectory(self, agent_input: AgentInput) -> Trajectory:
|
|
"""
|
|
Computes the ego vehicle trajectory.
|
|
:param current_input: Dataclass with agent inputs.
|
|
:return: Trajectory representing the predicted ego's position in future
|
|
"""
|
|
ego_velocity_2d = agent_input.ego_statuses[-1].ego_velocity
|
|
ego_speed = (ego_velocity_2d**2).sum(-1) ** 0.5
|
|
|
|
num_poses, dt = (
|
|
self._trajectory_sampling.num_poses,
|
|
self._trajectory_sampling.interval_length,
|
|
)
|
|
poses = np.array(
|
|
[[(time_idx + 1) * dt * ego_speed, 0.0, 0.0] for time_idx in range(num_poses)],
|
|
dtype=np.float32,
|
|
)
|
|
|
|
return Trajectory(poses, self._trajectory_sampling)
|
|
|