Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 716 → Rev 717

/VibrationTest/branches/ParameterTest/VibrationTest/MkProtocol.py
258,7 → 258,7
 
def open(self, comPort):
self.serPort = serial.Serial(comPort, 57600, timeout=0.5, rtscts=1)
self.serPort = serial.Serial(comPort, 57600, timeout=0.5)
if not self.serPort.isOpen():
raise IOError("Failed to open serial port")
 
353,38 → 353,68
self.serPort.flushInput()
msg = MkMsg(address=0, cmd='d', data=[int(samplePeriod*100)])
self.sendMsg(msg)
start = time.clock()
for i in range(nbSamples):
print i
msg = self.waitForMsg('D', timeout=samplePeriod+1)
msg = DebugDataMsg(msg)
result.append(msg)
print "Time = ", (time.clock()-start)
self.getDebugMsg();
return result
 
 
import copy
 
if __name__ == '__main__':
try:
comm = MkComm()
comm.printDebugMsg = True
comm.open(comPort="COM40")
comm.open(comPort="COM4")
msg = comm.getVersionMsg()
print "Version: %d.%d" % msg.getVersion()
# msg = comm.getSettingsMsg()
# print "Index=",msg.getIndex()
# print "Name=",msg.getName()
# print "StickP=",msg.getSetting(SettingsMsg.IDX_STICK_P)
# print "StickD=",msg.getSetting(SettingsMsg.IDX_STICK_D)
#
msg = MkMsg(address=2, cmd='f', data=[7, 50])
comm.sendMsg(msg)
# while True:
# msg = comm.getSettingsMsg()
# print "Index=",msg.getIndex()
# print "Name=",msg.getName()
# print
# print "StickP =",msg.getSetting(SettingsMsg.IDX_STICK_P)
# print "StickD =",msg.getSetting(SettingsMsg.IDX_STICK_D)
# print
# print "GyroP =",msg.getSetting(SettingsMsg.IDX_GYRO_P)
# print "GyroI =",msg.getSetting(SettingsMsg.IDX_GYRO_I)
# print "GyroD =",msg.getSetting(SettingsMsg.IDX_GYRO_D)
# print "Gyro I Factor =",msg.getSetting(SettingsMsg.IDX_I_FACTOR)
#
# testSettings = copy.deepcopy(msg)
# testSettings.setSetting(SettingsMsg.IDX_STICK_D, 0)
#
# testSettings.setSetting(SettingsMsg.IDX_GYRO_P, 0)
# testSettings.setSetting(SettingsMsg.IDX_GYRO_I, 50)
#
# print "Test Settings..."
# comm.sendSettings(testSettings.getSettings())
# raw_input("Press ENTER to end test")
#
# print "Normal Settings..."
# comm.sendSettings(msg.getSettings())
# msg.setSetting(SettingsMsg.IDX_STICK_P, msg.getSetting(SettingsMsg.IDX_STICK_P)+1)
# comm.sendSettings(msg.getSettings())
messages = comm.recordDbgMsg(0.05, 20)
for msg in messages:
print msg.getAngleRoll()
# messages = comm.recordDbgMsg(0.05, 20)
# for msg in messages:
# print msg.getAngleRoll()
comm.close()
 
except Exception,e:
print
391,4 → 421,4
print "An error occured: ", e
print
traceback.print_exc()
raw_input("Press ENTER, the application will close")
# raw_input("Press ENTER, the application will close")
/VibrationTest/branches/ParameterTest/VibrationTest/VibrationTestGui.py
14,6 → 14,7
import thread
import ConfigParser
import math
import copy
 
import wx
import wx.lib
28,7 → 29,7
CHANNEL_NAMES = ["GyroYaw", "GyroRoll", "GyroNick", "Pressure", "Batt", "AccTop", "AccRoll", "AccNick"]
MOTOR_MAX = 16
 
FS = 20
FS = 18.0
pi = 3.14
COLOR_YELLOW = wx.Colour(255, 240, 0)
COLOR_BACKGROUND = wx.Colour(0x80, 0x80, 0x80)
631,7 → 632,7
nb = vibTest.getDataLen()
 
