Go to the documentation of this file.00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 package edu.tum.cs.ias.knowrob.tutorial;
00019 
00020 import ros.*;
00021 import ros.pkg.geometry_msgs.msg.Point;
00022 import ros.pkg.geometry_msgs.msg.Quaternion;
00023 import ros.pkg.household_objects_database_msgs.msg.DatabaseModelPose;
00024 import ros.pkg.tabletop_object_detector.msg.*;
00025 import ros.pkg.tabletop_object_detector.srv.*;
00026 
00027 
00028 public class ROSClientTabletopObjectDetector {
00029 
00030         static Boolean rosInitialized = false;
00031         static Ros ros;
00032         static NodeHandle n;
00033 
00034 
00040         public ROSClientTabletopObjectDetector(String node_name) {
00041                 initRos(node_name);
00042         }
00043 
00044 
00050         protected static void initRos(String node_name) {
00051 
00052                 ros = Ros.getInstance();
00053 
00054                 if(!Ros.getInstance().isInitialized()) {
00055                         ros.init(node_name);
00056                 }
00057                 n = ros.createNodeHandle();
00058 
00059         }
00060 
00061 
00066         public TabletopDetectionResult callTabletopObjDetection() {
00067 
00068                 TabletopDetectionResult r=null;
00069                 try {
00070 
00071                         
00072                         TabletopDetection.Request req = new TabletopDetection.Request();
00073                         req.return_clusters=false;
00074                         req.return_models=true;
00075 
00076                         ServiceClient<TabletopDetection.Request, TabletopDetection.Response, TabletopDetection> cl =
00077                                 n.serviceClient("/object_detection", new TabletopDetection());
00078 
00079                         r = cl.call(req).detection;
00080                         cl.shutdown();
00081 
00082                 } catch (RosException e) {
00083                         ros.logError("ROSClient: Call to service /object_detection failed");
00084                 }
00085 
00086                 return r;
00087         }
00088 
00094         public static double[] objectPose(DatabaseModelPose p) {
00095 
00096                 return quaternionToMatrix(p.pose.pose.position, p.pose.pose.orientation);
00097         }
00098 
00106         protected static double[] quaternionToMatrix(Point p, Quaternion q) {
00107 
00108                 double[] m = new double[16];
00109 
00110             double xx = q.x * q.x;
00111             double xy = q.x * q.y;
00112             double xz = q.x * q.z;
00113             double xw = q.x * q.w;
00114 
00115             double yy = q.y * q.y;
00116             double yz = q.y * q.z;
00117             double yw = q.y * q.w;
00118 
00119             double zz = q.z * q.z;
00120             double zw = q.z * q.w;
00121 
00122             m[0]  = 1 - 2 * ( yy + zz );
00123             m[1]  =     2 * ( xy - zw );
00124             m[2]  =     2 * ( xz + yw );
00125             m[3]  = p.x;
00126 
00127             m[4]  =     2 * ( xy + zw );
00128             m[5]  = 1 - 2 * ( xx + zz );
00129             m[6]  =     2 * ( yz - xw );
00130             m[7]  = p.y;
00131 
00132             m[8]  =     2 * ( xz - yw );
00133             m[9]  =     2 * ( yz + xw );
00134             m[10] = 1 - 2 * ( xx + yy );
00135             m[11]=p.z;
00136 
00137             m[12]=0;
00138             m[13]=0;
00139             m[14]=0;
00140             m[15]=1;
00141             return m;
00142         }
00143 
00144 
00145 
00146         
00147 
00148 
00149         public static void main(String[] args) {
00150 
00151                 ROSClientTabletopObjectDetector r = new ROSClientTabletopObjectDetector("knowrob_tabletop_test_123");
00152 
00153                 TabletopDetectionResult res = r.callTabletopObjDetection();
00154 
00155                 for(int i=0;i<res.models.size();i++) {
00156                         for(int j=0;j<res.models.get(i).model_list.size();j++) {
00157                                 System.out.println(res.models.get(i).model_list.get(j).model_id);
00158                                 System.out.println("Pos: "+res.models.get(i).model_list.get(j).pose.pose.position.x+","+res.models.get(i).model_list.get(j).pose.pose.position.y+","+res.models.get(i).model_list.get(j).pose.pose.position.z);
00159                         }
00160                 }
00161         }
00162 
00163 }