def process_inconsistencies(room, element): inconsistency = get_inconsistency_for_element( room, element ) #inconsistency = [type of inconsistency, new_object_ID, [old_related_object_ID]] objectType = global_vars.prolog_service_handle( "objectType", [inconsistency[1], "Z"]).ris[0].atoms[1].replace("_", " ") if ("EMPTY" == inconsistency[0]): msg = "MemResOther_I have memorized %s" % objectType elif ("EQUAL" == inconsistency[0]): global_vars.remove_object_by_name.publish( String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I already know that %s is here" % objectType elif ("SYNONYM" == inconsistency[0]): oldObjectType = global_vars.prolog_service_handle( "objectType", [inconsistency[2][0], "Z"]).ris[0].atoms[1].replace("_", " ") global_vars.remove_object_by_name.publish( String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I know that %s is here and that %s is a synonym" % ( oldObjectType, objectType) elif ("MORE_GENERAL" == inconsistency[0]): oldObjectType = global_vars.prolog_service_handle( "objectType", [inconsistency[2][0], "Z"]).ris[0].atoms[1].replace("_", " ") global_vars.remove_object_by_name.publish( String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I know that %s is here and that is more specific than %s" % ( oldObjectType, objectType) elif ("LESS_GENERAL" == inconsistency[0]): oldObjectType = global_vars.prolog_service_handle( "objectType", [inconsistency[2][0], "Z"]).ris[0].atoms[1].replace("_", " ") global_vars.remove_object_by_name.publish( String(get_obj_sem_map_name(inconsistency[2][0]))) msg = "MemResOther_I know that %s is here and that is more general than %s" % ( oldObjectType, objectType) elif ("DIFFERENT" == inconsistency[0]): objectType = "" objectID = "" for i in inconsistency[2]: result = global_vars.prolog_service_handle("objectType", [i, "Z"]) objectType = (objectType + result.ris[0].atoms[1].replace("_", " ") + ",").replace("_", "#") objectID = (objectID + i + ",").replace("_", "#") msg = "MemResDiff_" + objectType[:-1] + "_" + objectID[:-1] log_to_terminal("Sending acknowledge mesage %s for object %s" % (msg, element)) global_vars.event_pub.publish(msg) return inconsistency[0]
def process_inconsistencies(room, element): inconsistency = get_inconsistency_for_element( room, element ) # inconsistency = [type of inconsistency, new_object_ID, [old_related_object_ID]] objectType = ( global_vars.prolog_service_handle("objectType", [inconsistency[1], "Z"]).ris[0].atoms[1].replace("_", " ") ) if "EMPTY" == inconsistency[0]: msg = "MemResOther_I have memorized %s" % objectType elif "EQUAL" == inconsistency[0]: global_vars.remove_object_by_name.publish(String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I already know that %s is here" % objectType elif "SYNONYM" == inconsistency[0]: oldObjectType = ( global_vars.prolog_service_handle("objectType", [inconsistency[2][0], "Z"]) .ris[0] .atoms[1] .replace("_", " ") ) global_vars.remove_object_by_name.publish(String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I know that %s is here and that %s is a synonym" % (oldObjectType, objectType) elif "MORE_GENERAL" == inconsistency[0]: oldObjectType = ( global_vars.prolog_service_handle("objectType", [inconsistency[2][0], "Z"]) .ris[0] .atoms[1] .replace("_", " ") ) global_vars.remove_object_by_name.publish(String(get_obj_sem_map_name(inconsistency[1]))) msg = "MemResOther_I know that %s is here and that is more specific than %s" % (oldObjectType, objectType) elif "LESS_GENERAL" == inconsistency[0]: oldObjectType = ( global_vars.prolog_service_handle("objectType", [inconsistency[2][0], "Z"]) .ris[0] .atoms[1] .replace("_", " ") ) global_vars.remove_object_by_name.publish(String(get_obj_sem_map_name(inconsistency[2][0]))) msg = "MemResOther_I know that %s is here and that is more general than %s" % (oldObjectType, objectType) elif "DIFFERENT" == inconsistency[0]: objectType = "" objectID = "" for i in inconsistency[2]: result = global_vars.prolog_service_handle("objectType", [i, "Z"]) objectType = (objectType + result.ris[0].atoms[1].replace("_", " ") + ",").replace("_", "#") objectID = (objectID + i + ",").replace("_", "#") msg = "MemResDiff_" + objectType[:-1] + "_" + objectID[:-1] log_to_terminal("Sending acknowledge mesage %s for object %s" % (msg, element)) global_vars.event_pub.publish(msg) return inconsistency[0]
def calculate_and_assert_rooms_center_and_type(room_list, asserting=True): room_type_list = ["office", "room", "corridor", "printerRoom", "phdRoom"] for room in room_list: centroid = global_vars.prolog_service_handle("roomCellCentroid", [room, "X", "Y"]).ris[0] room_center = [int(round(float(centroid.atoms[1]))), int(round(float(centroid.atoms[2])))] room_type_in_list = False for room_type in room_type_list: if room_type in room.lower(): logical_form = "roomType(%s,%s)" % (room, room_type) room_type_in_list = True if not room_type_in_list: logical_form = "roomType(%s,%s)" % (room, room) logical_form1 = "roomCenter(%s,%s,%s)" % (room, room_center[0], room_center[1]) logical_form2 = "dyn_node(%s,%s,%s)" % (room, room_center[0], room_center[1]) global_vars.prolog_files["rooms"].write(logical_form + ".\n") global_vars.prolog_files["rooms"].write(logical_form1 + ".\n") global_vars.prolog_files["graph"].write(logical_form2 + ".\n") if asserting: global_vars.prolog_assert_handle(logical_form) global_vars.prolog_assert_handle(logical_form1) global_vars.prolog_assert_handle(logical_form2)
def calculate_and_assert_rooms_center_and_type(room_list, asserting=True): room_type_list = ["office", "room", "corridor", "printerRoom", "phdRoom"] for room in room_list: centroid = global_vars.prolog_service_handle("roomCellCentroid", [room, "X", "Y"]).ris[0] room_center = [ int(round(float(centroid.atoms[1]))), int(round(float(centroid.atoms[2]))) ] room_type_in_list = False for room_type in room_type_list: if room_type in room.lower(): logical_form = "roomType(%s,%s)" % (room, room_type) room_type_in_list = True if not room_type_in_list: logical_form = "roomType(%s,%s)" % (room, room) logical_form1 = "roomCenter(%s,%s,%s)" % (room, room_center[0], room_center[1]) logical_form2 = "dyn_node(%s,%s,%s)" % (room, room_center[0], room_center[1]) global_vars.prolog_files["rooms"].write(logical_form + ".\n") global_vars.prolog_files["rooms"].write(logical_form1 + ".\n") global_vars.prolog_files["graph"].write(logical_form2 + ".\n") if asserting: global_vars.prolog_assert_handle(logical_form) global_vars.prolog_assert_handle(logical_form1) global_vars.prolog_assert_handle(logical_form2)
def is_object_specialization_of(object1, object2): try: result = global_vars.prolog_service_handle("isA", [object1, object2]) if len(result.ris) != 0: return True except: return False
def is_object_specialization_of(object1, object2): try: result = global_vars.prolog_service_handle('isA', [object1, object2]) if (len(result.ris) != 0): return True except: return False
def get_inconsistency_for_element(room, element): old_objects = [] element_cells = [] element_type = get_obj_type(element) element = get_obj_atom(room, element) result = global_vars.prolog_service_handle("objectPos", [element, "X", "Y", "Z"]) for answer in result.ris: element_cells.append([answer.atoms[1], answer.atoms[2]]) for coords in element_cells: result = global_vars.prolog_service_handle( "objectPos", ["X", coords[0], coords[1], "Z"]) for answer in result.ris: old_objects.append(answer.atoms[0]) #remove double entries old_objects = list(set(old_objects)) old_objects.remove(element) inconsistency = ["EMPTY", element, [""]] for i in xrange(len(old_objects)): old_object_type = get_obj_type(old_objects[i]) if old_object_type == element_type: inconsistency = ["EQUAL", element, [old_objects[i]]] break elif is_object_synonym_of(element_type, old_object_type): inconsistency = ["SYNONYM", element, [old_objects[i]]] break elif is_object_generalization_of(element_type, old_object_type): inconsistency = ["MORE_GENERAL", element, [old_objects[i]]] break elif is_object_specialization_of(element_type, old_object_type): inconsistency = ["LESS_GENERAL", element, [old_objects[i]]] break else: inconsistency = ["DIFFERENT", element, old_objects] log_to_terminal("Found inconsistency %s for object %s." % (inconsistency, element)) return inconsistency
def is_object_synonym_of(object1, object2): try: result = global_vars.prolog_service_handle("synonym", [object1, object2]) if len(result.ris) != 0: return True else: return False except: return False
def get_inconsistency_for_element(room, element): old_objects = [] element_cells = [] element_type = get_obj_type(element) element = get_obj_atom(room, element) result = global_vars.prolog_service_handle("objectPos", [element, "X", "Y", "Z"]) for answer in result.ris: element_cells.append([answer.atoms[1], answer.atoms[2]]) for coords in element_cells: result = global_vars.prolog_service_handle("objectPos", ["X", coords[0], coords[1], "Z"]) for answer in result.ris: old_objects.append(answer.atoms[0]) # remove double entries old_objects = list(set(old_objects)) old_objects.remove(element) inconsistency = ["EMPTY", element, [""]] for i in xrange(len(old_objects)): old_object_type = get_obj_type(old_objects[i]) if old_object_type == element_type: inconsistency = ["EQUAL", element, [old_objects[i]]] break elif is_object_synonym_of(element_type, old_object_type): inconsistency = ["SYNONYM", element, [old_objects[i]]] break elif is_object_generalization_of(element_type, old_object_type): inconsistency = ["MORE_GENERAL", element, [old_objects[i]]] break elif is_object_specialization_of(element_type, old_object_type): inconsistency = ["LESS_GENERAL", element, [old_objects[i]]] break else: inconsistency = ["DIFFERENT", element, old_objects] log_to_terminal("Found inconsistency %s for object %s." % (inconsistency, element)) return inconsistency
def get_synonym(obj): synonym = obj try: synonym = global_vars.prolog_service_handle("synonym", [obj, "X"]).ris[0].atoms[1] log_to_terminal("Found the synonym %s" % synonym) except: log_to_terminal("Could not find a synonym for %s" % synonym) return synonym
def is_object_synonym_of(object1, object2): try: result = global_vars.prolog_service_handle('synonym', [object1, object2]) if (len(result.ris) != 0): return True else: return False except: return False
def get_synonym(obj): synonym = obj try: synonym = global_vars.prolog_service_handle('synonym', [obj, "X"]).ris[0].atoms[1] log_to_terminal("Found the synonym %s" % synonym) except: log_to_terminal("Could not find a synonym for %s" % synonym) return synonym