if self.graphTypeChoice.GetSelection() == 0:
xydata = _Numeric.linspace(0,0.09*nb,2*nb)
xydata = _Numeric.linspace(0,(1/FS)*nb,2*nb)
xydata.shape = (nb, 2)
xydata[:,1] = vibTest.getRawData()
line = wx.lib.plot.PolyLine(xydata, legend= 'Raw Data', colour='red', width=2)
638,13 → 639,13
title = "Raw Signal: %s %s %d" %(vibTest.descr, vibTest.channel, vibTest.speed)
self.graphCtrl.setLogScale((False,False))
self.graphCtrl.Draw(wx.lib.plot.PlotGraphics([line], title, "Time (ms)", "Acc"), yAxis= (-y/2,y/2))
self.graphCtrl.Draw(wx.lib.plot.PlotGraphics([line], title, "Time (s)", "Angle"), yAxis= (-y/2,y/2))
self.graphCtrl.SetEnableGrid('Horizontal')
self.graphCtrl.SetEnableLegend(False)
if self.graphTypeChoice.GetSelection() == 1:
xydata = _Numeric.linspace(0,0.09*nb,2*nb)
xydata = _Numeric.linspace(0,(1/FS)*nb,2*nb)
xydata.shape = (nb, 2)
xydata[:,1] = vibTest.getFilteredData()
line = wx.lib.plot.PolyLine(xydata, legend= 'Raw Data', colour='red', width=2)
651,7 → 652,7
title = "Filtered Signal: %s %s %d" %(vibTest.descr, vibTest.channel, vibTest.speed)
self.graphCtrl.setLogScale((False,False))
self.graphCtrl.Draw(wx.lib.plot.PlotGraphics([line], title, "Time (ms)", "Acc"), yAxis= (-y/2,y/2))
self.graphCtrl.Draw(wx.lib.plot.PlotGraphics([line], title, "Time (s)", "Angle"), yAxis= (-y/2,y/2))
self.graphCtrl.SetEnableGrid('Horizontal')
self.graphCtrl.SetEnableLegend(False)
912,9 → 913,9
self._sendEvent("Opening SerialPort \"%s\"" % self.param.serialPort)
self.mk.open(comPort=self.param.serialPort)
print "Sending FC->NC forwarding",
self.mk.sendNCRedirectUartFromFC()
print "Done"
# print "Sending FC->NC forwarding",
# self.mk.sendNCRedirectUartFromFC()
# print "Done"
msg = self.mk.getVersionMsg()
version = msg.getVersion()
936,11 → 937,11
if self.param.minVoltage > 0:
minVoltage = self.param.minVoltage
else:
minVoltage = nbCells*3.5 # auto
minVoltage = nbCells*3 # auto
if self.param.maxVoltage > 0:
maxVoltage = self.param.maxVoltage
else:
maxVoltage = nbCells*3.9
maxVoltage = nbCells*4
self._sendEvent("Voltage: %2.1fV" % voltage)
self._sendEvent("Min/Max Voltage: %2.1fV-%2.1fV" % (minVoltage, maxVoltage), parVoltage=(minVoltage, maxVoltage, voltage))
947,23 → 948,47
 
msg = self.mk.getDebugMsg()
voltage = msg.getVoltage()
for I in self.param.speeds:
self._sendEvent("TestSettings I=%d" % I)
orgSetting = self.mk.getSettingsMsg()
testSettings = copy.deepcopy(orgSetting)
# testSettings.setSetting(MkProtocol.SettingsMsg.IDX_GYRO_P, I)
# testSettings.setSetting(MkProtocol.SettingsMsg.IDX_GYRO_I, 65)
testSettings.setSetting(MkProtocol.SettingsMsg.IDX_GYRO_P, 0)
testSettings.setSetting(MkProtocol.SettingsMsg.IDX_GYRO_I, I)
self.mk.sendSettings(testSettings.getSettings())
#time.sleep(3)
#data = self.mk.doVibrationTest(1000, channel)
messages = self.mk.recordDbgMsg(0.05, 20*5)
data = []
for msg in messages:
data.append(msg.getAngleRoll())
print data
## DISTURB
msg = MkProtocol.MkMsg(address=2, cmd='f', data=[7, 50])
self.mk.sendMsg(msg)
time.sleep(.1)
vt = VibTest(self.param.descr, voltage, self.param.motors, 0, "AngleRoll", data)
evt = MeasDataEvent(vibTest = vt)
wx.PostEvent(self.evtConsumer, evt)
#data = self.mk.doVibrationTest(1000, channel)
messages = self.mk.recordDbgMsg(0.05, 20*5)
data = []
for msg in messages:
data.append(msg.getAngleRoll())
print data
vt = VibTest(self.param.descr, voltage, self.param.motors, I, "AngleRoll", data)
evt = MeasDataEvent(vibTest = vt)
wx.PostEvent(self.evtConsumer, evt)
self._sendEvent("Original Settings")
self.mk.sendSettings(orgSetting.getSettings())
time.sleep(1)
if voltage<minVoltage:
raise Exception("Voltage too low")
self._sendEvent("Done !", parVoltage=(minVoltage, maxVoltage, voltage))
except Exception, e:
self._sendEvent("Exception \"%s\"" % e, error=True)
1038,7 → 1063,8
def getVibValue(self):
if self.vibValue == None:
fd = self.getFilteredData()[100:-100];
fd = self.getRawData()
#fd = self.getFilteredData()[100:-100];
if self.useRms:
print "RMS"
self.vibValue = math.sqrt(sum([x*x for x in fd])/len(fd))*2*math.sqrt(2)
1243,6 → 1269,6
rootPath = os.path.abspath(os.path.dirname(sys.argv[0]))
print rootPath
 
VibrationTestGui = App(0)
VibrationTestGui.MainLoop()