Go to the documentation of this file.00001 package edu.tum.cs.ias.knowrob.owl;
00002
00003 import java.util.Vector;
00004
00005 import javax.vecmath.Matrix4d;
00006 import javax.vecmath.Quat4d;
00007 import javax.vecmath.Vector3d;
00008
00009 import edu.tum.cs.ias.knowrob.prolog.PrologInterface;
00010 import edu.tum.cs.ias.knowrob.prolog.PrologQueryUtils;
00011
00012
00013 public class ObjectInstance extends OWLIndividual {
00014
00015
00019 protected Vector3d dimensions;
00020
00024 protected Matrix4d pose_matrix;
00025
00029 protected Vector<ObjectInstance> physicalParts;
00030
00031
00032
00039 protected ObjectInstance(String iri, String label) {
00040
00041 super(iri, label);
00042
00043 this.dimensions = new Vector3d();
00044 this.pose_matrix = new Matrix4d();
00045 this.pose_matrix.setIdentity();
00046
00047 this.physicalParts = new Vector<ObjectInstance>();
00048 }
00049
00050
00056 protected ObjectInstance(OWLIndividual ind) {
00057
00058 this(ind.getIRI(), ind.getLabel());
00059 this.types.addAll(ind.getTypes());
00060 this.data_props.putAll(ind.getDataProperties());
00061 this.obj_props.putAll(ind.getObjProperties());
00062 }
00063
00064
00074 public static ObjectInstance getObjectInstance(String iri, String label) {
00075
00076
00077 if(identifiers.containsKey(iri) && identifiers.get(iri) instanceof ObjectInstance) {
00078 return (ObjectInstance) identifiers.get(iri);
00079 }
00080
00081
00082 ObjectInstance res = new ObjectInstance(OWLIndividual.getOWLIndividual(iri, label));
00083 identifiers.put(iri, res);
00084 return res;
00085 }
00086
00095 public static ObjectInstance getObjectInstance(String iri) {
00096 return getObjectInstance(iri, null);
00097 }
00098
00099
00100
00101
00106 public Vector<ObjectInstance> getPhysicalParts() {
00107 return physicalParts;
00108 }
00109
00114 public void setPhysicalParts(Vector<ObjectInstance> physicalParts) {
00115 this.physicalParts = physicalParts;
00116 }
00117
00118
00123 public void addPhysicalPart(ObjectInstance part) {
00124 this.physicalParts.add(part);
00125 }
00126
00127
00132 public void removePhysicalPart(ObjectInstance part) {
00133 this.physicalParts.remove(part);
00134 }
00135
00136
00141 public boolean hasPhysicalPart(ObjectInstance part) {
00142 if(this.physicalParts.contains(part))
00143 return true;
00144 else return false;
00145 }
00146
00147
00148
00149
00155 public Vector3d getDimensions() {
00156 return dimensions;
00157 }
00158
00159
00165 public void setDimensions(Vector3d dimensions) {
00166 this.dimensions = dimensions;
00167 }
00168
00169
00175 public Matrix4d getPoseMatrix() {
00176 return pose_matrix;
00177 }
00178
00179
00185 public void setPoseMatrix(Matrix4d poseMatrix) {
00186 pose_matrix = poseMatrix;
00187 }
00188
00189
00195 public Vector3d getPosition() {
00196 return new Vector3d(pose_matrix.m03,
00197 pose_matrix.m13,
00198 pose_matrix.m23);
00199 }
00200
00201
00207 public void setPosition(Vector3d position) {
00208 pose_matrix.setM03(position.x);
00209 pose_matrix.setM13(position.y);
00210 pose_matrix.setM23(position.z);
00211 }
00212
00213
00219 public Quat4d getPoseQuaternion() {
00220 Quat4d res = new Quat4d();
00221 res.set(this.pose_matrix);
00222 return res;
00223 }
00224
00225
00233 public void setPoseQuaternion(Vector3d translation, Quat4d orientation, double scale) {
00234 pose_matrix = new Matrix4d(orientation, translation, scale);
00235 }
00236
00237
00238
00239 public Vector<Float> getPoseAsVector() {
00240 Vector<Float> r = new Vector<Float>();
00241
00242 for(int i=0;i<4;i++)
00243 for(int j=0;j<4;j++)
00244 r.add((float) pose_matrix.getElement(i, j));
00245
00246 return r;
00247 }
00248
00249
00250
00251 public void readFromProlog() {
00252
00253
00254 }
00255
00256 public void readFromPrologWithChildren() {
00257
00258 readFromProlog();
00259
00260 for(ObjectInstance inst : physicalParts)
00261 inst.readFromProlog();
00262 }
00263
00264 public void writeToProlog() {
00265
00266
00267 super.writeToProlog();
00268
00269
00270
00271 PrologQueryUtils.setObjPose(iri, "SemanticMapPerception", getPoseAsVector());
00272
00273
00274
00275 PrologInterface.executeQuery("rdf_retractall('" + iri + "', 'http://ias.cs.tum.edu/kb/knowrob.owl#depthOfObject', _)");
00276 PrologInterface.executeQuery("rdf_retractall('" + iri + "', 'http://ias.cs.tum.edu/kb/knowrob.owl#widthOfObject', _)");
00277 PrologInterface.executeQuery("rdf_retractall('" + iri + "', 'http://ias.cs.tum.edu/kb/knowrob.owl#heightOfObject', _)");
00278 PrologQueryUtils.assertDataPropertyForInst(iri, "http://ias.cs.tum.edu/kb/knowrob.owl#depthOfObject", dimensions.x+"", "http://www.w3.org/2001/XMLSchema#float");
00279 PrologQueryUtils.assertDataPropertyForInst(iri, "http://ias.cs.tum.edu/kb/knowrob.owl#widthOfObject", dimensions.y+"", "http://www.w3.org/2001/XMLSchema#float");
00280 PrologQueryUtils.assertDataPropertyForInst(iri, "http://ias.cs.tum.edu/kb/knowrob.owl#heightOfObject", dimensions.z+"", "http://www.w3.org/2001/XMLSchema#float");
00281
00282
00283
00284 PrologInterface.executeQuery("rdf_retractall('" + iri + "', 'http://ias.cs.tum.edu/kb/knowrob.owl#properPhysicalParts', _)");
00285
00286 for(ObjectInstance child : physicalParts) {
00287 child.writeToProlog();
00288 PrologQueryUtils.assertObjectPropertyForInst(iri, "http://ias.cs.tum.edu/kb/knowrob.owl#properPhysicalParts", child.getIRI());
00289 }
00290 }
00291 }
00292