def loadRobotModel(name, view=None, parent='planning', urdfFile=None, color=None, visible=True): if not urdfFile: urdfFile = urdfConfig['default'] if isinstance(parent, str): parent = om.getOrCreateContainer(parent) model = loadRobotModelFromFile(urdfFile) if not model: raise Exception('Error loading robot model from file: %s' % urdfFile) obj = RobotModelItem(model) om.addToObjectModel(obj, parent) obj.setProperty('Visible', visible) obj.setProperty('Name', name) obj.setProperty('Color', color or getRobotGrayColor()) if view is not None: obj.addToView(view) jointController = jointcontrol.JointController([obj], fixedPointFile) jointController.setNominalPose() return obj, jointController
def promotePolyDataItem(cls, obj): parent = obj.parent() view = obj.views[0] name = obj.getProperty('Name') polyData = obj.polyData props = obj.properties._properties childFrame = obj.getChildFrame() if childFrame: t = transformUtils.copyFrame(childFrame.transform) else: t = vtk.vtkTransform() t.PostMultiply() t.Translate(filterUtils.computeCentroid(polyData)) polyData = filterUtils.transformPolyData(polyData, t.GetLinearInverse()) children = [c for c in obj.children() if c is not childFrame] meshId = cls.getMeshManager().add(polyData) om.removeFromObjectModel(obj) obj = MeshAffordanceItem(name, view) obj.setProperty('Filename', meshId) om.addToObjectModel(obj, parentObj=parent) frame = vis.addChildFrame(obj) frame.copyFrame(t) for child in children: om.addToObjectModel(child, parentObj=obj) obj.syncProperties(props) return obj
def openUrdf(filename, view): model = loadRobotModelFromFile(filename) if model: model = RobotModelItem(model) om.addToObjectModel(model) model.addToView(view) return model
def showPolyData(polyData, name, color=None, colorByName=None, colorByRange=None, alpha=1.0, visible=True, view=None, parent='segmentation', cls=None): view = view or app.getCurrentRenderView() assert view cls = cls or PolyDataItem item = cls(name, polyData, view) if isinstance(parent, str): parentObj = om.getOrCreateContainer(parent) else: parentObj = parent om.addToObjectModel(item, parentObj) item.setProperty('Visible', visible) item.setProperty('Alpha', alpha) if colorByName and colorByName not in item.getArrayNames(): print 'showPolyData(colorByName=%s): array not found' % colorByName colorByName = None if colorByName: item.setProperty('Color By', colorByName) item.colorBy(colorByName, colorByRange) else: color = [1.0, 1.0, 1.0] if color is None else color item.setProperty('Color', [float(c) for c in color]) item.colorBy(None) return item
def _addPlanItem(plan, name, itemClass): assert plan is not None item = itemClass(name) item.plan = plan om.removeFromObjectModel(om.findObjectByName(name)) om.addToObjectModel(item, om.getOrCreateContainer('segmentation')) return item
def _loadAffordanceFromDescription(self, desc): className = desc['classname'] cls = getattr(affordanceitems, className) aff = cls(desc['Name'], self.view) om.addToObjectModel(aff, parentObj=om.getOrCreateContainer('affordances')) vis.addChildFrame(aff) aff.loadDescription(desc, copyMode=aff.COPY_MODE_ALL) self.registerAffordance(aff, notify=False)
def __init__(self): om.init() self.view = PythonQt.dd.ddQVTKWidgetView() # init grid self.gridObj = vis.showGrid(self.view, parent='scene') self.gridObj.setProperty('Surface Mode', 'Surface with edges') self.gridObj.setProperty('Color', [0,0,0]) self.gridObj.setProperty('Alpha', 0.1) # init view options self.viewOptions = vis.ViewOptionsItem(self.view) om.addToObjectModel(self.viewOptions, parentObj=om.findObjectByName('scene')) self.viewOptions.setProperty('Background color', [0.3, 0.3, 0.35]) self.viewOptions.setProperty('Background color 2', [0.95,0.95,1]) # setup camera applogic.setCameraTerrainModeEnabled(self.view, True) applogic.resetCamera(viewDirection=[-1, 0, -0.3], view=self.view) # add view behaviors viewBehaviors = viewbehaviors.ViewBehaviors(self.view) applogic._defaultRenderView = self.view self.mainWindow = QtGui.QMainWindow() self.mainWindow.setCentralWidget(self.view) self.mainWindow.resize(768 * (16/9.0), 768) self.mainWindow.setWindowTitle('Drake Visualizer') self.mainWindow.setWindowIcon(QtGui.QIcon(':/images/drake_logo.png')) self.mainWindow.show() self.drakeVisualizer = DrakeVisualizer(self.view) self.lcmglManager = lcmgl.LCMGLManager(self.view) if lcmgl.LCMGL_AVAILABLE else None self.screenGrabberPanel = ScreenGrabberPanel(self.view) self.screenGrabberDock = self.addWidgetToDock(self.screenGrabberPanel.widget, QtCore.Qt.RightDockWidgetArea) self.screenGrabberDock.setVisible(False) self.cameraBookmarksPanel = camerabookmarks.CameraBookmarkWidget(self.view) self.cameraBookmarksDock = self.addWidgetToDock(self.cameraBookmarksPanel.widget, QtCore.Qt.RightDockWidgetArea) self.cameraBookmarksDock.setVisible(False) model = om.getDefaultObjectModel() model.getTreeWidget().setWindowTitle('Scene Browser') model.getPropertiesPanel().setWindowTitle('Properties Panel') model.setActiveObject(self.viewOptions) self.sceneBrowserDock = self.addWidgetToDock(model.getTreeWidget(), QtCore.Qt.LeftDockWidgetArea) self.propertiesDock = self.addWidgetToDock(self.wrapScrollArea(model.getPropertiesPanel()), QtCore.Qt.LeftDockWidgetArea) self.sceneBrowserDock.setVisible(False) self.propertiesDock.setVisible(False) applogic.addShortcut(self.mainWindow, 'Ctrl+Q', self.applicationInstance().quit) applogic.addShortcut(self.mainWindow, 'F1', self._toggleObjectModel) applogic.addShortcut(self.mainWindow, 'F2', self._toggleScreenGrabber) applogic.addShortcut(self.mainWindow, 'F3', self._toggleCameraBookmarks) applogic.addShortcut(self.mainWindow, 'F8', applogic.showPythonConsole)
def init(view): global KinectQueue, _kinectItem, _kinectSource KinectQueue = PythonQt.dd.ddKinectLCM(lcmUtils.getGlobalLCMThread()) KinectQueue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file) _kinectSource = KinectSource(view, KinectQueue) _kinectSource.start() sensorsFolder = om.getOrCreateContainer('sensors') _kinectItem = KinectItem(_kinectSource) om.addToObjectModel(_kinectItem, sensorsFolder)
def init(view): global PointCloudQueue, _pointcloudItem, _pointcloudSource PointCloudQueue = PythonQt.dd.ddPointCloudLCM(lcmUtils.getGlobalLCMThread()) PointCloudQueue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file) _pointcloudSource = PointCloudSource(view, PointCloudQueue) _pointcloudSource.start() sensorsFolder = om.getOrCreateContainer('sensors') _pointcloudItem = PointCloudItem(_pointcloudSource) om.addToObjectModel(_pointcloudItem, sensorsFolder)
def newTerrainItem(self, tform, uid=None, region=None): if uid is None: uid = self.getNewUID() elif uid in self.regions: return self.regions[uid] view = app.getCurrentRenderView() item = TerrainRegionItem(uid, view, tform, self, region) parentObj = om.getOrCreateContainer('Safe terrain regions') om.addToObjectModel(item, parentObj) self.regions[uid] = item return item
def init(view): global PointCloudQueue, _pointcloudItem, _pointcloudSource PointCloudQueue = PythonQt.dd.ddPointCloudLCM( lcmUtils.getGlobalLCMThread()) PointCloudQueue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file) _pointcloudSource = PointCloudSource(view, PointCloudQueue) _pointcloudSource.start() sensorsFolder = om.getOrCreateContainer('sensors') _pointcloudItem = PointCloudItem(_pointcloudSource) om.addToObjectModel(_pointcloudItem, sensorsFolder)
def addLink(self, link, robotNum, linkName): self.robots.setdefault(robotNum, {})[linkName] = link linkFolder = self.getLinkFolder(robotNum, linkName) for geom in link.geometry: geom.polyDataItem.addToView(self.view) om.addToObjectModel(geom.polyDataItem, parentObj=linkFolder) if linkName == 'world': #geom.polyDataItem.actor.SetUseBounds(False) #geom.polyDataItem.actor.GetProperty().LightingOff() geom.polyDataItem.actor.GetProperty().SetSpecular(0.0) else: geom.polyDataItem.actor.GetProperty().SetSpecular(0.9) geom.polyDataItem.actor.GetProperty().SetSpecularPower(20)
def showFrame(frame, name, view=None, parent='segmentation', scale=0.35, visible=True): view = view or app.getCurrentRenderView() assert view if isinstance(parent, str): parentObj = om.getOrCreateContainer(parent) else: parentObj = parent item = FrameItem(name, frame, view) om.addToObjectModel(item, parentObj) item.setProperty('Visible', visible) item.setProperty('Scale', scale) return item
def showText(text, name, fontSize=18, position=(10, 10), parent=None, view=None): view = view or app.getCurrentRenderView() assert view item = TextItem(name, text, view=view) item.setProperty('Font Size', fontSize) item.setProperty('Position', list(position)) if isinstance(parent, str): parentObj = om.getOrCreateContainer(parent) else: parentObj = parent om.addToObjectModel(item, parentObj) return item
def main(): objectTree = QtGui.QTreeWidget() propertiesPanel = PythonQt.dd.ddPropertiesPanel() om.init(objectTree, propertiesPanel) p = om.ObjectModelItem("test parent item") p.addProperty("foo", 1) p.addProperty("Visible", True) om.addToObjectModel(p) c = om.ObjectModelItem("test child item") om.addToObjectModel(c, p) assert om.findObjectByName("test parent item") == p assert om.findObjectByName("test child item") == c assert p.children()[0] == c assert c.children() == [] objectTree.show() propertiesPanel.show() objectTree2 = QtGui.QTreeWidget() propertiesPanel2 = PythonQt.dd.ddPropertiesPanel() tree = om.ObjectModelTree() tree.init(objectTree2, propertiesPanel2) p2 = om.ObjectModelItem("test parent item 2") p2.addProperty("foo2", 1) p2.addProperty("Visible", True) tree.addToObjectModel(p2) c2 = om.ObjectModelItem("test child item 2") tree.addToObjectModel(c2, p2) assert tree.findObjectByName("test parent item 2") == p2 assert tree.findObjectByName("test child item 2") == c2 assert p2.children()[0] == c2 assert c2.children() == [] objectTree2.show() propertiesPanel2.show() startApplication(enableQuitTimer=True)
def main(): objectTree = QtGui.QTreeWidget() propertiesPanel = PythonQt.dd.ddPropertiesPanel() om.init(objectTree, propertiesPanel) p = om.ObjectModelItem('test parent item') p.addProperty('foo', 1) p.addProperty('Visible', True) om.addToObjectModel(p) c = om.ObjectModelItem('test child item') om.addToObjectModel(c, p) assert om.findObjectByName('test parent item') == p assert om.findObjectByName('test child item') == c assert p.children()[0] == c assert c.children() == [] objectTree.show() propertiesPanel.show() objectTree2 = QtGui.QTreeWidget() propertiesPanel2 = PythonQt.dd.ddPropertiesPanel() tree = om.ObjectModelTree() tree.init(objectTree2, propertiesPanel2) p2 = om.ObjectModelItem('test parent item 2') p2.addProperty('foo2', 1) p2.addProperty('Visible', True) tree.addToObjectModel(p2) c2 = om.ObjectModelItem('test child item 2') tree.addToObjectModel(c2, p2) assert tree.findObjectByName('test parent item 2') == p2 assert tree.findObjectByName('test child item 2') == c2 assert p2.children()[0] == c2 assert c2.children() == [] objectTree2.show() propertiesPanel2.show() startApplication(enableQuitTimer=True)
def __init__(self, view, _PointCloudQueue): self.view = view self.PointCloudQueue = _PointCloudQueue self.visible = True self.p = vtk.vtkPolyData() utime = PointCloudQueue.getPointCloudFromPointCloud(self.p) self.polyDataObj = vis.PolyDataItem('pointcloud source', shallowCopy(self.p), view) self.polyDataObj.actor.SetPickable(1) self.polyDataObj.initialized = False om.addToObjectModel(self.polyDataObj) self.queue = PythonQt.dd.ddBotImageQueue(lcmUtils.getGlobalLCMThread()) self.queue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file) self.targetFps = 30 self.timerCallback = TimerCallback(targetFps=self.targetFps) self.timerCallback.callback = self._updateSource
def init(view): global _multisenseItem global multisenseDriver m = MultiSenseSource(view) m.start() multisenseDriver = m sensorsFolder = om.getOrCreateContainer('sensors') _multisenseItem = MultisenseItem(m) om.addToObjectModel(_multisenseItem, sensorsFolder) useMapServer = hasattr(drc, 'vtkMapServerSource') if useMapServer: mapServerSource = MapServerSource(view, callbackFunc=view.render) mapsServerContainer = om.ObjectModelItem('Map Server', icon=om.Icons.Robot) mapsServerContainer.source = mapServerSource om.addToObjectModel(mapsServerContainer, parentObj=sensorsFolder) mapServerSource.start() else: mapServerSource = None spindleDebug = SpindleAxisDebug(multisenseDriver) spindleDebug.addToView(view) om.addToObjectModel(spindleDebug, sensorsFolder) return multisenseDriver, mapServerSource
def __init__(self, view, _KinectQueue): self.view = view self.KinectQueue = _KinectQueue self.visible = True self.p = vtk.vtkPolyData() utime = KinectQueue.getPointCloudFromKinect(self.p) self.polyDataObj = vis.PolyDataItem('kinect source', shallowCopy(self.p), view) self.polyDataObj.actor.SetPickable(1) self.polyDataObj.initialized = False om.addToObjectModel(self.polyDataObj) self.queue = PythonQt.dd.ddBotImageQueue(lcmUtils.getGlobalLCMThread()) self.queue.init(lcmUtils.getGlobalLCMThread(), drcargs.args().config_file) self.targetFps = 30 self.timerCallback = TimerCallback(targetFps=self.targetFps) self.timerCallback.callback = self._updateSource
def createView(self, useGrid=True): view = PythonQt.dd.ddQVTKWidgetView() view.resize(600, 400) applogic.setCameraTerrainModeEnabled(view, True) if useGrid: self.gridObj = vis.showGrid(view, parent='scene') self.viewOptions = vis.ViewOptionsItem(view) om.addToObjectModel(self.viewOptions, parentObj=om.findObjectByName('scene')) applogic.resetCamera(viewDirection=[-1,-1,-0.3], view=view) viewBehaviors = viewbehaviors.ViewBehaviors(view) applogic._defaultRenderView = view applogic.addShortcut(view, 'Ctrl+Q', self.quit) applogic.addShortcut(view, 'F8', self.showPythonConsole) applogic.addShortcut(view, 'F1', self.showObjectModel) view.setWindowIcon(om.Icons.getIcon(om.Icons.Robot)) view.setWindowTitle('View') return view
def updatePolyData(self, viewId, polyData): obj = self.polyDataObjects.get(viewId) if obj not in om.getObjects(): obj = None if not obj: hiddenMapIds = [9999] visibleDefault = False if viewId in hiddenMapIds else True obj = vis.PolyDataItem(self.getNameForViewId(viewId), polyData, self.view) obj.setProperty('Visible', visibleDefault) if obj._isPointCloud(): obj.setProperty('Color', [1, 1, 1]) obj.setProperty('Alpha', 0.5) else: obj.setProperty('Color', [0, 0.68, 1]) if viewId == lcmdrc.data_request_t.HEIGHT_MAP_SCENE: obj.setProperty('Surface Mode', 'Wireframe') folder = om.findObjectByName('Map Server') folder.addProperty('Min Range', self.reader.GetDistanceRange()[0], attributes=om.PropertyAttributes(decimals=2, minimum=0.0, maximum=100.0, singleStep=0.25, hidden=False)) folder.addProperty('Max Range', self.reader.GetDistanceRange()[1], attributes=om.PropertyAttributes(decimals=2, minimum=0.0, maximum=100.0, singleStep=0.25, hidden=False)) folder.addProperty('Edge Filter Angle', self.reader.GetEdgeAngleThreshold(), attributes=om.PropertyAttributes(decimals=0, minimum=0.0, maximum=60.0, singleStep=1, hidden=False)) om.addToObjectModel(obj, folder) om.expand(folder) self.folder = folder self.polyDataObjects[viewId] = obj else: obj.setPolyData(polyData) if self.colorizeCallback: self.colorizeCallback(obj)
def createView(self, useGrid=True): view = PythonQt.dd.ddQVTKWidgetView() view.resize(600, 400) applogic.setCameraTerrainModeEnabled(view, True) if useGrid: self.gridObj = vis.showGrid(view, parent='scene') self.viewOptions = vis.ViewOptionsItem(view) om.addToObjectModel(self.viewOptions, parentObj=om.findObjectByName('scene')) applogic.resetCamera(viewDirection=[-1, -1, -0.3], view=view) viewBehaviors = viewbehaviors.ViewBehaviors(view) applogic._defaultRenderView = view applogic.addShortcut(view, 'Ctrl+Q', self.quit) applogic.addShortcut(view, 'F8', self.showPythonConsole) applogic.addShortcut(view, 'F1', self.showObjectModel) view.setWindowIcon(om.Icons.getIcon(om.Icons.Robot)) view.setWindowTitle('View') return view
def addDrawObject(self, name, msgBytes): actor = vtk.vtkLCMGLProp() obj = LCMGLObject(name, actor) om.addToObjectModel(obj, om.getOrCreateContainer('LCM GL')) obj.addToView(self.view) return obj
def openOtdf(filename, view): model = OtdfModelItem(filename) om.addToObjectModel(model) model.addToView(view) return model
def main(): om.init(QtGui.QTreeWidget(), PythonQt.dd.ddPropertiesPanel()) # create a frame t1 = vtk.vtkTransform() f1 = vis.FrameItem('frame 1', t1, view=None) om.addToObjectModel(f1) # test object model lookup assert om.findObjectByName('frame 1') assert om.findObjectByName('frame 2') is None # test reference cleanup f1Ref = weakref.ref(f1) assert f1Ref() is f1 om.removeFromObjectModel(f1) del f1 assert f1Ref() is None # add frame again f1 = vis.FrameItem('frame 1', t1, view=None) om.addToObjectModel(f1) # create second frame t2 = vtk.vtkTransform() f2 = vis.FrameItem('frame 2', t2, view=None) om.addToObjectModel(f2) # test transform reference is input transform assert f2.transform is t2 # test frame sync frameSync = vis.FrameSync() frameSync.addFrame(f1) frameSync.addFrame(f2) t1.Translate(10,0,0) t1.Modified() assert t2.GetPosition() == (10.0, 0.0, 0.0) # test frame sync cleanup f1Ref = weakref.ref(f1) assert f1Ref() is f1 assert len(frameSync.frames) == 2 om.removeFromObjectModel(f1) del f1 assert f1Ref() is None assert len(frameSync.frames) == 2 t2.Translate(10,0,0) t2.Modified() assert t2.GetPosition() == (20.0, 0.0, 0.0) assert len(frameSync.frames) == 1 # add frame again f1 = vis.FrameItem('frame 1', t1, view=None) om.addToObjectModel(f1) frameSync.addFrame(f1) t1.Translate(0,5,0) t1.Modified() assert t1.GetPosition() == (10.0, 5.0, 0.0) assert t2.GetPosition() == (20.0, 5.0, 0.0) frameSync.removeFrame(f1) t1.Translate(0,5,0) t1.Modified() assert t1.GetPosition() == (10.0, 10.0, 0.0) assert t2.GetPosition() == (20.0, 5.0, 0.0) # this has to be wrapped in a function, otherwise the exception # handling holds a reference to the FrameSync object which breaks # the delete test at the end def testException(fs): try: fs.removeFrame('test') except KeyError: pass else: assert False testException(frameSync) # test cleanup f1Ref = weakref.ref(f1) om.removeFromObjectModel(f1) del f1 assert f1Ref() is None t1Ref = weakref.ref(t1) del t1 assert t1Ref() is None # add frame again t1 = vtk.vtkTransform() f1 = vis.FrameItem('frame 1', t1, view=None) om.addToObjectModel(f1) frameSync.addFrame(f1) t1.Translate(0,0,10) t1.Modified() assert t2.GetPosition() == (20.0, 5.0, 10.0) # verify FrameSync object can be deleted frameSyncRef = weakref.ref(frameSync) del frameSync assert frameSyncRef() is None # verify frames are no longer synced after FrameSync is deleted t1.Translate(0,0,10) t1.Modified() assert t2.GetPosition() == (20.0, 5.0, 10.0) sys.exit(0)
if usePerception: segmentationpanel.init() cameraview.init() colorize.init() cameraview.cameraView.rayCallback = segmentation.extractPointsAlongClickRay multisensepanel.init(perception.multisenseDriver, neckDriver) sensordatarequestpanel.init() # for kintinuous, use 'CAMERA_FUSED', 'CAMERA_TSDF' disparityPointCloud = segmentation.DisparityPointCloudItem('stereo point cloud', 'CAMERA', 'CAMERA_LEFT', cameraview.imageManager) disparityPointCloud.addToView(view) om.addToObjectModel(disparityPointCloud, parentObj=om.findObjectByName('sensors')) def createPointerTracker(): return trackers.PointerTracker(robotStateModel, disparityPointCloud) if useGrid: grid = vis.showGrid(view, color=[0,0,0], alpha=0.1) grid.setProperty('Surface Mode', 'Surface with edges') app.setBackgroundColor([0.3, 0.3, 0.35], [0.95,0.95,1]) viewOptions = vis.ViewOptionsItem(view) om.addToObjectModel(viewOptions, parentObj=om.findObjectByName('sensors')) class ViewBackgroundLightHandler(object):