Go to the documentation of this file.00001 import shlex
00002
00003 __author__ = 'tom'
00004 from PyQt4.QtGui import *
00005 from GUI.Scheme.imuCalib import Ui_imuCalib
00006 import rospy
00007 from ric_board.srv._calibIMU import calibIMU, calibIMURequest
00008 import subprocess
00009
00010
00011 class MainWindow(QDialog, Ui_imuCalib):
00012 def __init__(self, parent=None):
00013 super(MainWindow, self).__init__(parent)
00014 self.setupUi(self)
00015 self._isStartCalib = False
00016
00017
00018 self.calibButton.clicked.connect(self.startOrSaveCalib)
00019 self.refreshButton.clicked.connect(self.refresh)
00020
00021 self.refresh()
00022
00023 def refresh(self):
00024 try:
00025 rospy.wait_for_service('/imu_Calibration', timeout=0.2)
00026 self.status.setText("Connected")
00027
00028 except rospy.ROSException:
00029 self.status.setText("Not connected")
00030
00031 def startOrSaveCalib(self):
00032 try:
00033 if not self._isStartCalib:
00034 rospy.wait_for_service('/imu_Calibration', timeout=0.2)
00035 serviceCallBack = rospy.ServiceProxy('/imu_Calibration', calibIMU)
00036
00037 request = calibIMURequest()
00038 request.status = calibIMURequest.START_CALIB
00039 request.xMax = float(self.maxXLineEdit.text())
00040 request.yMax = float(self.maxYLineEdit.text())
00041 request.zMax = float(self.maxZLineEdit.text())
00042 request.xMin = float(self.minXLineEdit.text())
00043 request.yMin = float(self.minYLineEdit.text())
00044 request.zMin = float(self.minZLineEdit.text())
00045
00046 serviceCallBack(request)
00047
00048 self.calibButton.setText("Save calibration")
00049
00050 subprocess.Popen(shlex.split('rqt_plot /imu_calib_publisher/x'))
00051 subprocess.Popen(shlex.split('rqt_plot /imu_calib_publisher/y'))
00052 subprocess.Popen(shlex.split('rqt_plot /imu_calib_publisher/z'))
00053
00054 self._isStartCalib = True
00055 else:
00056 rospy.wait_for_service('/imu_Calibration', timeout=0.2)
00057 serviceCallBack = rospy.ServiceProxy('/imu_Calibration', calibIMU)
00058
00059 request = calibIMURequest()
00060 request.status = calibIMURequest.STOP_CALIB
00061
00062 serviceCallBack(request)
00063
00064 self.calibButton.setText("Start calibration")
00065
00066 self._isStartCalib = False
00067 except rospy.ROSException:
00068 self.status.setText("Not connected")
00069 except:
00070 QMessageBox.critical(self, "Error", "All fields must be float type.")