예제 #1
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 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)
예제 #4
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 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
예제 #6
0
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
예제 #7
0
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
예제 #11
0
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
예제 #12
0
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