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
17 changes: 17 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# FROM nvidia/cuda:12.2.0-base-ubuntu20.04
FROM ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y build-essential git cmake curl wget flex bison python3-pip python-is-python3
RUN rm -rf /var/lib/apt/lists/*
WORKDIR /opt

# Get Docker
RUN curl -fsSL https://get.docker.com -o get-docker.sh
RUN sh get-docker.sh

# Get Taskography
RUN git clone https://github.com/jiadingfang/taskography-api.git --recurse-submodules
WORKDIR /opt/taskography-api
RUN pip install .
RUN pip install -r requirements.txt
ENV PYTHONPATH "${PYTHONPATH}:/opt/taskography-api"
2 changes: 2 additions & 0 deletions docker/docker.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
docker build -t taskography .
docker run -it --rm -v $DATA/3dscenegraph/:/data/3dscenegraph -v /var/run/docker.sock:/var/run/docker.sock taskography
11 changes: 11 additions & 0 deletions scripts/benchmark/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import os
from third_party.pddlgym_planners.pddlgym_planners import _SATISFICING, _OPTIMAL

planners = list(_SATISFICING.keys()) + list(_OPTIMAL.keys())
print('planners: ', planners) # ['FF', 'FF-X', 'FD-lama-first', 'Cerberus-seq-sat', 'Cerberus-seq-agl', 'DecStar-agl-decoupled', 'lapkt-bfws', 'FD-seq-opt-lmcut', 'Delfi', 'DecStar-opt-decoupled']

pddl_domain = 'taskographyv2tiny1'

for planner in planners:
print('running planner: ', planner)
os.system('python scripts/benchmark/plan.py --domain-name {} --planner {} --expid {}_{}'.format(pddl_domain, planner, pddl_domain, planner))
139 changes: 139 additions & 0 deletions scripts/procthor_scenegraph.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
import json

class SceneGraphNode(object):
def __init__(self):
self.id = None

def set_attribute(self, attr, value):
if attr not in self.__dict__.keys():
raise ValueError(f"Unknown attribute: {attr}")
self.__dict__[attr] = value

def get_attribute(self, attr):
if attr not in self.__dict__.keys():
raise ValueError(f"Unknown attribute: {attr}")
return self.__dict__[attr]

def print_attributes(self):
print(f"--- {self.__class__.__name__} ID: {self.get_attribute('id')} ---")
for key in self.__dict__.keys():
print(f"Key: {key} | Value: {self.get_attribute(key)}")


class Door(SceneGraphNode):
def __init__(self, data=None):
super().__init__()
self.asset_id = None
self.asset_position = None
self.hole_polygon = None
self.openable = None
self.openness = None
self.rooms = None
self.walls = None
if data is not None:
self.set_attribute('asset_id', data['assetId'])
self.set_attribute('asset_position', data['assetPosition'])
self.set_attribute('hole_polygon', data['holePolygon'])
self.set_attribute('id', data['id'])
self.set_attribute('openable', data['openable'])
self.set_attribute('openness', data['openness'])
self.set_attribute('rooms', [data['room0'], data['room1']])
self.set_attribute('walls', [data['wall0'], data['wall1']])


class ObjectChild(SceneGraphNode):
def __init__(self, data=None):
super().__init__()
self.asset_id = None
self.kinematic = None
self.position = None
self.rotation = None
if data is not None:
self.set_attribute('asset_id', data['assetId'])
self.set_attribute('id', data['id'])
self.set_attribute('kinematic', data['kinematic'])
self.set_attribute('position', data['position'])
self.set_attribute('rotation', data['rotation'])


class Object(SceneGraphNode):
def __init__(self, data=None):
super().__init__()
self.asset_id = None
self.children = None
self.kinematic = None
self.material = None
self.position = None
self.rotation = None
if data is not None:
self.set_attribute('asset_id', data['assetId'])
# self.set_attribute('children', [ObjectChild(child) for child in data['children']])
self.set_attribute('id', data['id'])
self.set_attribute('kinematic', data['kinematic'])
self.set_attribute('material', data['material'])
self.set_attribute('position', data['position'])
self.set_attribute('rotation', data['rotation'])
if 'children' in data:
self.set_attribute('children', [ObjectChild(child) for child in data['children']])
else:
self.set_attribute('children', [])

class Room(SceneGraphNode):
def __init__(self, data=None):
super().__init__()
self.ceilings = None
self.children = None
self.floor_material = None
self.floor_polygon = None
self.room_type = None
if data is not None:
self.set_attribute('ceilings', data['ceilings'])
self.set_attribute('children', data['children'])
self.set_attribute('floor_material', data['floorMaterial'])
self.set_attribute('floor_polygon', data['floorPolygon'])
self.set_attribute('id', data['id'])
self.set_attribute('room_type', data['roomType'])


class Wall(SceneGraphNode):
def __init__(self, data=None):
super().__init__()
self.color = None
self.material = None
self.polygon = None
self.room_id = None
if data is not None:
self.set_attribute('id', data['id'])
self.set_attribute('material', data['material'])
self.set_attribute('polygon', data['polygon'])
self.set_attribute('room_id', data['roomId'])
if 'color' in data:
self.set_attribute('color', data['color'])


class House(SceneGraphNode):
def __init__(self, json_data=None):
super().__init__()
self.doors = None
self.objects = None
self.rooms = None
self.walls = None
self.windows = None
self.metadata = None
self.procedural_parameters = None
if json_data is not None:
self.set_attribute('doors', [Door(door) for door in json_data.get('doors', [])])
self.set_attribute('objects', [Object(obj) for obj in json_data.get('objects', [])])
self.set_attribute('rooms', [Room(room) for room in json_data.get('rooms', [])])
self.set_attribute('walls', [Wall(wall) for wall in json_data.get('walls', [])])
self.set_attribute('windows', json_data.get('windows', []))
self.set_attribute('metadata', json_data.get('metadata', {}))
self.set_attribute('procedural_parameters', json_data.get('proceduralParameters', {}))


if __name__ == "__main__":
procthor_json_path = 'procthor_houses/procthor-10k_train_0.json'
with open(procthor_json_path, 'r') as f:
procthor_json = json.load(f)
house = House(procthor_json)
house.print_attributes()
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
"scipy",
"setuptools",
"scikit-image",
"tqdm"
"tqdm",
f"pddlgym_planners @ file://localhost/{Path(__file__).parent}/third_party/pddlgym_planners",
]

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from typing import List, Dict, Set, ClassVar
from __future__ import annotations
from typing import List, Dict, Set, ClassVar

import os
import json
Expand Down
8 changes: 4 additions & 4 deletions taskography_api/taskography/utils/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,8 +115,8 @@ def scenegraph_mst(building: Building) -> None:

# floor-floor heuristic: mean of min connection between rooms in both floors
n, m = len(floor_a_rooms), len(floor_b_rooms)
floor_a_rooms_repeat = np.repeat(np.array(floor_a_rooms, dtype=np.int), m)
floor_b_rooms_tile = np.tile(np.array(floor_b_rooms, dtype=np.int), n)
floor_a_rooms_repeat = np.repeat(np.array(floor_a_rooms, dtype=int), m)
floor_b_rooms_tile = np.tile(np.array(floor_b_rooms, dtype=int), n)
room_a_to_b_dist = room_dist_mat[floor_a_rooms_repeat, floor_b_rooms_tile].reshape(
n, m
)
Expand Down Expand Up @@ -147,8 +147,8 @@ def scenegraph_mst(building: Building) -> None:

# connect all rooms in each floor
for _, rooms in floor_rooms.items():
room_idx_repeat = np.repeat(np.array(list(rooms), dtype=np.int), len(rooms))
room_idx_tile = np.tile(np.array(list(rooms), dtype=np.int), len(rooms))
room_idx_repeat = np.repeat(np.array(list(rooms), dtype=int), len(rooms))
room_idx_tile = np.tile(np.array(list(rooms), dtype=int), len(rooms))
room_dist = room_dist_mat[room_idx_repeat, room_idx_tile]
room_graph.add_weighted_edges_from(list(zip(room_idx_repeat, room_idx_tile, room_dist)))

Expand Down