Assignment
Exercises
Completion requirements
Opened: Friday, September 16, 2022, 12:00 AM
In this exercise you will write your own predicates and queries to reason about the symbolic representation of a robot, and the events performed by the robot within a recorded NEEM. Before starting the exercise we recommend to go through tutorials hosted at the openEASE website: https://data.open-ease.org/tutorials/
Exercise 1: Robot Structure
In
the first part of this exercise you will define relationships that are
implemented via reasoning about the symbolic representation of the
robot. You can test your implemented predicates at the following link:
https://data.open-ease.org/2021-robot-mooc-ex1
- Write the predicate robotPart(Robot, Part, PartType) where Part is reachable by Robot through the transitive closure of the parthood relationship dul:’hasPart’, and PartType is a type of Part, and a subclass of dul:’PhysicalObject’.
Tip: The type of an object can be obtained by rdf:type, and its subclasses by rdfs:subClassOf. - Write
a query that answers the following questions: (1) What are the
reference frames associated to the base link of arms of the PR2 robot,
and (2) how are the arms positioned relative to the base of the robot?
Tips: The PR2 robot is identified by pr2:’PR2_0’, the type
of arm components is pr2:’PR2Arm’, and their base link reference frame can be obtained through their property urdf:hasBaseLinkName. The base of the robot is of type pr2:’PR2Base’. The position of an object O can be obtained via the 2-ary predicate tf:tf_get_pose, written as tf:tf_get_pose(O, [F, Position, _]) , where the position of O is expressed relative to the reference frame F.
Exercise 2: Episode Structure
In this exercise, you will write queries for a recorded robotic NEEM. Under the following link you can find the website where you can test your queries on the NEEM: https://data.open-ease.org/2021-robot-mooc-ex2The link sends you to an real query interface for a recorded episode. With the Examples button you can try different queries on the episode. Write the following queries:
- Write a query that yields the shortest action in which a transporting task was executed.
Tip: You can use event_interval(Action, Start, End), where Action is the given action, and Start and End the start- and endtimepoint of the action. Use number(End) to ensure that Start and End is bound to a rational number. To obtain the executed task you can use the property dul:executesTask. The type of the task is soma:’Transporting’. - Write a query that yields the type of tasks that are executed in actions in which an agent manipulates an item.
Tip: Being an item in an action is the role an object plays when a task is executed, the roles of a task are denoted by the dul:isTaskOf property. The type of the role of manipulated items is soma:’Item’, and, for agents in a
task, the role type is soma:’AgentRole’.