Spaces:
Runtime error
Runtime error
| import math | |
| import os | |
| from mmcv import Config | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| from risk_biased.scene_dataset.scene import RandomScene, RandomSceneParams | |
| from risk_biased.scene_dataset.scene_plotter import ScenePlotter | |
| from risk_biased.utils.cost import ( | |
| DistanceCostNumpy, | |
| DistanceCostParams, | |
| TTCCostNumpy, | |
| TTCCostParams, | |
| ) | |
| from risk_biased.utils.risk import get_risk_level_sampler | |
| if __name__ == "__main__": | |
| working_dir = os.path.dirname(os.path.realpath(__file__)) | |
| config_path = os.path.join( | |
| working_dir, "..", "..", "risk_biased", "config", "learning_config.py" | |
| ) | |
| config = Config.fromfile(config_path) | |
| risk_sampler = get_risk_level_sampler(config.risk_distribution) | |
| is_torch = False | |
| n_samples = 1000 | |
| sample_every = 10 | |
| scene_params = RandomSceneParams.from_config(config) | |
| scene_params.batch_size = n_samples | |
| # Get a batch of random pedestrians | |
| scene = RandomScene( | |
| scene_params, | |
| is_torch=is_torch, | |
| ) | |
| # Define the initial positions of pedestrians | |
| # Slow dangerous, fast safe settings: | |
| percent_right = 0.8 | |
| percent_top = 0.6 | |
| angle = 5 * np.pi / 4 | |
| # Slow safe, fast dangerous settings: | |
| # percent_right = 0.8 | |
| # percent_top = 1.1 | |
| # angle = 5 * np.pi / 4 | |
| positions = np.array([[[percent_right, percent_top]]] * n_samples) | |
| angles = np.array([[angle]] * n_samples) | |
| scene.set_pedestrians_states(positions, angles) | |
| dist_cost_func = DistanceCostNumpy(DistanceCostParams.from_config(config)) | |
| ttc_cost_func = TTCCostNumpy(TTCCostParams.from_config(config)) | |
| len_traj = int(config.time_scene / scene.dt) | |
| ped_trajs = scene.get_pedestrians_trajectories() | |
| ego_traj = scene.get_ego_ref_trajectory(config.sample_times) | |
| travel_distances = np.sqrt( | |
| np.square(ped_trajs[..., -1, :] - ped_trajs[..., 0, :]).sum(-1) | |
| ) | |
| dist_cost, dist = dist_cost_func( | |
| ego_traj[:, :, config.num_steps :], ped_trajs[:, :, config.num_steps :] | |
| ) | |
| ttc_cost, (ttc, dist) = ttc_cost_func( | |
| ego_traj[:, :, config.num_steps :], | |
| ped_trajs[:, :, config.num_steps :], | |
| scene.get_ego_ref_velocity(), | |
| scene.get_pedestrians_velocities(), | |
| ) | |
| fig, ax = plt.subplots() | |
| plotter = ScenePlotter(scene, ax) | |
| plotter.draw_scene(0, time=config.num_steps * config.dt) | |
| # plotter.draw_trajectory(ped_trajs[0, config.num_steps :], color="g") | |
| plotter.draw_all_trajectories( | |
| ped_trajs[:, :, config.num_steps :], color_value=ttc_cost | |
| ) | |
| def plot_histograms(travel_distances, dist_cost, ttc_cost, label=""): | |
| # Open the plots for the sampled future times | |
| fig, ax = plt.subplots(1, 3) | |
| fig.suptitle(label) | |
| # Plot histograms of traveled distances, depending on the parameters. | |
| # It should be multi-modal. There is a minimum distance and a maximum distance and travel distance variations within these bounds. | |
| ax[0].set_title("Travel distance") | |
| ax[1].set_title("Distance cost") | |
| ax[2].set_title("TTC cost") | |
| ax[0].hist(travel_distances[:, -1], bins=30) | |
| ax[1].hist(dist_cost[:], bins=30) | |
| ax[1].set_ylim([0, 3 * math.sqrt(n_samples)]) | |
| ax[2].hist(ttc_cost[:], bins=30) | |
| ax[2].set_ylim([0, 3 * math.sqrt(n_samples)]) | |
| agent_selected = 0 | |
| plot_histograms(travel_distances[:, agent_selected], dist_cost, ttc_cost, "Data") | |
| print(f"Average ttc cost: {ttc_cost.mean()}") | |
| print(f"Average distance cost: {dist_cost.mean()}") | |
| plt.tight_layout() | |
| plt.show() | |