00001 import GUI.MainWindow 00002 00003 __author__ = 'tom' 00004 from PyQt4.QtGui import * 00005 from GUI.Schemes.gazeboGui import Ui_gazebo_gui 00006 from BAL.Interface.DeviceFrame import SERVO, BATTERY, SWITCH, IMU, PPM, GPS, RELAY, URF, CLOSE_LOP_ONE, CLOSE_LOP_TWO, \ 00007 OPEN_LOP, DIFF_CLOSE, DIFF_OPEN, EX_DEV, HOKUYO, OPRNNI, USBCAM, DIFF_CLOSE_FOUR, ROBOT_MODEL, SLAM, Keyboard, \ 00008 JOYSTICK, SMOOTHER 00009 import rospkg 00010 import pickle 00011 from PyQt4.QtCore import Qt 00012 from lxml.etree import Element, SubElement 00013 00014 00015 class SimulationWindow(QDialog, Ui_gazebo_gui): 00016 def __init__(self, parent=None): 00017 super(SimulationWindow, self).__init__(parent) 00018 self.setupUi(self) 00019 self._devs = [] 00020 00021 self.loadButton.clicked.connect(self.loadEvent) 00022 self.launchButton.clicked.connect(self.launchEvent) 00023 self.devList.itemClicked.connect(self.listChangeEvent) 00024 00025 self.loadFile() 00026 00027 self.showSimDetail() 00028 00029 def listChangeEvent(self, item): 00030 dev = self._devs[self.devList.row(item)] 00031 if item.checkState() > 0: 00032 dev[1] = True 00033 else: 00034 dev[1] = False 00035 00036 def loadFile(self): 00037 self._devs = [] 00038 pkg = rospkg.RosPack().get_path('ric_board') 00039 fileName = QFileDialog.getOpenFileName(self, self.tr("Open file"), "%s/DATA" % pkg, self.tr("RiC File (*.RIC)")) 00040 if fileName == '': return 00041 00042 devices = pickle.load(open(fileName))[2] 00043 self.arrangeDevices(devices) 00044 00045 def arrangeDevices(self, devices): 00046 for dev in devices: 00047 if dev['type'] in [DIFF_CLOSE, IMU, OPRNNI, HOKUYO, USBCAM, URF]: 00048 self._devs.append([dev, True]) 00049 00050 def showSimDetail(self): 00051 for dev in self._devs: 00052 if dev[0]['type'] == OPRNNI: 00053 listItem = QListWidgetItem('OpenniCamera') 00054 else: 00055 listItem = QListWidgetItem(dev[0]['name']) 00056 00057 listItem.setCheckState(Qt.Checked) 00058 self.devList.addItem(listItem) 00059 00060 def clearLst(self): 00061 size = self.devList.count() 00062 for i in xrange(size): 00063 self.devList.takeItem(0) 00064 00065 def loadEvent(self): 00066 self.loadFile() 00067 self.clearLst() 00068 self.showSimDetail() 00069 00070 def launchEvent(self): 00071 root = Element('launch') 00072 00073 SubElement(root, 'arg', { 00074 'name': 'paused', 00075 'default': 'false' 00076 }) 00077 SubElement(root, 'arg', { 00078 'name': 'use_sim_time', 00079 'default': 'true' 00080 }) 00081 SubElement(root, 'arg', { 00082 'name': 'gui', 00083 'default': 'true' 00084 }) 00085 SubElement(root, 'arg', { 00086 'name': 'headless', 00087 'default': 'false' 00088 }) 00089 SubElement(root, 'arg', { 00090 'name': 'debug', 00091 'default': 'false' 00092 }) 00093 00094 world = SubElement(root, 'include', dict(file='$(find gazebo_ros)/launch/empty_world.launch')) 00095 SubElement(world, 'arg', { 00096 'name': 'debug', 00097 'value': '$(arg debug)' 00098 }) 00099 SubElement(world, 'arg', { 00100 'name': 'gui', 00101 'value': '$(arg gui)' 00102 }) 00103 SubElement(world, 'arg', { 00104 'name': 'paused', 00105 'value': '$(arg paused)' 00106 }) 00107 SubElement(world, 'arg', { 00108 'name': 'use_sim_time', 00109 'value': '$(arg use_sim_time)' 00110 }) 00111 SubElement(world, 'arg', { 00112 'name': 'headless', 00113 'value': '$(arg headless)' 00114 }) 00115 00116 SubElement(root, 'param', { 00117 'name': 'robot_description', 00118 'command': "$(find xacro)/xacro.py '$(find ric_gazebo)/robots/komodo/komodo.xacro' ns:='init' color_name:='Grey'" 00119 }) 00120 00121 haveCam = 'false' 00122 haveOpenNi = 'false' 00123 haveLaser = 'false' 00124 haveUrf = 'false' 00125 haveDiff = 'false' 00126 haveImu = 'false' 00127 00128 for dev in self._devs: 00129 if dev[1]: 00130 if dev[0]['type'] == DIFF_CLOSE: haveDiff = 'true' 00131 if dev[0]['type'] == IMU: haveImu = 'true' 00132 if dev[0]['type'] == OPRNNI: haveOpenNi = 'true' 00133 if dev[0]['type'] == HOKUYO: haveLaser = 'true' 00134 if dev[0]['type'] == USBCAM: haveCam = 'true' 00135 if dev[0]['type'] == URF: haveUrf = 'true' 00136 00137 amount = self.numberOfRobotsSpinBox.value() 00138 for i in xrange(amount): 00139 robotFile = SubElement(root, 'include', {'file': '$(find ric_gazebo)/launch/spawn_komodo.launch'}) 00140 SubElement(robotFile, 'arg', dict(name='name', value='komodo_%d' % (i + 1))) 00141 SubElement(robotFile, 'arg', dict(name='color', value='White')) 00142 SubElement(robotFile, 'arg', dict(name='x', value='0.0')) 00143 SubElement(robotFile, 'arg', dict(name='y', value='%d.0' % i)) 00144 SubElement(robotFile, 'arg', dict(name='z', value='0.1')) 00145 SubElement(robotFile, 'arg', dict(name='R', value='0.0')) 00146 SubElement(robotFile, 'arg', dict(name='P', value='0.0')) 00147 SubElement(robotFile, 'arg', dict(name='Y', value='0.0')) 00148 SubElement(robotFile, 'arg', dict(name='arm_camera', value='true')) 00149 00150 SubElement(robotFile, 'arg', dict(name='front_camera', value=haveCam)) 00151 SubElement(robotFile, 'arg', dict(name='isDiff', value=haveDiff)) 00152 SubElement(robotFile, 'arg', dict(name='depth_camera', value=haveOpenNi)) 00153 SubElement(robotFile, 'arg', dict(name='laser_scanner', value=haveLaser)) 00154 SubElement(robotFile, 'arg', dict(name='urf', value=haveUrf)) 00155 SubElement(robotFile, 'arg', dict(name='imu', value=haveImu)) 00156 open('/home/tom/test.launch', 'w').write(GUI.MainWindow.prettify(root))