velocitySmoother.py
Go to the documentation of this file.
00001 __author__ = 'tom1231'
00002 from PyQt4.QtGui import *
00003 from BAL.Interface.DeviceFrame import DeviceFrame, EX_DEV, SMOOTHER
00004 from lxml.etree import SubElement
00005 
00006 
00007 class VelocitySmoother(DeviceFrame):
00008     def __init__(self,frame, data):
00009         DeviceFrame.__init__(self, EX_DEV, frame, data)
00010         self._diffDriverTopic = 'diff/command'
00011         self._smoothTopic = 'diff/smooth_command'
00012         self._diffDriverFeedback = 'diff/command'
00013         self._diffDriverOdometryFeedback = 'diff/odometry'
00014         self._speedLimitLinear = '0.8'
00015         self._speedLimitAngular = '5.4'
00016         self._accelerationLimitLinear = '0.3'
00017         self._accelerationLimitAngular = '3.5'
00018         self._frequency = '20.0'
00019         self._deceleration = '1.0'
00020         self._robotFeedback = '2'
00021 
00022     def getName(self):
00023         return 'velocity_smoother'
00024 
00025     def toDict(self):
00026         data = dict()
00027 
00028         data['type'] = SMOOTHER
00029         data['diffDriverTopic'] = self._diffDriverTopic
00030         data['smoothTopic'] = self._smoothTopic
00031         data['diffDriverFeedback'] = self._diffDriverFeedback
00032         data['diffDriverOdometryFeedback'] = self._diffDriverOdometryFeedback
00033         data['speedLimitLinear'] = self._speedLimitLinear
00034         data['speedLimitAngular'] = self._speedLimitAngular
00035         data['accelerationLimitLinear'] = self._accelerationLimitLinear
00036         data['accelerationLimitAngular'] = self._accelerationLimitAngular
00037         data['frequency'] = self._frequency
00038         data['deceleration'] = self._deceleration
00039         data['robotFeedback'] = self._robotFeedback
00040 
00041         return data
00042 
00043     def fromDict(self, data):
00044 
00045         self._diffDriverTopic = data['diffDriverTopic']
00046         self._smoothTopic = data['smoothTopic']
00047         self._diffDriverFeedback = data['diffDriverFeedback']
00048         self._diffDriverOdometryFeedback = data['diffDriverOdometryFeedback']
00049         self._speedLimitLinear = data['speedLimitLinear']
00050         self._speedLimitAngular = data['speedLimitAngular']
00051         self._accelerationLimitLinear = data['accelerationLimitLinear']
00052         self._accelerationLimitAngular = data['accelerationLimitAngular']
00053         self._frequency = data['frequency']
00054         self._deceleration = data['deceleration']
00055         self._robotFeedback = data['robotFeedback']
00056 
00057     def add(self):
00058         if not self.nameIsValid():
00059             error = QErrorMessage()
00060             error.setWindowTitle("Same name error")
00061             error.showMessage("Name already taken.")
00062             error.exec_()
00063             self._isValid = False
00064             return
00065 
00066         self._diffDriverTopic = str(self.diffDriverTopic.text())
00067         self._smoothTopic = str(self.smoothTopic.text())
00068         self._diffDriverFeedback = str(self.diffDriverFeedback.text())
00069         self._diffDriverOdometryFeedback = str(self.diffDriverOdometryFeedback.text())
00070         self._speedLimitLinear = str(self.speedLimitLinear.text())
00071         self._speedLimitAngular = str(self.speedLimitAngular.text())
00072         self._accelerationLimitLinear = str(self.accelerationLimitLinear.text())
00073         self._accelerationLimitAngular = str(self.accelerationLimitAngular.text())
00074         self._frequency = str(self.frequency.text())
00075         self._deceleration = str(self.deceleration.text())
00076         self._robotFeedback = str(self.robotFeedback.itemData(self.robotFeedback.currentIndex()).toString())
00077         self._isValid = True
00078 
00079     def showDetails(self, items=None):
00080 
00081         self.diffDriverTopic = QLineEdit(self._diffDriverTopic)
00082         self.smoothTopic = QLineEdit(self._smoothTopic)
00083         self.diffDriverFeedback = QLineEdit(self._diffDriverFeedback)
00084         self.diffDriverOdometryFeedback = QLineEdit(self._diffDriverOdometryFeedback)
00085         self.speedLimitLinear = QLineEdit(self._speedLimitLinear)
00086         self.speedLimitAngular = QLineEdit(self._speedLimitAngular)
00087         self.accelerationLimitLinear = QLineEdit(self._accelerationLimitLinear)
00088         self.accelerationLimitAngular = QLineEdit(self._accelerationLimitAngular)
00089         self.frequency = QLineEdit(self._frequency)
00090         self.deceleration = QLineEdit(self._deceleration)
00091         self.robotFeedback = QComboBox()
00092 
00093         self.robotFeedback.addItem('None', '0')
00094         self.robotFeedback.addItem('Odometry', '1')
00095         self.robotFeedback.addItem('End robot commands', '2')
00096         self.robotFeedback.setCurrentIndex(int(self._robotFeedback))
00097 
00098         self._frame.layout().addRow(QLabel('Differential drive topic: '), self.diffDriverTopic)
00099         self._frame.layout().addRow(QLabel('Differential drive smooth topic: '), self.smoothTopic)
00100         self._frame.layout().addRow(QLabel('Differential drive end robot topic: '), self.diffDriverFeedback)
00101         self._frame.layout().addRow(QLabel('Differential odometry topic: '), self.diffDriverOdometryFeedback)
00102         self._frame.layout().addRow(QLabel('Differential speed limit linear: '), self.speedLimitLinear)
00103         self._frame.layout().addRow(QLabel('Differential speed limit angular: '), self.speedLimitAngular)
00104         self._frame.layout().addRow(QLabel('Differential acceleration limit linear: '), self.accelerationLimitLinear)
00105         self._frame.layout().addRow(QLabel('Differential acceleration limit angular: '), self.accelerationLimitAngular)
00106         self._frame.layout().addRow(QLabel('Frequency rate: '), self.frequency)
00107         self._frame.layout().addRow(QLabel('Deceleration rate: '), self.deceleration)
00108         self._frame.layout().addRow(QLabel('Feedback mode: '), self.robotFeedback)
00109 
00110     def printDetails(self):
00111         self._frame.layout().addRow(QLabel('Differential drive topic: '), QLabel(self._diffDriverTopic))
00112         self._frame.layout().addRow(QLabel('Differential drive smooth topic: '), QLabel(self._smoothTopic))
00113         self._frame.layout().addRow(QLabel('Differential drive end robot topic: '), QLabel(self._diffDriverFeedback))
00114         self._frame.layout().addRow(QLabel('Differential odometry topic: '), QLabel(self._diffDriverOdometryFeedback))
00115         self._frame.layout().addRow(QLabel('Differential speed limit linear: '), QLabel(self._speedLimitLinear))
00116         self._frame.layout().addRow(QLabel('Differential speed limit angular: '), QLabel(self._speedLimitAngular))
00117         self._frame.layout().addRow(QLabel('Differential acceleration limit linear: '), QLabel(self._accelerationLimitLinear))
00118         self._frame.layout().addRow(QLabel('Differential acceleration limit angular: '), QLabel(self._accelerationLimitAngular))
00119         self._frame.layout().addRow(QLabel('Frequency rate: '), QLabel(self._frequency))
00120         self._frame.layout().addRow(QLabel('Deceleration rate: '), QLabel(self._deceleration))
00121 
00122         robotFeedbackText = 'End robot commands'
00123 
00124         if self._robotFeedback == '1':
00125             robotFeedbackText = 'Odometry'
00126         elif self._robotFeedback == '0':
00127             robotFeedbackText = 'None'
00128 
00129         self._frame.layout().addRow(QLabel('Feedback mode: '), QLabel(robotFeedbackText))
00130 
00131     def saveToFile(self, parent):
00132         element = SubElement(parent, 'include', {
00133             'file': '$(find ric_board)/scripts/velocity_smoother.launch'
00134         })
00135 
00136         SubElement(element, 'arg', {
00137             'name': 'raw_cmd_vel_topic',
00138             'value': self._smoothTopic
00139         })
00140         SubElement(element, 'arg', {
00141             'name': 'smooth_cmd_vel_topic',
00142             'value': self._diffDriverTopic
00143         })
00144         SubElement(element, 'arg', {
00145             'name': 'robot_cmd_vel_topic',
00146             'value': self._diffDriverFeedback
00147         })
00148         SubElement(element, 'arg', {
00149             'name': 'odom_topic',
00150             'value': self._diffDriverOdometryFeedback
00151         })
00152         SubElement(element, 'arg', {
00153             'name': 'SPEED_LIM_V',
00154             'value': self._speedLimitLinear
00155         })
00156         SubElement(element, 'arg', {
00157             'name': 'SPEED_LIM_W',
00158             'value': self._speedLimitAngular
00159         })
00160         SubElement(element, 'arg', {
00161             'name': 'ACCEL_LIM_V',
00162             'value': self._accelerationLimitLinear
00163         })
00164         SubElement(element, 'arg', {
00165             'name': 'ACCEL_LIM_W',
00166             'value': self._accelerationLimitAngular
00167         })
00168         SubElement(element, 'arg', {
00169             'name': 'FREQUENCY',
00170             'value': self._frequency
00171         })
00172         SubElement(element, 'arg', {
00173             'name': 'DECEL_FACTOR',
00174             'value': self._deceleration
00175         })
00176         SubElement(element, 'arg', {
00177             'name': 'ROBOT_FEEDBACK',
00178             'value': self._robotFeedback
00179         })


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