00001 /* 00002 * Copyright (C) 2010 by Moritz Tenorth 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 3 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 */ 00017 00018 package org.roboearth.re_ontology; 00019 00020 00021 import ros.*; 00022 import ros.communication.Time; 00023 import ros.pkg.re_msgs.msg.*; 00024 00034 public class ReVisionDummyPublisher { 00035 00036 static Boolean rosInitialized = false; 00037 static Ros ros; 00038 static NodeHandle n; 00039 00040 // Subscriber.QueueingCallback<ros.pkg.gazebo.msg.ModelStates> callback; 00041 // 00042 // Thread listenToObjDetections; 00043 // Thread publishReVisionMessages; 00044 00045 00046 00047 // /** 00048 // * Constructor: initializes the ROS environment 00049 // * 00050 // * @param node_name A unique node name 00051 // */ 00052 // public ReVisionDummyPublisher(String node_name) { 00053 // 00054 // initRos(node_name); 00055 // 00056 // callback = new Subscriber.QueueingCallback<ros.pkg.gazebo.msg.ModelStates>(); 00057 // startObjDetectionsListener(); 00058 // } 00059 // 00060 // 00061 // public void startObjDetectionsListener() { 00062 // 00063 // // create threads for listening object detections 00064 // 00065 // listenToObjDetections = new Thread( new ListenerThread() ); 00066 // listenToObjDetections.start(); 00067 // 00068 // publishReVisionMessages = new Thread( new PublishReVisionMsgsThread() ); 00069 // publishReVisionMessages.start(); 00070 // 00071 // } 00072 00073 00074 00075 // /** 00076 // * Initialize the ROS environment if it has not yet been initialized 00077 // * 00078 // * @param node_name A unique node name 00079 // */ 00080 // protected static void initRos(String node_name) { 00081 // 00082 // ros = Ros.getInstance(); 00083 // 00084 // if(!Ros.getInstance().isInitialized()) { 00085 // ros.init(node_name); 00086 // } 00087 // n = ros.createNodeHandle(); 00088 // 00089 // } 00090 00091 00092 // /** 00093 // * Listen the object poses published by Gazebo and buffer them 00094 // * 00095 // * @author tenorth 00096 // * 00097 // */ 00098 // public class ListenerThread implements Runnable { 00099 // 00100 // @Override public void run() { 00101 // 00102 // try { 00103 // 00104 // Subscriber<ros.pkg.gazebo.msg.ModelStates> sub = 00105 // n.subscribe("/gazebo/model_states", new ros.pkg.gazebo.msg.ModelStates(), callback, 10); 00106 // 00107 // n.spin(); 00108 // sub.shutdown(); 00109 // 00110 // } catch(RosException e) { 00111 // e.printStackTrace(); 00112 // } 00113 // } 00114 // } 00115 00116 00117 // /** 00118 // * Publish the re_vision messages 00119 // * 00120 // * @author tenorth 00121 // * 00122 // */ 00123 // public class PublishReVisionMsgsThread implements Runnable { 00124 // 00125 // @Override public void run() { 00126 // 00127 // try { 00128 // 00129 // ros.pkg.gazebo.msg.ModelStates res; 00130 // 00131 // Publisher<ros.pkg.re_msgs.msg.SeenObjectArray> pub = 00132 // n.advertise("/vslam/seen_objects", new ros.pkg.re_msgs.msg.SeenObjectArray(), 100); 00133 // 00134 // 00135 // int i_msg=0; 00136 // while (n.isValid()) { 00137 // 00138 // res = callback.pop(); 00139 // 00140 // if( ((i_msg++)%1000) == 0) { 00141 // 00142 // // iterate over detected objects 00143 // ros.pkg.re_msgs.msg.SeenObjectArray msg = new ros.pkg.re_msgs.msg.SeenObjectArray(); 00144 // int i_obj=0; 00145 // 00146 // for(int i_res=0; i_res<res.name.size();i_res++) { 00147 // 00148 // if( (res.name.get(i_res).equals("bed")) || 00149 // (res.name.get(i_res).equals("cabinet")) || 00150 // (res.name.get(i_res).equals("bottle1")) || 00151 // (res.name.get(i_res).equals("chair")) ) { 00152 // 00153 // SeenObject new_obj = new SeenObject(); 00154 // new_obj.name = res.name.get(i_res); 00155 // new_obj.pose = res.pose.get(i_res).clone(); 00156 // new_obj.stamp = new Time(); 00157 // msg.object.add(new_obj); 00158 // 00159 // i_obj++; 00160 // 00161 // } 00162 // 00163 // } 00164 // 00165 // pub.publish(msg); 00166 // System.out.println("Publishing"); 00167 // } 00168 // n.spinOnce(); 00169 // 00170 // } 00171 // pub.shutdown(); 00172 // 00173 // } catch (Exception e) { 00174 // e.printStackTrace(); 00175 // } 00176 // } 00177 // } 00178 00179 00180 // public static void main(String[] args) { 00181 // 00182 // new ReVisionDummyPublisher("re_vision_dummy"); 00183 // } 00184 }