diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..33e6eba --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.usda filter=lfs diff=lfs merge=lfs -text diff --git a/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usd b/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usd deleted file mode 100644 index fe88ffa..0000000 Binary files a/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usd and /dev/null differ diff --git a/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usda b/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usda new file mode 100644 index 0000000..704b75a --- /dev/null +++ b/omniverse/extension/omni.viplanner/data/warehouse/warehouse_new.usda @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41a7729b62963eb95bfebe256f0966937f5e730537f26348383169ec07ca8265 +size 21215718 diff --git a/omniverse/extension/omni.viplanner/omni/viplanner/collectors/viewpoint_sampling.py b/omniverse/extension/omni.viplanner/omni/viplanner/collectors/viewpoint_sampling.py index 164c19c..d3d2d8d 100644 --- a/omniverse/extension/omni.viplanner/omni/viplanner/collectors/viewpoint_sampling.py +++ b/omniverse/extension/omni.viplanner/omni/viplanner/collectors/viewpoint_sampling.py @@ -81,9 +81,9 @@ def sample_viewpoints(self, nbr_viewpoints: int, seed: int = 1) -> torch.Tensor: sample_idx_select = torch.randperm(sample_idx.sum())[ : min(nbr_samples_per_point, nbr_viewpoints - sample_locations_count) ] - sample_locations[sample_locations_count : sample_locations_count + sample_idx_select.shape[0]] = ( - self.terrain_analyser.samples[sample_idx][sample_idx_select, :2] - ) + sample_locations[ + sample_locations_count : sample_locations_count + sample_idx_select.shape[0] + ] = self.terrain_analyser.samples[sample_idx][sample_idx_select, :2] sample_locations_count += sample_idx_select.shape[0] curr_point_idx += 1 # reset point index if all points are sampled @@ -239,7 +239,7 @@ def render_viewpoints(self, samples: torch.Tensor): os.path.join( filedir, "semantics" if annotator == "semantic_segmentation" else "rgb", - f"{image_idx[cam_idx]}".zfill(4) + ".png" + f"{image_idx[cam_idx]}".zfill(4) + ".png", ), cv2.cvtColor(output.astype(np.uint8), cv2.COLOR_RGB2BGR), ) diff --git a/omniverse/extension/omni.viplanner/omni/viplanner/config/matterport_cfg.py b/omniverse/extension/omni.viplanner/omni/viplanner/config/matterport_cfg.py index bf25479..377abaf 100644 --- a/omniverse/extension/omni.viplanner/omni/viplanner/config/matterport_cfg.py +++ b/omniverse/extension/omni.viplanner/omni/viplanner/config/matterport_cfg.py @@ -11,7 +11,7 @@ from omni.isaac.lab.managers import ObservationTermCfg as ObsTerm from omni.isaac.lab.managers import SceneEntityCfg from omni.isaac.lab.scene import InteractiveSceneCfg -from omni.isaac.lab.sensors import ContactSensorCfg, patterns, CameraCfg +from omni.isaac.lab.sensors import CameraCfg, ContactSensorCfg, patterns from omni.isaac.lab.utils import configclass from omni.isaac.matterport.config import MatterportImporterCfg from omni.isaac.matterport.domains import MatterportRayCasterCfg @@ -121,7 +121,7 @@ class TerrainSceneCfg(InteractiveSceneCfg): debug_vis=False, mesh_prim_paths=["${USER_PATH_TO_USD}/matterport.ply"], ) - + # NOTE: comment the following lines to only render the semantic segmentation and depth images rgb_camera = CameraCfg( prim_path="{ENV_REGEX_NS}/Robot/base/rgb_camera", diff --git a/omniverse/extension/omni.viplanner/omni/viplanner/config/warehouse_cfg.py b/omniverse/extension/omni.viplanner/omni/viplanner/config/warehouse_cfg.py index ae6c97e..7549daa 100644 --- a/omniverse/extension/omni.viplanner/omni/viplanner/config/warehouse_cfg.py +++ b/omniverse/extension/omni.viplanner/omni/viplanner/config/warehouse_cfg.py @@ -41,7 +41,7 @@ class TerrainSceneCfg(InteractiveSceneCfg): static_friction=1.0, dynamic_friction=1.0, ), - usd_path=os.path.join(DATA_DIR, "warehouse", "warehouse_new.usd"), + usd_path=os.path.join(DATA_DIR, "warehouse", "warehouse_new.usda"), groundplane=True, sem_mesh_to_class_map=os.path.join(DATA_DIR, "warehouse", "keyword_mapping.yml"), people_config_file=os.path.join(DATA_DIR, "warehouse", "people_cfg.yml"), diff --git a/viplanner/utils/dataset.py b/viplanner/utils/dataset.py index c93cbbb..b8ad9d6 100644 --- a/viplanner/utils/dataset.py +++ b/viplanner/utils/dataset.py @@ -621,7 +621,7 @@ def filter_obs_inflation(self) -> None: print("DONE!") print( "[INFO] odom points outside obs inflation :" - f" \t{self.nb_odom_points} ({round(self.nb_odom_points/nb_odom_point_prev*100, 2)} %)" + f" \t{self.nb_odom_points} ({round(self.nb_odom_points / nb_odom_point_prev * 100, 2)} %)" ) return @@ -1072,16 +1072,16 @@ def split_samples( f"[INFO] datamix containing {odom.shape[0]} suitable odom-goal" " pairs: \n" "\t fov :" - f" \t{int(odom.shape[0] * ratio_fov_samples) } ({round(ratio_fov_samples*100, 2)} %) \n" + f" \t{int(odom.shape[0] * ratio_fov_samples)} ({round(ratio_fov_samples * 100, 2)} %) \n" "\t front of robot :" - f" \t{int(odom.shape[0] * ratio_front_samples)} ({round(ratio_front_samples*100, 2)} %) \n" + f" \t{int(odom.shape[0] * ratio_front_samples)} ({round(ratio_front_samples * 100, 2)} %) \n" "\t back of robot :" - f" \t{int(odom.shape[0] * ratio_back_samples) } ({round(ratio_back_samples*100, 2)} %) \n" + f" \t{int(odom.shape[0] * ratio_back_samples)} ({round(ratio_back_samples * 100, 2)} %) \n" "from" - f" {self.odom_used} ({round(self.odom_used/self.nb_odom_points*100, 2)} %)" + f" {self.odom_used} ({round(self.odom_used / self.nb_odom_points * 100, 2)} %)" " different starting points where \n" "\t non-suitable filter:" - f" {self.odom_no_suitable_goals} ({round(self.odom_no_suitable_goals/self.nb_odom_points*100, 2)} %)" + f" {self.odom_no_suitable_goals} ({round(self.odom_no_suitable_goals / self.nb_odom_points * 100, 2)} %)" ) # generate split diff --git a/viplanner/utils/eval_utils.py b/viplanner/utils/eval_utils.py index 94757d6..0a6c083 100644 --- a/viplanner/utils/eval_utils.py +++ b/viplanner/utils/eval_utils.py @@ -211,7 +211,7 @@ def plt_single_model(self, eval_dir: str, show: bool = True) -> None: ax.set_title( ( "Avg increase of path length is" - f" {round(np.mean(self.path_extension), 5)*100:.2f}% for" + f" {round(np.mean(self.path_extension), 5) * 100:.2f}% for" " successful paths with tolerance of" f" {self.distance_tolerance}" ), @@ -255,7 +255,7 @@ def plt_single_model(self, eval_dir: str, show: bool = True) -> None: ax1.set_title( ( f"With a tolerance of {self.distance_tolerance} are" - f" {round(goal_success_mean, 5)*100:.2f} % of goals reached" + f" {round(goal_success_mean, 5) * 100:.2f} % of goals reached" ), fontsize=16, ) @@ -416,7 +416,7 @@ def plt_comparison( unique_goal_length + bar_pos, mean_path_extension, width=bar_width, - label=(f"{model_name} (avg {round(avg_increase, 5)*100:.2f} %))"), + label=(f"{model_name} (avg {round(avg_increase, 5) * 100:.2f} %))"), alpha=0.8, ) # yerr=std_path_extension, # axs_path.plot(goal_length_path_exists, mean_path_extension, label=f'{model_name} ({round(avg_increase, 5)*100:.2f} %))') @@ -428,7 +428,7 @@ def plt_comparison( unique_goal_length + bar_pos, mean_goal_distance, width=bar_width, - label=(f"{model_name} (success rate" f" {round(goal_success, 5)*100:.2f} %)"), + label=(f"{model_name} (success rate" f" {round(goal_success, 5) * 100:.2f} %)"), alpha=0.8, ) # yerr=std_goal_distance, # axs_goal.plot(unique_goal_length, mean_goal_distance, label=f'{model_name} ({round(goal_success, 5)*100:.2f} %)') diff --git a/viplanner/utils/trainer.py b/viplanner/utils/trainer.py index 42f3933..6d702b8 100644 --- a/viplanner/utils/trainer.py +++ b/viplanner/utils/trainer.py @@ -495,8 +495,8 @@ def _train_epoch( train_loss += loss.item() enumerater.set_description( f"Epoch: {epoch} in Env: " - f"({env_id+1}/{len(self._cfg.env_list)-1}) " - f"- train loss:{round(train_loss/(batch_idx+1), 4)} on" + f"({env_id + 1} / {len(self._cfg.env_list) - 1}) " + f"- train loss:{round(train_loss / (batch_idx + 1), 4)} on" f" {batch_idx}/{batches}" ) return train_loss / (batch_idx + 1)