π‘ Knowledge and reasoning#
Your robot includes a knowledge base called KnowledgeCore. Thanks to the knowledge base, you can store, query and reason on facts about the robot activities and environment.
Knowledge management on the robot#
The knowledge base is a central component of the robotβs software architecture.
Your mission controller can use the knowledge base to:
store facts about the robotβs environment and activities
query the knowledge base to make decisions
subscribe to events to be notified when some conditions are met
KnowledgeCore stores OWL/RDF triples, and provides an API accessible via a simple Python wrapper or a ROS 2 API.
KnowledgeCore can also perform symbolic reasoning: it integrates with the reasonable OWL2 RL reasoner to provide OWL2 semantics and fast knowledge materialisation.
The OpenRobots ontology#
You robot comes pre-loaded with the OpenRobots ontology (ORO). This ontology provides a common vocabulary to describe robots, their environment and activities.
Learn more about the OpenRobots ontology (ORO).
Run-time knowledge providers#
Some components of the robot can provide knowledge to the knowledge base at run-time.
Learn more about the run-time knowledge providers.
Simple example of knowledge base usage#
This example uses our simple Python wrapper to interact with the knowledge base:
import rclpy
from rclpy.node import Node
from knowledge_core.api import KB
rclpy.init()
node = Node("test_kb_client")
kb = KB(node)
def on_robot_entering_clara_property(evt):
print("A robot entered Clara's %s: %s" % (evt[0]["place"], evt[0]["robot"]))
kb += "ari rdf:type Robot"
kb += ["clara looksAt ari", "ari isIn kitchen"]
kb.subscribe(["?robot isIn ?place", "?place belongsTo clara", "?robot rdf:type Robot"], on_robot_entering_clara_property)
# ...nothing happens yet, as we have not told the robot that the 'kitchen'
# belonged to 'clara'...
kb += "kitchen belongsTo clara"
rclpy.spin(node)
# the event is now triggered!
# try as well:
kb -= "clara looksAt ari" # to remove facts
print(kb["* rdf:type Robot"]) # to query the knowledge base
will print:
A robot entered Clara's kitchen: ari
KnowledgeCore features#
In addition to storing and querying facts, KnowledgeCore has several advanced features.
Multi-models#
KnowledgeCore
is intended for dynamic environments, with possibly
several contexts/agents requiring separate knowledge models.
New models can be created at any time and each operation (like knowledge addition/retractation/query) can operate on a specific subset of models.
Each models are also independently classified by the reasoner.
See KnowledgeCore models for details.
Event system#
KnowledgeCore
provides a mechanism to subscribe to some conditions
(like: an instance of a given type is added to the knowledge base, some
statement becomes true, etc.) and get notified back.
Reasoning#
KnowledgeCore
provides RDFS/OWL reasoning capabilities via the
reasonable reasoner.
See reasonable README for the exact level of support of the different OWL2 RL rules.