Source code for director.atlasdriverpanel

import PythonQt
from PythonQt import QtCore, QtGui, QtUiTools
from director import applogic as app
from director.timercallback import TimerCallback
from functools import partial


[docs]def addWidgetsToDict(widgets, d): for widget in widgets: if widget.objectName: d[str(widget.objectName)] = widget addWidgetsToDict(widget.children(), d)
[docs]class WidgetDict(object): def __init__(self, widgets): addWidgetsToDict(widgets, self.__dict__)
[docs]class AtlasDriverPanel(object): def __init__(self, driver): self.driver = driver loader = QtUiTools.QUiLoader() uifile = QtCore.QFile(':/ui/ddAtlasDriverPanel.ui') assert uifile.open(uifile.ReadOnly) self.widget = loader.load(uifile) self.widget.setWindowTitle('Atlas Driver Panel') self.ui = WidgetDict(self.widget.children()) # Main Panel self.ui.calibrateEncodersButton.connect('clicked()', self.onCalibrateEncoders) self.ui.prepButton.connect('clicked()', self.onPrep) self.ui.combinedStandButton.connect('clicked()', self.onCombinedStand) self.ui.stopButton.connect('clicked()', self.onStop) self.ui.freezeButton.connect('clicked()', self.onFreeze) self.ui.calibrateNullBiasButton.connect('clicked()', self.onCalibrateNullBias) self.ui.calibrateElectricArmsButton.connect('clicked()', self.onCalibrateElectricArms) self.ui.tareFTButton.connect('clicked()', self.onTareFT) self.ui.initNavButton.connect('clicked()', self.onInitNav) self.ui.standButton.connect('clicked()', self.onStand) self.ui.mitStandButton.connect('clicked()', self.onMITStand) self.ui.userButton.connect('clicked()', self.onUser) self.ui.manipButton.connect('clicked()', self.onManip) self.ui.recoveryOnButton.connect('clicked()', self.driver.sendRecoveryEnable) self.ui.recoveryOffButton.connect('clicked()', self.driver.sendRecoveryDisable) self.ui.bracingOnButton.connect('clicked()', self.driver.sendBracingEnable) self.ui.bracingOffButton.connect('clicked()', self.driver.sendBracingDisable) for psi in [1000, 1500, 2000, 2400, 2650]: self.ui.__dict__['setPressure' + str(psi) + 'Button'].connect('clicked()', partial(self.driver.sendDesiredPumpPsi, psi)) self.ui.sendCustomPressureButton.connect('clicked()', self.sendCustomPressure) self.setupElectricArmCheckBoxes() PythonQt.dd.ddGroupBoxHider(self.ui.calibrationGroupBox) PythonQt.dd.ddGroupBoxHider(self.ui.pumpStatusGroupBox) PythonQt.dd.ddGroupBoxHider(self.ui.electricArmStatusGroupBox) self.updateTimer = TimerCallback(targetFps=5) self.updateTimer.callback = self.updatePanel self.updateTimer.start() self.updatePanel()
[docs] def updatePanel(self): self.updateBehaviorLabel() self.updateControllerStatusLabel() self.updateRecoveryEnabledLabel() self.updateBracingEnabledLabel() self.updateBatteryStatusLabel() self.updateStatus() self.updateButtons() self.updateElectricArmStatus() self.driver.updateCombinedStandLogic()
[docs] def updateBehaviorLabel(self): self.ui.behaviorLabel.text = self.driver.getCurrentBehaviorName() or '<unknown>'
[docs] def updateControllerStatusLabel(self): self.ui.controllerStatusLabel.text = self.driver.getControllerStatus() or '<unknown>'
[docs] def updateBatteryStatusLabel(self): charge = self.driver.getBatteryChargeRemaining() self.ui.batteryStatusLabel.text = '<unknown>' if charge is None else '%d%%' % charge
[docs] def updateRecoveryEnabledLabel(self): self.ui.recoveryEnabledLabel.text = self.driver.getRecoveryEnabledStatus() or '<unknown>'
[docs] def updateBracingEnabledLabel(self): self.ui.bracingEnabledLabel.text = self.driver.getBracingEnabledStatus() or '<unknown>'
[docs] def updateStatus(self): self.ui.inletPressure.value = self.driver.getCurrentInletPressure() self.ui.supplyPressure.value = self.driver.getCurrentSupplyPressure() self.ui.returnPressure.value = self.driver.getCurrentReturnPressure() self.ui.airSumpPressure.value = self.driver.getCurrentAirSumpPressure() self.ui.pumpRpm.value = self.driver.getCurrentPumpRpm() self.ui.maxActuatorPressure.value = self.driver.getMaxActuatorPressure()
[docs] def getElectricArmCheckBoxes(self): return [self.ui.armCheck1, self.ui.armCheck2, self.ui.armCheck3, self.ui.armCheck4, self.ui.armCheck5, self.ui.armCheck6]
[docs] def setupElectricArmCheckBoxes(self): for check in self.getElectricArmCheckBoxes(): check.connect('clicked()', self.onEnableElectricArmChecked)
[docs] def updateElectricArmStatus(self): temps = [self.ui.armTemp1, self.ui.armTemp2, self.ui.armTemp3, self.ui.armTemp4, self.ui.armTemp5, self.ui.armTemp6] for i, check in enumerate(self.getElectricArmCheckBoxes()): enabled = self.driver.getElectricArmEnabledStatus(i) check.setText('yes' if enabled else 'no') for i, temp in enumerate(temps): temp.setValue(self.driver.getElectricArmTemperature(i))
[docs] def updateButtons(self): behavior = self.driver.getCurrentBehaviorName() behaviorIsFreeze = behavior == 'freeze' self.ui.calibrateNullBiasButton.setEnabled(behaviorIsFreeze) self.ui.calibrateElectricArmsButton.setEnabled(behaviorIsFreeze) self.ui.calibrateEncodersButton.setEnabled(behaviorIsFreeze) self.ui.prepButton.setEnabled(behaviorIsFreeze) self.ui.standButton.setEnabled(behavior in ('prep', 'stand', 'user', 'manip', 'step', 'walk')) self.ui.mitStandButton.setEnabled(behavior=='user') self.ui.manipButton.setEnabled(behavior in ('stand', 'manip')) self.ui.userButton.setEnabled(behavior is not None)
[docs] def onEnableElectricArmChecked(self): enabledState = [bool(check.checked) for check in self.getElectricArmCheckBoxes()] self.driver.sendElectricArmEnabledState(enabledState)
[docs] def onFreeze(self): self.driver.sendFreezeCommand()
[docs] def onStop(self): self.driver.sendStopCommand()
[docs] def onCalibrateEncoders(self): self.driver.sendCalibrateEncodersCommand()
[docs] def onCalibrateNullBias(self): self.driver.sendCalibrateNullBiasCommand()
[docs] def onCalibrateElectricArms(self): self.driver.sendCalibrateElectricArmsCommand()
[docs] def onInitNav(self): self.driver.sendInitAtZero()
[docs] def onTareFT(self): self.driver.sendTareFT()
[docs] def onPrep(self): self.driver.sendPrepCommand()
[docs] def onStand(self): self.driver.sendStandCommand()
[docs] def onCombinedStand(self): self.driver.sendCombinedStandCommand()
[docs] def onMITStand(self): self.driver.sendMITStandCommand()
[docs] def onManip(self): self.driver.sendManipCommand()
[docs] def onUser(self): self.driver.sendUserCommand()
[docs] def sendCustomPressure(self): self.driver.sendDesiredPumpPsi(self.ui.customPumpPressure.value)
def _getAction(): return app.getToolBarActions()['ActionAtlasDriverPanel']
[docs]def init(driver): global panel global dock panel = AtlasDriverPanel(driver) dock = app.addWidgetToDock(panel.widget, action=_getAction()) dock.hide() return panel