Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
doc:reasoning_about_logged_experiences [2014/02/19 08:14] – created admindoc:reasoning_about_logged_experiences [2014/06/05 17:44] (current) – [Installation] admin
Line 1: Line 1:
 ====== Reasoning about logged robot experiences ====== ====== Reasoning about logged robot experiences ======
  
 +This page lists methods and tools for reasoning about log data of robot tasks created using the [[http://www.cram-system.org/doc#logging_infrastructure|CRAM logging infrastructure]]. These logs consist of two parts: High-level plan events are stored as action instances in an OWL file, while lower-level high-volume data is logged separately into a MongoDB database. This allows efficient recording and storage of data like tf poses, perception results etc. Special Prolog predicates allow to access the information stored in the database.
 +
 +===== Installation =====
 +
 +Usually, the log files are created using the [[http://www.cram-system.org/doc/logging/roslog|CRAM logging infrastructure]] that also includes the installation of a MongoDB database. If you would like to use the system on another computer, make sure to have a MongoDB database installed (the Ubuntu default version should work).
 +  sudo apt-get install mongodb-dev
 +
 +The logged data is stored in a database called 'roslog'; the collections in this database correspond to the respective topic names, for example 'tf'. From the KnowRob side, you will need the "Complete system including add-on packages" installation of KnowRob from source and compile mod_execution_trace using 
 +  rosmake mod_execution_trace
 +  
 +We have prepared an archive with test data logged during a pick-and-place task with the PR2 robot. You can download the file from [[http://knowrob.org/files/pick-and-place.tar.bz2|here]] and insert it into your MongoDB using the following commands:
 +  tar -xvjf pick-and-place.tar.bz2
 +  cd pick-and-place
 +  mongoimport --db roslog --collection tf tf.json
 +  mongoimport --db roslog --collection logged_designators logged_designators.json
 +  mongoimport --db roslog --collection logged_metadata logged_metadata.json
 +
 +
 +===== Reasoning about logged data using knowrob_mongo =====
 +The knowrob_mongo package contains methods for accessing information in the MongoDB database via KnowRob predicates, for example the logged tf pose data or perception results.
 +
 +==== Startup ====
 +
 +  $ rosrun rosprolog rosprolog knowrob_mongo
 +  ?- register_ros_package(mod_srdl).
 +  ?- owl_parse('owl/perceive-no-details.owl', false, false, true).
 +
 +==== Queries ====
 +  # read pose of cameras in /map coordinates at the beginning of event_dInF6Fvz
 +  ?- owl_individual_of(A, srdl2comp:'Camera'), 
 +     owl_has(A, srdl2comp:urdfName, literal(_Frame)), 
 +     atom_concat('/', _Frame, Frame), 
 +     owl_has('http://ias.cs.tum.edu/kb/execution-log-atvVerRS#event_dInF6Fvz', knowrob:startTime, Time), 
 +     mng_lookup_transform('/map', Frame, Time, Trans). 
 +     
 +     
 +  # read latest designator that was logged before the end of event_dInF6Fvz
 +  ?- owl_has('http://ias.cs.tum.edu/kb/execution-log-atvVerRS#event_dInF6Fvz', knowrob:endTime, Time), 
 +     mng_latest_designator_before_time(Time, Type, Pose).
 +
 +  ?- knowrob_mongo:obj_visible_in_camera('http://ias.cs.tum.edu/kb/PR2.owl#pr2_l_elbow_flex_link', 
 +  'http://ias.cs.tum.edu/kb/PR2.owl#pr2_head_mount_kinect_rgb_link', 
 +  'http://ias.cs.tum.edu/kb/namespace_LMutVndu#timepoint_1376577918').
 +  true .
 +
 +  # Which camera can see the robot part A?
 +  ?- knowrob_mongo:obj_visible_in_camera('http://ias.cs.tum.edu/kb/PR2.owl#pr2_l_wrist_flex_link', 
 +  Camera, 'http://ias.cs.tum.edu/kb/namespace_LMutVndu#timepoint_1376577918').
 +  Camera = 'http://ias.cs.tum.edu/kb/PR2.owl#pr2_wide_stereo_l_stereo_camera_frame' ;
 +  Camera = 'http://ias.cs.tum.edu/kb/PR2.owl#pr2_wide_stereo_r_stereo_camera_frame' ;
 +  Camera = 'http://ias.cs.tum.edu/kb/PR2.owl#pr2_head_mount_kinect_ir_link' ;
 +  Camera = 'http://ias.cs.tum.edu/kb/PR2.owl#pr2_head_mount_kinect_rgb_link' ;
 +
 +
 +The following is to be performed from the roslog_2013_08_29_1445 folder:
 +
 +  # Is some part of the right arm blocking the view on the object?
 +  ?- register_ros_package(mod_srdl), owl_parse('perceive-no-details.owl', false, false, true).
 +  ?- mng_obj_pose_by_desig('http://ias.cs.tum.edu/kb/cram_log.owl#VisualPerception_Z9fXhEae_object_0', Pose).
 +  ?- sub_component(pr2:pr2_right_arm, Part), 
 +     once(owl_individual_of(Part, srdl2comp:'UrdfLink')),
 +     obj_blocked_by_in_camera(log:'VisualPerception_Z9fXhEae_object_0', Part, 
 +     pr2:pr2_head_mount_kinect_rgb_link, log:'timepoint_1377780296').
 +     
 +  # Is the object visible in the camera, given the camera's field of view?
 +  ?- obj_visible_in_camera(log:'VisualPerception_Z9fXhEae_object_0', 
 +                           pr2:pr2_head_mount_kinect_rgb_link,   
 +                           log:'timepoint_1377780219').
 +  false.
 +  
 +  ?- obj_visible_in_camera(log:'VisualPerception_Z9fXhEae_object_0', 
 +                           pr2:pr2_head_mount_kinect_rgb_link,
 +                           log:'timepoint_1377780271').
 +  true .
 +
 +
 +
 +===== Reasoning over plan logs using mod_execution_trace =====
 +
 +==== Prerequisites ====
 +1) Get latest version of knowrob and knowrob_addons from [[https://github.com/knowrob/knowrob | Link 1]] [[https://github.com/knowrob/knowrob_addons | Link 2]] respectively. Put these ROS stacks into your ROS workspace.
 +
 +2) Get the dataset from [[https://www.dropbox.com/s/9w4wsl2u6h9j694/packaging2.zip | Link]] (Note that dataset is slightly modified version of Jan's. Namely, some modifications were done in namespaces and class namings). Extract it somewhere you choose.
 +
 +==== Starting up the Software ====
 +
 +  $ rosrun rosprolog rosprolog mod_vis
 +  ?- register_ros_package(mod_execution_trace).
 +  ?- owl_parse('path_of_dataset_should_be_here/perceive-no-details.owl', false, false, true).
 +  
 +==== Example Query ====
 +"What is the probability of a certain task was failed during the execution of a plan?" is shown as an example. It is also one of the use-cases what we want to show in our ACS'13 paper.
 +
 +  ?- aggregate_all(count,(task(Task), task_class(Task, 'http://ias.cs.tum.edu/kb/knowrob_cram.owl#AchieveGoalPerformOnProcessModule'),  failure_class(Error, Error_Class), failure_task(Error, Task)), Count), aggregate_all(count,(task(Task), task_class(Task, 'http://ias.cs.tum.edu/kb/knowrob_cram.owl#AchieveGoalPerformOnProcessModule')), Count2), Prob = Count/Count2.
 +
 +
 +===== Open issues =====
 +Note that some predicates still don't work because I'm still implementing/modifying them
 +
 +==== Representation and reasoning ====
 +Please file issues here: https://github.com/knowrob/knowrob_addons/issues
 +
 +==== Infrastructure ====
 +Please file issues here: https://github.com/code-iai/iai_software/issues