00001 package edu.tum.cs.ias.knowrob.mod_dialog.queries;
00002
00003 import java.util.HashMap;
00004 import java.util.Vector;
00005 import java.util.regex.Matcher;
00006 import java.util.regex.Pattern;
00007
00008 import de.tum.in.fipm.kipm.gui.visualisation.applets.CommunicationVisApplet;
00009 import edu.tum.cs.ias.knowrob.json_prolog.PrologValue;
00010 import edu.tum.cs.ias.knowrob.mod_dialog.DialogModule;
00011
00012
00013
00014 public class GermanDeliQuery extends SimpleTopLevelQuery {
00015
00016 public GermanDeliQuery(DialogModule mod) {
00017 super(mod);
00018 }
00019
00020 @Override
00021 public String match(String q) {
00022
00023 Matcher matcher = Pattern.compile("^(([R|r]osie)?[,]* would you make us some pancakes\\?)").matcher(q);
00024 if(matcher.find()) {
00025
00026
00027 String shortquery = "rdf_triple(knowrob:forCommand, A, 'make pancakes').\n";
00028 CommunicationVisApplet.visualizeCommunication(shortquery, null, "rosie.png", "wikihow.png");
00029
00030 dialog_module.setVoice("dfki-prudence");
00031
00032 String res = "A = 'http://ias.cs.tum.edu/kb/knowrob.owl#MakePancakesUsingPancakeMix'.\n";
00033
00034 dialog_module.ehow_window.setVisible( true );
00035
00036
00037 this.dialog_module.setCurrentObject("knowrob:'MakePancakesUsingPancakeMix'");
00038
00039
00040 CommunicationVisApplet.visualizeCommunication(null, res, "rosie.png", "wikihow.png");
00041
00042 return "Sure, let me look up instructions on the web.";
00043 }
00044
00045
00046 matcher = Pattern.compile("^([W|w]hat is this\\?)").matcher(q);
00047 if(matcher.find()) {
00048
00049
00050 dialog_module.setVoice("dfki-prudence");
00051
00052
00053 String query = "latest_perception_of_type('http://ias.cs.tum.edu/kb/germandeli.owl#GermanDeliObject', A), " +
00054 "rdf_has(A, knowrob:objectActedOn, Obj), rdf_has(Obj, rdf:type, ObjT)";
00055 CommunicationVisApplet.visualizeCommunication(query, null, "", "rosie.png");
00056
00057 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00058
00059
00060 String obj = "";
00061 String type = "";
00062
00063 if(qres==null)
00064 return null;
00065
00066 if(qres.containsKey("Obj") && qres.containsKey("ObjT")) {
00067 obj = qres.get("Obj").toString(); obj=obj.substring(1, obj.length()-1);
00068
00069 this.dialog_module.setCurrentObject(obj);
00070 type = qres.get("ObjT").toString(); type=type.substring(1, type.length()-1);
00071 } else {
00072 return null;
00073 }
00074
00075
00076 if(obj.contains("#")) {
00077 obj=DialogModule.removeSingleQuotes(obj).split("#")[1];
00078 }
00079 if(type.contains("#")) {
00080 type=DialogModule.removeSingleQuotes(type).split("#")[1];
00081 }
00082
00083
00084 String res = "It is a "+type+".\n";
00085
00086
00087 CommunicationVisApplet.visualizeCommunication(null, "Obj="+obj+", ObjT="+type, "", "rosie.png");
00088
00089 return res;
00090 }
00091
00092
00093
00094
00095 matcher = Pattern.compile("^([W|w]hat do you need for that\\?)").matcher(q);
00096 if(matcher.find()) {
00097
00098 q=this.dialog_module.getCurrentObject();
00099
00100
00101
00102 String obj = "Mondamin_Pfannkuchen_Teig_Mix_200g_Pancake_Mix";
00103 String query = "owl_direct_subclass_of('http://ias.cs.tum.edu/kb/germandeli.owl#"+obj+"', R)," +
00104 "owl_has(R, owl:onProperty, germandeli:productID)," +
00105 "owl_has(R, owl:hasValue, literal(type(xsd:string, ID)))";
00106 String printquery = "owl_direct_subclass_of(http://ias.cs.tum.edu/kb/germandeli.owl#"+obj+", R), \n" +
00107 "owl_has(R, owl:onProperty, germandeli:productID), \n" +
00108 "owl_has(R, owl:hasValue, literal(type(xsd:string, ID))).";
00109 CommunicationVisApplet.visualizeCommunication(printquery, null, null, "rosie.png");
00110
00111 dialog_module.setVoice("dfki-prudence");
00112
00113 String id = "";
00114 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00115 if(qres.containsKey("ID")) {
00116 id = qres.get("ID").toString(); id=id.substring(1, id.length()-1);
00117 }
00118
00119 dialog_module.showImageInNewWindow("/work/germandeli/images/"+id+".jpg");
00120
00121 String res = "I need some pancake mix like this one I found on the German Deli website.\n";
00122
00123
00124 this.dialog_module.setCurrentObject("knowrob:'PancakeMix'");
00125
00126
00127 CommunicationVisApplet.visualizeCommunication(null, res, "", "rosie.png");
00128
00129 return res;
00130 }
00131
00132
00133
00134 matcher = Pattern.compile("^([C|c]an you recognize it\\?)").matcher(q);
00135 if(matcher.find()) {
00136
00137 q=this.dialog_module.getCurrentObject();
00138
00139
00140
00141 String obj = "Mondamin_Pfannkuchen_Teig_Mix_200g_Pancake_Mix";
00142 String query = "owl_direct_subclass_of('http://ias.cs.tum.edu/kb/germandeli.owl#"+obj+"', R)," +
00143 "owl_has(R, owl:onProperty, germandeli:productID)," +
00144 "owl_has(R, owl:hasValue, literal(type(xsd:string, ID)))";
00145 String printquery = "owl_direct_subclass_of(http://ias.cs.tum.edu/kb/germandeli.owl#"+obj+", R), \n" +
00146 "owl_has(R, owl:onProperty, germandeli:productID), \n" +
00147 "owl_has(R, owl:hasValue, literal(type(xsd:string, ID))).";
00148 CommunicationVisApplet.visualizeCommunication(printquery, null, null, "rosie.png");
00149
00150 dialog_module.setVoice("dfki-prudence");
00151
00152 String id = "";
00153 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00154 if(qres.containsKey("ID")) {
00155 id = qres.get("ID").toString(); id=id.substring(1, id.length()-1);
00156 }
00157 dialog_module.showImageInNewWindow("/work/germandeli/images_with_keypoints/"+id+".jpg");
00158
00159
00160 String res = "Yes, using SIFT features.\n";
00161 CommunicationVisApplet.visualizeCommunication(null, res, "", "rosie.png");
00162
00163 return res;
00164 }
00165
00166
00167
00168 matcher = Pattern.compile("^([W|w]here would you search for it\\?)").matcher(q);
00169 if(matcher.find()) {
00170
00171 q=this.dialog_module.getCurrentObject();
00172 dialog_module.setVoice("dfki-prudence");
00173
00174
00175 String query = "storagePlaceForBecause(StLoc, knowrob:'PancakeMix', Why), highlight_object(StLoc, _)";
00176 CommunicationVisApplet.visualizeCommunication(query, null, "", "rosie.png");
00177
00178 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00179
00180
00181 String loc = "";
00182 String why = "";
00183
00184 if(qres.containsKey("StLoc") && qres.containsKey("Why")) {
00185 loc = qres.get("StLoc").toString(); loc=loc.substring(1, loc.length()-1);
00186 why = qres.get("Why").toString(); why=why.substring(1, why.length()-1);
00187 } else {
00188 return null;
00189 }
00190
00191
00192 if(loc.contains("#")) {
00193 loc=DialogModule.removeSingleQuotes(loc).split("#")[1];
00194 }
00195 if(why.contains("#")) {
00196 why=DialogModule.removeSingleQuotes(why).split("#")[1];
00197 }
00198
00199
00200 String res = "In "+loc+", because it is "+why+".\n";
00201
00202 CommunicationVisApplet.visualizeCommunication(null, "StLoc="+loc+", Why="+why, "", "rosie.png");
00203
00204 return res;
00205 }
00206
00207
00208
00209 matcher = Pattern.compile("^([C|c]an you get the pancake mix from the fridge\\?)").matcher(q);
00210 if(matcher.find()) {
00211
00212
00213 String query = "returnMissingCapsForAction(srdl_action:'GetObjectFromRefrigerator', rosie:'TUM_Rosie_RobotInstance1', Missing)";
00214
00215
00216 CommunicationVisApplet.visualizeCommunication(query, null, "", "rosie.png");
00217 dialog_module.setVoice("dfki-prudence");
00218
00219
00220 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00221
00222 String res = "No.\n";
00223 if(qres==null) {
00224 return "Yes.\n";
00225 } else {
00226
00227 if(qres!=null && qres.containsKey("Missing")&&qres.get("Missing").get(0).islist()) {
00228
00229
00230
00231 CommunicationVisApplet.visualizeCommunication(null,"Missing = "+qres.get("Missing").get(0).toString(), "", "rosie.png");
00232
00233
00234 Vector<PrologValue> caps = (Vector<PrologValue>)qres.get("Missing").get(0).getValue();
00235
00236 res = "No, because I am missing the capabilities for ";
00237 for(int i=0;i<caps.size();i++) {
00238
00239 if(caps.get(i)==null)
00240 continue;
00241
00242 String cap=caps.get(i).toString();
00243 if(cap.contains("#")) {
00244 cap=DialogModule.removeSingleQuotes(cap).split("#")[1];
00245 }
00246 res+=cap;
00247
00248 if(i==caps.size()-2) {
00249 res+=", and ";
00250 } else if (i==caps.size()-1) {
00251 res+=".\n";
00252 } else {
00253 res+=" ";
00254 }
00255 }
00256
00257 }
00258 }
00259
00260 return res;
00261 }
00262
00263
00264 matcher = Pattern.compile("^([J|j]ames show me a location that can be reached by rosie)").matcher(q);
00265 if(matcher.find()) {
00266
00267 q=this.dialog_module.getCurrentObject();
00268 dialog_module.setVoice("dfki-prudence");
00269
00270
00271
00272 String query = "(visualize-location-designator ((on table) (name kitchen-island) (in reach)) ?_)";
00273 CommunicationVisApplet.visualizeCommunication(query, null, "", "pr2.jpg");
00274
00275 DialogModule.executeLispPrologQuery(query);
00276
00277
00278 String res = "This is the distribution.\n";
00279 CommunicationVisApplet.visualizeCommunication(null, res, "", "pr2.jpg");
00280
00281 return res;
00282 }
00283
00284
00285 matcher = Pattern.compile("^([J|j]ames[,]* can you get the pancake mix from the fridge\\?)").matcher(q);
00286 if(matcher.find()) {
00287
00288
00289
00290 String query = "returnMissingCapsForAction(srdl_action:'GetObjectFromRefrigerator', pr2:'PR2_Instance1', Missing)";
00291
00292
00293 CommunicationVisApplet.visualizeCommunication(query, null, "", "pr2.jpg");
00294 dialog_module.setVoice("dfki-obadiah");
00295
00296
00297 HashMap<String, Vector<PrologValue>> qres = DialogModule.executeJSONPrologQuery(query);
00298
00299 String res = "No.\n";
00300 if(qres==null) {
00301 CommunicationVisApplet.visualizeCommunication(null,"Missing=[]", "", "pr2.jpg");
00302 return "Yes.\n";
00303 }
00304
00305
00306 CommunicationVisApplet.visualizeCommunication(null, "No.", "", "pr2.jpg");
00307
00308 return res;
00309 }
00310
00311
00312
00313 matcher = Pattern.compile("^([J|j]ames[,]* where can you put it down\\?)").matcher(q);
00314 if(matcher.find()) {
00315
00316
00317 String shortquery = "James, where can you put it down?";
00318 CommunicationVisApplet.visualizeCommunication(shortquery, null, "", "pr2.jpg");
00319 dialog_module.setVoice("dfki-obadiah");
00320
00321
00322 String res = "Right over here.\n";
00323
00324
00325 CommunicationVisApplet.visualizeCommunication(null, res, "", "pr2.jpg");
00326
00327 return res;
00328 }
00329
00330
00331
00332 return null;
00333 }
00334
00335
00336
00337 }