Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pufferlib/config/ocean/drive.ini
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ obs_norm_goal_offset_m = 120.0
obs_norm_xy_offset_m = 120.0
obs_norm_veh_length_m = 15.0
obs_norm_veh_width_m = 10.0
# SDC perceives its own size inflated by this fraction in control_sdc_only obs
# (0 = off, 0.05 = +5%). Observation-only; sim dynamics/collision unchanged.
ego_size_inflation = 0.0
Comment on lines +139 to +141
obs_norm_road_seg_length_m = 10.0
obs_norm_road_seg_width_m = 5.0
; --- Observation ranges (meters, ego frame) ---
Expand Down
1 change: 1 addition & 0 deletions pufferlib/ocean/drive/binding.c
Original file line number Diff line number Diff line change
Expand Up @@ -2006,6 +2006,7 @@ static int my_init(Env *env, PyObject *args, PyObject *kwargs) {
env->obs_norm_xy_offset_m = (float) unpack(kwargs, "obs_norm_xy_offset_m");
env->obs_norm_veh_length_m = (float) unpack(kwargs, "obs_norm_veh_length_m");
env->obs_norm_veh_width_m = (float) unpack(kwargs, "obs_norm_veh_width_m");
env->ego_size_inflation = (float) unpack(kwargs, "ego_size_inflation");
env->obs_norm_road_seg_length_m = (float) unpack(kwargs, "obs_norm_road_seg_length_m");
env->obs_norm_road_seg_width_m = (float) unpack(kwargs, "obs_norm_road_seg_width_m");
env->obs_range_traffic_control_m = (float) unpack(kwargs, "obs_range_traffic_control_m");
Expand Down
17 changes: 15 additions & 2 deletions pufferlib/ocean/drive/drive.h
Original file line number Diff line number Diff line change
Expand Up @@ -455,6 +455,10 @@ struct Drive {
float obs_norm_xy_offset_m;
float obs_norm_veh_length_m;
float obs_norm_veh_width_m;
// Fraction by which the SDC's own perceived length/width are inflated in its
// ego observation (control_sdc_only only). 0 = off; 0.05 = perceive +5%.
// Observation-only: actual sim dimensions (dynamics, collision) are unchanged.
float ego_size_inflation;
float obs_norm_road_seg_length_m;
float obs_norm_road_seg_width_m;
float obs_range_traffic_control_m;
Expand Down Expand Up @@ -4587,9 +4591,18 @@ static void compute_rewards(Drive *env, int i) {
}

static int write_ego_obs(Drive *env, Agent *ego, float *obs, int obs_idx) {
// Optionally inflate the SDC's perceived size in its own observation only
// (control_sdc_only). Sim dimensions used for dynamics/collision are untouched.
float perceived_width = ego->sim_width;
float perceived_length = ego->sim_length;
if (env->ego_size_inflation > 0.0f && env->control_mode == CONTROL_SDC_ONLY) {
perceived_width *= (1.0f + env->ego_size_inflation);
perceived_length *= (1.0f + env->ego_size_inflation);
}
Comment on lines +4598 to +4601

obs[obs_idx++] = ego->sim_speed_signed / MAX_SPEED;
obs[obs_idx++] = ego->sim_width / env->obs_norm_veh_width_m;
obs[obs_idx++] = ego->sim_length / env->obs_norm_veh_length_m;
obs[obs_idx++] = perceived_width / env->obs_norm_veh_width_m;
obs[obs_idx++] = perceived_length / env->obs_norm_veh_length_m;
obs[obs_idx++] = ego->steering_angle / STEERING_LIMIT;
obs[obs_idx++] = ego->a_long / fabsf(ACCEL_LONG_LIMIT[0]);
obs[obs_idx++] = ego->a_lat / ACCEL_LAT_LIMIT[1];
Expand Down
3 changes: 3 additions & 0 deletions pufferlib/ocean/drive/drive.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ def __init__(
obs_norm_xy_offset_m=100.0,
obs_norm_veh_length_m=15.0,
obs_norm_veh_width_m=10.0,
ego_size_inflation=0.0,
obs_norm_road_seg_length_m=5.0,
obs_norm_road_seg_width_m=5.0,
obs_range_traffic_control_m=100.0,
Expand Down Expand Up @@ -190,6 +191,7 @@ def __init__(
self.obs_norm_xy_offset_m = float(obs_norm_xy_offset_m)
self.obs_norm_veh_length_m = float(obs_norm_veh_length_m)
self.obs_norm_veh_width_m = float(obs_norm_veh_width_m)
self.ego_size_inflation = float(ego_size_inflation)
self.obs_norm_road_seg_length_m = float(obs_norm_road_seg_length_m)
self.obs_norm_road_seg_width_m = float(obs_norm_road_seg_width_m)
self.obs_range_traffic_control_m = float(obs_range_traffic_control_m)
Expand Down Expand Up @@ -462,6 +464,7 @@ def _env_init_kwargs(self, map_file, max_agents):
"obs_norm_xy_offset_m": self.obs_norm_xy_offset_m,
"obs_norm_veh_length_m": self.obs_norm_veh_length_m,
"obs_norm_veh_width_m": self.obs_norm_veh_width_m,
"ego_size_inflation": self.ego_size_inflation,
"obs_norm_road_seg_length_m": self.obs_norm_road_seg_length_m,
"obs_norm_road_seg_width_m": self.obs_norm_road_seg_width_m,
"obs_range_traffic_control_m": self.obs_range_traffic_control_m,
Expand Down
Loading