00001 /* 00002 * Copyright (c) 2012, Willow Garage, Inc. 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * * Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * * Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * * Neither the name of the Willow Garage, Inc. nor the names of its 00014 * contributors may be used to endorse or promote products derived from 00015 * this software without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00018 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 00021 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 00022 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 00023 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 00024 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 00025 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 00026 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 00027 * POSSIBILITY OF SUCH DAMAGE. 00028 */ 00029 00030 #ifndef OBJECT_RECOGNITION_RVIZ_UI 00031 #define OBJECT_RECOGNITION_RVIZ_UI 00032 00033 #include <QWidget> 00034 #include <QHBoxLayout> 00035 #include <QVBoxLayout> 00036 #include <QTextBrowser> 00037 00038 #include "interactive_perception_msgs/ObjectRecognitionGuiAction.h" 00039 00040 #include <boost/thread/mutex.hpp> 00041 00042 #include <actionlib/server/simple_action_server.h> 00043 00044 #include "interactive_perception_msgs/ObjectRecognitionGuiAction.h" 00045 00046 00047 namespace rviz_interaction_tools { 00048 class MeshObjectSwitcher; 00049 class ImageOverlay; 00050 } 00051 00052 namespace rviz { 00053 class WindowManagerInterface; 00054 class RenderPanel; 00055 class DisplayContext; 00056 } 00057 00058 namespace Ogre { 00059 class SceneNode; 00060 class RaySceneQuery; 00061 class SceneManager; 00062 } 00063 00064 namespace Ui { 00065 class ObjectRecognitionFrame; 00066 } 00067 00068 namespace object_recognition_gui { 00069 00070 class MouseEventSignallingRenderPanel; 00071 00072 class ObjectRecognitionRvizUI : public QWidget 00073 { 00074 Q_OBJECT 00075 public: 00076 ObjectRecognitionRvizUI(rviz::DisplayContext* context); 00077 virtual ~ObjectRecognitionRvizUI(); 00078 00079 //called regularly; updates the display. 00080 void update(float wall_dt, float ros_dt); 00081 00082 //start listening to action goals 00083 void startActionServer( ros::NodeHandle &node_handle ); 00084 00085 //stop action server, cancel current goal & hide if necessary 00086 void stopActionServer(); 00087 00088 void showBoundingBoxes( bool show ); 00089 bool getShowBoundingBoxes(); 00090 00091 protected Q_SLOTS: 00092 void acceptButtonClicked(); 00093 void cancelButtonClicked(); 00094 void onRenderWindowMouseEvent( QMouseEvent* event ); 00095 void updateBoundingBoxes(); 00096 00097 protected: 00098 00099 // callback for new action server goals 00100 void acceptNewGoal(); 00101 00102 // callback for action server preempt (cancel) requests 00103 void preempt(); 00104 00105 00106 //cleanup ogre scene, hide window 00107 void cleanupAndHide(); 00108 00109 //create the different red and green ogre materials 00110 void createMaterials(); 00111 00112 // Configure the RenderPanel created by the UI file. 00113 void setupRenderPanel( rviz::DisplayContext* context ); 00114 00115 //get meshes from message into ogre 00116 void parseMeshes(const std::vector<interactive_perception_msgs::ModelHypothesisList> &model_hyp_list); 00117 00118 //ogre stuff 00119 MouseEventSignallingRenderPanel* render_panel_; 00120 Ogre::SceneManager* scene_manager_; 00121 Ogre::SceneNode* scene_root_; 00122 00123 //used for object selection 00124 Ogre::RaySceneQuery* ray_scene_query_; 00125 00126 //displays the camera image 00127 rviz_interaction_tools::ImageOverlay *image_overlay_; 00128 00129 //displays the model hypothesis meshes 00130 std::vector< rviz_interaction_tools::MeshObjectSwitcher* > mesh_switchers_; 00131 00132 actionlib::SimpleActionServer<interactive_perception_msgs::ObjectRecognitionGuiAction> *object_recognition_server_; 00133 00134 private: 00135 Ui::ObjectRecognitionFrame *ui_; // UI object created by uic from object_recognition_frame.ui 00136 }; 00137 00138 } 00139 00140 #endif