Go to the documentation of this file.00001
00002
00003
00004
00005
00006 import os
00007 from python_qt_binding import loadUi
00008 from qt_gui.plugin import Plugin
00009 from QtGui import QWidget
00010 import rospy
00011 import rospkg
00012 from sr_robot_msgs.srv import RobotTeachMode, RobotTeachModeRequest, RobotTeachModeResponse
00013
00014
00015 class SrGuiTeachMode(Plugin):
00016 """
00017 A rosgui plugin for loading the different controllers
00018 """
00019
00020 def __init__(self, context):
00021 super(SrGuiTeachMode, self).__init__(context)
00022 self.setObjectName('SrGuiTeachMode')
00023
00024 self._publisher = None
00025 self._widget = QWidget()
00026
00027 ui_file = os.path.join(rospkg.RosPack().get_path('sr_gui_teach_mode'), 'uis', 'SrTeachMode.ui')
00028 loadUi(ui_file, self._widget)
00029 self._widget.setObjectName('SrTeachModeUi')
00030 context.add_widget(self._widget)
00031
00032 self._rh_teach_buttons = []
00033 self._lh_teach_buttons = []
00034 self._ra_teach_buttons = []
00035 self._la_teach_buttons = []
00036
00037
00038 self._rh_teach_buttons.append(self._widget.radioButton_1)
00039 self._rh_teach_buttons.append(self._widget.radioButton_2)
00040 self._rh_teach_buttons.append(self._widget.radioButton_3)
00041 self._widget.radioButton_1.toggled.connect(self.teach_mode_button_toggled_rh)
00042 self._widget.radioButton_2.toggled.connect(self.teach_mode_button_toggled_rh)
00043 self._widget.radioButton_3.toggled.connect(self.teach_mode_button_toggled_rh)
00044
00045
00046 self._lh_teach_buttons.append(self._widget.radioButton_4)
00047 self._lh_teach_buttons.append(self._widget.radioButton_5)
00048 self._lh_teach_buttons.append(self._widget.radioButton_6)
00049 self._widget.radioButton_4.toggled.connect(self.teach_mode_button_toggled_lh)
00050 self._widget.radioButton_5.toggled.connect(self.teach_mode_button_toggled_lh)
00051 self._widget.radioButton_6.toggled.connect(self.teach_mode_button_toggled_lh)
00052
00053
00054 self._ra_teach_buttons.append(self._widget.radioButton_7)
00055 self._ra_teach_buttons.append(self._widget.radioButton_8)
00056 self._ra_teach_buttons.append(self._widget.radioButton_9)
00057 self._widget.radioButton_7.toggled.connect(self.teach_mode_button_toggled_ra)
00058 self._widget.radioButton_8.toggled.connect(self.teach_mode_button_toggled_ra)
00059 self._widget.radioButton_9.toggled.connect(self.teach_mode_button_toggled_ra)
00060
00061
00062 self._la_teach_buttons.append(self._widget.radioButton_10)
00063 self._la_teach_buttons.append(self._widget.radioButton_11)
00064 self._la_teach_buttons.append(self._widget.radioButton_12)
00065 self._widget.radioButton_10.toggled.connect(self.teach_mode_button_toggled_la)
00066 self._widget.radioButton_11.toggled.connect(self.teach_mode_button_toggled_la)
00067 self._widget.radioButton_12.toggled.connect(self.teach_mode_button_toggled_la)
00068
00069 def teach_mode_button_toggled_rh(self, checked):
00070 self.teach_mode_button_toggled(checked, "right_hand", self._rh_teach_buttons)
00071
00072 def teach_mode_button_toggled_lh(self, checked):
00073 self.teach_mode_button_toggled(checked, "left_hand", self._lh_teach_buttons)
00074
00075 def teach_mode_button_toggled_ra(self, checked):
00076 self.teach_mode_button_toggled(checked, "right_arm", self._ra_teach_buttons)
00077
00078 def teach_mode_button_toggled_la(self, checked):
00079 self.teach_mode_button_toggled(checked, "left_arm", self._la_teach_buttons)
00080
00081 def teach_mode_button_toggled(self, checked, robot, buttons):
00082 if checked:
00083 if buttons[0].isChecked():
00084 mode = RobotTeachModeRequest.TRAJECTORY_MODE
00085 elif buttons[1].isChecked():
00086 mode = RobotTeachModeRequest.TEACH_MODE
00087 elif buttons[2].isChecked():
00088 mode = RobotTeachModeRequest.POSITION_MODE
00089 else:
00090 rospy.logerr("None of the buttons checked for robot %s", robot)
00091 return
00092
00093 rospy.loginfo("Changing robot %s to mode %d", robot, mode)
00094 self.change_teach_mode(mode, robot)
00095
00096 @staticmethod
00097 def change_teach_mode(mode, robot):
00098
00099 teach_mode_client = rospy.ServiceProxy('/teach_mode', RobotTeachMode)
00100
00101 req = RobotTeachModeRequest()
00102 req.teach_mode = mode
00103 req.robot = robot
00104 try:
00105 resp = teach_mode_client(req)
00106 if resp.result == RobotTeachModeResponse.ERROR:
00107 rospy.logerr("Failed to change robot %s to mode %d", robot, mode)
00108 else:
00109 rospy.loginfo("Changed robot %s to mode %d Result = %d", robot, mode, resp.result)
00110 except rospy.ServiceException:
00111 rospy.logerr("Failed to call service teach_mode")