SimulationWindow.py
Go to the documentation of this file.
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))


ric_board
Author(s): RoboTiCan
autogenerated on Fri Oct 27 2017 03:02:31