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> |
| |