Исключение: создание и использование базы знаний в сочетании с KnowRob - PullRequest
0 голосов
/ 03 июня 2019

Я установил KnowRob на мою машину (Ubuntu 14.04 с ros-indigo по соображениям совместимости) и создал файл .pl со следующим содержимым:

:- module(utils, [object_hierarchy/2]).

object_hierarchy_internal_none(Child,Parent) :- 
    not(owl_has(Parent, knowrob:properPhysicalParts, Child)).

object_hierarchy_internal(Item, Hierarchy, HierarchyFinal) :-
( 
    object_hierarchy_internal_none(Item, _)
    ,
    HierarchyFinal = Hierarchy
)
;
( 
    owl_has(Parent, knowrob:properPhysicalParts, Item)
    ,
    append(Hierarchy, [Parent], ExtendedHierarchy)
    ,
    object_hierarchy_internal(Item, Parent, ExtendedHierarchy, HierarchyFinal)
)
.

object_hierarchy(Item, Hierarchy) :- object_hierarchy_internal(Item, [], Hierarchy).

В действительности не имеет значения, что он делает, но в основном object_hierarchy вызывается извне и использует внутренние предикаты для выполнения работы. Эти внутренние предикаты используют предикат owl_has/3. В частности, он использует его с переменной Ìtem, которая передается пользователем.

Терминал запускается и настраивается следующим образом:

rosrun rosprolog rosprolog knowrob_common

? owl_parse('package://knowrob_map_date/owl/ccrl2_semantic_map.owl')

Я пытаюсь использовать базу знаний, то есть object_hierarchy, как показано ниже (с подходящим экземпляром для Item):

? object_hierarchy(knowrob:'Handle127', Hierarchy).

Это, к сожалению, неправильный путь, так как это приводит к следующему сообщению об исключении:

ERROR: rdf_db:rdf/3: Type error: `rdf_object' expected, found `rdf_object(knowrob:Handle127)'
Exception: (13) t20_owl:owl_has_direct(_G2589, knowrob:properPhysicalParts, knowrob:'Handle127')

Интересно, как код должен быть адаптирован для преднамеренной работы.

...