def main(): if len(sys.argv) < 2: usage() print 'ERROR: not enough paramters' exit(1) port_name = sys.argv[1] log_filename = None if len(sys.argv) >= 3: log_filename = sys.argv[2] if os.path.exists(log_filename): print "ERROR: File",log_filename,"already exists" return else: print 'Starting logging to file "', log_filename, '"' # # Initialize serial connection # print 'Initializing serial connection on', port_name ser = serial.Serial(port_name, 115200) pygame.init() screen = pygame.display.set_mode((640,480)) vectors_FL = PygameVectors(screen,120,260,100,100) vectors_FR = PygameVectors(screen,160,120,100,100) vectors_RR = PygameVectors(screen,520,190,100,100) plotter = Plotter(50,3, log_filename) ###plotter.add_plot('rd_pitch',0.01) ###plotter.add_plot('rd_roll',0.01) ###plotter.add_plot('rd_forward',0.01) ###plotter.add_plot('rd_yaw',0.01) ###plotter.add_plot('rd_throttle',0.01) ###plotter.add_plot('rd_aux0',0.01) ###plotter.add_plot('rd_aux1',0.01) ###plotter.add_plot('rd_aux2',0.01) plotter.add_plot('rd_pitch_demand',1) plotter.add_plot('rd_roll_demand',1) plotter.add_plot('rd_forward_demand',1) plotter.add_plot('rd_yaw_demand',1) plotter.add_plot('rd_throttle_demand',3) #plotter.add_plot('imu_yaw',0.1) #plotter.add_plot('imu_pitch',0.1) #plotter.add_plot('imu_roll',1) #plotter.add_plot('imu_yaw_rate',1) #plotter.add_plot('imu_pitch_rate',1) #plotter.add_plot('imu_roll_rate',1) #plotter.add_plot('mx_FL_vert',1) #plotter.add_plot('mx_FR_vert',1) #plotter.add_plot('mx_RR_vert',1) #plotter.add_plot('mx_FL_horz',1) ###plotter.add_plot('mx_FR_horz',1) ###plotter.add_plot('mx_RR_horz',1) #plotter.add_plot('mt_FL_dem',1) # MoTor Front Left demand #plotter.add_plot('mt_FR_dem',1) #plotter.add_plot('mt_RR_dem',1) #plotter.add_plot('an_FL_dem',1) # ANgle Front Left demand #plotter.add_plot('an_FR_dem',1) ###plotter.add_plot('an_RR_dem',1) ###plotter.add_plot('mt_FL_out',0.001) # MoTor Front Left output ###plotter.add_plot('mt_FR_out',0.001) ###plotter.add_plot('mt_RR_out',0.001) ###plotter.add_plot('an_FL_out',0.001) # ANgle Front Left output ###plotter.add_plot('an_FR_out',0.001) ###plotter.add_plot('an_RR_out',0.001) #plotter.add_plot('debug_A',1) #plotter.add_plot('debug_B',1) #plotter.add_plot('debug_C',1) #plotter.add_plot('debug_D',1) ###plotter.add_plot('debug_E',1) ###plotter.add_plot('debug_F',1) plotter.do_legend() ''' fig = pylab.figure() ax = Axes(fig, [.1,.1,.8,.8]) fig.add_axes(ax) l = Line2D([0,1],[0,1]) ax.add_line(l) pylab.draw() ''' comms_prot = comms_protocol.CommsProtocol() i = 0 while True: raw = ser.read() messages = comms_prot.decode(raw) for msg in messages: i += 1 #pylab.figure(fig.number) #x = math.sin(i/1000.0) #y = math.cos(i/1000.0) #pylab.cla() #ax.add_line(Line2D([0,x],[0,y])) #print '-------------' #print 'len(raw):',len(raw) try: # 15*H = 30 bytes # 29*f = 116 bytes # 146 bytes total telemetry = struct.unpack("<HHHHHHHHHfffffffffffffffffffffffHHHHHHffffff",msg); except: print "ERROR: Invalid data read. Data len:", len(raw), "Expected: 146 bytes" continue rd_pitch = telemetry[1] rd_roll = telemetry[2] rd_forward = telemetry[3] rd_yaw = telemetry[4] rd_throttle = telemetry[5] rd_aux0 = telemetry[6] rd_aux1 = telemetry[7] rd_aux2 = telemetry[8] rd_pitch_demand = telemetry[9] rd_roll_demand = telemetry[10] rd_forward_demand = telemetry[11] rd_yaw_demand = telemetry[12] rd_throttle_demand = telemetry[13] imu_yaw = telemetry[14] imu_pitch = telemetry[15] imu_roll = telemetry[16] imu_yaw_rate = telemetry[17] imu_pitch_rate = telemetry[18] imu_roll_rate = telemetry[19] mx_FL_vert = telemetry[20] mx_FR_vert = telemetry[21] mx_RR_vert = telemetry[22] mx_FL_horz = telemetry[23] mx_FR_horz = telemetry[24] mx_RR_horz = telemetry[25] mt_FL_dem = telemetry[26] mt_FR_dem = telemetry[27] mt_RR_dem = telemetry[28] an_FL_dem = telemetry[29] an_FR_dem = telemetry[30] an_RR_dem = telemetry[31] mt_FL_out = telemetry[32] mt_FR_out = telemetry[33] mt_RR_out = telemetry[34] an_FL_out = telemetry[35] an_FR_out = telemetry[36] an_RR_out = telemetry[37] debug_A = telemetry[38] debug_B = telemetry[39] debug_C = telemetry[40] debug_D = telemetry[41] debug_E = telemetry[42] debug_F = telemetry[43] ''' print 'A: ', debug_A, ' ', print 'B: ', debug_B, ' ', print 'C: ', debug_C, ' ', print 'D: ', debug_D, ' ', print 'E: ', debug_E, ' ', print 'F: ', debug_F, ' ' ''' # # # Thrust Visualization Section # # screen.fill( (0,0,0) ) # FL Vector vectors_FL.draw_grid( -1, 1, 0, 1, 0.1 ) vectors_FL.draw_coord( -1, 1, 0, 1) vectors_FL.draw_line( (255,0,0), 0,0, 0,mx_FL_vert) vectors_FL.draw_line( (255,100,100), 0,0, mx_FL_horz,0) x = math.sin(an_FL_dem) * mt_FL_dem y = math.cos(an_FL_dem) * mt_FL_dem vectors_FL.draw_line( (255,255,0), 0,0, x,y) # FR Vector vectors_FR.draw_grid( -1, 1, 0, 1, 0.1 ) vectors_FR.draw_coord( -1, 1, 0, 1) vectors_FR.draw_line( (255,0,0), 0,0, 0,mx_FR_vert) vectors_FR.draw_line( (255,100,100), 0,0, mx_FR_horz,0) x = math.sin(an_FR_dem) * mt_FR_dem y = math.cos(an_FR_dem) * mt_FR_dem vectors_FR.draw_line( (255,255,0), 0,0, x,y) #RR Vector vectors_RR.draw_grid( -1, 1, 0, 1, 0.1 ) vectors_RR.draw_coord( -1, 1, 0, 1) vectors_RR.draw_line( (255,0,0), 0,0, 0,mx_RR_vert) vectors_RR.draw_line( (255,100,100), 0,0, mx_RR_horz,0) x = math.sin(an_RR_dem) * mt_RR_dem y = math.cos(an_RR_dem) * mt_RR_dem vectors_RR.draw_line( (255,255,0), 0,0, x,y) # RR Vector ''' vectors_RR.draw_grid( -1, 1, 0, 1, 0.1 ) vectors_RR.draw_coord( -1, 1, 0, 1) vectors_RR.draw_line( (255,0,0), 0,0, 0,mt_RR_dem) ''' #vectors_RR.draw_line( (255,100,100), # 0,0, # debug_D,0) #x = math.sin(an_RR_dem) * mt_RR_dem #y = math.cos(an_RR_dem) * mt_RR_dem #vectors_RR.draw_line( (255,255,0), # 0,0, # x,y) pygame.display.flip() # # # Plotter Section # # plotter.append('rd_pitch',rd_pitch) plotter.append('rd_roll',rd_roll) plotter.append('rd_forward',rd_forward) plotter.append('rd_yaw',rd_yaw) plotter.append('rd_throttle',rd_throttle) plotter.append('rd_aux0',rd_aux0) plotter.append('rd_aux1',rd_aux1) plotter.append('rd_aux2',rd_aux2) plotter.append('rd_pitch_demand',rd_pitch_demand) plotter.append('rd_roll_demand',rd_roll_demand) plotter.append('rd_forward_demand',rd_forward_demand) plotter.append('rd_yaw_demand',rd_yaw_demand) plotter.append('rd_throttle_demand',rd_throttle_demand) plotter.append('imu_yaw',imu_yaw) plotter.append('imu_pitch',imu_pitch) plotter.append('imu_roll',imu_roll) plotter.append('imu_yaw_rate',imu_yaw_rate) plotter.append('imu_pitch_rate',imu_pitch_rate) plotter.append('imu_roll_rate',imu_roll_rate) plotter.append('mt_FL_dem',mt_FL_dem) plotter.append('mt_FR_dem',mt_FR_dem) plotter.append('mt_RR_dem',mt_RR_dem) plotter.append('an_FL_dem',an_FL_dem) plotter.append('an_FR_dem',an_FR_dem) plotter.append('an_RR_dem',an_RR_dem) plotter.append('mt_FL_out',mt_FL_out) plotter.append('mt_FR_out',mt_FR_out) plotter.append('mt_RR_out',mt_RR_out) plotter.append('an_FL_out',an_FL_out) plotter.append('an_FR_out',an_FR_out) plotter.append('an_RR_out',an_RR_out) plotter.append('debug_A',debug_A) plotter.append('debug_B',debug_B) plotter.append('debug_C',debug_C) plotter.append('debug_D',debug_D) plotter.append('debug_E',debug_E) plotter.append('debug_F',debug_F) plotter.save_log() if i % 5 == 0: #print 'mt_FL_out', mt_FL_out #print 'mt_FR_out', mt_FR_out #print 'mt_RR_out', mt_RR_out print 'imu_yaw %0.3f' % (imu_yaw,), ' ', print 'imu_pitch', imu_pitch, ' ', print 'imu_roll', imu_roll plotter.draw_plots()