diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 12d4a1c8e..db13cc02d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -6,7 +6,7 @@ jobs: build-docs: name: Build and deploy documentation runs-on: ubuntu-latest - if: github.repository == 'StanfordVL/iGibson' && github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' steps: - name: Checkout code diff --git a/.github/workflows/examples-as-test.yml b/.github/workflows/examples-as-test.yml index cad8ac5b7..90f82cbc6 100644 --- a/.github/workflows/examples-as-test.yml +++ b/.github/workflows/examples-as-test.yml @@ -15,7 +15,6 @@ concurrency: jobs: test: runs-on: [self-hosted, linux, gpu] - if: github.repository == 'StanfordVL/iGibson-dev' steps: - name: Checkout source @@ -63,9 +62,8 @@ jobs: - name: Checkout BDDL uses: actions/checkout@v2 with: - repository: StanfordVL/bddl-dev - ref: 581be50e7cfd2b3a1447aaa1b4fc2424b673339c - token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT is required since this is a different repo + repository: StanfordVL/bddl + ref: 7fba5f13cc9f3c83dcce9ef4b014903bbcd6e34f path: bddl submodules: recursive lfs: true diff --git a/.github/workflows/exhaustive-examples-as-test.yml b/.github/workflows/exhaustive-examples-as-test.yml index bc4afafc8..45e2d4dd6 100644 --- a/.github/workflows/exhaustive-examples-as-test.yml +++ b/.github/workflows/exhaustive-examples-as-test.yml @@ -15,7 +15,6 @@ concurrency: jobs: test: runs-on: [self-hosted, linux, gpu] - if: github.repository == 'StanfordVL/iGibson-dev' steps: - name: Checkout source @@ -63,9 +62,8 @@ jobs: - name: Checkout BDDL uses: actions/checkout@v2 with: - repository: StanfordVL/bddl-dev - ref: 581be50e7cfd2b3a1447aaa1b4fc2424b673339c - token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT is required since this is a different repo + repository: StanfordVL/bddl + ref: 7fba5f13cc9f3c83dcce9ef4b014903bbcd6e34f path: bddl submodules: recursive lfs: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dee00de32..36f921665 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,7 +31,7 @@ jobs: --outdir dist/ . - name: Publish a Python distribution to PyPI - if: github.repository == 'StanfordVL/iGibson' && startsWith(github.ref, 'refs/tags') + if: startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ diff --git a/.github/workflows/sync-repos.yml b/.github/workflows/sync-repos.yml deleted file mode 100644 index de70e0b3c..000000000 --- a/.github/workflows/sync-repos.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Sync iGibson-dev/master to iGibson/master - -on: - workflow_dispatch: - schedule: - # Sync repositories on the 1st and 15th of the month at 9 AM - - cron: "0 17 1,15 * *" - -jobs: - sync-private-fork: - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/master' - steps: - - uses: actions/checkout@v2 - - name: Sync iGibson-dev/master to iGibson/master - if: github.repository == 'StanfordVL/iGibson-dev' && startsWith(github.ref, 'refs/tags') - run: - git push https://$PERSONAL_ACCESS_TOKEN:x-oauth-basic@github.com/StanfordVL/iGibson.git master:master diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2e7c299e0..ceba34c29 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -9,7 +9,6 @@ concurrency: jobs: test: runs-on: [self-hosted, linux, gpu] - if: github.repository == 'StanfordVL/iGibson-dev' steps: - name: Checkout source @@ -51,9 +50,8 @@ jobs: - name: Checkout BDDL uses: actions/checkout@v2 with: - repository: StanfordVL/bddl-dev - ref: 581be50e7cfd2b3a1447aaa1b4fc2424b673339c - token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT is required since this is a different repo + repository: StanfordVL/bddl + ref: 7fba5f13cc9f3c83dcce9ef4b014903bbcd6e34f path: bddl submodules: recursive lfs: true diff --git a/README.md b/README.md index 12eb0c749..bddac4255 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,20 @@ iGibson is a simulation environment providing fast visual rendering and physics If you use iGibson or its assets and models, consider citing the following publication: ``` -@misc{li2021igibson, - title={iGibson 2.0: Object-Centric Simulation for Robot Learning of Everyday Household Tasks}, - author={Chengshu Li and Fei Xia and Roberto Mart\'in-Mart\'in and Michael Lingelbach and Sanjana Srivastava and Bokui Shen and Kent Vainio and Cem Gokmen and Gokul Dharan and Tanish Jain and Andrey Kurenkov and Karen Liu and Hyowon Gweon and Jiajun Wu and Li Fei-Fei and Silvio Savarese}, - year={2021}, - eprint={2108.03272}, - archivePrefix={arXiv}, - primaryClass={cs.RO} -} +@inproceedings{li2022igibson, + title = {iGibson 2.0: Object-Centric Simulation for Robot Learning of Everyday Household Tasks}, + author = {Li, Chengshu and Xia, Fei and Mart\'in-Mart\'in, Roberto and Lingelbach, Michael and Srivastava, Sanjana and Shen, Bokui and Vainio, Kent Elliott and Gokmen, Cem and Dharan, Gokul and Jain, Tanish and Kurenkov, Andrey and Liu, Karen and Gweon, Hyowon and Wu, Jiajun and Fei-Fei, Li and Savarese, Silvio}, + booktitle = {Proceedings of the 5th Conference on Robot Learning}, + pages = {455--465}, + year = {2022}, + editor = {Faust, Aleksandra and Hsu, David and Neumann, Gerhard}, + volume = {164}, + series = {Proceedings of Machine Learning Research}, + month = {08--11 Nov}, + publisher = {PMLR}, + pdf = {https://proceedings.mlr.press/v164/li22b/li22b.pdf}, + url = {https://proceedings.mlr.press/v164/li22b.html}, +} ``` ``` diff --git a/docker/.env b/docker/.env index 85437898c..8a953dd34 100644 --- a/docker/.env +++ b/docker/.env @@ -1 +1 @@ -VERSION=v2.2.1 +VERSION=v2.2.2 diff --git a/docs/intro.md b/docs/intro.md index 9b931978d..2fb0a8945 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -12,6 +12,23 @@ iGibson implements all features required to evaluate AI solutions in the BEHAVIO ### Citation If you use iGibson or its assets and models, consider citing the following publications: +``` +@InProceedings{li2022igibson, + title = {iGibson 2.0: Object-Centric Simulation for Robot Learning of Everyday Household Tasks}, + author = {Li, Chengshu and Xia, Fei and Mart\'in-Mart\'in, Roberto and Lingelbach, Michael and Srivastava, Sanjana and Shen, Bokui and Vainio, Kent Elliott and Gokmen, Cem and Dharan, Gokul and Jain, Tanish and Kurenkov, Andrey and Liu, Karen and Gweon, Hyowon and Wu, Jiajun and Fei-Fei, Li and Savarese, Silvio}, + booktitle = {Proceedings of the 5th Conference on Robot Learning}, + pages = {455--465}, + year = {2022}, + editor = {Faust, Aleksandra and Hsu, David and Neumann, Gerhard}, + volume = {164}, + series = {Proceedings of Machine Learning Research}, + month = {08--11 Nov}, + publisher = {PMLR}, + pdf = {https://proceedings.mlr.press/v164/li22b/li22b.pdf}, + url = {https://proceedings.mlr.press/v164/li22b.html}, +} +``` + ``` @inproceedings{shen2021igibson, title={iGibson 1.0: a Simulation Environment for Interactive Tasks in Large Realistic Scenes}, @@ -23,17 +40,6 @@ If you use iGibson or its assets and models, consider citing the following publi } ``` -``` -@misc{li2021igibson, - title={iGibson 2.0: Object-Centric Simulation for Robot Learning of Everyday Household Tasks}, - author={Chengshu Li and Fei Xia and Roberto Martín-Martín and Michael Lingelbach and Sanjana Srivastava and Bokui Shen and Kent Vainio and Cem Gokmen and Gokul Dharan and Tanish Jain and Andrey Kurenkov and Karen Liu and Hyowon Gweon and Jiajun Wu and Li Fei-Fei and Silvio Savarese}, - year={2021}, - eprint={2108.03272}, - archivePrefix={arXiv}, - primaryClass={cs.RO} -} -``` - ### Code Release The GitHub repository of iGibson can be found [here](https://github.com/StanfordVL/iGibson). Bug reports, suggestions for improvement, as well as community developments are encouraged and appreciated. diff --git a/igibson/__init__.py b/igibson/__init__.py index 5311bf4a5..18fe5d3e6 100644 --- a/igibson/__init__.py +++ b/igibson/__init__.py @@ -4,7 +4,7 @@ import packaging.version import yaml -__version__ = "2.2.1" +__version__ = "2.2.2" __logo__ = r""" _ _____ _ _ diff --git a/igibson/controllers/null_gripper_controller.py b/igibson/controllers/null_gripper_controller.py index 14025f06b..1c436c46a 100644 --- a/igibson/controllers/null_gripper_controller.py +++ b/igibson/controllers/null_gripper_controller.py @@ -48,7 +48,7 @@ def __init__( super().__init__( control_freq=control_freq, control_limits=control_limits, - joint_idx=np.array([], dtype=np.int), # no joints controlled + joint_idx=np.array([], dtype=int), # no joints controlled command_input_limits=command_input_limits, command_output_limits=command_output_limits, ) diff --git a/igibson/examples/observations/generate_lidar_colored_pointcloud.py b/igibson/examples/observations/generate_lidar_colored_pointcloud.py index c2c8b8122..f84393103 100644 --- a/igibson/examples/observations/generate_lidar_colored_pointcloud.py +++ b/igibson/examples/observations/generate_lidar_colored_pointcloud.py @@ -36,8 +36,8 @@ def get_lidar_sampling_pattern(): height = 128 - x_samples = (np.tan(xx) / np.cos(yy) * height // 2 + height // 2).astype(np.int) - y_samples = (np.tan(yy) * height // 2 + height // 2).astype(np.int) + x_samples = (np.tan(xx) / np.cos(yy) * height // 2 + height // 2).astype(int) + y_samples = (np.tan(yy) * height // 2 + height // 2).astype(int) x_samples = x_samples.flatten() y_samples = y_samples.flatten() diff --git a/igibson/examples/scenes/scenescan2igibson/generate_floor_map.py b/igibson/examples/scenes/scenescan2igibson/generate_floor_map.py index 9a0645d92..55e01e077 100644 --- a/igibson/examples/scenes/scenescan2igibson/generate_floor_map.py +++ b/igibson/examples/scenes/scenescan2igibson/generate_floor_map.py @@ -109,7 +109,7 @@ def gen_map(obj_filepath, mesh_dir, img_filename_format="floor_{}.png"): xmax, ymax, _ = vertices.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) with open(os.path.join(mesh_dir, "floors.txt")) as f: floors = map(float, f.readlines()) diff --git a/igibson/examples/scenes/scenescan2igibson/generate_traversable_map.py b/igibson/examples/scenes/scenescan2igibson/generate_traversable_map.py index 93cee3930..f24a8a71e 100644 --- a/igibson/examples/scenes/scenescan2igibson/generate_traversable_map.py +++ b/igibson/examples/scenes/scenescan2igibson/generate_traversable_map.py @@ -112,7 +112,7 @@ def gen_trav_map(mp3d_dir, add_clutter=False): xmax, ymax, _ = vertices.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) for i_floor in range(len(floors)): floor = floors[i_floor] diff --git a/igibson/external/pybullet_tools/utils.py b/igibson/external/pybullet_tools/utils.py index e419a2226..70d7b2626 100644 --- a/igibson/external/pybullet_tools/utils.py +++ b/igibson/external/pybullet_tools/utils.py @@ -3419,7 +3419,7 @@ def collision_fn(q): robot_footprint_radius_in_map * 2 + 1)) cv2.circle(mask, (robot_footprint_radius_in_map, robot_footprint_radius_in_map), robot_footprint_radius_in_map, 1, -1) - mask = mask.astype(np.bool) + mask = mask.astype(bool) # Check if all the points where the shifted mask of the robot base overlaps with the occupancy map are # marked as FREESPACE, and return false if not diff --git a/igibson/object_states/adjacency.py b/igibson/object_states/adjacency.py index ccdc27157..f548bef0b 100644 --- a/igibson/object_states/adjacency.py +++ b/igibson/object_states/adjacency.py @@ -70,7 +70,7 @@ def compute_adjacencies(obj, axes, max_distance): directions[1::2] = -axes # For now, we keep our result in the dimensionality of (direction, hit_object_order). - finalized = np.zeros(directions.shape[0], dtype=np.bool) + finalized = np.zeros(directions.shape[0], dtype=bool) bodies_by_direction = [[] for _ in directions] # Prepare this object's info for ray casting. @@ -104,7 +104,7 @@ def compute_adjacencies(obj, axes, max_distance): ) # Get the object IDs per axis and filter out self-hit cases. - obj_ids = np.array([result[0] for result in ray_results], dtype=np.int) + obj_ids = np.array([result[0] for result in ray_results], dtype=int) # Add the results to the appropriate lists for direction_idx, result in enumerate(obj_ids): diff --git a/igibson/object_states/utils.py b/igibson/object_states/utils.py index 1967a7c0e..fbd9e90da 100644 --- a/igibson/object_states/utils.py +++ b/igibson/object_states/utils.py @@ -163,7 +163,7 @@ def sample_kinematics( height, height_map = objB.supporting_surfaces[predicate][(body_id, link_id)][random_height_idx] obj_half_size = np.max(objA.bounding_box) / 2 * 100 obj_half_size_scaled = np.array([obj_half_size / objB.scale[1], obj_half_size / objB.scale[0]]) - obj_half_size_scaled = np.ceil(obj_half_size_scaled).astype(np.int) + obj_half_size_scaled = np.ceil(obj_half_size_scaled).astype(int) height_map_eroded = cv2.erode(height_map, np.ones(obj_half_size_scaled, np.uint8)) valid_pos = np.array(height_map_eroded.nonzero()) diff --git a/igibson/render/mesh_renderer/mesh_renderer_cpu.py b/igibson/render/mesh_renderer/mesh_renderer_cpu.py index 8c1677739..f0a239e2e 100644 --- a/igibson/render/mesh_renderer/mesh_renderer_cpu.py +++ b/igibson/render/mesh_renderer/mesh_renderer_cpu.py @@ -1764,8 +1764,8 @@ def setup_lidar_param(self): xx = xx.flatten() yy = yy.flatten() - x_samples = (np.tan(xx) / np.cos(yy) * self.height // 2 + self.height // 2).astype(np.int) - y_samples = (np.tan(yy) * self.height // 2 + self.height // 2).astype(np.int) + x_samples = (np.tan(xx) / np.cos(yy) * self.height // 2 + self.height // 2).astype(int) + y_samples = (np.tan(yy) * self.height // 2 + self.height // 2).astype(int) self.x_samples = x_samples.flatten() self.y_samples = y_samples.flatten() diff --git a/igibson/robots/jr2.py b/igibson/robots/jr2.py index cd132b09b..cadfaf0b4 100644 --- a/igibson/robots/jr2.py +++ b/igibson/robots/jr2.py @@ -138,7 +138,7 @@ def gripper_control_idx(self): :return dict[str, Array[int]]: Dictionary mapping arm appendage name to indices in low-level control vector corresponding to gripper joints. """ - return {self.default_arm: np.array([8, 9], dtype=np.int)} + return {self.default_arm: np.array([8, 9], dtype=int)} @property def disabled_collision_pairs(self): diff --git a/igibson/scenes/igibson_indoor_scene.py b/igibson/scenes/igibson_indoor_scene.py index 6126fd608..648c77102 100644 --- a/igibson/scenes/igibson_indoor_scene.py +++ b/igibson/scenes/igibson_indoor_scene.py @@ -1042,7 +1042,7 @@ def world_to_seg_map(self, xy): :param xy: 2D location in world reference frame (metric) :return: 2D location in seg map reference frame (image) """ - return np.flip((xy / self.seg_map_resolution + self.seg_map_size / 2.0)).astype(np.int) + return np.flip((xy / self.seg_map_resolution + self.seg_map_size / 2.0)).astype(int) def get_room_type_by_point(self, xy): """ diff --git a/igibson/scenes/indoor_scene.py b/igibson/scenes/indoor_scene.py index 404e476c4..fcb3fb776 100644 --- a/igibson/scenes/indoor_scene.py +++ b/igibson/scenes/indoor_scene.py @@ -176,7 +176,7 @@ def world_to_map(self, xy): :param xy: 2D location in world reference frame (metric) :return: 2D location in map reference frame (image) """ - return np.flip((np.array(xy) / self.trav_map_resolution + self.trav_map_size / 2.0)).astype(np.int) + return np.flip((np.array(xy) / self.trav_map_resolution + self.trav_map_size / 2.0)).astype(int) def has_node(self, floor, world_xy): """ diff --git a/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py b/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py index a2f4f58b6..34d677457 100644 --- a/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py +++ b/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_3dfront.py @@ -418,7 +418,7 @@ def get_scene_range(model_id): xmin, ymin = stacked.min(axis=0) xmax, ymax = stacked.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) return max_length diff --git a/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py b/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py index 43ef9a4c4..8247c12f9 100644 --- a/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py +++ b/igibson/utils/data_utils/ext_scene/scripts/step_1_preprocess_cubicasa.py @@ -363,7 +363,7 @@ def main(): xmin, ymin = stacked.min(axis=0) xmax, ymax = stacked.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) ins_image = Image.new("L", (2 * max_length * 100, 2 * max_length * 100), 0) d1 = ImageDraw.Draw(ins_image) sem_image = Image.new("L", (2 * max_length * 100, 2 * max_length * 100), 0) diff --git a/igibson/utils/map_utils.py b/igibson/utils/map_utils.py index ef7acd574..94b812220 100644 --- a/igibson/utils/map_utils.py +++ b/igibson/utils/map_utils.py @@ -41,7 +41,7 @@ def gen_trav_map( xmax, ymax, _ = vertices.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) wall_maps = gen_map(vertices, faces, output_folder, img_filename_format=obstacle_map_filename_format) wall_pts = np.array(np.where(wall_maps[0] == 0)).T @@ -170,7 +170,7 @@ def gen_map(vertices, faces, output_folder, img_filename_format="floor_{}.png"): xmax, ymax, _ = vertices.max(axis=0) max_length = np.max([np.abs(xmin), np.abs(ymin), np.abs(xmax), np.abs(ymax)]) - max_length = np.ceil(max_length).astype(np.int) + max_length = np.ceil(max_length).astype(int) floors = [0.0] print(floors) diff --git a/pyproject.toml b/pyproject.toml index 3c933091e..887e54172 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name="igibson" -version="2.2.1" +version="2.2.2" readme = "README.md" requires-python = ">=2.8" license = {text = "MIT"}