| Both sides previous revisionPrevious revisionNext revision | Previous revision | 
| doc:interact_with_knowrob_via_ros [2014/08/11 15:58]  – [Use KnowRob from your program]  admin | doc:interact_with_knowrob_via_ros [2014/08/12 15:23] (current)  – [Java client]  admin | 
|---|
| ^ This page describes the 'catkinized' version of KnowRob that has been converted to the [[http://wiki.ros.org/catkin/|catkin buildsystem]] and the new [[http://wiki.ros.org/rosjava|rosjava]]. The documentation for older versions can be found [[/doc/interact_with_knowrob_via_ros?rev=1401968328|here]].^ | ^ This page describes the 'catkinized' version of KnowRob that has been converted to the [[http://wiki.ros.org/catkin/|catkin buildsystem]] and the new [[http://wiki.ros.org/rosjava|rosjava]]. The documentation for older versions can be found [[/doc/interact_with_knowrob_via_ros?rev=1401968328|here]].^ | 
| \\ | \\ | 
|  |  | 
| The interactive Prolog shell that [[http://ros.org/wiki/rosprolog|rosprolog]] provides is good for exploring KnowRob, visualizing knowledge, developing new functions and debugging Prolog code. However, if you would like to use KnowRob in your robot's control program, you need a way to send queries from your program. This functionality is provided by the [[http://ros.org/wiki/json_prolog|json_prolog]] package. It provides a service that exposes a Prolog shell via ROS. You can run the //json_prolog// service using a launch file such as the following (which can be found in //knowrob_map_data/launch/ccrl2_semantic_map.launch//). | The interactive Prolog shell that [[http://ros.org/wiki/rosprolog|rosprolog]] provides is good for exploring KnowRob, visualizing knowledge, developing new functions and debugging Prolog code. However, if you would like to use KnowRob in your robot's control program, you need a way to send queries from your program. This functionality is provided by the [[http://ros.org/wiki/json_prolog|json_prolog]] package. It provides a service that exposes a Prolog shell via ROS. You can run the //json_prolog// service using a launch file such as the following (which can be found in //knowrob_map_data/launch/ccrl2_semantic_map.launch//). | 
| <code xml> | <code xml> | 
|  |  | 
| <code java> | <code java> | 
| import edu.tum.cs.ias.knowrob.json_prolog.Prolog; | package org.knowrob.json_prolog; | 
| import edu.tum.cs.ias.knowrob.json_prolog.PrologBindings; |  | 
| import edu.tum.cs.ias.knowrob.json_prolog.PrologQueryProxy; |  | 
|  |  | 
|  | import org.knowrob.json_prolog.Prolog; | 
|  | import org.knowrob.json_prolog.PrologBindings; | 
|  | import org.knowrob.json_prolog.PrologQueryProxy; | 
|  | import org.knowrob.utils.ros.RosUtilities; | 
|  |  | 
| public class JSONPrologTestClient { |  | 
|  |  | 
| public static void main(String args[]) { | public class JSONPrologTestClient { | 
|  |  | 
| Prolog pl = new Prolog(); | public static void main(String args[]) { | 
| PrologQueryProxy bdgs = pl.query("member(A, [1, 2, 3, 4]), B = ['x', A], C = foo(bar, A, B)"); |  | 
|  |  | 
|  | Prolog pl = new Prolog(); | 
|  | RosUtilities.runRosjavaNode(pl, new String[]{"org.knowrob.json_prolog.Prolog"}); | 
|  |  | 
| for(PrologBindings bdg : bdgs) { | PrologQueryProxy bdgs = pl.query("member(A, [1, 2, 3, 4]), B = ['x', A], C = foo(bar, A, B)"); | 
|  |  | 
| System.out.println("Found solution: "); | for(PrologBindings bdg : bdgs) { | 
| System.out.println("A = " + bdg.getBdgs_().get("A") ); | System.out.println("Found solution: "); | 
| System.out.println("B = " + bdg.getBdgs_().get("B") ); | System.out.println("A = " + bdg.getBdgs_().get("A") ); | 
| System.out.println("C = " + bdg.getBdgs_().get("C") ); | System.out.println("B = " + bdg.getBdgs_().get("B") ); | 
| } | System.out.println("C = " + bdg.getBdgs_().get("C") ); | 
|  | } | 
| } | } | 
| } | } | 
| </code> | </code> | 
|  |  |