00001 /****************************************************************************** 00002 * \file 00003 * \brief RVIZ plugin which provides simplified GUI based on Warehouse Viewer. 00004 * 00005 * $Id:$ 00006 * 00007 * Copyright (C) Brno University of Technology 00008 * 00009 * This file is part of software developed by dcgm-robotics@FIT group. 00010 * 00011 * Author: Zdenek Materna (imaterna@fit.vutbr.cz) 00012 * Supervised by: Michal Spanel (spanel@fit.vutbr.cz) 00013 * Date: 5/4/2012 00014 * 00015 * This file is free software: you can redistribute it and/or modify 00016 * it under the terms of the GNU Lesser General Public License as published by 00017 * the Free Software Foundation, either version 3 of the License, or 00018 * (at your option) any later version. 00019 * 00020 * This file is distributed in the hope that it will be useful, 00021 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00022 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00023 * GNU Lesser General Public License for more details. 00024 * 00025 * You should have received a copy of the GNU Lesser General Public License 00026 * along with this file. If not, see <http://www.gnu.org/licenses/>. 00027 */ 00028 00029 #pragma once 00030 #ifndef BUT_ARMNAVIGATION_H 00031 #define BUT_ARMNAVIGATION_H 00032 00033 #include <wx/wx.h> 00034 #include <wx/menu.h> 00035 #include <wx/panel.h> 00036 #include <wx/dialog.h> 00037 #include <wx/msgdlg.h> 00038 #include <wx/sizer.h> 00039 #include <wx/tglbtn.h> 00040 #include <wx/checkbox.h> 00041 #include <wx/choice.h> 00042 00043 #include <ros/ros.h> 00044 #include <string.h> 00045 00046 #include "srs_assisted_arm_navigation_msgs/ArmNavExecute.h" 00047 #include "srs_assisted_arm_navigation_msgs/ArmNavNew.h" 00048 #include "srs_assisted_arm_navigation_msgs/ArmNavPlan.h" 00049 #include "srs_assisted_arm_navigation_msgs/ArmNavPlay.h" 00050 #include "srs_assisted_arm_navigation_msgs/ArmNavReset.h" 00051 #include "srs_assisted_arm_navigation_msgs/ArmNavStart.h" 00052 #include "srs_assisted_arm_navigation_msgs/ArmNavSuccess.h" 00053 #include "srs_assisted_arm_navigation_msgs/ArmNavFailed.h" 00054 #include "srs_assisted_arm_navigation_msgs/ArmNavRefresh.h" 00055 #include "srs_assisted_arm_navigation_msgs/ArmNavSwitchAttCO.h" 00056 #include "srs_assisted_arm_navigation_msgs/ArmNavRepeat.h" 00057 #include "srs_assisted_arm_navigation_msgs/ArmNavStep.h" 00058 #include "srs_assisted_arm_navigation_msgs/ArmNavStop.h" 00059 #include "srs_assisted_arm_navigation_msgs/ArmNavMovePalmLinkRel.h" 00060 #include "srs_assisted_arm_navigation_msgs/ArmNavMovePalmLink.h" 00061 #include "srs_assisted_arm_navigation_msgs/AssistedArmNavigationState.h" 00062 00063 //#include "srs_env_model/LockCollisionMap.h" 00064 00065 //#include "cob_script_server/ScriptAction.h" 00066 #include <actionlib/client/simple_action_client.h> 00067 #include <boost/thread.hpp> 00068 #include <boost/date_time/posix_time/posix_time.hpp> 00069 #include <map> 00070 00071 #include "srs_assisted_arm_navigation/services_list.h" 00072 #include "srs_env_model/services_list.h" 00073 #include <tf/transform_broadcaster.h> 00074 #include <wx/textctrl.h> 00075 00076 namespace rviz 00077 { 00078 class WindowManagerInterface; 00079 } 00080 00081 namespace srs_assisted_arm_navigation_ui { 00082 00087 static const bool WAIT_FOR_START = true; 00088 00092 //typedef actionlib::SimpleActionClient<cob_script_server::ScriptAction> cob_client; 00093 00094 00095 struct Preset { 00096 00097 std::string name; 00098 geometry_msgs::Pose pose; 00099 bool relative; 00100 00101 }; 00102 00103 class CArmManipulationControls : public wxPanel 00104 { 00105 public: 00107 CArmManipulationControls(wxWindow *parent, const wxString& title, rviz::WindowManagerInterface * wmi ); 00108 ~CArmManipulationControls(); 00109 00111 virtual void OnNew(wxCommandEvent& event); 00112 virtual void OnPlan(wxCommandEvent& event); 00113 00114 virtual void OnExecute(wxCommandEvent& event); 00115 00116 //virtual void OnFinish(wxCommandEvent& event); 00117 virtual void OnSuccess(wxCommandEvent& event); 00118 virtual void OnFailed(wxCommandEvent& event); 00119 virtual void OnRepeat(wxCommandEvent& event); 00120 00121 virtual void OnSwitch(wxCommandEvent& event); 00122 00123 00124 00125 void OnStepBack(wxCommandEvent& event); 00126 00127 void OnChoice(wxCommandEvent& event); 00128 00129 void MoveAbs(); 00130 void MoveRel(); 00131 00132 void OnMoveRel(wxCommandEvent& event); 00133 00134 void OnGrasp(wxCommandEvent& event); 00135 void OnStopGrasp(wxCommandEvent& event); 00136 00137 void OnLift(wxCommandEvent& event); 00138 void OnHold(wxCommandEvent& event); 00139 00140 void OnStopTraj(wxCommandEvent& event); 00141 00142 void OnRoll(wxCommandEvent& event); 00143 void OnPitch(wxCommandEvent& event); 00144 void OnYaw(wxCommandEvent& event); 00145 00146 void setControlsToDefaultState(); 00147 void disableControls(); 00148 00149 bool refresh(); 00150 00151 00152 void OnSetText(wxCommandEvent & event); 00153 00155 bool nav_start(srs_assisted_arm_navigation_msgs::ArmNavStart::Request &req, srs_assisted_arm_navigation_msgs::ArmNavStart::Response &res); 00156 00157 protected: 00159 rviz::WindowManagerInterface * m_wmi; 00160 00161 typedef std::map<std::string, wxButton *> ButtonsMap; 00162 00163 ButtonsMap buttons_; 00164 00165 /*wxSlider * m_slider_roll; 00166 wxSlider * m_slider_pitch; 00167 wxSlider * m_slider_yaw;*/ 00168 00169 00170 wxChoice *presets_choice_; 00171 00172 wxButton * m_button_switch; 00173 00174 wxStaticText *m_text_status; 00175 wxStaticText *m_text_action_; 00176 wxTextCtrl *m_text_task_; 00177 00178 void setTask(std::string text); 00179 00180 wxStaticText *m_text_predef_pos_; 00181 //wxStaticText *m_text_object; 00182 //wxStaticText *m_text_timeout; 00183 //wxStaticText *m_text_dist; // distance to closest pregrasp position 00184 00185 //wxToggleButton *m_lock_cmap_; 00186 00187 ros::ServiceServer service_start_; 00188 ros::ServiceServer service_timeout_; 00189 00190 wxWindow *parent_; 00191 00192 /*bool goal_away; 00193 bool goal_pregrasp;*/ 00194 00195 bool wait_for_start_; 00196 00197 uint8_t traj_executed_; 00198 00199 bool allow_repeat_; 00200 //bool cmap_locked_; 00201 00202 std::string object_name_; 00203 std::string action_; 00204 00205 //cob_client * cob_script; 00206 00207 //bool gripper_initialized; 00208 00209 void setButton(std::string but, bool state); 00210 00211 void stateCallback(const srs_assisted_arm_navigation_msgs::AssistedArmNavigationState::ConstPtr& msg); 00212 00213 std::vector<Preset> presets_; 00214 00215 00216 private: 00217 00218 DECLARE_EVENT_TABLE(); 00219 00220 enum {G_OPEN,G_CLOSE}; 00221 00222 //enum {S_INIT, S_NEW, S_PLAN, S_EXECUTE, S_PLAY, S_ADJUST, S_RESET, S_SUCCESS, S_FAILED, S_GOPEN, S_GCLOSE, S_LOOKAROUND, S_REFRESH}; 00223 00228 //void GripperThread(unsigned char action); 00229 void NewThread(); 00230 void PlanThread(); 00231 void ExecuteThread(); 00232 //void LookThread(); 00233 00234 //boost::thread t_gripper; 00235 boost::thread t_new; 00236 boost::thread t_plan; 00237 boost::thread t_execute; 00238 //boost::thread t_look; 00239 00240 boost::thread t_move_rel; 00241 boost::thread t_move_abs; 00242 00243 bool checkService(std::string srv); 00244 00245 //bool cob_script_inited; 00246 00247 bool aco_; 00248 00249 bool initialized_; 00250 00251 bool state_received_; 00252 00253 bool spacenav_pos_lock_; 00254 bool spacenav_or_lock_; 00255 00256 ros::Subscriber arm_nav_state_sub_; 00257 00258 wxCheckBox *m_pos_lock_; 00259 wxCheckBox *m_or_lock_; 00260 00261 wxCheckBox *m_aco_; 00262 00263 //wxToggleButton *b_switch_; 00264 00265 boost::thread t_gui_update; 00266 void GuiUpdateThread(); 00267 bool stop_gui_thread_; 00268 00269 bool planning_started_; 00270 bool trajectory_planned_; 00271 00272 bool arm_nav_called_; 00273 00274 }; 00275 00276 } // namespace 00277 00278 #endif // BUT_ARMNAVIGATION_H