例外:与KnowRob结合构建和使用知识库

时间:2019-06-03 17:29:31

标签: prolog ros swi-prolog

我已经在我的机器上安装了KnowRob(出于兼容性原因,使用ros-indigo的Ubuntu 14.04)并创建了一个具有以下内容的.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')

我想知道如何修改代码以使其有意工作。

0 个答案:

没有答案