$search
00001 package edu.tum.cs.ias.knowrob; 00002 00003 import java.awt.event.MouseListener; 00004 import java.awt.event.MouseMotionListener; 00005 import controlP5.ControlP5; 00006 import processing.core.*; 00007 import ros.*; 00008 import ros.pkg.mesh_label_node.srv.LabelMesh; 00009 00010 00011 public class ObjectLabelingCanvas extends PApplet implements MouseListener, MouseMotionListener { 00012 00013 private static final long serialVersionUID = 4575739930038583994L; 00014 public enum Part {KITCHEN_VIS, ACTION_VIS, VIDEO, ALL}; 00015 00016 00017 static Ros ros; 00018 static NodeHandle n; 00022 protected static void initRos() { 00023 00024 ros = Ros.getInstance(); 00025 00026 if(!Ros.getInstance().isInitialized()) { 00027 ros.init("knowrob_comm_vis_applet"); 00028 } 00029 n = ros.createNodeHandle(); 00030 00031 } 00032 00033 // components 00034 protected MeshLabelApplet label_applet; 00035 protected MeshVisApplet mesh_applet; 00036 00037 public ControlP5 controlP5; 00038 00039 private String label=""; 00040 private String label_set=""; 00041 00042 public ObjectLabelingCanvas() { 00043 00044 this.init(); 00045 00046 00047 label_applet = new MeshLabelApplet(); 00048 label_applet.setSize(700, 80); 00049 label_applet.init(); 00050 00051 label_applet.setObjectLabelingCanvas(this); 00052 00053 mesh_applet = new MeshVisApplet(); 00054 mesh_applet.setSize(700, 600); 00055 mesh_applet.init(); 00056 00057 this.add(label_applet); 00058 this.add(mesh_applet); 00059 00060 00061 // start ROS environment 00062 new LabelMeshCallback(); 00063 00064 Thread startRosServices = new Thread( new RosServiceThread() ); 00065 startRosServices.start(); 00066 00067 00068 this.setSize(700, 700); 00069 this.draw(); 00070 this.setVisible(true); 00071 00072 } 00073 00074 00075 public void draw() { 00076 background(20, 20, 20); 00077 } 00078 00079 00087 public class RosServiceThread implements Runnable { 00088 00089 @Override public void run() { 00090 00091 try { 00092 00093 initRos(); 00094 00095 n.advertiseService("/mesh_label_node", new LabelMesh(), new LabelMeshCallback()); 00096 ros.spin(); 00097 00098 } catch(RosException e) { 00099 e.printStackTrace(); 00100 } 00101 } 00102 } 00103 00111 class LabelMeshCallback implements ServiceServer.Callback<LabelMesh.Request, LabelMesh.Response> { 00112 00113 @Override 00114 public LabelMesh.Response call(LabelMesh.Request req) { 00115 00116 LabelMesh.Response res = new LabelMesh.Response(); 00117 res.label = ""; 00118 00119 if (req.mesh != null) { 00120 00121 mesh_applet.readTriangleMesh(req.mesh); 00122 00123 // wait for the GUI to set the label and notify me 00124 synchronized( label_set ) 00125 { 00126 try { 00127 label_set.wait(); 00128 res.label = label; 00129 return res; 00130 00131 } catch ( InterruptedException e ) { 00132 e.printStackTrace(); 00133 } 00134 } 00135 } 00136 return res; 00137 00138 } 00139 } 00140 00141 // called from the GUI: label set, notify waiting ROS answer thread 00142 public void setLabel(String l) { 00143 00144 synchronized(label_set) { 00145 label=l; 00146 label_set.notify(); 00147 } 00148 } 00149 00150 00151 public static void main(String args[]) { 00152 PApplet.main(new String[] { "edu.tum.cs.ias.knowrob.ObjectLabelingCanvas" }); 00153 } 00154 } 00155